1

我目前在我的应用程序中使用颜色选择。这适用于 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];
}

有任何想法吗?

4

2 回答 2

1

是的,但它有点复杂。

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

GLint位深度;glGetIntegerv(GL_x_DEPTH, &bitdepth);

其中xREDGREENBLUE或中的一个ALPHA

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

于 2012-05-04T02:27:30.033 回答
0

for的format参数glReadPixels必须是 GL_RGBA(始终支持)或GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES(在不同设备上不同)。这是 OpenGL ES 的限制。

于 2012-05-04T03:11:16.857 回答