使像素颜色不准确

时间:2012-05-04 01:27:19

标签: opengl-es colors picking openglcontext

我目前正在申请中使用颜色挑选。 这适用于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];
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

是的,但它有点复杂。

在ES 2.0中查询当前帧缓冲区的bitdepth相当容易(注意:这在Desktop GL中也是合法的,但是在GL 3.1核心中删除了此功能。它仍然可以从兼容性配置文件访问)。你必须得到每个颜色分量的深度:

GLint bitdepth; glGetIntegerv(GL_x_DEPTH,& bitdepth);

其中 x REDGREENBLUEALPHA之一。

获得bitdepth后,您可以测试它是否为565并使用适当的像素传输参数和颜色值。

答案 1 :(得分:0)

format的{​​{1}}参数必须是GL_RGBA(始终支持)或glReadPixels(不同设备上的不同)。这是一个OpenGL ES限制。