2013-08-16 45 views
0

我一直在使用OpenGL很长一段时间,并且我几乎注意到几乎每一次我都会用glsl着色器创建一些程序,它在许多机器上的作用各不相同。现在我猜测这是因为有些机器部分不支持它们或充分。我想知道我可以使用什么来确保至少对于OpenGL 2.1+来说有足够的兼容性,并且仍然使用像着色器这样的好东西,而不是像直接模式那样使用固定管线。OpenGL - 在OpenGL 2.1中实现的最先进的渲染方法是什么?

而且我注意到,在两台机器上,这两个支持OpenGL 3.2的使用OpenGL 3.2功能的结果是不同的。其中有文物和一个不..

我能做些什么/使用,以确保最大的兼容性,而不必在十亿台机器上测试,以确保它的工作原理,我不必为特定的机器修复问题。

编辑:所以要缩小这个问题,什么是在OpenGL 2.1中呈现的最高级的方式?我可以在该版本中使用着色器吗?

+0

这个问题缺乏任何细节,并在这样的一般水平是相当无法回避的。这些描述听起来像代码中的错误。 – derhass

+2

您不能确保某些机器上的某些内容不经过测试即可正常工作:P操作上的差异常常是由于您的代码调用了未定义的行为,驱动程序错误或其他棘手的可移植性问题(如字节序或浮点数的不同表示)。如果没有实际的运行时间测试,前两个问题就无法解释,我从您的描述中猜测,大部分问题都属于未定义(或定义不明)的行为。 –

+0

对不起,太宽泛的东西..我缩小了它.. – Gopgop

回答

1

这不是一个容易回答的问题。

我建议留在您接受的最低版本的OpenGL。如果你的客户支持OpenGL 2.1比OpenGL 4.4更可能,那么坚持2.1。

如果您有更多时间进行开发,您可以更高,并且在特定的OpenGL版本可用时使用它。例如,当支持GL3.3时,请使用几何着色器。

一般来说,取决于几个因素:

  • 可用的开发时间(可以支持不同的版本,或者你只有一个时间)
  • 客户端(客户端的硬件)
  • 需要先进的图形(也许你不能低于GL3.3)

另一件事是GL驱动程序。这里是a bit outdated link,可以帮助...和one similar stack问题

+0

感谢您的答案现在让我们说我选择2.1我怎么知道什么是兼容的什么不是? – Gopgop

+1

gopgop,请查看http://www.opengl.org/registry了解每个OpenGL版本的官方规范。然而,这可能会很快变得非常乏味,所以更快速地查看函数所需的OpenGL版本将访问http://www.opengl.org/wiki/GLAPI,并注意“从版本X开始的核心.YZ“标签在右侧。 –

+1

@gopgop就像Andon写的那样坚持使用OpenGL的“核心”版本。 http://www.opengl.org/sdk/docs/man2/和这个:http://www.opengl.org/wiki/Main_Page可以提供帮助。例如:http://www.opengl。org/wiki/GlUseProgram你有信息,它是自2.0以来的核心 – fen