allow custom opengl loader

This commit is contained in:
2022-07-14 18:04:13 +02:00
parent 85eb9bbc32
commit 66376eaeda
4 changed files with 96 additions and 20 deletions

View File

@@ -1,8 +1,62 @@
#pragma once #pragma once
#ifdef __ANDROID__ #if !defined(TD_IMPL_OPENGL_ES2) \
#include <GLES3/gl3.h> && !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(<GL/glew.h>)
#define TD_IMPL_OPENGL_LOADER_GLEW
#elif __has_include(<glad/glad.h>)
#define TD_IMPL_OPENGL_LOADER_GLAD
#elif __has_include(<GL/gl3w.h>)
#define TD_IMPL_OPENGL_LOADER_GL3W
#elif __has_include(<glbinding/glbinding.h>)
#define TD_IMPL_OPENGL_LOADER_GLBINDING3
#elif __has_include(<glbinding/Binding.h>)
#define TD_IMPL_OPENGL_LOADER_GLBINDING2
#else #else
#include "glbinding/gl/gl.h" #error "Cannot detect OpenGL loader!"
using namespace gl; #endif
#else
#error "Cannot detect loader with include detection !"
#endif
#endif
// Include correct files
#if defined(__ANDROID__)
#include <GLES3/gl3.h>
#elif defined(TD_IMPL_OPENGL_LOADER_GL3W)
#include <GL/gl3w.h> // Needs to be initialized with gl3wInit() in user's code
#elif defined(TD_IMPL_OPENGL_LOADER_GLEW)
#include <GL/glew.h> // Needs to be initialized with glewInit() in user's code.
#elif defined(TD_IMPL_OPENGL_LOADER_GLAD)
#include <glad/glad.h> // 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 <glbinding/Binding.h> // Needs to be initialized with glbinding::Binding::initialize() in user's code.
#include <glbinding/gl/gl.h>
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 <glbinding/glbinding.h>// Needs to be initialized with glbinding::initialize() in user's code.
#include <glbinding/gl/gl.h>
using namespace gl;
#else
#include TD_IMPL_OPENGL_LOADER_CUSTOM
#endif #endif

View File

@@ -107,8 +107,20 @@ namespace ImGui
} }
*/ */
#ifdef __ANDROID__ #include "render/GL.h"
#define IMGUI_IMPL_OPENGL_ES3
#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 #else
#define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 #define IMGUI_IMPL_OPENGL_LOADER_CUSTOM
#endif #endif

View File

@@ -5,9 +5,6 @@
* Author: simon * Author: simon
*/ */
#ifndef ANDROID
#include <glbinding/Binding.h>
#endif
#include "render/Renderer.h" #include "render/Renderer.h"
#include "render/GL.h" #include "render/GL.h"
#include <stdio.h> #include <stdio.h>
@@ -43,7 +40,15 @@ void Renderer::InitShaders() {
} }
bool Renderer::Init() { bool Renderer::Init() {
#ifndef ANDROID #if __has_include(<glbinding/glbinding.h>)
glbinding::initialize();
#elif __has_include(<GL/glew.h>)
glewInit();
#elif __has_include(<glad/glad.h>)
gladLoadGL();
#elif __has_include(<GL/gl3w.h>)
gl3wInit();
#elif __has_include(<glbinding/Binding.h>)
glbinding::Binding::initialize(); glbinding::Binding::initialize();
#endif #endif
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);

View File

@@ -1,6 +1,12 @@
add_rules("mode.debug", "mode.release") 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") target("TowerDefense")
set_kind("binary") set_kind("binary")
@@ -8,15 +14,14 @@ target("TowerDefense")
add_files("src/*.cpp", "src/*/*.cpp", "src/*/*/*.cpp", "src/*/*/*/*.cpp") add_files("src/*.cpp", "src/*/*.cpp", "src/*/*/*.cpp", "src/*/*/*/*.cpp")
add_cxflags("-pthread") add_cxflags("-pthread")
add_links("pthread")
set_languages("c++17") set_languages("c++17")
add_links("glbinding", "z", "SDL2")
if is_os("linux") then
add_links("GL", "pthread")
end
if is_os("windows") then 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 end
if is_mode("release") then if is_mode("release") then