opengl 显卡即使使用缓冲区也会复制大量数据[已关闭]

vlf7wbxs  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(136)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
这篇文章是昨天编辑并提交审查的。
Improve this question
我的离散视频卡在程序工作时复制了大量数据(我在任务管理器中看到了),即使我使用了缓冲区。

while (!glfwWindowShouldClose(window))
{
    glfwPollEvents();
    glfwSwapBuffers(window);
    glClear(GL_COLOR_BUFFER_BIT);

    glBindBuffer(GL_ARRAY_BUFFER, colbuff);
    glEnableClientState(GL_COLOR_ARRAY);
    glColorPointer(3, GL_FLOAT, 0, NULL);

    glBindBuffer(GL_ARRAY_BUFFER, buff);
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, NULL);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elembuff);

    glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_INT, NULL);

    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}

pidoss.它工作正常(按照我的计划画了一个彩色的四元图),但是性能更差

8aqjt8rx

8aqjt8rx1#

集成GPU位于CPU旁边,与CPU在同一总线上,可以直接访问主系统内存。
专用GPU有自己独立的内存。要将数据从系统内存复制到专用GPU内存中。
通常这是一件好事,因为专用GPU可以直接引用图形数据,而无需与CPU竞争访问相同的内存芯片。但如果应用程序编写得不好,它可能会不断地将新数据从系统内存复制到图形内存,从而浪费时间。当您调用glBufferData之类的函数时,就会发生将数据从系统内存复制到图形内存的情况。
我怀疑您编写的程序总是将大量数据复制到缓冲区中,即使数据已经在缓冲区中,而不是复制一次后就不管它。

相关问题