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);
现在的作品。