OpenGL二进制程序格式是否标准化? [英] Are OpenGL binary program formats standardized?

查看:26
本文介绍了OpenGL二进制程序格式是否标准化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

,其中值是大小为

的整数的std::向量
::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value);

对于我机器中的驱动程序,这将返回单一的二进制格式。这只是一个数字,否则对我来说就没有什么意义了。

所以我的问题如下:

(1)格式编号/代码表示什么? (2)是否有标准的Arb二进制格式,或者它们都依赖于供应商? (3)供应商之间是否有统一的格式? (4)如果有多种格式,您应该如何选择?

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

推荐答案

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

它们表示唯一标识符。

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

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

(3)供应商之间是否有通用格式?

(4)如果有多种格式,您应该如何在其中进行选择?

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

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

是的,这就是该功能的目的:允许您缓存着色器编译。但是,如果驱动程序的着色器版本更改(因此与创建缓存版本时不同),您必须始终确保程序能够工作。因此,您仍然需要能够从文本表单重新生成着色器。

这篇关于OpenGL二进制程序格式是否标准化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆