2010-08-02 14 views
6

हाय फिर से और स्वागत glUniform कार्यों का प्रबंधन करने के लिए 'नहीं यह है कि अगर हम दो चीजें हैं जो मैं सच में about'-सवाल कुछ भी समझ में नहीं आता गठबंधन चाहते हैं बहुत अच्छा होगा;टेम्पलेट का उपयोग करना किसी अन्य के लिए

इस प्रकरण): ओपनजीएल वर्दी और सी ++ टेम्पलेट्स

आइडिया: यदि आप ओपनजीएल शेडर में वर्दी सेट करने के लिए एक टेम्पलेट फ़ंक्शन लिख सकते हैं तो यह अच्छा नहीं होगा?

समस्या: शेडर्स में वर्दी कई ग्लूनिफॉर्म * फ़ंक्शंस का उपयोग करके सेट की जाती है।

  1. प्रकार:: इन में भिन्न होते हैं वहाँ कई प्रकार के एक समान ले सकते हैं। इसका परिणाम ओपनजीएल में विभिन्न फ़ंक्शन नामों में दिखता है जैसे: glUniform1f, glUniform1i, glUniform1fv, आदि

    इन्हें आसानी से कार्यों के अधिभार का उपयोग करके 'एकीकृत' किया जा सकता है। लेकिन इसके परिणामस्वरूप समान कार्यों की एक बड़ी मात्रा में परिणाम होता है।

    पहला प्रश्न: क्या इस स्थान पर टेम्पलेट का उपयोग करना संभव है? जहां तक ​​मैं टेम्पलेट्स को समझता हूं, आपको हर नए फ़ंक्शन के लिए विशेषज्ञ बनाना होगा। और अंत में आपके पास समान ओवरलोडिंग के समान कार्य होंगे।

  2. पैरामीटर गणना: ग्लूनिफॉर्म फ़ंक्शंस में संख्या दिए गए मानकों की संख्या को संदर्भित करती है। एक से 4 पैरामीटर हैं जो 4 तत्वों वाले वैक्टर तक सरल मानों से संबंधित हैं।

    दूसरा प्रश्न: क्या टेम्पलेट्स के साथ 'गतिशील' पैरामीटर गणना लागू करना संभव है?

  3. मैट्रिसेस: चीजें बनाने के लिए जटिल वहाँ एक समान कार्य करता है जो मैट्रिक्स भेजने का एक और वर्ग है लेकिन जैसा कि मैंने वास्तव में इन उपयोग नहीं कर रहा मैं वास्तव में उन में कोई दिलचस्पी नहीं है।

शायद वहाँ वर्दी तरीकों को आसान बनाने के लिए कोई वास्तविक तरीका है ... लेकिन शायद किसी को शक्तिशाली टेम्पलेट का उपयोग कर एक महान समाधान के साथ आ सकते हैं?

सधन्यवाद, फ्लोरियन

+0

आपको किसी मैपिंग '(एरीटी, टाइप) -> जीएल फ़ंक्शन' की आवश्यकता है, आप इसे घोषणात्मक दृष्टिकोण का उपयोग करके कुछ हद तक छोटा कर सकते हैं। हालांकि यह एक सीमित और अपेक्षाकृत छोटे कार्यों का सेट है, इसलिए मैं ओवरलोड के लिए बस जाऊंगा। –

+0

जावा में यह प्रतिबिंब का उपयोग करके सापेक्ष रूप से आसान होगा ... लेकिन यह सिर्फ गन्दा हो जाएगा;) – fho

उत्तर

5

1: हाँ, और हाँ, लेकिन कम से कम जब संकलक शिकायत है कि यह नाव और डबल भार के बीच चयन नहीं कर सकते हैं, आप उसे बहुत बस, यानी मजबूर कर सकते हैं setUniform<float>(blah) बजाय setUniform(blah)

2: सवाल क्या है: यह समय अधिक भार एक सरल समाधान :)

3 है?

सवाल यह है कि, आप ऐसा क्यों करना चाहते हैं?

+0

ओह, वाह, – Calvin1602

+0

संपादित करने के लिए धन्यवाद मुझे लगता है कि मैं लगभग समान संख्या में दिखने वाले कार्यों की बड़ी संख्या से नीचे आ गया हूं। – fho

+0

नाम सम्मेलन काफी सरल है: gl + FunctionName + NumParameters + ParamType, 'v' द्वारा समाप्त पैरामटाइप के साथ यदि यह सूचक है – Calvin1602

संबंधित मुद्दे

 संबंधित मुद्दे