如何再次测试着色器不同版本的着色器模型

发布于 2024-11-26 12:31:18 字数 359 浏览 1 评论 0原文

我有很多 OpenGL 着色器。我们尝试使用尽可能多的不同硬件来评估我们产品的可移植性。我们的一位客户最近遇到了一些渲染问题,目标机器似乎只提供版本 着色器模型 2.0 我们所有的开发/构建/测试机器(即使是最旧的机器也运行版本 4.0 >),其他所有内容(OpenGl 版本、GSLS 版本...)似乎都相同。

我没有找到降级着色器模型版本的方法,因为它是由显卡驱动程序自动提供的。

有没有办法手动安装或选择用于开发/测试目的的 OpenGl/GLSL/Shader 模型版本?

注意:对于 ATI/NVIDIA 卡,主要目标是 Windows XP SP2/7(32 和 64)

I have many OpenGl shaders. We try to use as many different hardware as possible to evaluate the portability of our product. One of our customer recently ran into some rendering issues it seems that the target machine only provide version shaders model 2.0 all our development/build/test machine (even oldest ones run version 4.0), everything else (OpenGl version, GSLS version ...) seems identical.

I didn't find a way to downgrade the shaders model version since it's automatically provided by the graphic card driver.

Is there a way to manually install or select OpenGl/GLSL/Shader model version in use for develpment/test purpose ?

NOTE: the main target are windows XP SP2/7 (32&64) for both ATI/NVIDIA cards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧伤慢歌 2024-12-03 12:31:18

OpenGL没有“着色器模型”的概念;那是 Direct3D 的事情。它只有 GLSL 版本:1.10、1.20 等。

每个 OpenGL 版本都与特定的 GLSL 版本匹配。 GL 2.1 支持 GLSL 1.20。 GL 3.0 支持 GLSL 1.30。对于GL 3.3及以上版本,他们不再胡闹,只是使用相同的版本号,因此GL 3.3支持GLSL 3.30。因此,GLSL 1.50(映射到 GL 3.2)和 GLSL 3.30 之间存在奇怪的版本号差距。

从技术上讲,OpenGL 实现可以拒绝编译比当前版本匹配的旧着色器版本。然而,实际上,您几乎可以将任何 GLSL 着色器放入任何 OpenGL 实现中,只要着色器的版本小于或等于 OpenGL 实现支持的版本。尚未在 GL 3.2 核心的 MacOSX Lion 实现上进行测试。

有一个例外:核心上下文。如果您尝试通过使用从核心中删除的功能的核心 OpenGL 上下文来提供着色器,它会抱怨。

没有办法强制 OpenGL 为您提供特定的 OpenGL 版本。您可以使用 wgl/glXCreateContextAttribs 要求它。但是,可以为您提供比您要求的版本更高的任何版本,只要该版本与您要求的版本向后兼容。

OpenGL does not have the concept of "shader models"; that's a Direct3D thing. It only has versions of GLSL: 1.10, 1.20, etc.

Every OpenGL version matches a specific GLSL version. GL 2.1 supports GLSL 1.20. GL 3.0 supports GLSL 1.30. For GL 3.3 and above, they stopped fooling around and just used the same version number, so GL 3.3 supports GLSL 3.30. So there's an odd version number gap between GLSL 1.50 (maps to GL 3.2) and GLSL 3.30.

Technically, OpenGL implementations are allowed to refuse to compile older shader versions than the ones that match to the current version. As a practical matter however, you can pretty much shove any GLSL shader into any OpenGL implementation, as long as the shader's version is less than or equal to the version that the OpenGL implementation supports. This hasn't been tested on MacOSX Lion's implementation of GL 3.2 core.

There is one exception: core contexts. If you try to feed a shader through a core OpenGL context that uses functionality removed from the core, it will complain.

There is no way to force OpenGL to provide you with a particular OpenGL version. You can ask it to, with wgl/glXCreateContextAttribs. But that is allowed to give you any version higher than the one you ask for, so long as that version is backwards compatible with what you asked for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文