名称
glShaderBinary - 加载预编译的着色器二进制文件
C规范
void glShaderBinary( GLsizei n,
const GLuint *shaders,
GLenum binaryformat,
const void *binary,
GLsizei length);
参数
n
指定着色器中存在的着色器对象句柄的数量。
shaders
指定指向将加载着色器二进制文件的着色器对象控制器数组的指针。
binaryformat
指定着色器二进制格式。
binary
指定指向客户端内存中着色器二进制数据的指针。
length
指定着色器二进制数据的长度(以字节为单位)。
描述
对于支持它们的实现,glShaderBinary加载预编译的着色器二进制文件。着色器包含n个着色器对象句柄的列表。每个句柄都引用一种独特的着色器类型(顶点着色器或片段着色器)。二进制指向客户端内存中预编译的二进制着色器代码,binaryformat表示预编译代码的格式。
根据定义指定二进制格式的扩展规范对二进制图像进行解码。 OpenGL ES没有定义特定的二进制格式,但确实提供了一种机制来获取扩展提供的这种格式的符号常量。可以通过查询GL_NUM_SHADER_BINARY_FORMATS的值来获取支持的着色器二进制格式的数量。支持的特定二进制格式列表可以通过查询GL_SHADER_BINARY_FORMATS的值来获得。
根据着色器中着色器对象的类型,glShaderBinary将单独加载二进制顶点或片段着色器,或加载包含存储在同一二进制文件中的优化顶点和片段着色器对的可执行二进制文件。
如果glShaderBinary失败,则不会恢复为其加载二进制文件的旧对象着色器对象。
注意
着色器二进制支持是可选的,因此必须在使用之前通过使用参数GL_NUM_SHADER_BINARY_FORMATS和GL_SHADER_BINARY_FORMATS调用glGet来查询。 glShaderBinary在不支持任何着色器二进制格式的实现上生成GL_INVALID_OPERATION错误。这样的实现提供了glShaderSource替代方案,用于提供用于编译的OpenGL ES着色语言着色器源。
如果支持着色器二进制格式,则实现可能需要将一组优化的顶点和片段着色器二进制文件一起编译给glLinkProgram。未指定优化可能导致glLinkProgram失败。这种限制(如果存在)将记录在定义二进制格式的扩展规范中。
调用glShaderBinary时,OpenGL会复制着色器二进制数据,因此应用程序可以在函数返回后立即释放其数据副本。
错误
GL_INVALID_ENUM:binaryformat不是GL_SHADER_BINARY_FORMATS中返回的受支持格式。
GL_INVALID_VALUE:着色器中的任何值不是OpenGL生成的值。
GL_INVALID_VALUE:二进制指向的数据格式与binaryformat不匹配。
GL_INVALID_VALUE:n或length为负。
GL_INVALID_OPERATION:着色器中的任何值不是着色器对象,或者着色器中有多个顶点着色器对象句柄或多个片段着色器对象句柄。
相关Gets
glGet 参数GL_NUM_SHADER_BINARY_FORMATS和GL_SHADER_BINARY_FORMATS
另见
glCreateShader,glDeleteShader,glLinkProgram
版权
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glShaderBinary.xml
https://blog.csdn.net/flycatdeng
Copyright © 1991-2006 Silicon Graphics, Inc.本文档的许可是根据SGI Free Software B License.详见http://oss.sgi.com/projects/FreeB/.
![](https://i-blog.csdnimg.cn/blog_migrate/b61b18ac35ef755ca70fdb04fbb7539f.png)