2012-03-13 10 views
6

के बाद वर्दी का व्यवहार glUseProgram() कितना तेज़ है? वहाँ कुछ भी बेहतर है (तेज) ?:glUseProgram() और गति

यहाँ मेरे विचार कर रहे हैं:

  1. उपयोग 1 सार्वभौमिक शेडर कार्यक्रम है, लेकिन (प्रत्येक ग्राफिक्स वर्ग के लिए सेटिंग्स) कई अक्षर सेटिंग और विशेषताओं
  2. उपयोग की तुलना में अधिक के साथ प्रत्येक ग्राफिक्स वर्ग के लिए 1 शेडर

शेडर प्रोग्राम बदलने के बाद वर्दी क्या है? क्या वे मूल्यों को बचाते हैं (उदाहरण के लिए, matrices के मूल्य)?

  • glUseProgram उपयोग नहीं करता है()

और # 2 के लाभ:

  • नहीं

    यहाँ है कि मैं क्या होने के लिए # 1 के लाभ पर विचार कर रहे हैं मैट्रिक्स परिवर्तन (उदाहरण के लिए, यदि कक्षा Menu और कक्षा Scene3D में विभिन्न प्रक्षेपण मैट्रिक्स हैं)

उत्तर

6

दो विकल्पों में से कौन सा विकल्प बेहतर है, उन शेडर्स क्या करते हैं, कितने अलग हैं और आप कितने गुण/वर्दी सेट करते हैं और कितनी बार वे बदल जाते हैं। सभी मामलों के लिए कोई सही जवाब नहीं है।

यह कहा गया: ध्यान रखें, राज्य परिवर्तनों के लिए केवल लागत ही नहीं है, बल्कि एक शेडर रनटाइम लागत भी है और इसे प्रति चरम और प्रति टुकड़े का भुगतान किया जाता है। तो शेडर कम की जटिलता को हमेशा रखना एक अच्छा विचार है और एक सार्वभौमिक शेडर विशेष लोगों की तुलना में अधिक जटिल है।

राज्य परिवर्तन को कम करें। यदि आपके पास प्रोग्राम एक्स और बी, डी, एफ का उपयोग प्रोग्राम वाई का उपयोग करते हुए ए, सी, ई है, तो सब कुछ बराबर है, एसीईबीडीएफ को क्रम में प्रस्तुत करें, एबीसीडीईएफ नहीं।

अंतिम प्रश्न के संबंध में: कार्यक्रम अपने जीवनकाल में, और इस प्रकार वर्दी के मूल्यों को बनाए रखते हैं, जब तक कि आप उन्हें रिलिकिंक न करें। लेकिन वर्दी प्रति कार्यक्रम राज्य हैं, जिसका अर्थ है कि यदि आपके पास एक ही नाम के साथ दो वर्दी हैं और विभिन्न कार्यक्रमों में टाइप करते हैं, तो मूल्य एक प्रोग्राम से दूसरे कार्यक्रम में नहीं ले जाएंगे।

+0

"दो विकल्पों में से कौन सा बेहतर है जो बड़े पैमाने पर उन शेडर्स पर निर्भर करता है" - कार्य सरल है - बिना किसी प्रभाव के टेक्स्टिंग के साथ प्रतिपादन (केवल कुछ को शेडर प्रभाव होना चाहिए)। –

+0

अगर कुछ बहुत ही सरल हैं और कुछ का असर पड़ता है, तो मेरे पास सिर्फ टेक्सचरिंग (ओपेंग ग्ल 2.x या ऊपर मानते हुए) और प्रति प्रभाव वर्ग के साथ एक साधारण शेडर होगा। लेकिन वास्तव में और जानने के बिना न्याय करना मुश्किल है। यह शायद बड़ी तस्वीर में ज्यादा मायने रखता नहीं है। जब तक आपके पास प्रदर्शन की समस्या न हो और पता न हो कि यह राज्य परिवर्तनों के कारण है, तो बस अधिक सुविधाजनक क्या करें। – haffax

+1

यूनिफ़ॉर्म बफर ऑब्जेक्ट का उपयोग करके प्रोग्राम के बीच वर्दी साझा की जा सकती है (उदाहरण के लिए। [साझा वर्दी] (http://arcsynthesis.org/gltut/Positioning/Tut07%20Shared%20Uniforms.html)) – stativ

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