4

我正在尝试在我的 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 的“位图”属性。换句话说:正在渲染 GLScene 渲染上下文,但没有渲染我自己的图形。编码:

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

如何在渲染上下文之上正确叠加图形,或复制渲染上下文输出,而不会丢失 FPS?

4

1 回答 1

8

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

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

于 2014-10-06T18:13:49.780 回答