【发布时间】:2011-09-09 09:05:20
【问题描述】:
近年来,我为 OpenLG 2 和 ES 开发了几个小游戏和应用程序。 我现在正在尝试为桌面系统上的休闲“3D”图形构建一个基于 opengl 3+ 的场景图。 (没有比想象中的虚幻引擎或 crytec 引擎更复杂的了。)
我从 OsX 10.7 开始我的开发,苹果最近发布的 ogl 3.2 版本给我留下了深刻的印象,它与 Windows 系统相比取得了相当的结果。
否则,Linux 的结果令人失望。即使是最基础的动画也会卡顿,破坏现实的印象。 Windows 工具包 freeglut 和 glfw 的结果没有差异。 (扩展加载了 glew 1.7)
我想提一下,我说的是新的 opengl 核心,而不是旧的 opengl 2 渲染路径,它在 Linux 下运行良好,但使用 cpu 而不是 gpu 进行复杂的操作。
在观看了诸如“Unigine Heaven 演示”之类的专业演示之后,我认为在 Linux 中使用现代实时 3D 图形存在一个普遍的问题。
非常欢迎任何解决此问题的建议。
更新:
我正在使用: AMD Phenom II X6、Radeon HD57XX 以及最新的专有驱动程序 (11.8) 和 Unity(64Bit)。
您可以从工具包文档中获取我的渲染循环:
do {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
...
} while (!glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED));
我正在使用 VBO,所有的转换阶段都使用着色器完成。动画计时由 glfwGetTime() 完成。在窗口和全屏模式下会出现此问题。我不知道合成管理器是否会干扰全屏应用程序。但也不可能要求用户禁用它。
更新 2:
错字:我使用的是 HD57XX 卡。
GLX_Extension:http://snipt.org/xnKg
PCI 转储:01:00.0 VGA compatible controller: ATI Technologies Inc Juniper [Radeon HD 5700 Series]
X 信息:http://pastie.org/2507935
更新 3:
禁用合成管理器会减少,但并没有完全消除口吃。 (我用“ubuntu classic without extensions”替换了标准窗口管理器) 每隔一秒,动画就会冻结并出现丑陋的扭曲:
(图片已删除 - 不允许发布图片。)
尽管在驱动程序中启用了垂直同步并在应用程序中进行了检查。
【问题讨论】:
-
您并没有真正告诉我们您正在做什么或一般问题。您说您的 GL 2 路径使用 CPU 进行“复杂操作”,并且您暗示您的 GL 3 路径使用 GPU。好的,但是这些“复杂操作”是什么?你在渲染什么?您的 GL 2 渲染路径是什么样的,它与您的 GL 3 渲染路径有何不同?
-
GL2和GL3核心有很大的不同。 GL3 将许多用于转换、映射和动画的操作移至着色器(顶点、几何和片段着色器)。用 GLSL 编写的着色器在 GPU 上执行。
-
我很清楚 GL 2 和 GL 3 之间的区别。但这并不能回答我的问题。它没有告诉我们两条渲染路径是什么样的。它可以是任何东西,从将顶点数据传输到着色器逻辑的方式,到将制服设置为其他任何东西的方式。如果不知道您实际在做什么,您的问题根本无法被诊断出来。此外,您似乎错误地认为 GL 2 意味着“不能使用着色器”。您可以在 GL 2 中很好地使用着色器; GL 3 核心只是使其强制。
-
尼可波拉斯所说的。如果您可以发布 'glxinfo'、'xdpyinfo'、'/usr/sbin/lspci' 和 'ps awx' 的输出,这将是一个很大的帮助,以便我们查看您的机器上正在运行的内容。
-
抱歉,系统暂时无法访问。我的 Linux 开发机器是 AMD Phenom II X6、Radeon HD54XX、Ubuntu 11.4 (Natty),带有最新的专有驱动程序 (11.8) 和 Unity 作为桌面。