76 lines
2.3 KiB
Plaintext
76 lines
2.3 KiB
Plaintext
//------------------------------------------------------------------------------
|
|
// triangle/module.jai
|
|
//
|
|
// Hello Triangle sample.
|
|
//------------------------------------------------------------------------------
|
|
#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);
|
|
#load "./shader.jai";
|
|
|
|
state: struct {
|
|
pip: sg_pipeline;
|
|
bind: sg_bindings;
|
|
pass_action: sg_pass_action;
|
|
}
|
|
|
|
init :: () #c_call {
|
|
push_context,defer_pop;
|
|
|
|
sg_setup(*(sg_desc.{
|
|
environment = xx,force sglue_environment(),
|
|
logger = .{ func = slog_func },
|
|
}));
|
|
|
|
// a vertex buffer with 3 vertices
|
|
vertices := float.[
|
|
// positions // colors
|
|
0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 1.0,
|
|
0.5, -0.5, 0.5, 0.0, 1.0, 0.0, 1.0,
|
|
-0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 1.0,
|
|
];
|
|
buffer := sg_buffer_desc.{ data = .{ ptr = *vertices, size = size_of(type_of(vertices)) } };
|
|
state.bind.vertex_buffers[0] = sg_make_buffer(*buffer);
|
|
|
|
// create shader from code-generated sg_shader_desc
|
|
shd := sg_make_shader(*triangle_shader_desc(sg_query_backend()));
|
|
|
|
// create a shader and pipeline object (default render states are fine for triangle)
|
|
pipeline: sg_pipeline_desc;
|
|
pipeline.shader = shd;
|
|
pipeline.layout.attrs[ATTR_triangle_position] = .{ format = .FLOAT3 };
|
|
pipeline.layout.attrs[ATTR_triangle_color0] = .{ format = .FLOAT4 };
|
|
state.pip = sg_make_pipeline(*pipeline);
|
|
|
|
// a pass action to clear framebuffer to black
|
|
state.pass_action.colors[0] = .{ load_action = .CLEAR, clear_value = .{ 0, 0, 0,1 } };
|
|
}
|
|
|
|
frame :: () #c_call {
|
|
sg_begin_pass(*(sg_pass.{ action = state.pass_action, swapchain = xx,force sglue_swapchain() }));
|
|
sg_apply_pipeline(state.pip);
|
|
sg_apply_bindings(*state.bind);
|
|
sg_draw(0, 3, 1);
|
|
sg_end_pass();
|
|
sg_commit();
|
|
}
|
|
|
|
cleanup :: () #c_call {
|
|
sg_shutdown();
|
|
}
|
|
|
|
main :: () {
|
|
sapp_run(*(sapp_desc.{
|
|
init_cb = init,
|
|
frame_cb = frame,
|
|
cleanup_cb = cleanup,
|
|
width = 640,
|
|
height = 480,
|
|
window_title = "triangle",
|
|
icon = .{ sokol_default = true },
|
|
logger = .{ func = slog_func },
|
|
}));
|
|
}
|