2025-04-26 10:51:41 +03:00

93 lines
2.5 KiB
Plaintext

//------------------------------------------------------------------------------
// debugtext-print/module.jai
//
// Simple text rendering with sokol/debugtext, formatting, tabs, etc...
//------------------------------------------------------------------------------
#import "Basic";
#import,dir "../../sokol/log"(USE_GL=USE_GL);
#import,dir "../../sokol/gfx"(USE_GL=USE_GL);
#import,dir "../../sokol/app"(USE_GL=USE_GL);
#import,dir "../../sokol/glue"(USE_GL=USE_GL);
#import,dir "../../sokol/debugtext"(USE_GL=USE_GL);
NUM_FONTS :: 3;
Color :: struct {
r, g, b: u8;
}
state: struct {
pass_action: sg_pass_action;
palette: [3]Color;
} = .{
pass_action = .{
colors = .[
.{ load_action = .CLEAR, clear_value = .{ 0.0, 0.125, 0.25, 1.0 } },
.{}, .{}, .{},
],
},
palette = .[
.{ 0xf4, 0x43, 0x36 },
.{ 0x21, 0x96, 0xf3 },
.{ 0x4c, 0xaf, 0x50 },
],
};
init :: () #c_call {
sg_setup(*(sg_desc.{
environment = xx,force sglue_environment(),
logger = .{ func = slog_func },
}));
sdtx_setup(*(sdtx_desc_t.{
fonts[0] = sdtx_font_kc854(),
fonts[1] = sdtx_font_c64(),
fonts[2] = sdtx_font_oric(),
logger = .{ func = slog_func },
}));
}
frame :: () #c_call {
push_context,defer_pop;
frame_count := cast(u32) sapp_frame_count();
frame_time := sapp_frame_duration() * 1000.0;
sdtx_canvas(sapp_widthf() * 0.5, sapp_heightf() * 0.5);
sdtx_origin(3.0, 3.0);
for i : 0 .. NUM_FONTS-1 {
color := state.palette[i];
sdtx_font(cast(s32) i);
sdtx_color3b(color.r, color.g, color.b);
sdtx_printf("Hello '%'!\n", ifx((frame_count & (1<<7)) == 0) then "Welt" else "World");
sdtx_printf("\tFrame Time:\t\t%.3f\n", frame_time);
sdtx_printf("\tFrame Count:\t%d\t0x%04X\n", frame_count, frame_count);
sdtx_putr("Range Test 1(xyzbla)", 12);
sdtx_putr("\nRange Test 2\n", 32);
sdtx_move_y(2);
}
sg_begin_pass(*(sg_pass.{ action = state.pass_action, swapchain = xx,force sglue_swapchain() }));
sdtx_draw();
sg_end_pass();
sg_commit();
}
cleanup :: () #c_call {
sdtx_shutdown();
sg_shutdown();
}
main :: () {
sapp_run(*(sapp_desc.{
init_cb = init,
frame_cb = frame,
cleanup_cb = cleanup,
width = 640,
height = 480,
window_title = "debugtext-printf",
icon = .{ sokol_default = true },
logger = .{ func = slog_func },
}));
}