我试图覆盖图形在我的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?
发布于 2014-10-06 18:13:49
那么,通过避免整个GPU→CPU→GPU复制往返。上传您的覆盖到一个OpenGL纹理,并绘制整个场景使用一个大的纹理四边形。
OpenGL不是一个场景图,它只是一个比较复杂的绘图API。您可以随时更改视图端口和转换参数,而无需更改迄今绘制的像素。因此,只需切换到屏幕空间坐标系统并使用它绘制叠加图就很容易了。
https://stackoverflow.com/questions/26221895
复制相似问题