tex_load.c (3399B)
1 ////////////////////////////////////////////////////////////////// 2 // tex_load.c 3 4 #include "revolver_inc.h" 5 #include "revolver_inc.c" 6 7 8 int main(int argc, char** argv) { 9 rv_window_desc_t desc = {.name = S("App"), .attach_render = true,}; 10 rv_window_handle_t* window = rv_create_window(desc); 11 12 rv_arena* arena = rv_arena_alloc(); 13 rv_render_pass_list_t rpass_list = {0}; 14 15 rv_str8 filename = S("chad.jpeg"); 16 if (argc == 2) { 17 filename = rv_str8_from_cstr(argv[1]); 18 } 19 rv_texture_t* tex = rv_tex_load_from_file(arena, filename, false); 20 rv_ascii_font_t* font = rv_ascii_font_from_file(arena, S("Iosevka-Etoile.ttf"), 16); 21 s32 text_height_total = gs_asset_font_text_dimensions(font, filename).y; 22 23 rv_render_pass_t* create_rpass = rv_render_push_render_pass(arena, &rpass_list); 24 25 rv_cmd_push_obj(arena, &create_rpass->commands, RV_COMMAND_OBJ_TEXTURE, RV_RENDER_OBJ_OP_CREATE, tex); 26 rv_cmd_push_obj(arena, &create_rpass->commands, RV_COMMAND_OBJ_TEXTURE, RV_RENDER_OBJ_OP_CREATE, font->tex); 27 28 rv_idraw2d_ctx rvi = {0}; 29 rvi2d_create(&rvi, arena, &create_rpass->commands); 30 31 while(1) { 32 rv_temp_arena scratch = rv_scratch_begin(0, 0); 33 34 // pick renderpass 35 rv_render_pass_t* rpass = rv_render_push_render_pass(scratch.arena, &rpass_list); 36 37 bool32 vsync = true; 38 39 // process events 40 for (rv_event_t* e = rv_get_events(scratch.arena, 0); e; e = e->next) { 41 if (e->type == RV_EVENT_WINDOW_CLOSE) { 42 if (e->window_close == window) { 43 goto exit_program; 44 } 45 } 46 if (e->type == RV_EVENT_WINDOW_RESIZE) { 47 // set viewport 48 rv_command_t* viewport = rv_cmd_push_type(scratch.arena, &rpass->commands, RV_COMMAND_SET_VIEWPORT); 49 viewport->viewport = rv_v4(.xy = {0, 0}, .zw = rv_window_size(window)); 50 vsync = false; 51 } 52 } 53 54 { // clear 55 rv_command_t* clear = rv_cmd_push_type(scratch.arena, &rpass->commands, RV_COMMAND_CLEAR); 56 rv_render_clear_desc_t* clear_desc = rv_render_push_clear_desc(scratch.arena, clear, RV_RENDER_CLEAR_FLAG_COLOR); 57 clear_desc->color_v = rv_v4(0.1, 0.1, 0.1, 1.0); 58 } 59 60 { // draw image 61 rvi2d_camera(&rvi, rv_window_size(window)); 62 rv_vec2 display_size = rv_window_size(window); 63 display_size.y -= text_height_total; 64 f32 display_ratio = display_size.x / display_size.y; 65 f32 image_ratio = tex->size.x / tex->size.y; 66 rvi2d_tex(&rvi, tex); 67 if (display_ratio > image_ratio) { 68 rvi2d_rect(&rvi, rv_rct(0, text_height_total, display_size.x * image_ratio/display_ratio, display_size.y), RV_COLOR_WHITE); 69 } else { 70 rvi2d_rect(&rvi, rv_rct(0, text_height_total, display_size.x, display_size.y * display_ratio/image_ratio), RV_COLOR_WHITE); 71 } 72 rvi2d_text(&rvi, font, rv_v2(0, font->point_size), filename, RV_COLOR_GREEN); 73 } 74 75 rvi2d_draw_and_reset(&rvi, scratch.arena, &rpass->commands); 76 77 if (window) { // render screen 78 rv_window_render_commit(window, &rpass_list); 79 } 80 rv_scratch_end(scratch); 81 rpass_list = (rv_render_pass_list_t){0}; 82 } 83 exit_program: 84 85 return 0; 86 }