diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-02-28 19:11:54 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-03-01 05:53:25 +0300 |
commit | 725112cce73a3ea314c8969459899bb8281c36ae (patch) | |
tree | db14c0304fdf8bfd6da6eab3d7fad17e32f72aa2 | |
parent | 64e35f6fd21fbadb68624529ef36a2ddf82640f5 (diff) |
DRW: Codestyle: Remove DRWCallHeader and DRWCallGenerate
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.h | 123 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_data.c | 28 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_exec.c | 16 |
4 files changed, 81 insertions, 88 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 50384646098..2ddc977941a 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -369,7 +369,7 @@ static void drw_viewport_var_init(void) DST.vmempool = GPU_viewport_mempool_get(DST.viewport); if (DST.vmempool->calls == NULL) { - DST.vmempool->calls = BLI_mempool_create(MAX2(sizeof(DRWCall), sizeof(DRWCallGenerate)), 0, 512, 0); + DST.vmempool->calls = BLI_mempool_create(sizeof(DRWCall), 0, 512, 0); } if (DST.vmempool->states == NULL) { DST.vmempool->states = BLI_mempool_create(sizeof(DRWCallState), 0, 512, BLI_MEMPOOL_ALLOW_ITER); diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h index 0c8cdad7fc2..cfc49320f3b 100644 --- a/source/blender/draw/intern/draw_manager.h +++ b/source/blender/draw/intern/draw_manager.h @@ -83,13 +83,23 @@ * > DRWUniform **/ -typedef struct DRWCallHeader { - struct DRWCallHeader *next; /* in reality DRWCall or DRWCallGenerate. */ -#ifdef USE_GPU_SELECT - int select_id; -#endif - unsigned char type; -} DRWCallHeader; +/* Used by DRWCallState.flag */ +enum { + DRW_CALL_CULLED = (1 << 0), + DRW_CALL_NEGSCALE = (1 << 1), +}; + +/* Used by DRWCallState.matflag */ +enum { + DRW_CALL_MODELINVERSE = (1 << 0), + DRW_CALL_MODELVIEW = (1 << 1), + DRW_CALL_MODELVIEWINVERSE = (1 << 2), + DRW_CALL_MODELVIEWPROJECTION = (1 << 3), + DRW_CALL_NORMALVIEW = (1 << 4), + DRW_CALL_NORMALWORLD = (1 << 5), + DRW_CALL_ORCOTEXFAC = (1 << 6), + DRW_CALL_EYEVEC = (1 << 7), +}; typedef struct DRWCallState { unsigned char flag; @@ -112,20 +122,42 @@ typedef struct DRWCallState { float eyevec[3]; } DRWCallState; +typedef enum { + DRW_CALL_SINGLE, /* A single batch */ + DRW_CALL_GENERATE, /* Uses a callback to draw with any number of batches. */ +} DRWCallType; + typedef struct DRWCall { - DRWCallHeader head; + struct DRWCall *next; DRWCallState *state; - Gwn_Batch *geometry; -} DRWCall; + union { + struct { /* type == DRW_CALL_SINGLE */ + Gwn_Batch *geometry; + } single; + struct { /* type == DRW_CALL_GENERATE */ + DRWCallGenerateFn *geometry_fn; + void *user_data; + } generate; + }; -typedef struct DRWCallGenerate { - DRWCallHeader head; - DRWCallState *state; + DRWCallType type; +#ifdef USE_GPU_SELECT + int select_id; +#endif +} DRWCall; - DRWCallGenerateFn *geometry_fn; - void *user_data; -} DRWCallGenerate; +/* Used by DRWUniform.type */ +typedef enum { + DRW_UNIFORM_BOOL, + DRW_UNIFORM_SHORT_TO_INT, + DRW_UNIFORM_SHORT_TO_FLOAT, + DRW_UNIFORM_INT, + DRW_UNIFORM_FLOAT, + DRW_UNIFORM_TEXTURE, + DRW_UNIFORM_BUFFER, + DRW_UNIFORM_BLOCK +} DRWUniformType; struct DRWUniform { DRWUniform *next; /* single-linked list */ @@ -136,6 +168,15 @@ struct DRWUniform { char arraysize; /* cannot be more than 16 too */ }; +typedef enum { + DRW_SHG_NORMAL, + DRW_SHG_POINT_BATCH, + DRW_SHG_LINE_BATCH, + DRW_SHG_TRIANGLE_BATCH, + DRW_SHG_INSTANCE, + DRW_SHG_INSTANCE_EXTERNAL, +} DRWShadingGroupType; + struct DRWShadingGroup { DRWShadingGroup *next; @@ -145,7 +186,7 @@ struct DRWShadingGroup { /* Watch this! Can be nasty for debugging. */ union { struct { /* DRW_SHG_NORMAL */ - DRWCallHeader *first, *last; /* Linked list of DRWCall or DRWCallDynamic depending of type */ + DRWCall *first, *last; /* Linked list of DRWCall or DRWCallDynamic depending of type */ } calls; struct { /* DRW_SHG_***_BATCH */ struct Gwn_Batch *batch_geom; /* Result of call batching */ @@ -163,7 +204,7 @@ struct DRWShadingGroup { DRWState state_extra; /* State changes for this batch only (or'd with the pass's state) */ DRWState state_extra_disable; /* State changes for this batch only (and'd with the pass's state) */ unsigned int stencil_mask; /* Stencil mask to use for stencil test / write operations */ - int type; + DRWShadingGroupType type; /* Builtin matrices locations */ int model; @@ -201,52 +242,6 @@ struct DRWPass { char name[MAX_PASS_NAME]; }; -/* Used by DRWUniform.type */ -typedef enum { - DRW_UNIFORM_BOOL, - DRW_UNIFORM_SHORT_TO_INT, - DRW_UNIFORM_SHORT_TO_FLOAT, - DRW_UNIFORM_INT, - DRW_UNIFORM_FLOAT, - DRW_UNIFORM_TEXTURE, - DRW_UNIFORM_BUFFER, - DRW_UNIFORM_BLOCK -} DRWUniformType; - -/* Used by DRWCall.flag */ -enum { - DRW_CALL_SINGLE, /* A single batch */ - DRW_CALL_GENERATE, /* Uses a callback to draw with any number of batches. */ -}; - -/* Used by DRWCall.state */ -enum { - DRW_CALL_CULLED = (1 << 0), - DRW_CALL_NEGSCALE = (1 << 1), -}; - -/* Used by DRWCall.flag */ -enum { - DRW_CALL_MODELINVERSE = (1 << 0), - DRW_CALL_MODELVIEW = (1 << 1), - DRW_CALL_MODELVIEWINVERSE = (1 << 2), - DRW_CALL_MODELVIEWPROJECTION = (1 << 3), - DRW_CALL_NORMALVIEW = (1 << 4), - DRW_CALL_NORMALWORLD = (1 << 5), - DRW_CALL_ORCOTEXFAC = (1 << 6), - DRW_CALL_EYEVEC = (1 << 7), -}; - -/* Used by DRWShadingGroup.type */ -enum { - DRW_SHG_NORMAL, - DRW_SHG_POINT_BATCH, - DRW_SHG_LINE_BATCH, - DRW_SHG_TRIANGLE_BATCH, - DRW_SHG_INSTANCE, - DRW_SHG_INSTANCE_EXTERNAL, -}; - /* ------------- DRAW MANAGER ------------ */ #define MAX_CLIP_PLANES 6 /* GL_MAX_CLIP_PLANES is at least 6 */ diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 12ca1df74f2..4b7b60c17a5 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -293,13 +293,13 @@ void DRW_shgroup_call_add(DRWShadingGroup *shgroup, Gwn_Batch *geom, float (*obm DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls); call->state = drw_call_state_create(shgroup, obmat, NULL); - call->head.type = DRW_CALL_SINGLE; + call->type = DRW_CALL_SINGLE; #ifdef USE_GPU_SELECT - call->head.select_id = DST.select_id; + call->select_id = DST.select_id; #endif - call->geometry = geom; + call->single.geometry = geom; - BLI_LINKS_APPEND(&shgroup->calls, (DRWCallHeader *)call); + BLI_LINKS_APPEND(&shgroup->calls, call); } /* These calls can be culled and are optimized for redraw */ @@ -310,13 +310,13 @@ void DRW_shgroup_call_object_add(DRWShadingGroup *shgroup, Gwn_Batch *geom, Obje DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls); call->state = drw_call_state_object(shgroup, ob->obmat, ob->data); - call->head.type = DRW_CALL_SINGLE; + call->type = DRW_CALL_SINGLE; #ifdef USE_GPU_SELECT - call->head.select_id = DST.select_id; + call->select_id = DST.select_id; #endif - call->geometry = geom; + call->single.geometry = geom; - BLI_LINKS_APPEND(&shgroup->calls, (DRWCallHeader *)call); + BLI_LINKS_APPEND(&shgroup->calls, call); } void DRW_shgroup_call_generate_add( @@ -327,16 +327,16 @@ void DRW_shgroup_call_generate_add( BLI_assert(geometry_fn != NULL); BLI_assert(shgroup->type == DRW_SHG_NORMAL); - DRWCallGenerate *call = BLI_mempool_alloc(DST.vmempool->calls); + DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls); call->state = drw_call_state_create(shgroup, obmat, NULL); - call->head.type = DRW_CALL_GENERATE; + call->type = DRW_CALL_GENERATE; #ifdef USE_GPU_SELECT - call->head.select_id = DST.select_id; + call->select_id = DST.select_id; #endif - call->geometry_fn = geometry_fn; - call->user_data = user_data; + call->generate.geometry_fn = geometry_fn; + call->generate.user_data = user_data; - BLI_LINKS_APPEND(&shgroup->calls, (DRWCallHeader *)call); + BLI_LINKS_APPEND(&shgroup->calls, call); } static void sculpt_draw_cb( diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 40d531b62a7..da753efd4d3 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -597,7 +597,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) # define GPU_SELECT_LOAD_IF_PICKSEL_CALL(_call) \ if ((G.f & G_PICKSEL) && (_call)) { \ - GPU_select_load_id((_call)->head.select_id); \ + GPU_select_load_id((_call)->select_id); \ } ((void)0) # define GPU_SELECT_LOAD_IF_PICKSEL_LIST(_shgroup, _start, _count) \ @@ -674,7 +674,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) } else { bool prev_neg_scale = false; - for (DRWCall *call = (DRWCall *)shgroup->calls.first; call; call = (DRWCall *)call->head.next) { + for (DRWCall *call = shgroup->calls.first; call; call = call->next) { if ((call->state->flag & DRW_CALL_CULLED) != 0) continue; @@ -686,16 +686,14 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) } GPU_SELECT_LOAD_IF_PICKSEL_CALL(call); + draw_geometry_prepare(shgroup, call->state); - if (call->head.type == DRW_CALL_SINGLE) { - draw_geometry_prepare(shgroup, call->state); - draw_geometry_execute(shgroup, call->geometry); + if (call->type == DRW_CALL_SINGLE) { + draw_geometry_execute(shgroup, call->single.geometry); } else { - BLI_assert(call->head.type == DRW_CALL_GENERATE); - DRWCallGenerate *callgen = ((DRWCallGenerate *)call); - draw_geometry_prepare(shgroup, callgen->state); - callgen->geometry_fn(shgroup, draw_geometry_execute, callgen->user_data); + BLI_assert(call->type == DRW_CALL_GENERATE); + call->generate.geometry_fn(shgroup, draw_geometry_execute, call->generate.user_data); } } /* Reset state */ |