gpt4 book ai didi

delphi - 将 OpenGL 场景保存到 TBitmap - glReadPixels 返回空数据?

转载 作者:行者123 更新时间:2023-12-02 06:19:52 25 4
gpt4 key购买 nike

我正在尝试将 OpenGL 创建的场景保存为 TBitmap。我遇到的问题是 glReadPixels 返回所有空数据(全 0)。思考为什么会发生这种情况?我正在 try catch 当前的 OpenGL 上下文。 (屏幕上的显示一切正常)。这是 Windows 下的 Delphi 7。

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() 来录制视频。当我这样做时,它工作正常,所以这最终不是问题。

最佳答案

确保您在创建 GL 上下文的同一线程中执行此操作。如果这是您提供给第三方库的回调函数,那么它可能会在另一个线程中执行,而您甚至没有意识到。这发生在我身上一次,我得到的只是零,就像你一样。

关于delphi - 将 OpenGL 场景保存到 TBitmap - glReadPixels 返回空数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com