c++ - 使用 Intel HD 和 NVidia GPU 的 OpenGL 程序

标签 c++ opengl glsl gpu nvidia

我是 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();

而且我还使用了 depricated 函数来旋转、变换等。

当数组的大小大于 50k 时,程序运行很慢。 我尝试仅使用 Intel HD 或仅使用 NVidia gtx860M(默认的 NVidia 程序允许选择 GPU),但它们都运行得很慢。也许 Intel HD 的工作速度更快。

那么,为什么这两个 GPU 之间没有区别呢? 使用着色器程序会更快地运行吗?

最佳答案

可能的瓶颈是遍历顶点、访问数组并提取顶点数据每次渲染 50000 次,然后将数据发送到 GPU 进行渲染。

使用 VBO 确实会更快,并且可以压缩提取数据并将其发送到 GPU 的成本,以便在初始化时执行一次。

即使使用用户内存缓冲区也会加快速度,因为您不会调用 50k 函数,但驱动程序可以只对相关数据进行内存复制。

关于c++ - 使用 Intel HD 和 NVidia GPU 的 OpenGL 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908396/

相关文章:

c++ - 在 C++ 中,它是从小数点开始还是从整个 #setprecision 开始

file - 'file_contents( )' doesn' t 返回类型 GLchar

java - Jogl 四边形问题

c# - OpenTK 中的立方体贴图

c - 从C中的堆栈中删除字符串

c++ - 在提升图中使用特征类型

c++ - 为什么在 C++ 中未指定函数参数的评估顺序?

c++ - 在 Apache Velocity 模板语言中获取文件目录

opengl - 如何使用 GLSL 着色器将径向模糊应用于整个场景?

glsl - GLSL rand() 这一行代码的起源是什么?