Я пытаюсь сохранить созданную OpenGL сцену как TBitmap. У меня проблема в том, что glReadPixels возвращает все пустые данные (все 0). Мысли о том, почему это произойдет? Я пытаюсь захватить текущий контекст OpenGL. (дисплей на экране все работает нормально). Это с Delphi 7 под Windows.
var
pbuf: pointer;
y: integer;
bmp: TBitmap;
p1, p2: pointer;
begin
GetMem( pbuf, pnScene.Width * pnScene.Height * 4);
glReadPixels( 0, 0, pnScene.Width, pnScene.Height, GL_RGBA, GL_UNSIGNED_BYTE, pbuf);
//<------ pbuf now contains all 0's ---------->
bmp := TBitmap.Create;
bmp.PixelFormat := pf32bit;
bmp.Width := pnScene.Width;
bmp.Height := pnScene.height;
for y := 0 to (pnScene.Height -1) do
begin
p1 := bmp.ScanLine[y];
p2 := pointer( integer(pbuf)+ (y * bmp.Width * 4));
CopyMemory( p1, p2, bmp.Width * 4);
end;
bmp.SaveToFile( 'c:\test\temp.bmp');
bmp.Free;
FreeMem( pbuf);
end;
И предложения / мысли приветствуются!
Добавление:
В конечном итоге планировалось сделать вызов glReadPixels () сразу после рендеринга вызовов для целей записи видео. Когда я это сделал, все работало нормально, так что это оказалось не проблемой.