为什么opengl中的gl_FragColor与Colorbuffer不同?

时间:2018-05-07 13:18:46

标签: c++ qt opengl opengl-es fragment-shader

我想用glReadPixels()来读取colorbuffer中的值,我之前在Fragmentshader中通过gl_FragColor写了这个值。这平均有效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坐标提交给fragementshader(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上看到了这种行为。 有谁知道我做错了什么?

0 个答案:

没有答案