android - GLES 3.0 包括 gl2ext.h

标签 android c++ opengl-es android-ndk

根据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 核心。这是 glext header 的 Android NDK 版本中的错误,还是我没有正确执行某些操作?

最佳答案

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

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

当 gl2ext.h 包含 gl2.h 时,定义的 include guard 会导致 gl2.h 的内容被跳过。

关于android - GLES 3.0 包括 gl2ext.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31003863/

相关文章:

android - 使用minimal-json库解析JSON文件时出现问题

c++ - 在 C++ 中强制执行 NULL 检查

c++ - 使用 'auto' 部分专用模板的模板参数推导失败

java - 在带有着色器的 opengl es 中围绕自身旋转矩形

java - onClickListener()的设置方式

android - Android 自动调整 TextView 的动态省略号支持

c++ - 在修改序列的同时迭代它。使用 vector 还是列表? C++/标准语言

android - 绘制过多元素时 glDrawArrays() 出现段错误

android - 什么是 JNI 图形或如何使用它?

java.lang.IllegalStateException : Fragment already added 错误