【发布时间】:2015-09-09 07:35:09
【问题描述】:
根据Khronos OpenGL ES Registry,GLES 3.0 的扩展头实际上是<GLES2/gl2ext.h>。 gl3ext.h 应该为空,并且仅提供旧版兼容性。因此,如果您想包含 GLES 3.0 标头,您应该这样做:
#include <GLES3/gl3.h>
#include <GLES2/gl2ext.h>
但是,使用 Android NDK 进行编译时,gl2ext.h 的该版本似乎在内部执行了#include <GLES2/gl2.h>,出现以下错误 *(我正在使用 API-19 进行编译):
C:\android-ndk-r10e\platforms\android-19\arch-arm\usr\include\GLES2\gl2ext.h(6): includes this header:
C:\android-ndk-r10e\platforms\android-19\arch-arm\usr\include\GLES2\gl2.h(572,37): error : conflicting types for 'glShaderSource'
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
^
C:\android-ndk-r10e\platforms\android-19\arch-arm\usr\include\GLES3\gl3.h(905,39): note: previous declaration is here
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
这是因为glShaderSource 的原型从 GLES 2.0 更改为 GLES 3.0 核心。这是 glext 标头的 Android NDK 版本中的错误,还是我没有正确执行某些操作?
【问题讨论】:
-
您可以使用来自更高版本平台的 GLES 标头吗? android-21 中的 gl2.h 标头似乎已更改,如果您在包含 gl2.h 之前包含 gl3.h,则不会包含其原型。
-
@Michael 是的,这在 API-21 中似乎是“固定的”......不幸的是,这是一个可以重新编译的库。我不一定提前知道 API 级别(可能是 19)。
-
嗯,你可以在你的旧头文件中放置相同类型的保护。除非要求您使用“干净”的 NDK 标头集。
-
什么是gl2ext.h,为什么需要它?
标签: android c++ opengl-es android-ndk