Merge pull request #14 from rcmaniac25/GLES31
Futureproof: EGL 1.5 support, OpenGL ES 3.1 support
This commit is contained in:
commit
3ae17e42da
@ -6,7 +6,7 @@
|
|||||||
# $ source /absolute/path/to/the/bbndk/bbndk-env.sh
|
# $ source /absolute/path/to/the/bbndk/bbndk-env.sh
|
||||||
# $ mkdir build
|
# $ mkdir build
|
||||||
# $ cd build
|
# $ cd build
|
||||||
# $ cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES2=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
# $ cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
||||||
# $ make -j8
|
# $ make -j8
|
||||||
#
|
#
|
||||||
# Usage Mac:
|
# Usage Mac:
|
||||||
@ -16,6 +16,8 @@
|
|||||||
# > /absolute/path/to/the/bbndk/bbndk-env.bat
|
# > /absolute/path/to/the/bbndk/bbndk-env.bat
|
||||||
# > mkdir build
|
# > mkdir build
|
||||||
# > cd build
|
# > cd build
|
||||||
# > cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES2=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
# > cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
||||||
# > make -j8
|
# > make -j8
|
||||||
#
|
#
|
||||||
|
|
||||||
|
To change which version of OpenGL to use, call glutInitContextVersion(1, 0) for OpenGL ES 1.x, glutInitContextVersion(2, 0) for OpenGL ES 2.0, or glutInitContextVersion(3, 0) for OpenGL ES 3.0.
|
@ -6,7 +6,7 @@
|
|||||||
# $ source /absolute/path/to/the/bbndk/bbndk-env.sh
|
# $ source /absolute/path/to/the/bbndk/bbndk-env.sh
|
||||||
# $ mkdir build
|
# $ mkdir build
|
||||||
# $ cd build
|
# $ cd build
|
||||||
# $ cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES2=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
# $ cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
||||||
# $ make -j8
|
# $ make -j8
|
||||||
#
|
#
|
||||||
# Usage Mac:
|
# Usage Mac:
|
||||||
@ -16,7 +16,7 @@
|
|||||||
# > /absolute/path/to/the/bbndk/bbndk-env.bat
|
# > /absolute/path/to/the/bbndk/bbndk-env.bat
|
||||||
# > mkdir build
|
# > mkdir build
|
||||||
# > cd build
|
# > cd build
|
||||||
# > cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES2=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
# > cmake .. -DCMAKE_TOOLCHAIN_FILE="../blackberry.toolchain.cmake" -DBLACKBERRY_ARCHITECTURE=arm -DFREEGLUT_GLES=ON -DFREEGLUT_BUILD_DEMOS=NO -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles"
|
||||||
# > make -j8
|
# > make -j8
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -34,7 +34,12 @@ set( CMAKE_SYSTEM_VERSION 1 )
|
|||||||
|
|
||||||
# Check for PlayBook
|
# Check for PlayBook
|
||||||
if( EXISTS "${BLACKBERRY_TARGET_ROOT}/x86/lib/gcc/4.4.2" )
|
if( EXISTS "${BLACKBERRY_TARGET_ROOT}/x86/lib/gcc/4.4.2" )
|
||||||
set( PLAYBOOK True )
|
set( PLAYBOOK True )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check for for GCC 4.8.2
|
||||||
|
if( EXISTS "${BLACKBERRY_TARGET_ROOT}/x86/lib/gcc/4.8.2" )
|
||||||
|
set( BB_GCC_482 True )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# STL version: by default gnustl_static will be used
|
# STL version: by default gnustl_static will be used
|
||||||
@ -103,28 +108,52 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Flags and preprocessor definitions
|
# Flags and preprocessor definitions
|
||||||
if( BLACKBERRY_ARCHITECTURE STREQUAL "arm" )
|
set( BB_USING_GCC_482 False )
|
||||||
if( PLAYBOOK )
|
if( PLAYBOOK )
|
||||||
set( BLACKBERRY_CC_FLAGS " -V4.4.2,gcc_ntoarmv7le -D__PLAYBOOK__" )
|
set( BLACKBERRY_COMP_DEF "-D__PLAYBOOK__" )
|
||||||
set( BLACKBERRY_CXX_FLAGS " -V4.4.2,gcc_ntoarmv7le -Y_gpp -D__PLAYBOOK__" )
|
set( BLACKBERRY_COMP_VERSION "4.4.2" )
|
||||||
else()
|
|
||||||
set( BLACKBERRY_CC_FLAGS " -V4.6.3,gcc_ntoarmv7le -D__QNX__" )
|
|
||||||
set( BLACKBERRY_CXX_FLAGS " -V4.6.3,gcc_ntoarmv7le -Y_gpp -D__QNX__" )
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
if( PLAYBOOK )
|
set( BLACKBERRY_COMP_DEF "-D__QNX__" )
|
||||||
set( BLACKBERRY_CC_FLAGS " -V4.4.2,gcc_ntox86 -D__PLAYBOOK__" )
|
if( BB_GCC_482 AND BLACKBERRY_USE_GCC_4_8 )
|
||||||
set( BLACKBERRY_CXX_FLAGS " -V4.4.2,gcc_ntox86 -Y_gpp -D__PLAYBOOK__" )
|
set( BLACKBERRY_COMP_VERSION "4.8.2" )
|
||||||
|
set( BB_USING_GCC_482 True )
|
||||||
else()
|
else()
|
||||||
set( BLACKBERRY_CC_FLAGS " -V4.6.3,gcc_ntox86 -D__QNX__" )
|
set( BLACKBERRY_COMP_VERSION "4.6.3" )
|
||||||
set( BLACKBERRY_CXX_FLAGS " -V4.6.3,gcc_ntox86 -Y_gpp -D__QNX__" )
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
if( BLACKBERRY_ARCHITECTURE STREQUAL "arm" )
|
||||||
|
set( BLACKBERRY_COMP_TARGET "gcc_ntoarmv7le" )
|
||||||
|
else()
|
||||||
|
set( BLACKBERRY_COMP_TARGET "gcc_ntox86" )
|
||||||
|
endif()
|
||||||
|
set( BLACKBERRY_CXX_COMP_LIB "" )
|
||||||
|
if( BLACKBERRY_DINKUM )
|
||||||
|
set( DINKUM 1 )
|
||||||
|
if( BB_USING_GCC_482 )
|
||||||
|
set( BLACKBERRY_COMP_TARGET "${BLACKBERRY_COMP_TARGET}_cpp" )
|
||||||
|
else()
|
||||||
|
set( BLACKBERRY_CXX_COMP_LIB "-Y_cpp" )
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set( DINKUM 0 )
|
||||||
|
if( BB_USING_GCC_482 )
|
||||||
|
set( BLACKBERRY_COMP_TARGET "${BLACKBERRY_COMP_TARGET}_gpp" )
|
||||||
|
else()
|
||||||
|
set( BLACKBERRY_CXX_COMP_LIB "-Y_gpp" )
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set( BLACKBERRY_CC_FLAGS " -V${BLACKBERRY_COMP_VERSION},${BLACKBERRY_COMP_TARGET} ${BLACKBERRY_COMP_DEF}" )
|
||||||
|
set( BLACKBERRY_CXX_FLAGS " -V${BLACKBERRY_COMP_VERSION},${BLACKBERRY_COMP_TARGET} ${BLACKBERRY_CXX_COMP_LIB} ${BLACKBERRY_COMP_DEF}" )
|
||||||
set( BLACKBERRY 1 )
|
set( BLACKBERRY 1 )
|
||||||
|
|
||||||
# NDK flags
|
# NDK flags
|
||||||
set( CMAKE_CXX_FLAGS "${BLACKBERRY_CXX_FLAGS}" )
|
if( DINKUM )
|
||||||
set( CMAKE_C_FLAGS "${BLACKBERRY_CC_FLAGS}" )
|
set( CMAKE_CXX_FLAGS "${BLACKBERRY_CXX_FLAGS} -DBLACKBERRY_DINKUM=1" )
|
||||||
|
set( CMAKE_C_FLAGS "${BLACKBERRY_CC_FLAGS} -DBLACKBERRY_DINKUM=1" )
|
||||||
|
else()
|
||||||
|
set( CMAKE_CXX_FLAGS "${BLACKBERRY_CXX_FLAGS}" )
|
||||||
|
set( CMAKE_C_FLAGS "${BLACKBERRY_CC_FLAGS}" )
|
||||||
|
endif()
|
||||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions" )
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions" )
|
||||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions" )
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions" )
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
|
|||||||
int screenFormat = SCREEN_FORMAT_RGBA8888; //Only SCREEN_FORMAT_RGBA8888 and SCREEN_FORMAT_RGB565 are supported. See fg_window_egl for more info
|
int screenFormat = SCREEN_FORMAT_RGBA8888; //Only SCREEN_FORMAT_RGBA8888 and SCREEN_FORMAT_RGB565 are supported. See fg_window_egl for more info
|
||||||
int configAttri;
|
int configAttri;
|
||||||
#define EGL_QUERY_COMP(att, comp) (eglGetConfigAttrib(fgDisplay.pDisplay.egl.Display, window->Window.pContext.egl.Config, att, &configAttri) == GL_TRUE && (configAttri comp))
|
#define EGL_QUERY_COMP(att, comp) (eglGetConfigAttrib(fgDisplay.pDisplay.egl.Display, window->Window.pContext.egl.Config, att, &configAttri) == GL_TRUE && (configAttri comp))
|
||||||
if(EGL_QUERY_COMP(EGL_ALPHA_SIZE, <= 0) && EGL_QUERY_COMP(EGL_RED_SIZE, <= 5) &&
|
if (EGL_QUERY_COMP(EGL_ALPHA_SIZE, <= 0) && EGL_QUERY_COMP(EGL_RED_SIZE, <= 5) &&
|
||||||
EGL_QUERY_COMP(EGL_GREEN_SIZE, <= 6) && EGL_QUERY_COMP(EGL_BLUE_SIZE, <= 5)) {
|
EGL_QUERY_COMP(EGL_GREEN_SIZE, <= 6) && EGL_QUERY_COMP(EGL_BLUE_SIZE, <= 5)) {
|
||||||
screenFormat = SCREEN_FORMAT_RGB565;
|
screenFormat = SCREEN_FORMAT_RGB565;
|
||||||
}
|
}
|
||||||
@ -69,11 +69,17 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
|
|||||||
|
|
||||||
/* Set window properties */
|
/* Set window properties */
|
||||||
int orientation = atoi(getenv("ORIENTATION"));
|
int orientation = atoi(getenv("ORIENTATION"));
|
||||||
#ifdef GL_ES_VERSION_2_0
|
int screenUsage = SCREEN_USAGE_ROTATION;
|
||||||
int screenUsage = SCREEN_USAGE_OPENGL_ES2 | SCREEN_USAGE_ROTATION;
|
#ifdef SCREEN_USAGE_OPENGL_ES3
|
||||||
#elif GL_VERSION_ES_CM_1_0 || GL_VERSION_ES_CL_1_0 || GL_VERSION_ES_CM_1_1 || GL_VERSION_ES_CL_1_1
|
if (fgState.MajorVersion >= 3) {
|
||||||
int screenUsage = SCREEN_USAGE_OPENGL_ES1 | SCREEN_USAGE_ROTATION;
|
screenUsage |= SCREEN_USAGE_OPENGL_ES3;
|
||||||
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
if (fgState.MajorVersion >= 2) {
|
||||||
|
screenUsage |= SCREEN_USAGE_OPENGL_ES2;
|
||||||
|
} else {
|
||||||
|
screenUsage |= SCREEN_USAGE_OPENGL_ES1;
|
||||||
|
}
|
||||||
#if !defined(__X86__) && !defined(__PLAYBOOK__)
|
#if !defined(__X86__) && !defined(__PLAYBOOK__)
|
||||||
screenUsage |= SCREEN_USAGE_DISPLAY; // Physical device copy directly into physical display
|
screenUsage |= SCREEN_USAGE_DISPLAY; // Physical device copy directly into physical display
|
||||||
#endif
|
#endif
|
||||||
|
@ -39,7 +39,7 @@ void fghPlatformInitializeEGL()
|
|||||||
|
|
||||||
FREEGLUT_INTERNAL_ERROR_EXIT(fgDisplay.pDisplay.egl.Display != EGL_NO_DISPLAY,
|
FREEGLUT_INTERNAL_ERROR_EXIT(fgDisplay.pDisplay.egl.Display != EGL_NO_DISPLAY,
|
||||||
"No display available", "fgPlatformInitialize");
|
"No display available", "fgPlatformInitialize");
|
||||||
if (eglInitialize(fgDisplay.pDisplay.egl.Display, NULL, NULL) != EGL_TRUE)
|
if (eglInitialize(fgDisplay.pDisplay.egl.Display, &fgDisplay.pDisplay.egl.MajorVersion, &fgDisplay.pDisplay.egl.MinorVersion) != EGL_TRUE)
|
||||||
fgError("eglInitialize: error %x\n", eglGetError());
|
fgError("eglInitialize: error %x\n", eglGetError());
|
||||||
|
|
||||||
# ifdef GL_VERSION_1_1 /* or later */
|
# ifdef GL_VERSION_1_1 /* or later */
|
||||||
@ -59,6 +59,8 @@ void fghPlatformCloseDisplayEGL()
|
|||||||
if (fgDisplay.pDisplay.egl.Display != EGL_NO_DISPLAY) {
|
if (fgDisplay.pDisplay.egl.Display != EGL_NO_DISPLAY) {
|
||||||
eglTerminate(fgDisplay.pDisplay.egl.Display);
|
eglTerminate(fgDisplay.pDisplay.egl.Display);
|
||||||
fgDisplay.pDisplay.egl.Display = EGL_NO_DISPLAY;
|
fgDisplay.pDisplay.egl.Display = EGL_NO_DISPLAY;
|
||||||
|
fgDisplay.pDisplay.egl.MajorVersion = 0;
|
||||||
|
fgDisplay.pDisplay.egl.MinorVersion = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@ struct tagSFG_PlatformDisplayEGL
|
|||||||
{
|
{
|
||||||
/* Used to initialize and deinitialize EGL */
|
/* Used to initialize and deinitialize EGL */
|
||||||
EGLDisplay Display;
|
EGLDisplay Display;
|
||||||
|
EGLint MajorVersion;
|
||||||
|
EGLint MinorVersion;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,11 +30,16 @@ int fghChooseConfig(EGLConfig* config) {
|
|||||||
EGLint attributes[32];
|
EGLint attributes[32];
|
||||||
int where = 0;
|
int where = 0;
|
||||||
ATTRIB_VAL(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
|
ATTRIB_VAL(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
|
||||||
|
#ifdef EGL_OPENGL_ES3_BIT
|
||||||
|
if (fgDisplay.pDisplay.egl.MinorVersion >= 5 && fgState.MajorVersion >= 3) {
|
||||||
|
ATTRIB_VAL(EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
if (fgState.MajorVersion >= 2) {
|
if (fgState.MajorVersion >= 2) {
|
||||||
/*
|
/*
|
||||||
* Khronos does not specify a EGL_OPENGL_ES3_BIT outside of the OpenGL extension "EGL_KHR_create_context". There are numerous references on the internet that
|
* Khronos does not specify a EGL_OPENGL_ES3_BIT outside of the OpenGL extension "EGL_KHR_create_context" and EGL 1.5. There are numerous references on the internet
|
||||||
* say to use EGL_OPENGL_ES3_BIT, followed by many saying they can't find it in any headers. In fact, the offical updated specification for EGL does not have
|
* that say to use EGL_OPENGL_ES3_BIT (pre-EGL 1.5), followed by many saying they can't find it in any headers. In fact, the offical updated specification for EGL
|
||||||
* any references to OpenGL ES 3.0. Tests have shown that EGL_OPENGL_ES2_BIT will work with ES 3.0.
|
* does not have any references to OpenGL ES 3.x. Tests have shown that EGL_OPENGL_ES2_BIT will work with ES 3.x.
|
||||||
*/
|
*/
|
||||||
ATTRIB_VAL(EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT);
|
ATTRIB_VAL(EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT);
|
||||||
} else {
|
} else {
|
||||||
@ -87,6 +92,12 @@ EGLContext fghCreateNewContextEGL( SFG_Window* window ) {
|
|||||||
EGLint attributes[32];
|
EGLint attributes[32];
|
||||||
int where = 0;
|
int where = 0;
|
||||||
ATTRIB_VAL(EGL_CONTEXT_CLIENT_VERSION, fgState.MajorVersion);
|
ATTRIB_VAL(EGL_CONTEXT_CLIENT_VERSION, fgState.MajorVersion);
|
||||||
|
#ifdef EGL_CONTEXT_MINOR_VERSION
|
||||||
|
if (fgDisplay.pDisplay.egl.MinorVersion >= 5) {
|
||||||
|
// EGL_CONTEXT_CLIENT_VERSION == EGL_CONTEXT_MAJOR_VERSION
|
||||||
|
ATTRIB_VAL(EGL_CONTEXT_MINOR_VERSION, fgState.MinorVersion);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ATTRIB(EGL_NONE);
|
ATTRIB(EGL_NONE);
|
||||||
|
|
||||||
context = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, attributes);
|
context = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, attributes);
|
||||||
@ -96,8 +107,17 @@ EGLContext fghCreateNewContextEGL( SFG_Window* window ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
eglQueryContext(fgDisplay.pDisplay.egl.Display, context, EGL_CONTEXT_CLIENT_VERSION, &ver);
|
eglQueryContext(fgDisplay.pDisplay.egl.Display, context, EGL_CONTEXT_CLIENT_VERSION, &ver);
|
||||||
if (ver != fgState.MajorVersion)
|
if (ver != fgState.MajorVersion) {
|
||||||
fgError("Wrong GLES major version: %d\n", ver);
|
fgError("Wrong GLES major version: %d\n", ver);
|
||||||
|
}
|
||||||
|
#ifdef EGL_CONTEXT_MINOR_VERSION
|
||||||
|
if (fgDisplay.pDisplay.egl.MinorVersion >= 5) {
|
||||||
|
eglQueryContext(fgDisplay.pDisplay.egl.Display, context, EGL_CONTEXT_MINOR_VERSION, &ver);
|
||||||
|
if (ver != fgState.MinorVersion) {
|
||||||
|
fgError("Wrong GLES minor version: %d\n", ver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user