2012-02-28 5 views
6

के साथ glTexSubImage2d के विकल्प की तलाश में है मेरे पास एक पीबीओ है जिसे प्रत्येक फ्रेम को CUDA द्वारा अपडेट किया गया है। इसके बाद, मैं इस पीबीओ का उपयोग करके एक बनावट भी अपडेट करना चाहता हूं, जिसे मैं glTexSubImage2d का उपयोग कर करता हूं। मुझे डर लगता है कि पूरे बनावट महंगे हैं और बनावट के केवल देखने योग्य क्षेत्र को अपडेट करना चाहते हैं जबकि मेरे पीबीओ पर पूरा डेटा है।डेटा ऑफ़सेट समर्थन

समस्या यह है कि, हालांकि glTexSubImage2d पैरामीटर के रूप में ऑफ़सेट, चौड़ाई और ऊंचाई स्वीकार करता है, वे केवल बनावट के लिए चित्रकारी करते समय उपयोग किए जाते हैं, जबकि मुझे अभी भी मेरे बफर डेटा को रैखिक रूप से रखना चाहिए। मैं बफर डेटा हो सकता है की तैयारी कर अपने आप को बहुत महंगा हो (वास्तव में यह, बहुत महंगी हो जाएगा के बाद से मेरी PBO GPU स्मृति में रहता है।)

वहाँ जो भी बफर ऑफसेट या होना चाहिए के लिए पैरामीटर लेता glTexSubImage2d के लिए किसी भी विकल्प है डर लग रहा है मैं पूरे बनावट को एक बार में अद्यतन रखता हूं?

उत्तर

7

कृपया glPixelStore के साथ सेट पिक्सेल स्टोर पैरामीटर पर पढ़ें। मापदंडों GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_PIXELS और GL_UNPACK_SKIP_ROWS आप के लिए सबसे दिलचस्प हो सकता हैं:

Pixel Store Parameters

ये मान प्रोग्रामर के लिए एक सुविधा के रूप में प्रदान कर रहे हैं; वे कोई कार्यक्षमता प्रदान नहीं करते हैं जिसे glDrawPixels, glTexImage1D, glTexImage2D, glTexSubImage1D, glTexSubImage2D, glBitmap, या glPolygonStipple को पास किए गए पॉइंटर को बढ़ाकर डुप्लिकेट नहीं किया जा सकता है। मैं GL_UNPACK_SKIP_PIXELS को सेट करने के लिए i ⁢ n घटकों या सूचकांक द्वारा सूचक को बढ़ाने के बराबर है, जहां n प्रत्येक पिक्सेल में घटकों या सूचकांक की संख्या है। JL_UNPACK_SKIP_ROWS को j में सेट करना जे ⁢ के घटकों या सूचकांक द्वारा पॉइंटर को बढ़ाने के बराबर है, जहां k प्रति पंक्ति या घटकों की संख्या है, जैसा कि केवल GL_UNPACK_ROW_LENGTH अनुभाग में गणना की गई है।

आप अभी भी डेटा हस्तांतरण के लिए glTexImage और/या glTexSubImage का उपयोग करने जा रहे हैं।

+0

बहुत बढ़िया, यह बिल्कुल वैसा ही दिखता है जो मुझे चाहिए। धन्यवाद! – kaoD

+0

आगे पढ़ने के बाद ... यह क्यों कहता है "कोई कार्यक्षमता प्रदान नहीं करना जो सूचक को बढ़ाकर डुप्लिकेट नहीं किया जा सकता"? एक ही समय में ROWS और PIXELS के लिए स्किप सेट करना मेरी अपेक्षा के अनुसार काम करेगा? – kaoD

+1

@kaoD: यह कहता है कि क्योंकि यह सच है। उन SKIP मानों को सूचकांक बढ़ाकर * परिभाषित * किया जाता है। इसलिए, वे सूचक को बढ़ाने के बराबर हैं। यह ROW_LENGTH है कि आप अपने आप नहीं कर सकते हैं। –

0

glTexSubimage2D में पीबीओ से डेटा प्राप्त करने में त्रुटियां हैं यदि बनावट में चयनित आरओआई पूरे बनावट आकार के बराबर नहीं है। यह ज्ञात समस्या है जिसे ठीक नहीं किया जा सकता है (उदा। opengl forum thread)।