根据 Khronos OpenGL ES Registry ,GLES 3.0 的扩展头实际上是 <GLES2/gl2ext.h>gl3ext.h 应该是空的,并且仅用于旧版兼容性。因此,如果您想包含 GLES 3.0 header ,您应该执行以下操作:

#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的原型(prototype)从GLES 2.0变成了GLES 3.0核心。这是 Android NDK 版本的 glext 头文件中的错误,还是我没有做正确的事情?

最佳答案

根据迈克尔的评论,我发现这已在 API-21 中修复。但是,如果您仍然需要使用 API-18 或 API-19,则有一个变通方法。您可以简单地:

#define __gl2_h_
#include <GLES2/gl2ext.h>

当 gl2ext.h 包含 gl2.h 时,定义的包含保护将导致跳过 gl2.h 的内容。

10-05 21:34