Opengl es 获取像素颜色不准确
我目前正在我的应用程序中使用颜色选择。 这在PC上工作,但是我很难让它在各种设备上工作 这可能是由于上下文设置不同,具体取决于设备。例如,据我所知,PC的颜色设置为888,而设备可能默认为565 我想知道OpenGL中是否有一种方法可以获取当前的像素/颜色格式,以便我可以正确地检索颜色数据 这是我正在使用的功能,在PC上运行良好:Opengl es 获取像素颜色不准确,opengl-es,colors,picking,openglcontext,Opengl Es,Colors,Picking,Openglcontext,我目前正在我的应用程序中使用颜色选择。 这在PC上工作,但是我很难让它在各种设备上工作 这可能是由于上下文设置不同,具体取决于设备。例如,据我所知,PC的颜色设置为888,而设备可能默认为565 我想知道OpenGL中是否有一种方法可以获取当前的像素/颜色格式,以便我可以正确地检索颜色数据 这是我正在使用的功能,在PC上运行良好: inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y) { GLint v
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];
}
有什么想法吗?有,但有点复杂 查询当前帧缓冲区的位深度在ES 2.0中相当容易(注意:这在桌面GL中也是合法的,但在GL 3.1 core中删除了此功能。它仍然可以从兼容配置文件中访问)。必须获得每个颜色组件的位深度: 闪烁深度; glGetIntegerv(GL_x_深度和位深度) 其中x是红色、
绿色
、蓝色
或阿尔法
中的一种
有了位深度后,可以测试它是否为565,并使用适当的像素传输参数和颜色值。是的,但有点复杂 查询当前帧缓冲区的位深度在ES 2.0中相当容易(注意:这在桌面GL中也是合法的,但在GL 3.1 core中删除了此功能。它仍然可以从兼容配置文件中访问)。必须获得每个颜色组件的位深度: 闪烁深度; glGetIntegerv(GL_x_深度和位深度) 其中x是红色、
绿色
、蓝色
或阿尔法
中的一种
有了位深度后,可以测试它是否为565,并使用适当的像素传输参数和颜色值。glReadPixels的
格式
参数必须是GL_RGBA(始终受支持)或GL_实现_颜色_读取_格式
(在不同的设备上不同)。这是OpenGL ES限制。glReadPixels的格式
参数必须是GL_RGBA(始终支持)或GL_实现_COLOR_READ_format_OES
(在不同设备上不同)。这是一个OpenGL ES限制