我一直在谷歌上搜索 OpenGL 二进制格式及其实际含义。到目前为止我还没有取得太大的成功。我知道我可以按如下方式获取数量和格式集:
::glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, &values[0]);
,其中 value 是大小为整数的 std::vector:
::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value);
对于我的机器中的驱动程序,这将返回单个二进制格式。这只是一个数字,否则对我来说毫无意义。
所以我的问题如下:
(1) 格式数字/代码代表什么?
(2) 是否有标准的 ARB 二进制格式,或者它们都依赖于供应商吗?
(3) 供应商之间是否有通用的格式?
(4)如果有多种格式,该如何选择?
我有一种模糊的感觉,我必须在给定机器上预编译和缓存着色器才能利用这一点。我的意思是它不像 DX,您可以将着色器编译器作为构建后事件运行并将它们打包在一起并在任何具有 D3D 的 (Windows) 机器上使用它们。
(1) 格式数字/代码代表什么?
它们代表唯一的标识符。
(2) 是否有标准的 ARB 二进制格式,或者它们都依赖于供应商吗?
它们都是特定于供应商的。
(3) 供应商之间是否有通用的格式?
No.
(4)如果有多种格式,该如何选择?
你不知道。您无法选择格式。你打电话时glGetProgramBinary http://www.opengl.org/wiki/GLAPI/glGetProgramBinary,您将获得由驱动程序决定的特定格式的二进制数据。当你稍后加载该程序 http://www.opengl.org/wiki/GLAPI/glProgramBinary,您必须使用二进制数据传递该特定格式。
我有一种模糊的感觉,我必须在给定机器上预编译和缓存着色器才能利用这一点。
是的,这就是该功能的目的:允许您缓存着色器编译。但您必须始终确保您的程序能够在驱动程序的着色器版本changes(因此与创建缓存版本时不同)。因此,您仍然需要能够从文本形式重建着色器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)