【发布时间】:2015-01-10 13:40:27
【问题描述】:
我是 OpenGL 的新手,我希望有人向我解释该程序如何使用 GPU。
我有一个三角形数组(包含 3 个点的类)。这是绘制它们的代码(我知道这些函数已被贬低)。
glBegin(GL_LINES);
for(int i=0; i<trsize; ++i){
glVertex3d((GLdouble)trarr[i].p1().x(), (GLdouble)trarr[i].p1().y(), (GLdouble)trarr[i].p1().z());
glVertex3d((GLdouble)trarr[i].p2().x(), (GLdouble)trarr[i].p2().y(), (GLdouble)trarr[i].p2().z());
glVertex3d((GLdouble)trarr[i].p3().x(), (GLdouble)trarr[i].p3().y(), (GLdouble)trarr[i].p3().z());
}
glEnd();
我还使用贬义函数进行旋转、变换等。
当数组大小大于 50k 时,程序运行很慢。 我尝试仅使用 Intel HD 或仅使用 NVidia gtx860M(默认的 NVidia 程序允许选择 GPU),但它们的运行速度都很慢。也许英特尔 HD 的运行速度会更快。
那么,为什么这两款 GPU 没有区别呢? 如果使用着色器,程序会更快地运行吗?
【问题讨论】:
-
简而言之,您受到 CPU 的限制,即函数调用和用户模式→内核模式上下文切换开销,您的进程必须为这些调用中的每一对跳过。
标签: c++ opengl glsl gpu nvidia