2012-03-25 11 views
11
साथ ओपन में एक बनावट अपडेट कर रहा है

glTexImage2D और glTexSubImage2D एक बनावट के लिए पिक्सल के एक बफर पारित करने के लिए केवल तरीके हैं?glTexImage2D

पल मैं एक सेटअप समारोह में उपयोग पर glTexImage2D बफर के रूप में अशक्त गुजर, और फिर पाश प्रस्तुत करना पर रहा glTexSubImage2D फोन प्रत्येक यात्रा पर नई बफर डेटा के साथ।

लेकिन जानते हुए भी कि बनावट इस तरह के आयाम के रूप में किसी भी संपत्ति नहीं बदलेगा, वहाँ प्रतिपादन बनावट के लिए वास्तविक पिक्सेल डेटा पारित करने के लिए किसी भी अधिक कुशल तरीका है?

उत्तर

23

आधुनिक OpenGL में 2 डी बनावट अद्यतन करने के लिए 4 अलग तरीके हैं:

1) glTexImage2D - धीरे एक, आंतरिक डाटा संरचनाओं का पुनर्निर्माण करने वाला।

2) glTexSubImage2D - एक सा तेजी से है, लेकिन छवि के मानकों (आकार, पिक्सेल प्रारूप) नहीं बदल सकते।

3) प्रस्तुत करने वाली बनावट FBO साथ - अद्यतन बनावट पूरी तरह GPU पर, बहुत तेजी से। अधिक जानकारी के लिए इस उत्तर को देखें: https://stackoverflow.com/a/10702468/1065190

4) पिक्सेल बफर वस्तु PBO - GPU के लिए CPU से तेज़ अपलोड के लिए, समर्थित नहीं (अभी तक) OpenGL ES पर।

+0

मुझे लगता है कि FBO सबसे अच्छा विकल्प होगा, लेकिन, मेरे बनावट GL_LUMINANCE पैरामीटर का उपयोग करने की जरूरत है और मैं बस पता चला कि FBO इस तरह का समर्थन नहीं करते। तो glteexSubImage2D का उपयोग करने का एकमात्र विकल्प है? – PerracoLabs

+0

क्या आप डेस्कटॉप ओपनजीएल या ओपनजीएल ईएस का उपयोग करते हैं? Android पर OpenGL ES का उपयोग कर –

+0

। GL_LUMINANCE का उपयोग करने का कारण यह है कि मुझे YUV420sp डेटा को एक शेडर में पास करना होगा, क्योंकि मैं 2 विमानों को पार करने के लिए glteexSubImage2D पर 2 कॉल करता हूं, एक वाई के लिए और दूसरा यूवी के लिए। और इसलिए मुझे GL_LUMINANCE का उपयोग करना है। शेडर को डेटा पास करने से पहले वाईयूवी को आरजीबी में परिवर्तित करने का विकल्प गति कारणों के लिए एक विकल्प नहीं है। – PerracoLabs