加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:35:03 所属栏目:大数据 来源:网络整理
导读:我试图在我的OpenGL渲染场景上叠加图形. 我已经设法让它运行起来但是FPS的下降有点太多了. 我目前正在将GLScene与Graphics32结合使用. 我所做的是将GLScene渲染上下文渲染为位图, 将该位图应用于TImageView32,并在TImage32内部进行最终的UI触摸. 我用来渲染
我试图在我的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?

解决方法

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

OpenGL不是一个场景图,它只是一个更复杂的绘图API.您可以随时更改视口和变换参数,而无需更改到目前为止绘制的像素.因此,只需切换到屏幕空间坐标系并使用它绘制叠加层即可.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读