diff options
Diffstat (limited to 'src/gl3_impl.zig')
| -rw-r--r-- | src/gl3_impl.zig | 35 |
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); +} |
