Ich versuche, die Alpha-Pixelwerte mit glReadPixels zu lesen. Das erste, was ich gemacht habe, war, die Pixel einzeln zu lesen. Um zu versuchen, die Dinge zu beschleunigen, habe ich versucht, alle Pixel auf einmal zu lesen:glReadPixels und GL_ALPHA
GLubyte *pixels = new GLubyte[w*h*4];
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
und es funktionierte, aber sehr langsam. Jetzt versuche ich, nur den Alpha-Wert abrufen, ohne auf die RGB-Komponenten Platzverschwendung:
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);
Aber ich bekomme: OpenGL error 0x0500 in -[EAGLView swapBuffers]
.
Irgendeine Idee, warum ein INVALID_ENUM (0x0500)
geworfen wird?
Vielen Dank dafür. Haben Sie bezüglich Ihres letzten Vorschlags Hinweise, wie Sie das umsetzen können? – sharvey
@sharvey - Siehe meine write-up hier: http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios. Die Beispielanwendung, die ich dort habe: http://www.sunsetlakesoftware.com/sites/default/files/ColorTracking.zip verwendet einen Offscreen-Framebuffer, um zu einer Textur zu rendern, obwohl ich das Ergebnis mit 'glReadPixels()' da I einlese Ich konnte die GPU-basierte Farbmittelung, die ich wollte, nicht beenden. Ich benutzte eine langsamere C-Routine, um dies zu tun. Ich werde das irgendwann fertigstellen. –