OpenGL ES使用glReadPixels读取浮点值()

问题描述:

我知道有很多关于使用glReadPixels()读取浮动缓冲区的问题。但我仍然没有找到对我的问题的答案。 我想运行这个程序,我的iPhone。我正在与QT合作并首先在计算机上测试该应用程序,并且从缓冲区读取浮点值没有任何问题。但现在,我不允许使用OpenGL ES。我的结果是任意的。OpenGL ES使用glReadPixels读取浮点值()

我想改变的是。我使用glReadPixels()将GLubyte从缓冲区中读出,并将这些结果转换为浮点数。 现在我的问题,为什么我仍然得到任意结果?如果我以某种方式读取缓冲区错误或者无法将GLubyte浮动,我不知道该如何解决。

据我所知GLubyte是一个简单的无符号字符,因为我知道它应该实际上没有问题与浮点类型转换。

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); 

这是我对Framebuffer'_fbo'的绘制调用。正如我们所看到的,我赞扬了实际的绘图调用,我只想清除缓冲区,并希望只读出值(1,0,0)。

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); 

我分配ne存储,我想现在读取存储在缓冲区中的像素值。 之后,我只想将存储在“像素”中的值复制到“像素_f”,方法是将它们转换为浮点。

我的结果真的是任意的我不知道如果是因为从GLubyte转换为浮动不工作,或者如果我通过读取缓冲区现在做错了。因为我在计算机上使用OpenGL并使用GL_Float来读取缓冲区,所以我没有任何问题。


一些更多的调试,我发现后,该glReadPixels()trows错误:1280。但是,只有通过对OpenGL ES的,而不是用OpenGL运行。

当我用OpenGL运行程序我的版本:GL_SHADING_LANGUAGE_VERSION:1.20

而且使用OpenGL ES: GL_SHADING_LANGUAGE_VERSION:在OpenGL ES GLSL ES 3.00

我不知道为什么,其实都应该是1.2。如果版本对此有任何问题,我现在不会。

好的我解决了这个问题。我只允许使用GL_RGBA加载类型GL_UNSIGNED_BYTE。所以:

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

现在的作品。