OpenGL执行很慢
OpenGL performing very slowly
制作一款游戏,我正在测试我的渲染器。不幸的是,它只能以每秒4帧的速度运行。分析显示,令人惊讶的是,只有5%的运行时属于我的代码,其余95%的总运行时间花在nvoglnt.dll
上。
只使用了一个256x256纹理,除此之外,我在一些相机转换之外使用的唯一openGL代码是下面的代码模板。对于总共33554432个quads,它只执行134217728次。
glTexCoord2f(u, v);
glColor3f(r, g, b);
glVertex3f(x, y, z);
我做错了什么,导致OpenGL变得如此缓慢?有什么常见的性能技巧可以用来改进它吗?
正如datenwolf所说,134217728是很多次。如果你使用顶点数组,3300万四边形甚至很多。但是现代的卡片应该可以很好地处理它。
这里的瓶颈完全是CPU,每帧调用1.34亿个x 3个函数。因为你的运行速度是4FPS。这是每秒16亿次函数调用!难怪它运行得这么慢。
你应该做的是使用顶点缓冲对象。不管你的数据多么不稳定,即使你必须每帧更新它,它将更快。
有了这些,我很好奇为什么你需要渲染3300万个易失性四元组?
对于33554432个quads,它只执行了134217728次。
这些"少数"调用中的每一个都使你的系统在你的程序和OpenGL驱动程序之间切换执行上下文。这不是"少数"。老实说,我认为这个问题是一个很好的问题,因为这些天的每一个OpenGL教程都会告诉你不要使用直接模式来处理你观察到的严重的性能影响,直接模式会导致,即glBegin, glEnd, glVertex等等。
使用顶点数组或更好的顶点缓冲对象。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 使用C++中的模板和运算符重载执行矩阵运算
- OpenGL:在着色器中执行TexCoord计算,不好的做法?
- OpenGL计算着色器中线程的执行顺序
- 在 OpenGL 着色器内部还是在 C++ 中按位执行更快
- OpenGL 命令的执行顺序
- GLSDK - 无法执行示例 OpenGL 程序
- 如何在OpenGL中执行矩形剪切
- OpenGL:QApplication的执行流程
- libGL 在执行 OpenGL 程序时出错
- 是否有可以执行 OpenGL 3+ 的 VM?VirtualBox和VMware没有
- OpenGL执行很慢
- opengl es-未能在android上执行此c++代码
- OpenGL:无法使用freeGLUT执行渲染?C++
- OpenCV:是否可以使用它执行openGL像素着色
- 0xC0000005:访问冲突执行位置0x00000000.(OpenGL)
- 何时在OpenGL中执行3D碰撞检测
- OpenGL镶嵌回调未执行