opengl/learn_opengl/ 1_getting_started/ 1_hello_window
Licence This example has its own licence, rather than Odin's: opengl/learn_opengl/LICENSE
LearnOpenGL.com © 2025 by Joey de Vries is licensed under CC BY-NC 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc/4.0/
https://learnopengl.com
https://x.com/JoeyDeVriez
Code
main.odin ¶49 linesSource
1package main
2
3import gl "vendor:OpenGL"
4import "vendor:glfw"
5import "core:fmt"
6import "core:os"
7
8framebuffer_size_callback :: proc "c" (window: glfw.WindowHandle, width: i32, height: i32) {
9 gl.Viewport(0, 0, width, height)
10}
11
12processInput :: proc "c" (window: glfw.WindowHandle) {
13 if glfw.GetKey(window, glfw.KEY_ESCAPE) == glfw.PRESS {
14 glfw.SetWindowShouldClose(window, true)
15 }
16}
17
18main :: proc() {
19 glfw.Init()
20 glfw.WindowHint(glfw.CONTEXT_VERSION_MAJOR, 3)
21 glfw.WindowHint(glfw.CONTEXT_VERSION_MINOR, 3)
22 glfw.WindowHint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
23
24 window := glfw.CreateWindow(800, 600, "LearnOpenGL", nil, nil)
25 if window == nil {
26 fmt.println("Failed to create GLFW window")
27 glfw.Terminate()
28 os.exit(-1)
29 }
30 glfw.MakeContextCurrent(window)
31
32 gl.load_up_to(3, 3, glfw.gl_set_proc_address)
33
34 gl.Viewport(0, 0, 800, 600)
35
36 glfw.SetFramebufferSizeCallback(window, framebuffer_size_callback)
37
38 for !glfw.WindowShouldClose(window) {
39 processInput(window)
40
41 gl.ClearColor(0.2, 0.3, 0.3, 1.0)
42 gl.Clear(gl.COLOR_BUFFER_BIT)
43
44 glfw.SwapBuffers(window)
45 glfw.PollEvents()
46 }
47
48 glfw.Terminate()
49}
Declarations Used 26
- core:fmt println
- core:os exit
- vendor:OpenGL Clear · ClearColor · COLOR_BUFFER_BIT · load_up_to · Viewport
- vendor:glfw CONTEXT_VERSION_MAJOR · CONTEXT_VERSION_MINOR · CreateWindow · GetKey · gl_set_proc_address · Init · KEY_ESCAPE · MakeContextCurrent · OPENGL_CORE_PROFILE · OPENGL_PROFILE · PollEvents · PRESS · SetFramebufferSizeCallback · SetWindowShouldClose · SwapBuffers · Terminate · WindowHandle · WindowHint · WindowShouldClose