最近的 Android NDK r9 推出了对 OpenGL ES 3.0 的支持。有一个示例samples/gles3jni
演示了如何从 JNI/native 代码中使用 OpenGL ES 3.0。可以通过两种不同的方式构建示例:
- 与 API 级别 11 及更高版本兼容
- 需要 API 级别 18 或更高版本。
两个版本都包含 OpenGL ES 2.0 后备路径,适用于不支持 OpenGL ES 3.0 的设备。但是,第一种情况下的示例使用LOCAL_LDLIBS
选项静态链接到 OpenGL ES 2 -lGLESv2
。在第二种情况下,它以相同的方式与 GLES 3 静态链接。
初始化是这样的:
const char* versionStr = (const char*)glGetString(GL_VERSION);
if (strstr(versionStr, "OpenGL ES 3.") && gl3stubInit()) {
g_renderer = createES3Renderer();
} else if (strstr(versionStr, "OpenGL ES 2.")) {
g_renderer = createES2Renderer();
}
如何完全省略静态链接并从中动态加载 GLES 2 或 3 .so
?