2013-04-09 73 views
7

我一直在搜索OpenGL二进制格式,他们实际上是什么意思。到目前为止,我还没有取得太大的成功。我知道我可以如下获取的格式数量和集:OpenGL二进制程序格式是否标准化?

::glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, &values[0]); 

,其中值是大小的整数的std ::向量:

::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value); 

对于司机在我的机器这个回报单一的二进制格式。这只是一个数字,否则对我来说毫无意义。

所以我的问题如下:

(1)什么格式号/代码代表什么? (2)是否有标准的ARB二进制格式,还是它们都依赖于供应商? (3)供应商之间是否有共同的格式? (4)如果有多种格式,你应该如何在它们之间进行选择?

我有一种模糊的感觉,为了充分利用这一点,我必须在给定的机器上预编译和缓存着色器。我的意思是它不像DX,它可以将着色器编译器作为构建后事件运行,并将它们打包在一起,并在任何带有D3D的(Windows)机器上使用它们。

回答

11

(1)格式数字/代码代表什么?

它们表示唯一标识符。

(2)是否存在标准的ARB二进制格式,还是它们都依赖于供应商?

它们都是供应商特定的。

(3)供应商之间是否有共同的格式?

(4)如果有多种格式,你是如何认为他们之间做出选择?

你不知道。你没有选择格式。当您拨打glGetProgramBinary时,您将获得由驾驶员决定的特定格式的二进制数据。当您使用load that program later时,您必须将二进制数据传递给特定的格式。

我有一种模糊的感觉,我必须预先编译和缓存给定机器上的着色器,以利用这一点。

是的,这是该功能的目的:允许您缓存着色器编译。但是,如果驱动程序的着色器版本更改为(因此与创建缓存版本时不同),则必须始终确保程序能够正常工作。所以你仍然需要能够从文本格式重建着色器。

+0

好的,谢谢Nicol。 – Robinson 2013-04-09 11:49:48

相关问题