SDL2 + openGL ES 2.0帧速率性能提升,CPU负载更少

时间:2018-07-07 04:50:24

标签: linux raspberry-pi opengl-es-2.0

我正在使用最新(当前)SDL2(2.0.8)+ openGL ES 2.0(GLSL 1.0)的Linux系统进行开发,最终目标是树莓派3板。到目前为止,我已经完成了一些事情,例如使用freetype绘制文本,绘制线条,文本框(可编辑),文本列表,波形框(我需要传递给函数的是一个顶点数组)以及其他带有glDrawArrays()的形状。现在,有些事物需要每秒刷新10次,而其他事物则需要每秒刷新1次。跳过以每秒10次的速度重新渲染所有内容的最佳方法是什么?因为显然,openGL的工作原理是在每个“框架”上从头开始绘制所有内容。但是我知道,您知道还有其他方法,包括:在您已经拥有的屏幕上方进行渲染,或者截取屏幕截图,然后仅在快速变化的事物以及其他解决方案之上进行渲染。在调用SDL_GL_SwapWindow()之前,跳过重新做所有事情的最佳方法是什么?我如何拍摄屏幕快照并将其渲染到不可见的缓冲区中,然后仅渲染快速变化的对象,然后调用SDL_GL_SwapWindow()?

This is a screen shot of the app so far drawing basic things

谢谢。

1 个答案:

答案 0 :(得分:1)

我最终不得不意识到我不应该首先提出问题,但是由于这里是人们向他人学习的地方,所以我现在感觉更好了:)。因此,我要做的就是停止清除不可见的缓冲区(为简单起见,我将其称为“缓冲区”),并在其顶部进行渲染,仅控制更改。那些变化的对象将通过用矩形覆盖它们占据的区域进行更新,然后在该区域上绘制新内容。我已经做完了,帧速率刚刚“爆炸”。我真的不认为有更好的方法,因为我的方法根本不需要采取任何措施。我要做的就是添加一些条件,这些条件在每次执行到达功能要遍历必须在屏幕上绘制的控件进行迭代的点时有选择地呈现或跳过,从而决定呈现什么以及不呈现什么。但是,每个控件都需要一套经过深思熟虑的结构,而不是无限地声明和定义全局变量,这只会使事情变得混乱并且难以维护。

关于所有人。

相关问题