Init
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package impl_glfw_opengl3
|
||||
import "base:runtime"
|
||||
import "core:os"
|
||||
import "core:fmt"
|
||||
import "vendor:glfw"
|
||||
import gl "vendor:OpenGL"
|
||||
import imgui ".."
|
||||
import imgui_glfw "../glfw"
|
||||
import imgui_gl3 "../opengl3"
|
||||
|
||||
main :: proc() {
|
||||
run()
|
||||
}
|
||||
|
||||
glfw_error_cb :: proc "c" (error: i32, desc: cstring) {
|
||||
context = runtime.default_context()
|
||||
fmt.eprintln("[GLFW Error]", error, desc)
|
||||
}
|
||||
|
||||
run :: proc() -> b32 {
|
||||
glfw.SetErrorCallback(glfw_error_cb)
|
||||
glfw.Init() or_return
|
||||
|
||||
glsl_version: cstring = "#version 330"
|
||||
// glsl_version: cstring = "#version 130"
|
||||
glfw.WindowHint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
|
||||
glfw.WindowHint(glfw.CONTEXT_VERSION_MAJOR, 3)
|
||||
glfw.WindowHint(glfw.CONTEXT_VERSION_MINOR, 2)
|
||||
glfw.WindowHint(glfw.OPENGL_FORWARD_COMPAT, true)
|
||||
|
||||
window := glfw.CreateWindow(1280, 720, "Test", nil, nil)
|
||||
if window == nil do return false
|
||||
glfw.MakeContextCurrent(window)
|
||||
glfw.SwapInterval(1)
|
||||
|
||||
gl.load_up_to(3, 3, glfw.gl_set_proc_address)
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user