いくつかの作業のために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ではなくアクセスできる配列内の画面に現在表示されているすべてのピクセルのコピーを取得することです。これがそれを取得するための「正しい」方法であるかどうかはわかりませんが、私が知っている唯一の方法です。これを行うためのより良い方法はありますか?