101 lines
2.9 KiB
Odin
101 lines
2.9 KiB
Odin
|
package impl_sdl2_opengl3
|
||
|
import os "core:os"
|
||
|
import fmt "core:fmt"
|
||
|
import sdl "vendor:sdl2"
|
||
|
import gl "vendor:OpenGL"
|
||
|
import imgui ".."
|
||
|
import imgui_sdl2 "../sdl2"
|
||
|
import imgui_gl3 "../opengl3"
|
||
|
|
||
|
main :: proc() {
|
||
|
run()
|
||
|
}
|
||
|
|
||
|
run :: proc() -> b32 {
|
||
|
if sdl.Init({.VIDEO, .GAMECONTROLLER, .TIMER}) != 0 {
|
||
|
fmt.eprintln(sdl.GetError())
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
glsl_version: cstring = "#version 330"
|
||
|
sdl.GL_SetAttribute(.CONTEXT_FLAGS, 0)
|
||
|
sdl.GL_SetAttribute(.CONTEXT_PROFILE_MASK, i32(sdl.GLprofile.CORE))
|
||
|
sdl.GL_SetAttribute(.CONTEXT_MAJOR_VERSION, 3)
|
||
|
sdl.GL_SetAttribute(.CONTEXT_MINOR_VERSION, 0)
|
||
|
|
||
|
sdl.GL_SetAttribute(.DOUBLEBUFFER, 1)
|
||
|
sdl.GL_SetAttribute(.DEPTH_SIZE, 24)
|
||
|
sdl.GL_SetAttribute(.STENCIL_SIZE, 8)
|
||
|
|
||
|
window_flags: sdl.WindowFlags = {.OPENGL, .RESIZABLE, .HIDDEN, .ALLOW_HIGHDPI}
|
||
|
window := sdl.CreateWindow("Test", sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, window_flags)
|
||
|
if window == nil {
|
||
|
fmt.eprintln(sdl.GetError())
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
gl_ctx := sdl.GL_CreateContext(window)
|
||
|
if gl_ctx == nil {
|
||
|
fmt.eprintln(sdl.GetError())
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
sdl.GL_MakeCurrent(window, gl_ctx)
|
||
|
gl.load_up_to(3, 3, sdl.gl_set_proc_address)
|
||
|
|
||
|
sdl.GL_SetSwapInterval(1)
|
||
|
sdl.ShowWindow(window)
|
||
|
|
||
|
imgui.CreateContext(nil)
|
||
|
io := imgui.GetIO()
|
||
|
io.ConfigFlags |= imgui.ConfigFlags.NavEnableKeyboard
|
||
|
io.ConfigFlags |= imgui.ConfigFlags.NavEnableGamepad
|
||
|
imgui.StyleColorsDark(nil)
|
||
|
|
||
|
imgui_sdl2.InitForOpenGL(window, gl_ctx)
|
||
|
imgui_gl3.InitEx(glsl_version)
|
||
|
clear_color: [4]f32 = {0.45, 0.55, 0.60, 1.00}
|
||
|
_cc := clear_color.xyz
|
||
|
done: b32 = false
|
||
|
show_demo: b8 = true
|
||
|
|
||
|
for !done {
|
||
|
event: sdl.Event
|
||
|
for sdl.PollEvent(&event) {
|
||
|
imgui_sdl2.ProcessEvent(&event)
|
||
|
if event.type == .QUIT do done = true
|
||
|
if event.type == .WINDOWEVENT && event.window.event == .CLOSE do done = true
|
||
|
}
|
||
|
|
||
|
imgui_gl3.NewFrame()
|
||
|
imgui_sdl2.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()
|
||
|
|
||
|
gl.Viewport(0, 0, i32(io.DisplaySize.x), i32(io.DisplaySize.y))
|
||
|
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());
|
||
|
sdl.GL_SwapWindow(window);
|
||
|
|
||
|
}
|
||
|
|
||
|
imgui_gl3.Shutdown()
|
||
|
imgui_sdl2.Shutdown()
|
||
|
imgui.DestroyContext(nil)
|
||
|
|
||
|
sdl.GL_DeleteContext(gl_ctx)
|
||
|
sdl.DestroyWindow(window)
|
||
|
sdl.Quit()
|
||
|
return true
|
||
|
}
|