几秒后Opengl速度增加

时间:2013-02-04 16:58:55

标签: opengl

我正在开发一个以OpenGL作为基础渲染器的渲染引擎。 渲染器在开始时以150 fps开始,在30秒左右后,fps增加到500。 我已经分别定时引擎的每个部分,唯一增加速度的部分是drawMesh函数,它绑定[静态] VBO并调用glDrawArrays。

我还评论了glPush和glGet函数的行为与结果相同。

每次运行引擎时都会发生这种情况,即使相机未移动并仍然呈现完全相同的场景。

有没有人知道如何发生这种情况?

2 个答案:

答案 0 :(得分:1)

问题

问题产生于VBO在创建后被映射到缓冲区。模型类只执​​行一次更新其边界;如果粒子用所需数据更新缓冲区。

因为看起来视频卡(或至少在我的情况下有 Geforce GTS 450 )在取消映射VBO后不会直接将数据复制回到视频卡中,特别是在使用时用于映射缓冲区的GL_READ_WRITE_ARB标志。在将数据复制回VRAM之前,它会将数据保存在外部RAM中几秒钟。

解决方案

通过使用GL_READ_ONLY_ARB标志映射应该只读取数据的数据,缓冲区将几乎直接复制回VRAM。但是在我的情况下,一旦为此目的创建VBO,在网格对话期间计算边界并且根本不访问数据会更有效。

答案 1 :(得分:0)

也许是因为着色器是在第一次使用之前及时编译的。

查看GL_ARB_get_program_binary

此外,尝试在初始化阶段加载着色器时使用着色器渲染三角形(可能在屏幕外执行此操作)。