2017-03-06 15 views
0

Ich weiß, dass es viele Fragen zum Lesen von Floaten aus dem Puffer mit glReadPixels() gibt. Aber ich finde immer noch keine Antwort auf mein Problem. Ich möchte dieses Programm auf meinem iPhone ausführen. Ich arbeite mit QT und testete die Anwendung zuerst auf dem Computer, und da war es kein Problem Float-Werte aus dem Puffer zu lesen. Aber jetzt mit OpenGL ES darf ich nicht. Meine Ergebnisse sind willkürlich.OpenGL ES Lesen Float-Wert mit glReadPixels()

Was ich ändern wollte ist. Dass ich GLubyte mit glReadPixels() aus dem Puffer lese und dieses Ergebnis in einen Float-Code umwandle. Nun zu meiner Frage, warum bekomme ich immer noch willkürliche Ergebnisse? Ich habe keine Ahnung, ob ich den Puffer irgendwie falsch lese oder ob ich GLubyte nicht zum Floaten verwenden kann.

Wie ich verstehe, GLubyte ist ein einfaches unsigned char und wie ich weiß, sollte es eigentlich kein Problem mit einer Typumwandlung zu einem Float sein.

glViewport(0, 0, _frameSize, _frameSize); 
    glBindFramebuffer(GL_FRAMEBUFFER, _fbo); 
    glClearColor(1.0,0.0,0.0, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    program.bind(); 

    glBindBuffer(GL_ARRAY_BUFFER, _vbo); 
    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*3, (GLvoid*)0); 

    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glUniform1i(glGetUniformLocation(program.programId(), "texture"), 0); 

    //glDrawArrays(GL_TRIANGLES, 0, 6); 
    glDisableVertexAttribArray(0); 

Dies ist mein Aufruf zum Framebuffer '_fbo'. Wie wir sehen können, empfahl ich den tatsächlichen Draw-Aufruf, ich möchte nur den Puffer löschen und hoffe, nur die Werte (1,0,0) auszulesen.

GLubyte* pixels = new GLubyte[_frameSize* _frameSize*3]; 
    float* pixels_f = new float[_frameSize* _frameSize*3]; 
    glReadPixels(0, 0, _frameSize, _frameSize, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

Ich Zuteilung ne Speicherung und ich möchte nun die Pixelwerte in dem Puffer gespeichert lesen. Und danach möchte ich nur die in 'pixels' gespeicherten Werte in 'pixels_f' kopieren, indem ich sie in einen Gleitkommabereich umwandle.

Meine Ergebnisse sind wirklich willkürlich Und ich habe keine Ahnung, ob es ist, weil die Besetzung von GLubyte zum Floaten nicht funktioniert oder wenn ich jetzt etwas falsch mache, indem ich den Puffer lese. Weil ich mit OpenGL auf dem Computer gearbeitet habe und GL_Float benutzt habe, um den Puffer zu lesen, hatte ich keine Probleme damit.


Nach einiger mehr Debuggen Ich fand heraus, dass die glReadPixels() trows den Fehler: 1280. Aber nur auf OpenGL ES ausgeführt wird und nicht mit OpenGL.

Wenn ich das Programm mit OpenGL laufen habe ich die Version: GL_SHADING_LANGUAGE_VERSION: 1.20

Und mit OpenGL ES: GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.00

Ich weiß nicht, warum, beide eigentlich sein sollte 1.2. Ich mache jetzt nicht, wenn die Version damit Probleme hat.

Antwort

0

Ok ich löste das Problem. Ich darf nur den Typ GL_UNSIGNED_BYTE mit GL_RGBA laden. Also:

glReadPixels(0, 0, _frameSize, _frameSize, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 

funktioniert jetzt.

Verwandte Themen