我試圖一個OpenGL創建場景保存爲TBitmap。我遇到的問題是glReadPixels將返回所有空數據(全0)。爲什麼會發生這種想法?我試圖捕獲當前的OpenGL上下文。 (在屏幕上顯示的都是正常工作)。這是在Windows下的Delphi 7。保存OpenGL場景到TBitmap - glReadPixels返回空閒數據?
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()調用渲染要求錄製視頻的目的之後。當我這樣做的時候,它運作良好,所以這最終成爲一個沒有問題的東西。
您是否檢查錯誤? glGetError – Bart 2011-05-15 08:26:31
是的,對不起,我應該提到 - 沒有錯誤glReadPixels() – GrandmasterB 2011-05-15 17:33:21