Android glShaderBinary

Pot*_*tal 4 shader android binaryfiles opengl-es-2.0

此问题类似,但对于Android:

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

Mār*_*iko 16

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

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

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

Qualcomm Adreno实际上允许在运行时使用glGetProgramBinaryOES但不是脱机来获取GLSL着色器的二进制文件.至少如此说Adreno SDK中的文档.

PowerVR SDK还声明其GPU允许在运行时使用时获取GLSL着色器的二进制文件glGetProgramBinaryOES.

glGetProgramBinaryOES函数来自GL_OES_get_program_binary扩展.