【问题标题】:GLES 3.0 including gl2ext.hGLES 3.0 包括 gl2ext.h
【发布时间】: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 &lt;GLES2/gl2.h&gt;,出现以下错误 *(我正在使用 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


【解决方案1】:

根据 Michael 的 cmets,我发现这已在 API-21 中得到修复。但是,如果您仍需要使用 API-18 或 API-19,则有一种变通方法。你可以简单地:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2022-08-28
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多