2013-04-29 10 views
7

ओपनजीएल में वर्दी ब्लॉक के लिए मैं एसटीडी 140 का उपयोग कब करूं? हालांकि मैं 100% निश्चित नहीं हूं, मेरा मानना ​​है कि इसका एक विकल्प है जो "साझा" नामक एक ही चीज़ को प्राप्त कर सकता है।Opengl में STD140 का उपयोग कब करें?

क्या यह कोडर के लिए सिर्फ वरीयता है? या दूसरे पर एक का उपयोग करने के कारण हैं?

+0

यदि आपको पता है [std140' लेआउट क्या है] (http: //www.opengl। संगठन/विकी/इंटरफ़ेस_लॉक_% 28 जीएलएसएल% 2 9 # मेमोरी_लेआउट), तो आपको पहले से ही पता होना चाहिए कि आप इसका उपयोग क्यों करना चाहते हैं या नहीं। तो, क्या आप पूछ रहे हैं कि 'std140' लेआउट क्या है? –

+0

@ निकोलबोलस नोप, मुझे अंतर पता है एक है जिसे आपको क्वेरी का उपयोग करना है और आपको पैड करना है। मेरा प्रश्न अभी भी खड़ा है। –

+0

@ निकोलबोलस: मैं से ई कोड में मैं पढ़ रहा हूं, और इसे समझने में सहायता के लिए इस संसाधन को ढूंढकर मुझे खुशी है। – Jackalope

उत्तर

9

वर्दी बफर वस्तुओं http://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt

में वर्णित एक समान ब्लॉक के लिए डेटा भंडारण स्मृति में तीन में से एक लेआउट का उपयोग करने के लिए घोषित किया जा सकता: packed, shared, या std140

  1. packed वर्दी ब्लॉक दक्षता के लिए एक कार्यान्वयन पर निर्भर डेटा लेआउट है, और अप्रयुक्त वर्दी स्थान बचाने के लिए संकलक द्वारा समाप्त किया जा सकता है।

  2. shared वर्दी ब्लॉक, डिफ़ॉल्ट लेआउट, दक्षता के लिए कार्यान्वयन-निर्भर डेटा लेआउट है, लेकिन लेआउट को ब्लॉक की संरचना द्वारा विशिष्ट रूप से निर्धारित किया जाएगा, जिससे डाटा स्टोरेज को कार्यक्रमों में साझा किया जा सकेगा।

  3. std140 वर्दी ब्लॉक में मानक क्रॉस-प्लेटफ़ॉर्म क्रॉस-विक्रेता लेआउट होता है। अप्रयुक्त वर्दी समाप्त नहीं की जाएगी।

std140 वर्दी ब्लॉक लेआउट, जो विशिष्ट पैकिंग व्यवहार की गारंटी देता है और ऑफसेट और प्रगति के लिए क्वेरी करने के लिए आवेदन की आवश्यकता नहीं है। इस मामले में, न्यूनतम आकार अभी भी पूछताछ की जा सकती है, भले ही यह केवल समान ब्लॉक घोषणा पर आधारित है। एक समान ब्लॉक में प्रत्येक वर्दी का ऑफसेट ओपनजीएल विनिर्देश में वर्णित नियमों के सेट को लागू करके वर्दी ब्लॉक की परिभाषा से लिया जा सकता है।

+0

std430 भी एक विकल्प है। – AzP

5

std140 सबसे उपयोगी है जब आपके पास एक समान ब्लॉक है जिसे आप एक बार में अपडेट करते हैं, उदाहरण के लिए एक दृश्य प्रस्तुत करने के लिए मैट्रिक्स और प्रकाश मूल्यों का संग्रह। ब्लॉक को अपने शेडर में std140 के साथ घोषित करें, और आप स्ट्रक्चर के साथ सी में मेमोरी लेआउट को दोहरा सकते हैं। इसके बजाय क्वेरी और सी से ब्लॉक के भीतर हर व्यक्ति मूल्य के लिए ऑफसेट को बचाने के लिए होने का, आप कर सकते हैं बस glBufferData (GL_UNIFORM_BUFFER, sizeof (my_struct), & my_struct, एक कॉल के साथ।

आप एक छोटे से सावधान रहने की आवश्यकता क्यों है उदाहरण के लिए, सी में संरेखण के साथ, एक वीसी 3 4 फ्लोट लेगा, न कि 3, लेकिन यह अभी भी बहुत आसान है IMHO।

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