如何使用 OpenGL 扩展中的常量
How to use constants from OpenGL Extensions
我想为我的 Android OpenGL ES 2.0 应用程序使用扩展程序 GL_OES_texture_float
。如前所述 here,在 khronos 注册表中,引入了常量 FLOAT
和 HALF_FLOAT_OES
。我可以像使用任何其他常量一样使用这些常量吗?或者在我可以这样做之前我还必须做些什么吗?
基本上是的。当然,您应该首先验证您 运行 所在的设备是否支持该扩展程序,方法是检查它是否包含在 glGetString(GL_EXTENSIONS)
.
返回的字符串中
在那之后,唯一的小挑战是 Android 框架中没有为很多扩展定义 Java 绑定。有 GLES11Ext
, which contains definitions for some old extensions that already existed at the ES 1.1 time. Then there is the much more recent GLES31Ext
,其中包含 ES 3.1 的 Android 扩展包的定义。但两者之间没有任何东西,例如用于 ES 2.0 和 3.0 的通用扩展。
只要你只需要常量就可以使用扩展,这没什么大不了的。您可以在扩展规范中查找该值,并在您自己的代码中定义符号常量。对于需要新入口点的扩展来说,问题更大。然后你几乎必须使用本机代码来访问这些功能。
不幸的是,Android 上的 OpenGL Java 绑定中存在缺失功能的历史记录。例如,ES 3.0 绑定仍然不完整,即使它们最初是在 API 级别 18 中引入的,我们现在已经达到 API 级别 23。部分出于这个原因,您可能需要考虑在 Android.
上为严肃的 OpenGL 应用程序使用本机代码
我想为我的 Android OpenGL ES 2.0 应用程序使用扩展程序 GL_OES_texture_float
。如前所述 here,在 khronos 注册表中,引入了常量 FLOAT
和 HALF_FLOAT_OES
。我可以像使用任何其他常量一样使用这些常量吗?或者在我可以这样做之前我还必须做些什么吗?
基本上是的。当然,您应该首先验证您 运行 所在的设备是否支持该扩展程序,方法是检查它是否包含在 glGetString(GL_EXTENSIONS)
.
在那之后,唯一的小挑战是 Android 框架中没有为很多扩展定义 Java 绑定。有 GLES11Ext
, which contains definitions for some old extensions that already existed at the ES 1.1 time. Then there is the much more recent GLES31Ext
,其中包含 ES 3.1 的 Android 扩展包的定义。但两者之间没有任何东西,例如用于 ES 2.0 和 3.0 的通用扩展。
只要你只需要常量就可以使用扩展,这没什么大不了的。您可以在扩展规范中查找该值,并在您自己的代码中定义符号常量。对于需要新入口点的扩展来说,问题更大。然后你几乎必须使用本机代码来访问这些功能。
不幸的是,Android 上的 OpenGL Java 绑定中存在缺失功能的历史记录。例如,ES 3.0 绑定仍然不完整,即使它们最初是在 API 级别 18 中引入的,我们现在已经达到 API 级别 23。部分出于这个原因,您可能需要考虑在 Android.
上为严肃的 OpenGL 应用程序使用本机代码