2014-12-14 2 views
2

Мне нужно знать версию OpenGL ES во время компиляции на Android NDK (C++). На рабочих столах я знаю, что этоOpenGL ES версия во время компиляции

#ifdef OPENGL_ES==1 

или

#ifdef OPENGL_ES==2 

но андроида я не знаю, какая константа.

+1

Что вы пытаетесь достичь? Во время компиляции вы не можете знать, какие версии будут поддерживаться на устройствах, на которых будет запущено ваше приложение. –

+0

OpenGL ES 2.0 стал обязательным на устройствах Android некоторое время назад, но я не помню, какой выпуск, поэтому после определенного момента вы можете просто предположить, что он существует. Все устройства, поддерживающие GLES 2.x, также поддерживают 1.x. Требования GLES могут быть указаны флажками Android Market, если вы не хотите выполнять обнаружение во время выполнения. Классы управления EGL Grafika демонстрируют, как выбрать GLES2 или GLES3, если они доступны. (Источники находятся на Java, но это прямой перевод на родной язык - https://github.com/google/grafika/blob/master/src/com/android/grafika/gles/EglCore.java.) – fadden

ответ

3

OpenGL ES 2.0 был представлен в API 8 (https://developer.android.com/guide/topics/graphics/opengl.html). 3.0 был введен в API 18. Однако какая версия GL, которую вы компилируете, зависит от того, какой заголовок GL вы включаете. Чтобы определить, существует ли требуемый заголовок, вы должны проверить макрос __ANDROID_API__ с api-level.h.

#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 

Если в коде, вы хотите знать, какую версию заголовков Глеса вы включили (и, следовательно, доступные), вы можете проверить ли определены и истинны эти макросы: GL_ES_VERSION_3_0, GL_ES_VERSION_2_0. Например:

#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 
+0

Спасибо за это. Но я буду использовать cmake для процесса сборки и используя его, я могу установить константы препроцессора во время компиляции. –

+0

Было бы странно устанавливать эти макросы препроцессора с помощью CMake (который я также использую), поскольку они содержатся в файлах заголовков внутри Android NDK. Например, если вы установите '__ANDROID_API__', он переопределит фактическую версию NDK, с которой вы строите. – MuertoExcobito

+0

Я добавлю новые константы в компилятор, чтобы проверить, какая версия opengl, потому что мне нужно кросс-платформенное компиляцию для этого приложения. –

Смежные вопросы