Created
September 19, 2019 14:41
-
-
Save jordancluts/bfd6cae3dbebd37d6925c0a3cc1aeacc to your computer and use it in GitHub Desktop.
My MWE hello world using CImGui.jl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using CImGui | |
using CImGui.CSyntax | |
using CImGui.CSyntax.CStatic | |
using CImGui.GLFWBackend | |
using CImGui.OpenGLBackend | |
using CImGui.GLFWBackend.GLFW | |
using CImGui.OpenGLBackend.ModernGL | |
using Printf | |
@static if Sys.isapple() | |
# OpenGL 3.2 + GLSL 150 | |
const glsl_version = 150 | |
GLFW.WindowHint(GLFW.CONTEXT_VERSION_MAJOR, 3) | |
GLFW.WindowHint(GLFW.CONTEXT_VERSION_MINOR, 2) | |
GLFW.WindowHint(GLFW.OPENGL_PROFILE, GLFW.OPENGL_CORE_PROFILE) # 3.2+ only | |
GLFW.WindowHint(GLFW.OPENGL_FORWARD_COMPAT, GL_TRUE) # required on Mac | |
else | |
# OpenGL 3.0 + GLSL 130 | |
const glsl_version = 130 | |
GLFW.WindowHint(GLFW.CONTEXT_VERSION_MAJOR, 3) | |
GLFW.WindowHint(GLFW.CONTEXT_VERSION_MINOR, 0) | |
# GLFW.WindowHint(GLFW.OPENGL_PROFILE, GLFW.OPENGL_CORE_PROFILE) # 3.2+ only | |
# GLFW.WindowHint(GLFW.OPENGL_FORWARD_COMPAT, GL_TRUE) # 3.0+ only | |
end | |
# setup GLFW error callback | |
error_callback(err::GLFW.GLFWError) = @error "GLFW ERROR: code $(err.code) msg: $(err.description)" | |
GLFW.SetErrorCallback(error_callback) | |
# create window | |
window = GLFW.CreateWindow(1280, 720, "Controller") | |
@assert window != C_NULL | |
GLFW.MakeContextCurrent(window) | |
GLFW.SwapInterval(1) # enable vsync | |
# setup Dear ImGui context | |
ctx = CImGui.CreateContext() | |
# setup Dear ImGui style | |
CImGui.StyleColorsDark() | |
# CImGui.StyleColorsClassic() | |
# CImGui.StyleColorsLight() | |
# load Fonts | |
# - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use `CImGui.PushFont/PopFont` to select them. | |
# - `CImGui.AddFontFromFileTTF` will return the `Ptr{ImFont}` so you can store it if you need to select the font among multiple. | |
# - If the file cannot be loaded, the function will return C_NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). | |
# - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling `CImGui.Build()`/`GetTexDataAsXXXX()``, which `ImGui_ImplXXXX_NewFrame` below will call. | |
# - Read 'fonts/README.txt' for more instructions and details. | |
# fonts_dir = joinpath(@__DIR__, "..", "fonts") | |
# fonts = CImGui.GetIO().Fonts | |
# default_font = CImGui.AddFontDefault(fonts) | |
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "Cousine-Regular.ttf"), 15) | |
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "DroidSans.ttf"), 16) | |
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "Karla-Regular.ttf"), 10) | |
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "ProggyTiny.ttf"), 10) | |
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "Roboto-Medium.ttf"), 16) | |
# @assert default_font != C_NULL | |
# setup Platform/Renderer bindings | |
ImGui_ImplGlfw_InitForOpenGL(window, true) | |
ImGui_ImplOpenGL3_Init(glsl_version) | |
#show_demo_window = true | |
#show_another_window = false | |
#clear_color = Cfloat[0.45, 0.55, 0.60, 1.00] | |
while !GLFW.WindowShouldClose(window) | |
# oh my global scope | |
#global show_demo_window | |
#global show_another_window | |
#global clear_color | |
GLFW.PollEvents() | |
# start the Dear ImGui frame | |
ImGui_ImplOpenGL3_NewFrame() | |
ImGui_ImplGlfw_NewFrame() | |
CImGui.NewFrame() | |
#Everything but these 3 lines is boilerplate? | |
CImGui.Begin("Hello, world!") | |
CImGui.Text("Hello, world!") | |
CImGui.End() | |
CImGui.Render() | |
GLFW.MakeContextCurrent(window) | |
display_w, display_h = GLFW.GetFramebufferSize(window) | |
glViewport(0, 0, display_w, display_h) | |
#glClearColor(clear_color...) | |
glClear(GL_COLOR_BUFFER_BIT) | |
ImGui_ImplOpenGL3_RenderDrawData(CImGui.GetDrawData()) | |
GLFW.MakeContextCurrent(window) | |
GLFW.SwapBuffers(window) | |
end | |
# cleanup | |
ImGui_ImplOpenGL3_Shutdown() | |
ImGui_ImplGlfw_Shutdown() | |
CImGui.DestroyContext(ctx) | |
GLFW.DestroyWindow(window) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment