diff --git a/include/render/GL.h b/include/render/GL.h index cd5ece2..0bb6414 100644 --- a/include/render/GL.h +++ b/include/render/GL.h @@ -1,8 +1,62 @@ #pragma once -#ifdef __ANDROID__ -#include +#if !defined(TD_IMPL_OPENGL_ES2) \ + && !defined(TD_IMPL_OPENGL_ES3) \ + && !defined(TD_IMPL_OPENGL_LOADER_GL3W) \ + && !defined(TD_IMPL_OPENGL_LOADER_GLEW) \ + && !defined(TD_IMPL_OPENGL_LOADER_GLAD) \ + && !defined(TD_IMPL_OPENGL_LOADER_GLBINDING2) \ + && !defined(TD_IMPL_OPENGL_LOADER_GLBINDING3) \ + && !defined(TD_IMPL_OPENGL_LOADER_CUSTOM) \ + && !defined(__ANDROID__) + +#if defined(__has_include) + +#if __has_include() + #define TD_IMPL_OPENGL_LOADER_GLEW +#elif __has_include() + #define TD_IMPL_OPENGL_LOADER_GLAD +#elif __has_include() + #define TD_IMPL_OPENGL_LOADER_GL3W +#elif __has_include() + #define TD_IMPL_OPENGL_LOADER_GLBINDING3 +#elif __has_include() + #define TD_IMPL_OPENGL_LOADER_GLBINDING2 #else -#include "glbinding/gl/gl.h" -using namespace gl; + #error "Cannot detect OpenGL loader!" +#endif + +#else + #error "Cannot detect loader with include detection !" +#endif +#endif + + + +// Include correct files + +#if defined(__ANDROID__) + #include +#elif defined(TD_IMPL_OPENGL_LOADER_GL3W) + #include // Needs to be initialized with gl3wInit() in user's code +#elif defined(TD_IMPL_OPENGL_LOADER_GLEW) + #include // Needs to be initialized with glewInit() in user's code. +#elif defined(TD_IMPL_OPENGL_LOADER_GLAD) + #include // Needs to be initialized with gladLoadGL() in user's code. +#elif defined(TD_IMPL_OPENGL_LOADER_GLBINDING2) + #ifndef GLFW_INCLUDE_NONE + #define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. + #endif + #include // Needs to be initialized with glbinding::Binding::initialize() in user's code. + #include + using namespace gl; +#elif defined(TD_IMPL_OPENGL_LOADER_GLBINDING3) + #ifndef GLFW_INCLUDE_NONE + #define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. + #endif + #include // Needs to be initialized with glbinding::initialize() in user's code. + #include + using namespace gl; +#else + #include TD_IMPL_OPENGL_LOADER_CUSTOM #endif \ No newline at end of file diff --git a/include/render/gui/imgui/imconfig.h b/include/render/gui/imgui/imconfig.h index dcce46c..a3a583a 100755 --- a/include/render/gui/imgui/imconfig.h +++ b/include/render/gui/imgui/imconfig.h @@ -107,8 +107,20 @@ namespace ImGui } */ -#ifdef __ANDROID__ -#define IMGUI_IMPL_OPENGL_ES3 +#include "render/GL.h" + +#if defined(__ANDROID__) +#define IMGUI_IMPL_OPENGL_LOADER_ES3 +#elif defined(TD_IMPL_OPENGL_LOADER_GL3W) + #define IMGUI_IMPL_OPENGL_LOADER_GL3W +#elif defined(TD_IMPL_OPENGL_LOADER_GLEW) + #define IMGUI_IMPL_OPENGL_LOADER_GLEW +#elif defined(TD_IMPL_OPENGL_LOADER_GLAD) + #define IMGUI_IMPL_OPENGL_LOADER_GLAD +#elif defined(TD_IMPL_OPENGL_LOADER_GLBINDING2) + #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 +#elif defined(TD_IMPL_OPENGL_LOADER_GLBINDING3) + #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3 #else -#define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 + #define IMGUI_IMPL_OPENGL_LOADER_CUSTOM #endif \ No newline at end of file diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index d29e089..bbdb4ea 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -5,9 +5,6 @@ * Author: simon */ -#ifndef ANDROID -#include -#endif #include "render/Renderer.h" #include "render/GL.h" #include @@ -43,8 +40,16 @@ void Renderer::InitShaders() { } bool Renderer::Init() { -#ifndef ANDROID - glbinding::Binding::initialize(); +#if __has_include() + glbinding::initialize(); +#elif __has_include() + glewInit(); +#elif __has_include() + gladLoadGL(); +#elif __has_include() + gl3wInit(); +#elif __has_include() + glbinding::Binding::initialize(); #endif glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); diff --git a/xmake.lua b/xmake.lua index ae7e205..e7aa116 100644 --- a/xmake.lua +++ b/xmake.lua @@ -1,6 +1,12 @@ add_rules("mode.debug", "mode.release") ---add_requires("SDL2", "glfw", "zlib", "glm") +if is_os("linux") then + GL_LOADER = "glad" + add_defines("TD_IMPL_OPENGL_LOADER_GLAD"); + add_requires("libsdl >= 2", "zlib", GL_LOADER) +else + add_defines("TD_IMPL_OPENGL_LOADER_GLBINDING2"); +end target("TowerDefense") set_kind("binary") @@ -8,15 +14,14 @@ target("TowerDefense") add_files("src/*.cpp", "src/*/*.cpp", "src/*/*/*.cpp", "src/*/*/*/*.cpp") add_cxflags("-pthread") + add_links("pthread") + set_languages("c++17") - - add_links("glbinding", "z", "SDL2") - - if is_os("linux") then - add_links("GL", "pthread") - end + if is_os("windows") then - add_links("opengl32", "ws2_32", "mingw32", "gdi32", "imm32") + add_links("opengl32", "ws2_32", "mingw32", "gdi32", "imm32", "z", "SDL2", "glbinding") + else + add_packages("zlib", "libsdl", GL_LOADER, "opengl") end if is_mode("release") then