【问题标题】:OpenGL full screen texture brings framerate down to 12fpsOpenGL 全屏纹理将帧率降至 12fps
【发布时间】:2011-06-04 05:17:10
【问题描述】:

我在一台旧笔记本电脑上安装了 linux (Debian),并一直在用它编写一个 OpenGL 应用程序。在屏幕的一小部分上绘制纹理时,帧速率大约为 80fps。当我在屏幕越来越大的部分绘制纹理时,帧率急剧下降。全屏纹理将 fps 降至 12。

我知道硬件能够以更快的速度进行渲染。即使 openGL 在软件模式下运行.. 仍然看起来很慢。

关于如何诊断的任何想法?

我尝试过的事情:

  • glxinfo 让我知道笔记本电脑能够进行硬件加速 opengl 渲染。虽然我不确定它没有在软件中运行,但我相当确定笔记本电脑已设置为在硬件 opengl 中运行。

  • 我放弃了深度缓冲区,只请求笔记本电脑支持的分辨率的 24 位屏幕缓冲区。 (仍然有后备缓冲区)。

  • 从 GL_TEXTURE_MIN_FILTER、GL_LINEAR 切换到 GL_TEXTURE_MIN_FILTER,GL_NEAREST 给我买回了一些帧,但它以略高于 20fps 的速度徘徊,这仍然太慢了。

  • 我已从 glShadeModel(GL_SMOOTH) 切换到 glShadeModel(GL_FLAT)。我没有加速。

  • 我尝试将纹理渲染为顶点指针和 glBegin(GL_QUADS) 调用。

【问题讨论】:

  • 纹理有多大?你在纹素和像素之间绘制 1:1 吗?您不会在每一帧上重新上传纹理数据,对吧?您的纹理颜色格式是否与上下文的像素格式兼容?全屏glxgears 在您的硬件上提供多少 FPS?您是否在某些实际上更快的硬件上尝试过 32 位屏幕缓冲区?
  • 纹理为 512x512(我也尝试过 256x256),并且它的屏幕分辨率为 800x600。 glxgears 在笔记本电脑上以大约 203 fps 的速度运行。让我为您提供有关其他问题的更多信息,但我相当确定我不是每帧都上传纹理数据(我只每帧调用绑定函数),并且纹理和上下文都是带有无符号字节的 GL_RGBA。

标签: linux performance opengl debian blit


【解决方案1】:

如果从 BILINEAR (GL_LINEAR) 切换到 NEAREST 可以提高帧率,那么您肯定是在运行软件渲染器。

请从命令行执行此操作(这是来自我的 OSX,但在 linux 上应该类似):

# glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce 8600M GT OpenGL Engine
OpenGL version string: 2.1 NVIDIA-1.6.26
OpenGL shading language version string: 1.20
OpenGL extensions:

【讨论】:

  • # glxinfo | grep OpenGL

    OpenGL 供应商字符串:Mesa Project[br] OpenGL 渲染器字符串:Software Rasterizer[br] OpenGL 版本字符串:2.1 Mesa 7.7.1[br] OpenGL 着色语言版本字符串:1.20[br] OpenGL 扩展:[br ] 哇,好的,看起来它正在使用软件。我看到“直接渲染:是”,并认为这是硬件代码。我将研究让 OpenGL 硬件进一步运行。

  • 抱歉那里的随机标签,我正在尝试找出如何换行以使其更具可读性。
  • 事实证明,笔记本电脑有一个英特尔 vid 卡,其最新的驱动程序默认打开“阴影”选项,这会强制软件渲染。关闭它可以获得硬件渲染和帧率,但不允许我有屏幕外缓冲区。不过这是一个单独的问题,感谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多