2010-11-21 9 views
5

मैं glReadPixels का उपयोग करके अल्फा पिक्सेल मानों को पढ़ने की कोशिश कर रहा हूं। पहली चीज मैंने पिक्सल को व्यक्तिगत रूप से पढ़ा था। चीजें तेजी लाने के लिए प्रयास करने के लिए, मैं एक ही बार में सभी पिक्सल पढ़ने की कोशिश की:glReadPixels और GL_ALPHA

GLubyte *pixels = new GLubyte[w*h*4]; 
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 

और यह काम किया, लेकिन वास्तव में धीमी गति से। अब मैं, बस अल्फा मान प्राप्त करने के लिए कोशिश कर रहा हूँ आरजीबी घटकों के लिए अंतरिक्ष बर्बाद कर के बिना:

GLubyte *pixels = new GLubyte[w*h]; 
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glPixelStorei(GL_PACK_ALIGNMENT, 1); 
glReadPixels(0, 0, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, pixels); 

लेकिन मैं मिलता है: OpenGL error 0x0500 in -[EAGLView swapBuffers]

कोई विचार क्यों INVALID_ENUM (0x0500) फेंक दिया गया है?

उत्तर

6

documentation on glReadPixels() for OpenGL ES के अनुसार, प्रारूप पैरामीटर के लिए केवल वैध एनम मान GL_RGBA और GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES हैं। आपको जांचना होगा और देखें कि GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES का अर्थ आईफोन के प्रारूप के रूप में है, लेकिन यह GL_ALPHA के लिए समर्थन प्रदान नहीं कर सकता है।

किसी भी मामले में, मुझे संदेह है कि उस मार्ग पर जाकर नाटकीय रूप से आपके पढ़ने को गति मिलेगी, क्योंकि जो कुछ भी करेगा वह आरजीबी घटकों को त्याग देगा। GlReadPixels() के साथ आपके प्रदर्शन समस्या शायद कहीं और झूठ बोलती है। इसके कारणों की अच्छी चर्चा चर्चा धागे here में मिल सकती है।

क्या आपके लिए एक बनावट द्वारा समर्थित ऑफस्क्रीन फ्रेमबफर में प्रस्तुत करना संभव होगा, फिर उस बनावट का उपयोग करके GPU पर आगे प्रसंस्करण करें? ऐसा लगता है कि यह glReadPixels() का उपयोग करने से बेहतर प्रदर्शन प्रदान करेगा।

+0

इसके लिए धन्यवाद। आपके आखिरी सुझाव के बारे में, क्या आपके पास कोई संकेतक है कि इसे कैसे कार्यान्वित किया जाए? – sharvey

+0

@ शार्वे - मेरा लेखन यहां देखें: http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios। मेरे पास नमूना अनुप्रयोग है: http://www.sunsetlakesoftware.com/sites/default/files/ColorTracking.zip एक बनावट को प्रस्तुत करने के लिए एक ऑफस्क्रीन फ्रेमबफर का उपयोग करता है, हालांकि मैं 'glReadPixels()' का उपयोग करके परिणाम खींचता हूं क्योंकि मैं जीपीयू-आधारित रंग औसत मैं पूरा नहीं कर सका। मैं ऐसा करने के लिए एक धीमी सी दिनचर्या का उपयोग कर समाप्त हो गया। मैं इसे किसी बिंदु पर पूरा कर दूंगा। –

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