-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathglfw_opengl3.cppm
More file actions
158 lines (127 loc) · 4.88 KB
/
glfw_opengl3.cppm
File metadata and controls
158 lines (127 loc) · 4.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
export module imgui.backend.glfw_opengl3;
import imgui.core;
export import imgui.backend; // shared types (GlConfig/Error/FbSize) are part of the backend surface
import imgui.backend.platform.glfw;
import imgui.backend.renderer.opengl3;
// Concrete backend: assembles the GLFW platform piece and the OpenGL3 renderer
// piece into a single Backend type that satisfies BackendApi. Consumer code is
// identical across backends; swapping backend is a different import + alias.
//
// This module imports imgui.core for signatures but does NOT re-export it.
export namespace ImGui::Backend {
struct GlfwOpenGL3 {
using Window = GlfwPlatform::Window;
using Monitor = GlfwPlatform::Monitor;
// Platform-neutral contract names; the Glfw-flavored spellings below
// are kept as aliases for existing consumers.
static bool InitPlatform() {
return GlfwPlatform::InitGlfw();
}
static void TerminatePlatform() {
GlfwPlatform::TerminateGlfw();
}
static bool InitGlfw() {
return InitPlatform();
}
static void TerminateGlfw() {
TerminatePlatform();
}
static const char* VersionString() {
return GlfwPlatform::VersionString();
}
static Error LastError() {
return GlfwPlatform::LastError();
}
// Cross-platform window creation: applies default hints + GlConfig
// (incl. macOS forward-compat) before creating the window.
static Window* CreateWindow(
int width,
int height,
const char* title,
GlConfig config = RecommendedGlConfig()
) {
GlfwPlatform::DefaultWindowHints();
GlfwPlatform::ApplyGlConfig(config);
return GlfwPlatform::CreateWindow(width, height, title);
}
static void DestroyWindow(Window* window) {
GlfwPlatform::DestroyWindow(window);
}
static void MakeContextCurrent(Window* window) {
GlfwPlatform::MakeContextCurrent(window);
}
static Window* GetCurrentContext() {
return GlfwPlatform::GetCurrentContext();
}
static void SwapInterval(int interval) {
GlfwPlatform::SwapInterval(interval);
}
static FbSize FramebufferSize(Window* window) {
return GlfwPlatform::FramebufferSize(window);
}
static bool WindowShouldClose(Window* window) {
return GlfwPlatform::WindowShouldClose(window);
}
static void SetWindowShouldClose(Window* window, bool value) {
GlfwPlatform::SetWindowShouldClose(window, value);
}
static void PollEvents() {
GlfwPlatform::PollEvents();
}
static void SwapBuffers(Window* window) {
GlfwPlatform::SwapBuffers(window);
}
// Initialize ImGui platform + renderer bindings. glsl is taken from the
// same config used for window creation (default RecommendedGlConfig()).
static bool Init(
Window* window,
GlConfig config = RecommendedGlConfig(),
bool installCallbacks = true
) {
if (!GlfwPlatform::InitForOpenGL(window, installCallbacks)) {
return false;
}
if (!OpenGL3Renderer::Init(config.glsl)) {
GlfwPlatform::Shutdown();
return false;
}
return true;
}
static void NewFrame() {
OpenGL3Renderer::NewFrame();
GlfwPlatform::NewFrame();
}
static void Viewport(int x, int y, int width, int height) {
OpenGL3Renderer::Viewport(x, y, width, height);
}
static void ClearColor(float red, float green, float blue, float alpha) {
OpenGL3Renderer::ClearColor(red, green, blue, alpha);
}
static void ClearColorBuffer() {
OpenGL3Renderer::ClearColorBuffer();
}
static void RenderDrawData(ImDrawData* drawData) {
OpenGL3Renderer::RenderDrawData(drawData);
}
static void ShutdownRenderer() {
OpenGL3Renderer::Shutdown();
}
static void ShutdownPlatform() {
GlfwPlatform::Shutdown();
}
static void Shutdown() {
ShutdownRenderer();
ShutdownPlatform();
}
static void InstallCallbacks(Window* window) {
GlfwPlatform::InstallCallbacks(window);
}
static void RestoreCallbacks(Window* window) {
GlfwPlatform::RestoreCallbacks(window);
}
static void SetCallbacksChainForAllWindows(bool chainForAllWindows) {
GlfwPlatform::SetCallbacksChainForAllWindows(chainForAllWindows);
}
};
static_assert(BackendApi<GlfwOpenGL3>, "GlfwOpenGL3 must satisfy the backend contract");
}