Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL ES使用glReadPixels()读取浮点值_C++_Qt_Opengl Es - Fatal编程技术网

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

C++ OpenGL ES使用glReadPixels()读取浮点值,c++,qt,opengl-es,C++,Qt,Opengl Es,我知道有很多关于使用glReadPixels()读取缓冲区外的浮点值的问题。但我仍然没有找到我的问题的答案。 我想在我的iPhone上运行这个程序。我正在使用QT,首先在计算机上测试了应用程序,从缓冲区中读取浮点值没有问题。但是现在有了OpenGL ES,我是不允许这样做的。我的结果是任意的 我想改变的是。我使用glReadPixels()从缓冲区中读取GLubyte,并将这些结果转换为浮点。 现在我的问题是,为什么我仍然得到武断的结果?我不知道我是否读错了缓冲区,或者我是否无法将GLubyte

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

我想改变的是。我使用glReadPixels()从缓冲区中读取GLubyte,并将这些结果转换为浮点。 现在我的问题是,为什么我仍然得到武断的结果?我不知道我是否读错了缓冲区,或者我是否无法将GLubyte转换为float

据我所知,GLubyte是一个简单的无符号字符,而且据我所知,将typecast转换为float实际上应该没有问题

    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);
这是我对帧缓冲区“\u fbo”的draw调用。正如我们所看到的,我给出了实际的draw调用,我只想清除缓冲区,希望只读出值(1,0,0)

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

我的结果真的是任意的,我不知道这是因为从GLubyte到float的转换不起作用,还是我现在读取缓冲区时出错了。因为当我在计算机上使用OpenGL并使用GL_Float读取缓冲区时,我没有遇到任何问题


在进一步调试之后,我发现glReadPixels()抛出了错误:1280。但只能在OpenGL ES上运行,而不能使用OpenGL

当我用OpenGL运行程序时,我的版本是:GL\U SHADING\U LANGUAGE\U版本:1.20

使用OpenGL ES: GL_着色_语言_版本:OpenGL ES GLSL ES 3.00


我不知道为什么,实际上两者都应该是1.2。我现在不知道这个版本是否有任何问题

好的,我解决了这个问题。我只允许用GL_RGBA加载类型GL_UNSIGNED_BYTE。因此:

glReadPixels(0, 0, _frameSize, _frameSize, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
现在起作用了

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