Skip to content

Commit aa8bdde

Browse files
alemartSiegeLord
authored andcommitted
Android: link to libGLESv3 when WANT_GLES3=on. Fix compile errors. Fixes #1475
1 parent eac0836 commit aa8bdde

File tree

5 files changed

+58
-7
lines changed

5 files changed

+58
-7
lines changed

CMakeLists.txt

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -662,17 +662,28 @@ if(WANT_OPENGL)
662662
set(ALLEGRO_CFG_OPENGL 1)
663663
set(ALLEGRO_CFG_OPENGLES 1)
664664
set(ALLEGRO_CFG_OPENGLES2 1)
665-
if(WANT_GLES3)
665+
set(ALLEGRO_CFG_OPENGL_PROGRAMMABLE_PIPELINE 1)
666+
set(OPENGL_LIBRARIES ${OPENGLES2_LIBRARIES})
667+
set(OPENGLES_INCLUDE_DIR ${OPENGLES2_INCLUDE_DIR})
668+
set(OPENGL_SUMMARY "- OpenGL: ES 2.0")
669+
670+
if(WANT_GLES3 AND NOT ANDROID)
666671
set(SUPPORT_OPENGLES3 1)
667672
set(ALLEGRO_CFG_OPENGLES3 1)
668673
set(OPENGL_SUMMARY "- OpenGL: ES 3.0")
669-
else(WANT_GLES3)
670-
set(OPENGL_SUMMARY "- OpenGL: ES 2.0")
671-
endif(WANT_GLES3)
672-
set(ALLEGRO_CFG_OPENGL_PROGRAMMABLE_PIPELINE 1)
673-
set(OPENGL_LIBRARIES "${OPENGLES2_LIBRARIES}")
674+
elseif(WANT_GLES3 AND ANDROID)
675+
find_package(OpenGLES3)
676+
if(OPENGLES3_FOUND)
677+
set(SUPPORT_OPENGLES3 1)
678+
set(ALLEGRO_CFG_OPENGLES3 1)
679+
set(OPENGL_LIBRARIES ${OPENGLES3_LIBRARIES})
680+
list(APPEND OPENGLES_INCLUDE_DIR ${OPENGLES3_INCLUDE_DIR})
681+
set(OPENGL_SUMMARY "- OpenGL: ES 3.0")
682+
endif(OPENGLES3_FOUND)
683+
endif()
684+
674685
if(NOT IPHONE)
675-
include_directories(SYSTEM ${OPENGLES2_INCLUDE_DIR})
686+
include_directories(SYSTEM ${OPENGLES_INCLUDE_DIR})
676687
endif()
677688
else(OPENGLES2_FOUND)
678689
if(GL_BUILD_TYPE MATCHES "auto")

cmake/FindOpenGLES3.cmake

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# - Find OpenGLES3
2+
# Find the native OpenGLES3 includes and libraries
3+
# (based on FindOpenGLES2.cmake)
4+
#
5+
# OPENGLES3_INCLUDE_DIR - where to find GLES3/gl3.h, etc.
6+
# OPENGLES3_LIBRARIES - List of libraries when using OpenGLES.
7+
# OPENGLES3_FOUND - True if OpenGLES found.
8+
9+
if(OPENGLES3_INCLUDE_DIR)
10+
# Already in cache, be silent
11+
set(OPENGLES3_FIND_QUIETLY TRUE)
12+
endif(OPENGLES3_INCLUDE_DIR)
13+
14+
find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h)
15+
16+
find_library(OPENGLES3_gl_LIBRARY NAMES GLESv3)
17+
find_library(OPENGLES3_egl_LIBRARY NAMES EGL)
18+
19+
# Handle the QUIETLY and REQUIRED arguments and set OPENGLES3_FOUND
20+
# to TRUE if all listed variables are TRUE.
21+
include(FindPackageHandleStandardArgs)
22+
set(FPHSA_NAME_MISMATCHED TRUE)
23+
find_package_handle_standard_args(OPENGLES3 DEFAULT_MSG
24+
OPENGLES3_INCLUDE_DIR OPENGLES3_gl_LIBRARY OPENGLES3_egl_LIBRARY)
25+
26+
set(OPENGLES3_LIBRARIES ${OPENGLES3_gl_LIBRARY} ${OPENGLES3_egl_LIBRARY})
27+
28+
mark_as_advanced(OPENGLES3_INCLUDE_DIR)
29+
mark_as_advanced(OPENGLES3_gl_LIBRARY)
30+
mark_as_advanced(OPENGLES3_egl_LIBRARY)

include/allegro5/allegro_opengl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@
101101
#include <GLES3/gl3ext.h>
102102

103103
// TODO: should defines from GLES2 be there as well?
104+
// Answer: according to the Khronos OpenGL ES Registry, the extension header
105+
// file of OpenGL ES 3.x is actually <GLES2/gl2ext.h>. Note that GLES 3.x is
106+
// backwards-compatible with GLES2. See https://registry.khronos.org/OpenGL/
104107
// TODO: Also, how does it relate to src/opengl/ogl_helpers.h ?
108+
// Answer: redefinition of a constant
109+
#include <GLES2/gl2ext.h>
105110

106111
#define glRenderbufferStorageMultisampleEXT glRenderbufferStorageMultisample
107112

src/opengl/ogl_fbo.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "allegro5/internal/aintern_pixels.h"
2323

2424
#ifdef ALLEGRO_ANDROID
25+
#include <android/api-level.h>
2526
#include "allegro5/internal/aintern_android.h"
2627
#elif defined ALLEGRO_IPHONE
2728
#include "allegro5/internal/aintern_iphone.h"
@@ -622,12 +623,14 @@ static void use_fbo_for_bitmap(ALLEGRO_DISPLAY *display,
622623
GL_TEXTURE_2D, ogl_bitmap->texture, 0);
623624
}
624625
#if ((!defined ALLEGRO_CFG_OPENGLES || defined ALLEGRO_CFG_OPENGLES3) && !defined ALLEGRO_IPHONE)
626+
#if (!defined ALLEGRO_ANDROID) || (__ANDROID_API__ >= 28) /* Android: glFramebufferTexture2DMultisampleEXT exists in newer libGLESv[23].so */
625627
else {
626628
glFramebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER,
627629
GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ogl_bitmap->texture,
628630
0, al_get_bitmap_samples(bitmap));
629631

630632
}
633+
#endif
631634
#endif
632635
}
633636
else

src/opengl/ogl_helpers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@
4343
IS_ANDROID_AND(al_get_display_flags(dpy) & ALLEGRO_PROGRAMMABLE_PIPELINE)
4444

4545
#if defined ALLEGRO_CFG_OPENGLES2
46+
#ifndef GL_EXT_draw_buffers
4647
#define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0
48+
#endif
4749
#define GL_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING
4850
#define GL_FRAMEBUFFER_COMPLETE_EXT GL_FRAMEBUFFER_COMPLETE
4951
#define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER

0 commit comments

Comments
 (0)