summaryrefslogtreecommitdiffstats
path: root/src/gl3_impl.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/gl3_impl.zig')
-rw-r--r--src/gl3_impl.zig35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/gl3_impl.zig b/src/gl3_impl.zig
index b056056..1e6ce23 100644
--- a/src/gl3_impl.zig
+++ b/src/gl3_impl.zig
@@ -29,24 +29,18 @@ pub fn Init() void {
io.*.BackendRendererName = c"imgui_impl_gl3.zig";
if (OpenGLHasDrawWithBaseVertex)
io.*.BackendFlags |= @enumToInt(c.ImGuiBackendFlags_RendererHasVtxOffset);
- // @TODO: Viewports
- // io.*.BackendFlags |= @enumToInt(c.ImGuiBackendFlags_RendererHasViewports);
+ io.*.BackendFlags |= @enumToInt(c.ImGuiBackendFlags_RendererHasViewports);
// @TODO: GLSL versions?
// g_GlslVersionString = g_GlslVersionString_buf[0..glsl_version.len];
// mem.copy(u8, g_GlslVersionString, glsl_version);
- // @FIXME: just for testing:
- var tex: c.GLint = undefined;
- c.glGetIntegerv(c.GL_TEXTURE_BINDING_2D, &tex);
-
- // @TODO: Viewports
- // if (io.*.ConfigFlags & @enumToInt(c.ImGuiConfigFlags_ViewportsEnable) != 0)
- // InitPlatformInterface();
+ if (io.*.ConfigFlags & @enumToInt(c.ImGuiConfigFlags_ViewportsEnable) != 0)
+ InitPlatformInterface();
}
pub fn Shutdown() void {
- // ImGui_ImplOpenGL3_ShutdownPlatformInterface();
+ ShutdownPlatformInterface();
DestroyDeviceObjects();
}
@@ -447,3 +441,24 @@ fn SetupRenderState(draw_data: *c.ImDrawData, fb_width: i32, fb_height: i32, ver
c.glVertexAttribPointer(@intCast(c.GLuint, g_AttribLocationVtxUV), 2, c.GL_FLOAT, c.GL_FALSE, @sizeOf(c.ImDrawVert), @intToPtr(?*c.GLvoid, @byteOffsetOf(c.ImDrawVert, "uv")));
c.glVertexAttribPointer(@intCast(c.GLuint, g_AttribLocationVtxColor), 4, c.GL_UNSIGNED_BYTE, c.GL_TRUE, @sizeOf(c.ImDrawVert), @intToPtr(?*c.GLvoid, @byteOffsetOf(c.ImDrawVert, "col")));
}
+
+// Platform Interface (Viewport Feature)
+// -------------------------------------
+
+fn InitPlatformInterface() void {
+ const platform_io = c.igGetPlatformIO();
+ platform_io.*.Renderer_RenderWindow = Platform_RenderWindow;
+}
+
+fn ShutdownPlatformInterface() void {
+ c.igDestroyPlatformWindows();
+}
+
+extern fn Platform_RenderWindow(viewport_: ?*c.ImGuiViewport, cookie: ?*c_void) void {
+ const viewport = viewport_ orelse unreachable;
+ if (viewport.*.Flags & @enumToInt(c.ImGuiViewportFlags_NoRendererClear) != 0) {
+ c.glClearColor(0.0, 0.0, 0.0, 0.0);
+ c.glClear(c.GL_COLOR_BUFFER_BIT);
+ }
+ RenderDrawData(viewport.*.DrawData);
+}