Skip to content

Commit ac4262a

Browse files
DonKultocornut
authored andcommitted
Backends: OpenGL3: Support older 2.x series of glbinding as loader for OpenGL3 (ocornut#3061)
This removes the unversioned definition IMGUI_IMPL_OPENGL_LOADER_GLBINDING in favor of two versioned ones to choose explicitly. References: ocornut#2870, 5e2329b
1 parent 4986dba commit ac4262a

File tree

6 files changed

+47
-16
lines changed

6 files changed

+47
-16
lines changed

examples/example_glfw_opengl3/Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,11 @@ CXXFLAGS += -I../libs/gl3w -DIMGUI_IMPL_OPENGL_LOADER_GL3W
4242
# CXXFLAGS += -I../libs/glad/include -DIMGUI_IMPL_OPENGL_LOADER_GLAD
4343

4444
## Using OpenGL loader: glbinding
45-
## (This assumes a system-wide installation)
46-
# CXXFLAGS += -lglbinding -DIMGUI_IMPL_OPENGL_LOADER_GLBINDING
45+
## This assumes a system-wide installation
46+
## of either version 3.0.0 (or newer)
47+
# CXXFLAGS += -lglbinding -DIMGUI_IMPL_OPENGL_LOADER_GLBINDING3
48+
## or the older version 2.x
49+
# CXXFLAGS += -lglbinding -DIMGUI_IMPL_OPENGL_LOADER_GLBINDING2
4750

4851
##---------------------------------------------------------------------
4952
## BUILD FLAGS PER PLATFORM

examples/example_glfw_opengl3/main.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@
1717
#include <GL/glew.h> // Initialize with glewInit()
1818
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
1919
#include <glad/glad.h> // Initialize with gladLoadGL()
20-
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING)
20+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) || defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
2121
#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors.
22+
#if defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
23+
#include <glbinding/Binding.h> // Initialize with glbinding::Binding::initialize()
24+
#else
2225
#include <glbinding/glbinding.h> // Initialize with glbinding::initialize()
26+
#endif
2327
#include <glbinding/gl/gl.h>
2428
using namespace gl;
2529
#else
@@ -79,7 +83,10 @@ int main(int, char**)
7983
bool err = glewInit() != GLEW_OK;
8084
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
8185
bool err = gladLoadGL() == 0;
82-
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING)
86+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
87+
bool err = false;
88+
glbinding::Binding::initialize();
89+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
8390
bool err = false;
8491
glbinding::initialize([](const char* name) { return (glbinding::ProcAddress)glfwGetProcAddress(name); });
8592
#else

examples/example_sdl_opengl3/Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,11 @@ CXXFLAGS += -I../libs/gl3w -DIMGUI_IMPL_OPENGL_LOADER_GL3W
4242
# CXXFLAGS += -I../libs/glad/include -DIMGUI_IMPL_OPENGL_LOADER_GLAD
4343

4444
## Using OpenGL loader: glbinding
45-
## (This assumes a system-wide installation)
46-
# CXXFLAGS += -lglbinding -DIMGUI_IMPL_OPENGL_LOADER_GLBINDING
45+
## This assumes a system-wide installation
46+
## of either version 3.0.0 (or newer)
47+
# CXXFLAGS += -lglbinding -DIMGUI_IMPL_OPENGL_LOADER_GLBINDING3
48+
## or the older version 2.x
49+
# CXXFLAGS += -lglbinding -DIMGUI_IMPL_OPENGL_LOADER_GLBINDING2
4750

4851
##---------------------------------------------------------------------
4952
## BUILD FLAGS PER PLATFORM

examples/example_sdl_opengl3/main.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@
1919
#include <GL/glew.h> // Initialize with glewInit()
2020
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
2121
#include <glad/glad.h> // Initialize with gladLoadGL()
22-
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING)
22+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) || defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
23+
#if defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
24+
#include <glbinding/Binding.h> // Initialize with glbinding::Binding::initialize()
25+
#else
2326
#include <glbinding/glbinding.h> // Initialize with glbinding::initialize()
27+
#endif
2428
#include <glbinding/gl/gl.h>
2529
using namespace gl;
2630
#else
@@ -73,7 +77,10 @@ int main(int, char**)
7377
bool err = glewInit() != GLEW_OK;
7478
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
7579
bool err = gladLoadGL() == 0;
76-
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING)
80+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
81+
bool err = false;
82+
glbinding::Binding::initialize();
83+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
7784
bool err = false;
7885
glbinding::initialize([](const char* name) { return (glbinding::ProcAddress)SDL_GL_GetProcAddress(name); });
7986
#else

examples/imgui_impl_opengl3.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,16 @@
8686
#undef IMGUI_IMPL_OPENGL_LOADER_GL3W
8787
#undef IMGUI_IMPL_OPENGL_LOADER_GLEW
8888
#undef IMGUI_IMPL_OPENGL_LOADER_GLAD
89-
#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING
89+
#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
90+
#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
9091
#undef IMGUI_IMPL_OPENGL_LOADER_CUSTOM
9192
#elif defined(__EMSCRIPTEN__)
9293
#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100"
9394
#undef IMGUI_IMPL_OPENGL_LOADER_GL3W
9495
#undef IMGUI_IMPL_OPENGL_LOADER_GLEW
9596
#undef IMGUI_IMPL_OPENGL_LOADER_GLAD
96-
#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING
97+
#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
98+
#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
9799
#undef IMGUI_IMPL_OPENGL_LOADER_CUSTOM
98100
#endif
99101
#endif
@@ -118,9 +120,13 @@
118120
#include <GL/glew.h> // Needs to be initialized with glewInit() in user's code
119121
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
120122
#include <glad/glad.h> // Needs to be initialized with gladLoadGL() in user's code
121-
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING)
123+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) || defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
122124
#include <glbinding/gl/gl.h> // Initialize with glbinding::initialize()
125+
#if defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
126+
#include <glbinding/Binding.h>
127+
#else
123128
#include <glbinding/glbinding.h>
129+
#endif
124130
using namespace gl;
125131
#else
126132
#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM
@@ -193,8 +199,10 @@ bool ImGui_ImplOpenGL3_Init(const char* glsl_version)
193199
gl_loader = "GLEW";
194200
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
195201
gl_loader = "GLAD";
196-
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING)
197-
gl_loader = "glbinding";
202+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
203+
gl_loader = "glbinding2";
204+
#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
205+
gl_loader = "glbinding3";
198206
#else // IMGUI_IMPL_OPENGL_LOADER_CUSTOM
199207
gl_loader = "Custom";
200208
#endif

examples/imgui_impl_opengl3.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects();
4646
#if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) \
4747
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) \
4848
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) \
49-
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING) \
49+
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) \
50+
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) \
5051
&& !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
5152
#if defined(__has_include)
5253
#if __has_include(<GL/glew.h>)
@@ -55,8 +56,10 @@ IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects();
5556
#define IMGUI_IMPL_OPENGL_LOADER_GLAD
5657
#elif __has_include(<GL/gl3w.h>)
5758
#define IMGUI_IMPL_OPENGL_LOADER_GL3W
58-
#elif __has_include(<glbinding/gl/gl.h>)
59-
#define IMGUI_IMPL_OPENGL_LOADER_GLBINDING
59+
#elif __has_include(<glbinding/glbinding.h>)
60+
#define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
61+
#elif __has_include(<glbinding/Binding.h>)
62+
#define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
6063
#else
6164
#error "Cannot detect OpenGL loader!"
6265
#endif

0 commit comments

Comments
 (0)