Commit: 725112cce73a3ea314c8969459899bb8281c36ae
Author: Clément Foucault
Date:   Wed Feb 28 17:11:54 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB725112cce73a3ea314c8969459899bb8281c36ae

DRW: Codestyle: Remove DRWCallHeader and DRWCallGenerate

===================================================================

M       source/blender/draw/intern/draw_manager.c
M       source/blender/draw/intern/draw_manager.h
M       source/blender/draw/intern/draw_manager_data.c
M       source/blender/draw/intern/draw_manager_exec.c

===================================================================

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 */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to