clay/bindings/odin/examples/video_demo_raylib/main.odin

56 lines
1.9 KiB
Odin

package video_demo_raylib
import clay "../../clay-odin"
import layout "../shared_layouts"
import "base:runtime"
import "core:fmt"
import rl "vendor:raylib"
errorHandler :: proc "c" (errorData: clay.ErrorData) {
runtime.print_string("Clay Error:\n\t")
runtime.print_string(string(errorData.errorText.chars[:errorData.errorText.length]))
runtime.print_byte('\n')
}
load_font :: proc(data: []byte, size: i32, id: u16) {
// Multiply size by two because we divide by two in the measurement function.
// This is for smooth fonts on retina displays, and helps with subpixel accuracy.
font := rl.LoadFontFromMemory(".ttf", raw_data(data), i32(len(data)), size * 2, nil, 0)
rl.SetTextureFilter(font.texture, .BILINEAR)
assign_at(&raylib_fonts, int(id), Raylib_Font{font = font, fontId = id})
}
// Load at compile time, directly into the binary
ROBOTO :: #load("./Roboto-Regular.ttf")
main :: proc() {
rl.SetConfigFlags({.VSYNC_HINT, .WINDOW_RESIZABLE, .MSAA_4X_HINT})
rl.InitWindow(1280, 720, "Raylib Odin Example")
minMemorySize := (uint)(clay.MinMemorySize())
arena: clay.Arena = clay.CreateArenaWithCapacityAndMemory(minMemorySize, make([^]u8, minMemorySize))
clay.Initialize(arena, {f32(rl.GetScreenWidth()), f32(rl.GetScreenHeight())}, {handler = errorHandler})
clay.SetMeasureTextFunction(measure_text, nil)
load_font(ROBOTO, 16, layout.VIDEO_DEMO_FONT_ID_BODY)
data := layout.video_demo_init()
for !rl.WindowShouldClose() {
clay.SetLayoutDimensions({width = f32(rl.GetScreenWidth()), height = f32(rl.GetScreenHeight())})
clay.SetPointerState(rl.GetMousePosition(), rl.IsMouseButtonDown(.LEFT))
clay.UpdateScrollContainers(true, rl.GetMouseWheelMoveV(), rl.GetFrameTime())
commands := layout.video_demo_layout(&data)
rl.BeginDrawing()
rl.ClearBackground(0)
clay_raylib_render(&commands)
rl.EndDrawing()
}
}