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