1 // Copyright (c) 2015 Sergio Gonzalez. All rights reserved. 2 // License: https://github.com/serge-rgb/milton#license 3 4 5 #pragma once 6 7 #include "common.h" 8 9 #define RENDER_STACK_SIZE (1 << 20) 10 11 // Render Workers: 12 // We have a bunch of workers running on threads, who wait on a lockless 13 // queue to take BlockgroupRenderBackend structures. 14 // When there is work available, they call blockgroup_render_thread with the 15 // appropriate parameters. 16 struct BlockgroupRenderBackend 17 { 18 i32 block_start; 19 }; 20 21 struct RenderStack 22 { 23 Rect* blocks; // Screen areas to render. 24 i32 num_blocks; 25 u32* canvas_buffer; 26 27 // LIFO work queue 28 SDL_mutex* mutex; 29 BlockgroupRenderBackend blockgroup_render_data[RENDER_STACK_SIZE]; 30 i32 index; 31 32 SDL_sem* work_available; 33 SDL_sem* completed_semaphore; 34 }; 35 36 37 enum MiltonRenderFlags 38 { 39 MiltonRenderFlags_NONE = 0, 40 41 MiltonRenderFlags_UI_UPDATED = 1 << 0, 42 MiltonRenderFlags_FULL_REDRAW = 1 << 1, 43 MiltonRenderFlags_FINISHED_STROKE = 1 << 2, 44 MiltonRenderFlags_PAN_COPY = 1 << 3, 45 MiltonRenderFlags_BRUSH_PREVIEW = 1 << 4, 46 MiltonRenderFlags_BRUSH_HOVER = 1 << 5, 47 MiltonRenderFlags_DRAW_ITERATIVELY = 1 << 6, 48 MiltonRenderFlags_BRUSH_CHANGE = 1 << 7, 49 }; 50