diff --git a/core/build.h b/core/build.h index ba2b4c8c0..14f4cd2dd 100755 --- a/core/build.h +++ b/core/build.h @@ -438,3 +438,7 @@ #define SH4_RAM_CLOCK (100*1000*1000) //[100000000] XTal(13.5) -> PLL (33.3) -> PLL 1:3 (100) , also suplied to HOLLY chip #define G2_BUS_CLOCK (25*1000*1000) //[25000000] from Holly, from SH4_RAM_CLOCK w/ 2 2:1 plls +#if defined(GLES) && !defined(GLES3) +// Only use GL ES 2.0 API functions +#define GLES2 +#endif diff --git a/core/rend/gles/gl32funcs.c b/core/rend/gles/gl32funcs.c index de06ae4ad..05e54c41e 100644 --- a/core/rend/gles/gl32funcs.c +++ b/core/rend/gles/gl32funcs.c @@ -2,10 +2,11 @@ #include #include #include "gl32funcs.h" +#include "build.h" void load_gles_symbols() { -#ifdef _ANDROID +#ifdef GLES3 for (int i = 0; rglgen_symbol_map[i].sym != NULL; i++) *(void **)rglgen_symbol_map[i].ptr = eglGetProcAddress(rglgen_symbol_map[i].sym); #endif diff --git a/core/rend/gles/gldraw.cpp b/core/rend/gles/gldraw.cpp index b4381170d..f25369414 100644 --- a/core/rend/gles/gldraw.cpp +++ b/core/rend/gles/gldraw.cpp @@ -948,9 +948,10 @@ void SetMVS_Mode(ModifierVolumeMode mv_mode, ISP_Modvol ispc) static void SetupMainVBO() { +#ifndef GLES2 if (gl.gl_major >= 3) glBindVertexArray(gl.vbo.vao); - +#endif glBindBuffer(GL_ARRAY_BUFFER, gl.vbo.geometry); glCheck(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gl.vbo.idxs); glCheck(); @@ -970,9 +971,10 @@ static void SetupMainVBO() void SetupModvolVBO() { +#ifndef GLES2 if (gl.gl_major >= 3) glBindVertexArray(gl.vbo.vao); - +#endif glBindBuffer(GL_ARRAY_BUFFER, gl.vbo.modvols); glCheck(); //setup vertex buffers attrib pointers diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index ea67babf0..0f65d02b4 100644 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -564,6 +564,7 @@ GLuint fogTextureId; return false; } #ifdef GLES +// EGL only supports runtime loading with android? TDB load_gles_symbols(); #else egl_makecurrent(); @@ -1202,7 +1203,9 @@ bool gl_create_resources() //create vao //This is really not "proper", vaos are supposed to be defined once //i keep updating the same one to make the es2 code work in 3.1 context +#ifndef GLES2 glGenVertexArrays(1, &gl.vbo.vao); +#endif } //create vbos @@ -2001,8 +2004,10 @@ struct glesrend : Renderer void DrawOSD(bool clear_screen) { +#ifndef GLES2 if (gl.gl_major >= 3) glBindVertexArray(gl.vbo.vao); +#endif glBindBuffer(GL_ARRAY_BUFFER, gl.vbo.geometry); glCheck(); glEnableVertexAttribArray(VERTEX_POS_ARRAY); glVertexAttribPointer(VERTEX_POS_ARRAY, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex,x)); diff --git a/core/rend/gles/gles.h b/core/rend/gles/gles.h index 85f1b90e8..dec2f287d 100755 --- a/core/rend/gles/gles.h +++ b/core/rend/gles/gles.h @@ -17,7 +17,9 @@ #endif #include #include +#ifndef GLES2 #include "gl32funcs.h" +#endif #ifndef GL_NV_draw_path //IMGTEC GLES emulation diff --git a/core/rend/gles/imgui_impl_opengl3.cpp b/core/rend/gles/imgui_impl_opengl3.cpp index 0380a8901..4d2936b10 100644 --- a/core/rend/gles/imgui_impl_opengl3.cpp +++ b/core/rend/gles/imgui_impl_opengl3.cpp @@ -141,6 +141,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data, bool save_backgr if (save_background) { +#ifndef GLES2 if (!gl.is_gles && glReadBuffer != NULL) glReadBuffer(GL_FRONT); @@ -157,6 +158,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data, bool save_backgr // Copy the current framebuffer into it glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, fb_width, fb_height); +#endif } // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill @@ -188,10 +190,12 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data, bool save_backgr glcache.UseProgram(g_ShaderHandle); glUniform1i(g_AttribLocationTex, 0); glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); +#ifndef GLES2 if (gl.gl_major >= 3 && glBindSampler != NULL) glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise. - +#endif GLuint vao_handle = 0; +#ifndef GLES2 if (gl.gl_major >= 3) { // Recreate the VAO every time @@ -199,6 +203,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data, bool save_backgr glGenVertexArrays(1, &vao_handle); glBindVertexArray(vao_handle); } +#endif glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); glEnableVertexAttribArray(g_AttribLocationPosition); glEnableVertexAttribArray(g_AttribLocationUV); @@ -247,8 +252,10 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data, bool save_backgr idx_buffer_offset += pcmd->ElemCount; } } +#ifndef GLES2 if (vao_handle != 0) glDeleteVertexArrays(1, &vao_handle); +#endif } bool ImGui_ImplOpenGL3_CreateFontsTexture() @@ -320,7 +327,7 @@ static bool CheckProgram(GLuint handle, const char* desc) return (GLboolean)status == GL_TRUE; } -bool ImGui_ImplOpenGL3_CreateDeviceObjects() +bool ImGui_ImplOpenGL3_CreateDeviceObjects() { // Parse GLSL version string int glsl_version = 130; diff --git a/shell/android-studio/reicast/src/main/jni/Android.mk b/shell/android-studio/reicast/src/main/jni/Android.mk index 0eb55d90a..3e0b41f8b 100644 --- a/shell/android-studio/reicast/src/main/jni/Android.mk +++ b/shell/android-studio/reicast/src/main/jni/Android.mk @@ -76,19 +76,15 @@ ifdef CHD5_FLAC endif ifdef NAOMI -LOCAL_CFLAGS += -DTARGET_NAOMI=1 -LOCAL_CPPFLAGS += -DTARGET_NAOMI=1 -LOCAL_CXXFLAGS += -DTARGET_NAOMI=1 + LOCAL_CFLAGS += -DTARGET_NAOMI=1 endif -# LOCAL_CFLAGS += -std=c++11 +LOCAL_CFLAGS += -DGLES3 LOCAL_CXXFLAGS += -std=c++11 -fopenmp LOCAL_LDFLAGS += -fopenmp ifeq ($(TARGET_ARCH_ABI),x86) LOCAL_CFLAGS+= -DTARGET_NO_AREC -DTARGET_NO_OPENMP - LOCAL_CXXFLAGS+= -DTARGET_NO_AREC -fpermissive -DTARGET_NO_OPENMP - LOCAL_CPPFLAGS+= -DTARGET_NO_AREC -DTARGET_NO_OPENMP endif LOCAL_CPP_FEATURES := diff --git a/shell/linux/Makefile b/shell/linux/Makefile index c3a32668a..355903c09 100644 --- a/shell/linux/Makefile +++ b/shell/linux/Makefile @@ -171,8 +171,7 @@ else ifneq (,$(findstring rpi,$(platform))) INCS += -I/opt/vc/include/ -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads LIBS += -L/opt/vc/lib/ -lbcm_host -ldl LIBS += -lbrcmEGL -lbrcmGLESv2 - CFLAGS += -D TARGET_VIDEOCORE - CXXFLAGS += -DGLES + CFLAGS += -D TARGET_VIDEOCORE -DGLES USE_OMX := 1 USE_DISPMANX := 1 endif @@ -208,7 +207,7 @@ else ifneq (,$(findstring odroid,$(platform))) ifneq (,$(findstring odroidxu3,$(platform))) MFLAGS += -march=armv7ve -mtune=cortex-a15.cortex-a7 ASFLAGS += -march=armv7ve - + CFLAGS += -DGLES3 # Other ODROIDs else MFLAGS += -march=armv7-a @@ -382,7 +381,7 @@ endif # GLES on x11? ifdef USE_GLES - CXXFLAGS += -DGLES + CFLAGS += -DGLES LIBS += -lEGL -lGLESv2 else ifdef FOR_LINUX LIBS += -ldl -lGL #for desktop gl