我想用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上看到了这种行为。 有谁知道我做错了什么?