首页 > 解决方案 > 为什么opengl中的gl_FragColor与Colorbuffer不同?

问题描述

我想用 glReadPixels() 读取颜色缓冲区中的值,这是我之前通过 gl_FragColor 在 Fragmentshader 中编写的。这平均工作 10 次,然后出现错误值 (1 = 255)。

#version 420
uniform vec2 screenXy;
uniform vec2 screenSize;
out highp vec4 fragColor;

void main(void) {

if((int(gl_FragCoord.x) == int(screenXy.x)) && ((int(screenSize.y - 1) - int(gl_FragCoord.y)) == int(screenXy.y))) {
    fragColor.r = 0.5; // any value
} else {
    fragColor = vec4(1, 1, 1, 1.0);
}

我将鼠标 xy 坐标提交给片段着色器(screenXy)。如果点击的像素在行中,我会在颜色缓冲区中写入一个值(例如 0.5)。现在我观察到有时值是 1 (= 255) 而不是 0.5 (= 128)。

GLfloat zc[4]; // from color buffer
m_func->glReadPixels(xy.x(), (m_pFbo->height() - 1) - xy.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, z);
qDebug() << "z0 " << z[0];

我在 win10 和 android 上看到了这种行为。有谁知道我做错了什么?

标签: c++qtopenglopengl-esfragment-shader

解决方案


推荐阅读