gpt4 book ai didi

delphi - 在 OpenGL 渲染上下文之上叠加图形

转载 作者:行者123 更新时间:2023-12-03 15:22:05 27 4
gpt4 key购买 nike

我正在尝试将图形覆盖在我的 OpenGL 渲染场景之上。

我已经设法让它启动并运行,但 FPS 的下降有点太多了。

我目前正在将 GLScene 与 Graphics32 结合使用。

我所做的是将 GLScene 渲染上下文渲染为位图,将该位图应用于 TImageView32,并在 TImage32 内进行一些最终的 UI 修改。

我用来渲染位图的代码如下,这也会降低 FPS:

procedure RenderToBitmap;
var b: TBitmap;
begin
b:=TBitmap.Create;
b:=GLSceneViewer.Buffer.CreateSnapShotBitmap; //TGLSceneViewer
ImgVwr32.Bitmap.Assign(b); //TImageViewer32
b.Free;
end;

我尝试了一些其他代码(见下文),它给了我实时渲染,但我不能修改ImageViewer32的“Bitmap”属性。换句话说:GLScene 渲染上下文正在渲染,但我自己的图形没有渲染。代码:

//The following line is put inside the FormCreate call
GLSceneViewer.Buffer.CreateRC(GetDC(ImgVwr32.Handle),false);

如何在不丢失 FPS 的情况下正确地将图形覆盖在渲染上下文之上,或复制渲染上下文输出?

最佳答案

好吧,通过避免整个 GPU→CPU→GPU 复制往返。将叠加层上传到 OpenGL 纹理中,并使用大型纹理四边​​形将其绘制在整个场景上。

OpenGL 不是场景图,它只是一个更复杂的绘图 API。您可以随时更改视口(viewport)和变换参数,而无需更改目前绘制的像素。因此,只需切换到屏幕空间坐标系并使用它绘制覆盖层就很容易了。

关于delphi - 在 OpenGL 渲染上下文之上叠加图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221895/

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