revolver

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 }