4

此问题类似,但适用于 Android:

Android GLES20 支持一个方法 glShaderBinary,它基于这个 gles 文档将加载预编译的着色器二进制文件。但是,我无法找到任何方法来实际预编译任何二进制文件。但是,当我GLES20.glGetIntegerv使用参数 name调用时GLES20.GL_NUM_SHADER_BINARY_FORMATS,它确实表明(至少在我正在测试的设备上)存在一种可用的着色器二进制格式。我只是不知道如何实际使用它。

4

1 回答 1

17

二进制着色器格式是特定于供应商的。对于每个不同的供应商,都有不同的机制将着色器编译为二进制文件。因此,要支持大多数 Android 设备,您需要为特定供应商离线编译着色器,或者在线编译(使用GL_OES_get_program二进制扩展),当然还需要提供 glsl 源作为后备。

以下是一些流行的 GPU 供应商提供的 OpenGL ES 2.0 SDK 列表。它要么包括离线 GLSL 着色器编译器,要么包括有关二进制 GLSL 着色器的文档:

ARM Mali 提供malisc可执行文件,可以在主机上的命令行中编译着色器。

Qualcomm Adreno 实际上允许在运行时使用 GLSL 着色器的二进制文件glGetProgramBinaryOES,但不能离线。至少 Adreno SDK 中的文档是这样说的。

PowerVR SDK 还声明其 GPU 允许在运行时使用glGetProgramBinaryOES.

glGetProgramBinaryOES函数来自GL_OES_get_program_binary扩展。

于 2012-06-13T05:33:32.510 回答