我在OpenGL中设置片段着色器来计算YUV数据,并将其输出到自定义Framebuffer对象。渲染后,我使用glReadPixels()将YUV数据读回我的应用程序。
当我将YUV读回GL_FLOAT时,我得到V分量的负值。然而,当我读回与GL_INT相同的东西时,我只得到正值。不应该GL_INT给我带符号的整数值吗?有谁知道如何从glReadPixels()获得签名的内容?
我使用OpenGL 3.3,使用GLFW和GLEW。
更新:我也尝试使用GL_SHORT回读,并且我能够获得签名 16位值。也许这是我系统上的GL实现错误。如果其他人可以重现这一点,那将会感兴趣。
初始化代码:
// Color Buffer
glGenRenderbuffers(1, &rbYUV);
glBindRenderbuffer(GL_RENDERBUFFER, rbYUV);
glRenderbufferStorage
(GL_RENDERBUFFER
,GL_RGBA32F
,width
,height
);
// Depth Buffer
glGenRenderbuffers(1, &rbDepth);
glBindRenderbuffer(GL_RENDERBUFFER, rbDepth);
glRenderbufferStorage
(GL_RENDERBUFFER
,GL_DEPTH_COMPONENT24
,width
,height
);
glGenFramebuffers(1, &framebufferObj);
glBindFramebuffer(GL_FRAMEBUFFER, framebufferObj);
// Bind Color and Depth Renderbuffers to the Framebuffer object
glFramebufferRenderbuffer
(GL_FRAMEBUFFER
,GL_COLOR_ATTACHMENT0
,GL_RENDERBUFFER
,rbYUV
);
glFramebufferRenderbuffer
(GL_FRAMEBUFFER
,GL_DEPTH_ATTACHMENT
,GL_RENDERBUFFER
,rbDepth
);
RENDER LOOP:
// Set up stuff to be rendered...
glDrawArrays(...);
glFlush();
glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels
(0, 0
,width
,height
,GL_RGBA
,GL_FLOAT
,p_YUV_float_out
);
// p_YUV_float_out looks fine
// e.g. "0.49769023 0.085087359 -0.071942836 1.0000000"
glReadPixels
(0, 0
,width
,height
,GL_RGBA
,GL_INT
,p_YUV_int_out
);
// p_YUV_int_out is ok for Y and U, but V isn't negative
// e.g. "1068793704 182719944 309065418 2147483647"
// hex "3fb47f68 0ae415c8 126bf6ca 7fffffff"
答案 0 :(得分:0)
WAG在这里,您可能希望查看http://docs.gl/gl3/glPixelStore,http://docs.gl/gl3/glReadPixels〜"在将像素数据放入客户端内存之前控制像素数据的处理"