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 }