opengles绘制在屏幕上完全在绘制调用?



我正在制作一款android游戏,我注意到如果我只考虑在GLSurfaceView中花费的时间。渲染器(我在其中放置了所有与图像相关的计算),我的帧数是300 fps,但如果考虑到每帧的总时间,我的帧数是10 fps。所以我想知道,当我调用GLES30.glDrawElements();在android中,它是否会暂停程序并开始绘图,或者它是否会添加一个绘制调用到列表并通过它,绘制每个绘制调用,在后台,每次更新Activity或SurfaceView之间?

是1:

Android call update
||
Draw call
||
Drawing
||
Continue program
||
Loops

或2:

Android call update
||
Draw call
||
Add to list
||
Continue program and exit GLSurfaceView
||
Android goes through all draw calls and draws to the screen.
||
Loops

GPU渲染是完全异步的-调用glDraw...()只是将绘制命令添加到GPU将在可能时处理的命令队列中。

基本上就是"2"在你的问题中,除了:

Android通过所有绘制调用并绘制到屏幕。

是:

  • GPU硬件通过所有排队的绘制调用并绘制到回缓冲区。
  • 显示合成器在后缓冲区完成时交换前后缓冲区,并且这样做是安全的(即等待显示vsync)。

如果应用程序受到渲染性能的限制,那么至少有一个图形API调用将在等待渲染到缓冲区时停止。这通常是eglSwapBuffers(),但不一定是。

最新更新