revolver

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

idraw2d.c (4393B)


      1 //////////////////////////////////////////////////////////////////
      2 // idraw2d.c
      3 
      4 #include "revolver_inc.h"
      5 #include "revolver_inc.c"
      6 
      7 
      8 int main(void) {
      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_ascii_font_t* font = rv_ascii_font_from_file(arena, S("Iosevka-Etoile.ttf"), 20);
     16     rv_texture_t* tex = rv_tex_load_from_file(arena, S("chad.jpeg"), false);
     17 
     18     rv_render_pass_t* create_rpass = rv_render_push_render_pass(arena, &rpass_list);
     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 
     28         // pick renderpass
     29         rv_render_pass_t* rpass = rv_render_push_render_pass(scratch.arena, &rpass_list);
     30 
     31         // process events
     32         for (rv_event_t* e = rv_get_events(scratch.arena, 0); e; e = e->next) {
     33             if (e->type == RV_EVENT_WINDOW_CLOSE) {
     34                 if (e->window_close == window) {
     35                     goto exit_program;
     36                 }
     37             }
     38             if (e->type == RV_EVENT_WINDOW_RESIZE) {
     39                 // set viewport
     40                 rv_command_t* viewport = rv_cmd_push_type(scratch.arena, &rpass->commands, RV_COMMAND_SET_VIEWPORT);
     41                 viewport->viewport = rv_v4(.xy = {0, 0}, .zw = rv_window_size(window));
     42                 rvi2d_camera(&rvi, rv_window_size(window));
     43             }
     44         }
     45 
     46         { // clear
     47             rv_command_t* clear = rv_cmd_push_type(scratch.arena, &rpass->commands, RV_COMMAND_CLEAR);
     48             rv_render_clear_desc_t* clear_desc = rv_render_push_clear_desc(scratch.arena, clear, RV_RENDER_CLEAR_FLAG_COLOR);
     49             clear_desc->color_v = rv_v4(0.1, 0.1, 0.1, 1.0);
     50         }
     51 
     52         { // draw using idraw2d
     53             rvi2d_tex(&rvi, NULL);
     54             rvi2d_text(&rvi, font, rv_v2(20, 20+20), S("What would a Gunslinger be without his revolver?\nA Chad."), RV_COLOR_WHITE);
     55 
     56             rvi2d_tex(&rvi, NULL);
     57             rvi2d_triangle_no_uv(&rvi, rv_v2(100, 100), rv_v2(200, 200), rv_v2(0, 200), RV_COLOR_GREEN);
     58 
     59             rvi2d_rect(&rvi, rv_rct(200, 200, 100, 100), RV_COLOR_RED);
     60 
     61             rvi2d_tex(&rvi, tex);
     62             rvi2d_rect(&rvi, rv_rct(300, 300, 100, 100), RV_COLOR_WHITE);
     63 
     64             rvi2d_tex(&rvi, NULL);
     65             rvi2d_rect(&rvi, rv_rct(350, 350, sinf(rv_time())*100, 100), rv_color(255, 255, 255, 50));
     66 
     67 
     68             rv_str8 demo_text = S("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n"
     69                                   "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n"
     70                                   "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n"
     71                                   "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n"
     72                                   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789()[]{}!\"\\'#%$&/+-?!~*<>,.;:|"
     73                 );
     74 
     75             rv_rect r = rv_rct(.xy = rv_v2(20, 500 - font->point_size), .wh = gs_asset_font_text_dimensions(font, demo_text));
     76             rvi2d_rect(&rvi, r, rv_color(255, 255, 255, 50));
     77 
     78             rvi2d_text(&rvi, font, rv_v2(20, 500), demo_text, RV_COLOR_WHITE);
     79 
     80             rvi2d_text(&rvi, font, rv_v2(20, 700), S("font atlas:"), RV_COLOR_WHITE);
     81             rvi2d_tex(&rvi, NULL);
     82             rvi2d_rect(&rvi, rv_rct(100, 710, 400, 400), RV_COLOR_BLACK);
     83             rvi2d_tex(&rvi, font->tex);
     84             rvi2d_rect(&rvi, rv_rct(100, 710, 400, 400), RV_COLOR_WHITE);
     85 
     86             rvi2d_draw_and_reset(&rvi, scratch.arena, &rpass->commands);
     87         }
     88 
     89         if (window) { // render screen
     90             rv_window_render_commit(window, &rpass_list);
     91         }
     92         rv_scratch_end(scratch);
     93         rpass_list = (rv_render_pass_list_t){0};
     94     }
     95 exit_program:
     96 
     97     return 0;
     98 }