我正在使用 glReadPixels 进行一些工作,它的行为很奇怪。特别是,我运行以下测试:
unsigned char pixels[ 512 * 512 * 4 ];
int mid = 0;
while (mid < 512) {
printf("Test %d : ", mid);
memset(pixels, 0, 512*512*4);
pixels[1] = 0x42;
glReadPixels( 0, 0, mid, 511, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
printf(" %x ", pixels[1]);
if (pixels[0] == 0) {
printf("0\n");
} else {
printf("1\n");
}
mid++;
}
带输出:
Test 0 : 42 0
Test 1 : 67 1
Test 2 : 67 1
Test 3 : 67 1
Test 4 : 42 0
Test 5 : 67 1
Test 6 : 67 1
Test 7 : 67 1
Test 8 : 42 0
Test 9 : 67 1
Test 10 : 67 1
Test 11 : 67 1
我已经在整个屏幕上绘制了数据(0x67 是我正在绘制的颜色的正确字节)所以我不确定这里发生了什么。
我真正想要的主要事情是在我无法在 GPU 上访问的数组中获取当前屏幕上每个像素的副本。我不确定这是否是获取它的“正确”方式,但这是我所知道的唯一方式。有没有更好的方法来做到这一点?