我目前在我的应用程序中使用颜色选择。这在PC上有效,但是我在各种设备上使用它时遇到了问题。
这可能是由于上下文的设置不同,具体取决于设备。例如,据我所知,PC的颜色设置为888,而设备的默认颜色可能为565。
我想知道在OpenGL中是否有一种方法可以获得当前的像素/颜色格式,这样我就可以正确地检索颜色数据?
这是我正在使用的函数,它在PC上运行良好:
inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y)
{
GLint viewport[4];
GLubyte pixel[3];
glGetIntegerv(GL_VIEWPORT,viewport);
//Read colour of pixel at a specific point in the framebuffer
glReadPixels(x,viewport[3]-y,1,1,
GL_RGB,GL_UNSIGNED_BYTE,(void *)pixel);
out[0] = pixel[0];
out[1] = pixel[1];
out[2] = pixel[2];
}有什么想法吗?
发布于 2012-05-04 10:27:30
是的,但这有点复杂。
查询当前帧缓冲区的位深度在ES 2.0中相当容易(注意:这在Desktop GL中也是合法的,但在GL 3.1内核中删除了此功能。它仍然可以从兼容性配置文件访问)。您必须获取每个颜色分量的位深度:
位深;glGetIntegerv(GL_x_DEPTH,& GLint );
其中x是RED、GREEN、BLUE或ALPHA之一。
一旦有了位深度,就可以测试它是否为565,并使用适当的像素传输参数和颜色值。
发布于 2012-05-04 11:11:17
glReadPixels的format参数必须是GL_RGBA (始终受支持)或GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES (在不同设备上不同)。这是OpenGL ES的限制。
https://stackoverflow.com/questions/10441528
复制相似问题