【问题标题】:Are OpenGL binary program formats standardized?OpenGL 二进制程序格式是否标准化?
【发布时间】:2017-04-03 23:19:52
【问题描述】:

我一直在搜索 OpenGL 二进制格式以及它们的实际含义/含义。到目前为止,我还没有取得太大的成功。我知道我可以获取如下格式的数量和集合:

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

,其中 values 是大小整数的 std::vector:

::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value);

对于我机器中的驱动程序,它返回一个二进制格式。这只是一个数字,否则对我来说毫无意义。

所以我的问题如下:

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

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

【问题讨论】:

    标签: opengl binary shader


    【解决方案1】:

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

    它们代表唯一的标识符。

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

    它们都是特定于供应商的。

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

    没有。

    (4) 如果有多种格式,你应该如何选择?

    你没有。您无法选择格式。当您调用glGetProgramBinary 时,您将获得由驱动程序决定的特定格式的二进制数据。当您load that program later 时,您必须将特定格式与二进制数据一起传递。

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多