92 lines
2.4 KiB
Odin
92 lines
2.4 KiB
Odin
|
package impl_wini32_opengl3
|
||
|
import "base:runtime"
|
||
|
import "core:os"
|
||
|
import "core:fmt"
|
||
|
import win32 "core:sys/windows"
|
||
|
import gl "vendor:OpenGL"
|
||
|
import imgui ".."
|
||
|
import imgui_win32 "../win32"
|
||
|
import imgui_gl3 "../opengl3"
|
||
|
|
||
|
main :: proc() {
|
||
|
run()
|
||
|
}
|
||
|
|
||
|
win32_hrc: win32.HGLRC
|
||
|
win32_main_window: win32.HDC
|
||
|
win32_width: i32
|
||
|
win32_height: i32
|
||
|
|
||
|
win32_gl_create :: proc(hwnd: win32.HWND, data: win32.HDC) -> b8
|
||
|
{
|
||
|
hdc: win32.HDC = win32.GetDC(hwnd)
|
||
|
pfd: win32.PIXELFORMATDESCRIPTOR = {}
|
||
|
pfd.nSize = size_of(pfd)
|
||
|
pfd.nVersion = 1
|
||
|
pfd.dwFlags = 0 // TODO flags
|
||
|
pfd.iPixelType = 0 // more flags
|
||
|
pfd.cColorBits = 32
|
||
|
|
||
|
pf: i32 = win32.ChoosePixelFormat(hdc, &pfd)
|
||
|
if pf == 0 do return false
|
||
|
if !win32.SetPixelFormat(hdc, pf, &pfd) do return false
|
||
|
win32.ReleaseDC(hwnd, hdc)
|
||
|
data = win32.GetDC(hwnd)
|
||
|
if win32_hrc == 0 do win32_hrc = win32.wglCreateContext(data)
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
run :: proc() -> b32 {
|
||
|
wc: win32.WNDCLASSEXW = {}
|
||
|
|
||
|
imgui.CreateContext(nil)
|
||
|
io := imgui.GetIO()
|
||
|
io.ConfigFlags |= imgui.ConfigFlags.NavEnableKeyboard
|
||
|
io.ConfigFlags |= imgui.ConfigFlags.NavEnableGamepad
|
||
|
imgui.StyleColorsDark(nil)
|
||
|
|
||
|
imgui_glfw.InitForOpenGL(window, true)
|
||
|
imgui_gl3.InitEx(glsl_version)
|
||
|
clear_color: [4]f32 = {0.45, 0.55, 0.60, 1.00}
|
||
|
_cc := clear_color.xyz
|
||
|
show_demo: b8 = true
|
||
|
|
||
|
for !glfw.WindowShouldClose(window) {
|
||
|
glfw.PollEvents()
|
||
|
if glfw.GetWindowAttrib(window, glfw.ICONIFIED) != 0 {
|
||
|
imgui_glfw.Sleep(10)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
imgui_gl3.NewFrame()
|
||
|
imgui_glfw.NewFrame()
|
||
|
imgui.NewFrame()
|
||
|
|
||
|
if imgui.Button("Toggle DearImgui Demo") do show_demo = !show_demo
|
||
|
if show_demo do imgui.ShowDemoWindow(&show_demo)
|
||
|
|
||
|
_cc = clear_color.xyz
|
||
|
imgui.ColorEdit3("clear color", &_cc, .None)
|
||
|
imgui.SliderFloat3("clear color", &_cc, 0, 1)
|
||
|
clear_color.xyz = _cc
|
||
|
imgui.Render()
|
||
|
|
||
|
dw, dh:= glfw.GetFramebufferSize(window)
|
||
|
gl.Viewport(0, 0, dw, dh)
|
||
|
gl.ClearColor(clear_color.x * clear_color.w, clear_color.y * clear_color.w, clear_color.z * clear_color.w, clear_color.w);
|
||
|
gl.Clear(gl.COLOR_BUFFER_BIT);
|
||
|
|
||
|
imgui_gl3.RenderDrawData(imgui.GetDrawData());
|
||
|
glfw.SwapBuffers(window);
|
||
|
|
||
|
}
|
||
|
|
||
|
imgui_gl3.Shutdown()
|
||
|
imgui_glfw.Shutdown()
|
||
|
imgui.DestroyContext(nil)
|
||
|
|
||
|
glfw.DestroyWindow(window)
|
||
|
glfw.Terminate()
|
||
|
return true
|
||
|
}
|