कई शेड्स में फ़ंक्शन साझा करना


10

सरल प्रश्न:

GLSL में, कई शेडर्स में फ़ंक्शन साझा करने का एक तरीका है, या क्या मुझे प्रत्येक शेडर में उन सभी फ़ंक्शंस को परिभाषित करना होगा जिनकी उन्हें ज़रूरत है?

जवाबों:


12

आप एक हेडर फ़ाइल में कुछ कार्यों को परिभाषित कर सकते हैं और उन्हें अपने shader में शामिल कर सकते हैं। यह C / C ++ से थोड़ा अलग है, जिसमें आप अपने कार्यों के शव को हेडर में डालते हैं, न कि केवल उनके प्रोटोटाइप (क्योंकि अलग-अलग संकलन और लिंकिंग की कोई अवधारणा नहीं है), लेकिन इसके अलावा यह सिर्फ C / C ++ जैसा है। हेडर।


2
कम से कम ध्यान दें कि #include वास्तव में 3.30 के माध्यम से GLSL के किसी भी संस्करण में समर्थित नहीं है, केवल एक एक्सटेंशन के माध्यम से जो सार्वभौमिक रूप से उपलब्ध नहीं है। किसी भी सभ्य shader ढांचे को यह सुविधा प्रदान करने के लिए भाषा का विस्तार करना चाहिए, हालांकि (Cg सहित)।
सीन मिडिलिचच

7

यदि #include उपलब्ध नहीं है, तो आप साझा किए गए सामान को निर्दिष्ट करने के लिए glShaderSource के तर्कों का उपयोग करेंगे। उदाहरण:

char *sharedcode = "...shared code here...";
char *fs1 = "...fragment shader 1...";
char *fs2 = "...fragment shader 2...";

char *awesomeeffect1[] = {sharedcode, fs1};
char *awesomeeffect2[] = {sharedcode, fs2};

glShaderSource (shader1, 2, awesomeeffect1, NULL);
glShaderSource (shader2, 2, awesomeeffect2, NULL);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.