- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
类似于this question但对于 Android:
Android GLES20 支持一个方法glShaderBinary,它基于this gles documentation。将加载预编译的着色器二进制文件。但是,我无法找到任何方法来实际预编译 任何二进制文件。但是,当我使用参数名称 GLES20.GL_NUM_SHADER_BINARY_FORMATS
调用 GLES20.glGetIntegerv
时,它确实表明(至少在我正在测试的设备上)有一个可用的着色器二进制格式。我只是不知道如何实际使用它。
最佳答案
二进制着色器格式是特定于供应商的。对于每个不同的供应商,有不同的机制将着色器编译为二进制文件。因此,为了支持大多数 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 允许在运行时使用 glGetProgramBinaryOES
获取 GLSL 着色器的二进制文件。
glGetProgramBinaryOES
函数来自 GL_OES_get_program_binary扩展名。
关于Android glShaderBinary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11007707/
类似于this question但对于 Android: Android GLES20 支持一个方法glShaderBinary,它基于this gles documentation。将加载预编译的着
设备:三星 Galaxy Note安卓版本:4.0.4 我的应用程序使用 OpenGL 着色器将一些视觉效果应用到视频流。出于安全原因,我需要使用二进制着色器。我正在使用 glSurfaceView
我是一名优秀的程序员,十分优秀!