【问题标题】:Cube rendered with OpenGL gets higher framerate on integrated graphics使用 OpenGL 渲染的立方体在集成显卡上获得更高的帧率
【发布时间】:2013-12-26 01:14:40
【问题描述】:

我的笔记本电脑同时具有 Intel 集成显卡和 NVidia 专用显卡,我可以通过右键菜单选择运行特定程序的哪一个。我正在学习 OpenGL 并渲染了一个基本的立方体,并将帧速率与两者进行了比较。我惊讶地发现,虽然在专用显卡上它得到了大约 600 FPS,但它在集成显卡上得到了大约 1300 FPS,这并没有什么意义……有人知道这是为什么吗?下面是相关的渲染代码:

GLuint VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData), VertexData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

GLuint VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

GLuint ElementArray;
glGenBuffers(1, &ElementArray);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ElementArray);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ElementData), ElementData, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

size_t ColorData = 4 * 8 * sizeof(float);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)ColorData);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ElementArray);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glBindVertexArray(0);

glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CW);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
glDepthRange(0.0f, 1.0f);

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);

glBindVertexArray(VAO);

while(!Window.ShouldClose())
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glDrawElements(GL_TRIANGLE_FAN, 8, GL_UNSIGNED_SHORT, 0);
    glDrawElements(GL_TRIANGLE_FAN, 8, GL_UNSIGNED_SHORT, (void*) (8*sizeof(GLshort)));

    Window.PollEvents();
    Window.SwapBuffers();
}

也许是司机效率低下?

如果有帮助的话,我的集成显卡芯片组是 Intel HD Graphics 4000,我的专用显卡是 Geforce GT 630 M,我的 CPU 是 Core i5 3230M,有 6 GB RAM

【问题讨论】:

  • 好的,谢谢哈哈。编辑
  • 我猜瓶颈是从主机 RAM 到设备 RAM 的传输时间,通常英特尔的集成视频设备可以直接与 RAM 对话。当您绘制数百万个顶点而不是仅仅 8 个顶点时会发生什么?
  • 还没到那一步 :) 甚至还没有实现模型加载。但是,当我在顶点着色器中放置一个 40000 次迭代的无意义 for 循环时,集成图形 FPS 下降到 250,而专用图形 FPS 仅下降到 410。

标签: c++ opengl frame-rate


【解决方案1】:

我假设第二个是集成图形,而不是专用的,正如羊毛之星所评论的那样。

从内存中,英特尔集成 GPU 可以直接与 cpu 和/或内存通信,因此,对于视频编码的东西,它曾经获得比专用 GPU 更好的性能。

话虽如此,与新一代 GPU 相比,它们的内部芯片通常是垃圾(拼写“便宜”)。

另外,请注意这绝对没有区别,因为无论如何您都不会注意到 600 和 1300 fps 之间的差异(想想您的屏幕刷新率 :))。

可能一旦您加载更多,您可能会看到不同的结果,但这应该让您了解“为什么”的基本概念。


即使它已被标记为已回答,这里还有一些额外的链接可供阅读以上内容:

【讨论】:

  • 好的,基本上就是CPU到芯片组和CPU到显卡的区别?如果是这样,那么是有道理的,更大的模型和这样的专用图形最终会更快。
  • 是的。如果您在问题中提供更多详细信息,例如您正在使用哪个主板/cpu/ram/gpu,您可能会得到更具体的答案:)
  • 谢谢,我放了我能找到的信息,因为它是一台笔记本电脑:) 无论如何,当我在顶点着色器中放置一个 40000 迭代循环只是为了测试时,集成显卡下降到 250 FPS,而专用图形在 410 FPS 时保持相当强劲。猜猜这就是你希望它发光的地方
猜你喜欢
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多