94 lines
2.3 KiB
Plaintext
94 lines
2.3 KiB
Plaintext
import sdlrenderer::ren;
|
|
import std::io;
|
|
import std::thread;
|
|
import sdl3::sdl;
|
|
import std::compression::qoi;
|
|
import std::core::mem::allocator;
|
|
|
|
char[*] shader_rect_vert = $embed("resources/shaders/compiled/rect.vert.spv");
|
|
char[*] shader_rect_frag = $embed("resources/shaders/compiled/rect.frag.spv");
|
|
|
|
char[*] shader_sprite_vert = $embed("resources/shaders/compiled/sprite.vert.spv");
|
|
char[*] shader_sprite_frag = $embed("resources/shaders/compiled/sprite.frag.spv");
|
|
|
|
const uint WINDOW_WIDTH = 640;
|
|
const uint WINDOW_HEIGHT = 480;
|
|
|
|
|
|
fn int main()
|
|
{
|
|
ren::Renderer ren;
|
|
ren.init("test window", WINDOW_WIDTH, WINDOW_HEIGHT);
|
|
|
|
// TODO: these could be the same function
|
|
ren.load_spirv_shader_from_mem("rect shader", &shader_rect_vert, &shader_rect_frag, 0, 0);
|
|
ren.create_pipeline("rect shader", RECT);
|
|
|
|
// load the tux qoi image
|
|
QOIDesc img_desc;
|
|
char[] img_pixels = qoi::read(allocator::temp(), "resources/tux.qoi", &img_desc)!!;
|
|
// and put it in a texture
|
|
ren.new_texture("tux", FULL_COLOR, img_pixels, img_desc.width, img_desc.height);
|
|
// create a new pipeline to use the texture
|
|
ren.load_spirv_shader_from_mem("sprite shader", &shader_sprite_vert, &shader_sprite_frag, 1, 0);
|
|
ren.create_pipeline("sprite shader", SPRITE);
|
|
|
|
|
|
sdl::Event e;
|
|
bool quit = false;
|
|
for (usz i = 0; !quit; i++) {
|
|
|
|
if (sdl::poll_event(&e)) {
|
|
if (e.type == EVENT_QUIT) {
|
|
quit = true;
|
|
}
|
|
}
|
|
|
|
if (i == 300) {
|
|
io::printn("ciao!");
|
|
img_pixels = qoi::read(allocator::temp(), "resources/tux_inv.qoi", &img_desc)!!;
|
|
ren.update_texture("tux", img_pixels, img_desc.width, img_desc.height);
|
|
}
|
|
|
|
ren.begin_render(true);
|
|
|
|
// Colored Rectangles Render Pass
|
|
ren.start_render_pass("rect shader");
|
|
|
|
// rect 1
|
|
ren.push_quad(100,100,100,100,0xff00ff00, 20);
|
|
// rect 2
|
|
ren.push_quad(0,0,20,20,0xff0000ff);
|
|
// rect 3
|
|
ren.push_quad(200,300,50,50,0xffff0000);
|
|
|
|
//ren.set_scissor(0,50,200,300);
|
|
|
|
ren.draw_quads();
|
|
|
|
ren.end_render_pass();
|
|
// End Rectangle Render Pass
|
|
|
|
|
|
// Textured Rectangles Render Pass
|
|
ren.start_render_pass("sprite shader");
|
|
|
|
// bind the pipeline's sampler
|
|
ren.bind_texture("tux");
|
|
|
|
// tux
|
|
ren.push_sprite(300, 0, 54, 64, 0, 0);
|
|
|
|
ren.reset_scissor();
|
|
|
|
ren.draw_quads();
|
|
|
|
ren.end_render_pass();
|
|
// End Textured Rectangle Render Pass
|
|
|
|
ren.end_render();
|
|
}
|
|
|
|
ren.free();
|
|
return 0;
|
|
} |