Android OpenGL ES版本在编译时
我需要知道在Android NDK(C++)上编译时的OpenGL ES版本。在台式机上,我知道这是Android OpenGL ES版本在编译时,android,c++,opengl-es,android-ndk,Android,C++,Opengl Es,Android Ndk,我需要知道在Android NDK(C++)上编译时的OpenGL ES版本。在台式机上,我知道这是 #ifdef OPENGL_ES==1 或 但在android上,我不知道哪个常数是。OpenGL ES 2.0是在API 8()中引入的。API 18中引入了3.0。但是,使用哪个版本的总账进行编译取决于包含哪个总账表头。要确定所需的头是否存在,必须检查API level.h中的\uuuu ANDROID\u API\uuu宏 #include <android/api-le
#ifdef OPENGL_ES==1
或
但在android上,我不知道哪个常数是。OpenGL ES 2.0是在API 8()中引入的。API 18中引入了3.0。但是,使用哪个版本的总账进行编译取决于包含哪个总账表头。要确定所需的头是否存在,必须检查API level.h中的
\uuuu ANDROID\u API\uuu
宏
#include <android/api-level.h>
#if __ANDROID_API__ >= 18
# include <GLES3/gl3.h>
#elif __ANDROID_API__ >= 8
# include <GLES2/gl2.h>
#else
# include <GLES/gl.h>
#endif
你想达到什么目标?在编译时,你无法知道你运行应用程序的设备将支持哪些版本。OpenGL ES 2.0在不久前成为Android设备上的强制性版本,但我不记得是哪个版本,所以在某一点之后,你可以假设它存在。所有支持2.x的设备也支持1.x。如果您不想进行运行时检测,可以使用Android Market标志指定GLES要求。Grafika的EGL管理类演示了如何选择GLES2或GLES3(如果可用)。(源代码是Java的,但它是直接翻译成本机--)谢谢。但是我会在构建过程中使用cmake,使用它我可以在编译时设置预处理器常量。使用cmake设置这些预处理器宏(我也使用cmake)会很奇怪,因为它们包含在Android NDK中的头文件中。例如,如果您设置了
\uuuuu ANDROID\u API\uuuuu
,它将覆盖您正在构建的NDK的实际版本。我将向编译器添加新常量以检查opengl版本,因为我需要为该应用程序跨平台编译。
#include <android/api-level.h>
#if __ANDROID_API__ >= 18
# include <GLES3/gl3.h>
#elif __ANDROID_API__ >= 8
# include <GLES2/gl2.h>
#else
# include <GLES/gl.h>
#endif
#if defined(GL_ES_VERSION_3_0) && GL_ES_VERSION_3_0
// gles3 version
#elif defined(GL_ES_VERSION_2_0) && GL_ES_VERSION_2_0
// gles2 version
#else
// gles version
#endif