当前位置:  开发笔记 > 编程语言 > 正文

SDL_GL_SwapWindow性能不佳

如何解决《SDL_GL_SwapWindow性能不佳》经验,为你挑选了1个好方法。

我做了一些性能测试并得出了这个:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

for(U32 i=0;iprojection * usedView->transform * obj.transform;
    glUniformMatrix4fv(shader.modelViewMatrixLoc, 1, GL_FALSE, tmpM.data());
    //glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, typesheet.tbo);
    glUniform1i(shader.typesheetLoc, 0);
    glDrawArrays(GL_TRIANGLES, 0, VoxelObject::VERTICES_PER_BOX*obj.getNumBoxes());
    d.out(); // 2 calls 0.000085s and 0.000043s each

}

PC swap("swap");
SDL_GL_SwapWindow(mainWindow); // 1 call 0.007823s
swap.out();

拨打电话SDL_GL_SwapWindow(mainWindow);比拨打电话要长200倍!根据我的理解,我认为该功能应该做的是交换缓冲区.这意味着交换所需的时间会根据屏幕尺寸进行缩放吗?不,它根据几何数量进行扩展...我在网上进行了一些搜索,我启用了双缓冲,并且关闭了vsync.我很难过.



1> Nils Pipenbr..:

您的OpenGL驱动程序可能正在进行延迟渲染.

这意味着给glDrawArrays和朋友的电话不会画任何东西.相反,它们会缓冲所有必需的信息,以便稍后执行操作.

实际渲染发生在SDL_GL_SwapWindow中.

现在这种情况很典型,因为您希望尽可能避免在CPU和GPU之间进行同步.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有