revolver

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

test.c (2988B)


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