1
- // dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline
1
+ // dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline
2
2
// - Desktop GL: 2.x 3.x 4.x
3
3
// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
4
- // This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..)
4
+ // This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..)
5
5
6
6
// Implemented features:
7
7
// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
8
8
// [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'.
9
9
// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
10
10
11
- // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
12
- // If you are new to dear imgui , read examples/README.txt and read the documentation at the top of imgui.cpp.
13
- // https://github.com/ocornut/imgui
11
+ // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
12
+ // If you are new to Dear ImGui , read documentation from the docs/ folder + read the top of imgui.cpp.
13
+ // Read online: https://github.com/ocornut/imgui/tree/master/docs
14
14
15
15
// About Desktop OpenGL function loaders:
16
- // Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
16
+ // Modern Desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
17
17
// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad).
18
18
// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own.
19
19
23
23
// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp.
24
24
25
25
#pragma once
26
+ #include "imgui.h" // IMGUI_IMPL_API
26
27
27
28
// Backend API
28
29
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init (const char * glsl_version = NULL );
@@ -36,33 +37,52 @@ IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture();
36
37
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects ();
37
38
IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects ();
38
39
39
- // Specific OpenGL versions
40
+ // Specific OpenGL ES versions
40
41
//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten
41
42
//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android
42
43
43
- // Desktop OpenGL: attempt to detect default GL loader based on available header files.
44
+ // Attempt to auto- detect the default Desktop GL loader based on available header files.
44
45
// If auto-detection fails or doesn't select the same GL loader file as used by your application,
45
46
// you are likely to get a crash in ImGui_ImplOpenGL3_Init().
46
- // You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
47
- #if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W ) \
47
+ // You can explicitly select a loader by using one of the '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
48
+ #if !defined(IMGUI_IMPL_OPENGL_ES2 ) \
49
+ && !defined(IMGUI_IMPL_OPENGL_ES3 ) \
50
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W ) \
48
51
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW ) \
49
52
&& !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD ) \
50
- && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING ) \
53
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD2 ) \
54
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 ) \
55
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3 ) \
51
56
&& !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM )
52
- #if defined(__has_include )
53
- #if __has_include (< GL /glew .h > )
54
- #define IMGUI_IMPL_OPENGL_LOADER_GLEW
55
- #elif __has_include (< glad /glad .h > )
56
- #define IMGUI_IMPL_OPENGL_LOADER_GLAD
57
- #elif __has_include (< GL /gl3w .h > )
58
- #define IMGUI_IMPL_OPENGL_LOADER_GL3W
59
- #elif __has_include (< glbinding /gl /gl .h > )
60
- #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING
61
- #else
62
- #error "Cannot detect OpenGL loader!"
63
- #endif
64
- #else
65
- #define IMGUI_IMPL_OPENGL_LOADER_GL3W // Default to GL3W
66
- #endif
57
+
58
+ // Try to detect GLES on matching platforms
59
+ #if defined(__APPLE__ )
60
+ #include "TargetConditionals.h"
67
61
#endif
62
+ #if (defined(__APPLE__ ) && (TARGET_OS_IOS || TARGET_OS_TV )) || (defined(__ANDROID__ ))
63
+ #define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es"
64
+ #elif defined(__EMSCRIPTEN__ )
65
+ #define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100"
68
66
67
+ // Otherwise try to detect supported Desktop OpenGL loaders..
68
+ #elif defined(__has_include )
69
+ #if __has_include (< GL /glew .h > )
70
+ #define IMGUI_IMPL_OPENGL_LOADER_GLEW
71
+ #elif __has_include (< glad /glad .h > )
72
+ #define IMGUI_IMPL_OPENGL_LOADER_GLAD
73
+ #elif __has_include (< glad /gl .h > )
74
+ #define IMGUI_IMPL_OPENGL_LOADER_GLAD2
75
+ #elif __has_include (< GL /gl3w .h > )
76
+ #define IMGUI_IMPL_OPENGL_LOADER_GL3W
77
+ #elif __has_include (< glbinding /glbinding .h > )
78
+ #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
79
+ #elif __has_include (< glbinding /Binding .h > )
80
+ #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
81
+ #else
82
+ #error "Cannot detect OpenGL loader!"
83
+ #endif
84
+ #else
85
+ #define IMGUI_IMPL_OPENGL_LOADER_GL3W // Default to GL3W embedded in our repository
86
+ #endif
87
+
88
+ #endif
0 commit comments