c++ - 使用 OpenGL 渲染的立方体在集成显卡上获得更高的帧速率

标签 c++ opengl frame-rate

我的笔记本电脑同时配备了 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

最佳答案

我假设第二个是集成显卡,而不是专用显卡,正如 Woolstar 评论的那样。

从内存来看,英特尔集成 GPU 可以直接与 CPU 和/或内存通信,因此,对于视频编码来说,它比专用 GPU 获得了更好的性能。

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

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

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


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

关于c++ - 使用 OpenGL 渲染的立方体在集成显卡上获得更高的帧速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461975/

相关文章:

c++ - 没有已知的从指针到指针引用的转换

c++ - BOOST_BINARY 宏如何解析空格?

java - LWJGL OpenGL黑屏

java - OpenGL:除以 w 零

ffmpeg - ffmpeg 认为音频帧和音频样本之间有什么区别?

android - 如何限制 android 中相机的预览 fps 范围?

c++ - 使用引用指向节点的指针的函数删除链表中的节点?

C++ 将逻辑运算符函数分配给变量

opengl - 面向初中级 C++ 程序员的高级 OpenGL 友好库

Windows FFmpeg 将 imges 转换为具有正确帧率的 gif