Get rid of hardcoded structure definition in DM drawing callbacks
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 20 Dec 2011 08:47:36 +0000 (08:47 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 20 Dec 2011 08:47:36 +0000 (08:47 +0000)
Structures passing to DM callbacks as userData used to be defined in both callee
and callbacks itself which made it difficult and unsafe to add new properties
to user data.

Added typedefs for this structures and use them in callbacks and callee functions.

source/blender/editors/space_view3d/drawmesh.c
source/blender/editors/space_view3d/drawobject.c

index 6dd362b827f6ec57508e048c54b05526368de512..e0b1741b0d00bf5de485f0b7fed926672535e13a 100644 (file)
 
 #include "view3d_intern.h"     // own include
 
+/* user data structures for derived mesh callbacks */
+typedef struct drawMeshFaceSelect_userData {
+       Mesh *me;
+       EdgeHash *eh;
+} drawMeshFaceSelect_userData;
+
+typedef struct drawEMTFMapped_userData {
+       EditMesh *em;
+       short has_mcol;
+       short has_mtface;
+       MFace *mf;
+       MTFace *tf;
+} drawEMTFMapped_userData;
+
+typedef struct drawTFace_userData {
+       MFace *mf;
+       MTFace *tf;
+} drawTFace_userData;
+
 /**************************** Face Select Mode *******************************/
 
 /* Flags for marked edges */
@@ -121,7 +140,7 @@ static EdgeHash *get_tface_mesh_marked_edge_info(Mesh *me)
 
 static int draw_mesh_face_select__setHiddenOpts(void *userData, int index)
 {
-       struct { Mesh *me; EdgeHash *eh; } *data = userData;
+       drawMeshFaceSelect_userData *data = userData;
        Mesh *me= data->me;
        MEdge *med = &me->medge[index];
        uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
@@ -138,7 +157,7 @@ static int draw_mesh_face_select__setHiddenOpts(void *userData, int index)
 
 static int draw_mesh_face_select__setSelectOpts(void *userData, int index)
 {
-       struct { Mesh *me; EdgeHash *eh; } *data = userData;
+       drawMeshFaceSelect_userData *data = userData;
        MEdge *med = &data->me->medge[index];
        uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
 
@@ -159,7 +178,7 @@ static int draw_mesh_face_select__drawFaceOptsInv(void *userData, int index)
 
 static void draw_mesh_face_select(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm)
 {
-       struct { Mesh *me; EdgeHash *eh; } data;
+       drawMeshFaceSelect_userData data;
 
        data.me = me;
        data.eh = get_tface_mesh_marked_edge_info(me);
@@ -513,7 +532,7 @@ static int draw_tface_mapped__set_draw(void *userData, int index)
 
 static int draw_em_tf_mapped__set_draw(void *userData, int index)
 {
-       struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} *data = userData;
+       drawEMTFMapped_userData *data = userData;
        EditMesh *em = data->em;
        EditFace *efa= EM_get_face_for_index(index);
        MTFace *tface;
@@ -631,7 +650,7 @@ static void draw_mesh_text(Scene *scene, Object *ob, int glsl)
 
 static int compareDrawOptions(void *userData, int cur_index, int next_index)
 {
-       struct { MFace *mf; MTFace *tf; } *data = userData;
+       drawTFace_userData *data = userData;
 
        if(data->mf && data->mf[cur_index].mat_nr != data->mf[next_index].mat_nr)
                return 0;
@@ -644,7 +663,7 @@ static int compareDrawOptions(void *userData, int cur_index, int next_index)
 
 static int compareDrawOptionsEm(void *userData, int cur_index, int next_index)
 {
-       struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} *data= userData;
+       drawEMTFMapped_userData *data= userData;
 
        if(data->mf && data->mf[cur_index].mat_nr != data->mf[next_index].mat_nr)
                return 0;
@@ -669,7 +688,7 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
        glColor4f(1.0f,1.0f,1.0f,1.0f);
 
        if(ob->mode & OB_MODE_EDIT) {
-               struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} data;
+               drawEMTFMapped_userData data;
 
                data.em= me->edit_mesh;
                data.has_mcol= CustomData_has_layer(&me->edit_mesh->fdata, CD_MCOL);
@@ -693,7 +712,7 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
                                dm->drawFacesTex(dm, draw_tface__set_draw_legacy, NULL, NULL);
                }
                else {
-                       struct { MFace *mf; MTFace *tf; } userData;
+                       drawTFace_userData userData;
 
                        if(!CustomData_has_layer(&dm->faceData,CD_TEXTURE_MCOL))
                                add_tface_color_layer(dm);
index 273336b78f183d6d88a3dd6f1382f69f005950ec..3199c00a32aff6f8f711b7218393df64775daf8b 100644 (file)
@@ -118,6 +118,48 @@ typedef enum eWireDrawMode {
        OBDRAW_WIRE_ON_DEPTH= 2
 } eWireDrawMode;
 
+/* user data structures for derived mesh callbacks */
+typedef struct foreachScreenVert_userData {
+       void (*func)(void *userData, EditVert *eve, int x, int y, int index);
+       void *userData;
+       ViewContext vc;
+       eV3DClipTest clipVerts;
+} foreachScreenVert_userData;
+
+typedef struct foreachScreenEdge_userData {
+       void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
+       void *userData;
+       ViewContext vc;
+       eV3DClipTest clipVerts;
+} foreachScreenEdge_userData;
+
+typedef struct foreachScreenFace_userData {
+       void (*func)(void *userData, EditFace *efa, int x, int y, int index);
+       void *userData;
+       ViewContext vc;
+} foreachScreenFace_userData;
+
+typedef struct drawDMVerts_userData {
+       int sel;
+       EditVert *eve_act;
+} drawDMVerts_userData;
+
+typedef struct drawDMEdgesSel_userData {
+       unsigned char *baseCol, *selCol, *actCol;
+       EditEdge *eed_act;
+} drawDMEdgesSel_userData;
+
+typedef struct drawDMFacesSel_userData {
+       unsigned char *cols[3];
+       EditFace *efa_act;
+       int *orig_index;
+} drawDMFacesSel_userData;
+
+typedef struct bbsObmodeMeshVerts_userData {
+       void *offset;
+       MVert *mvert;
+} bbsObmodeMeshVerts_userData;
+
 static void draw_bounding_volume(Scene *scene, Object *ob, char type);
 
 static void drawcube_size(float size);
@@ -1914,9 +1956,7 @@ static void drawlattice(Scene *scene, View3D *v3d, Object *ob)
  * use the object matrix in the useual way */
 static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
 {
-       struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index);
-                    void *userData; ViewContext vc; eV3DClipTest clipVerts; } *data = userData;
-
+       foreachScreenVert_userData *data = userData;
        EditVert *eve = EM_get_vert_for_index(index);
 
        if (eve->h==0) {
@@ -1938,9 +1978,7 @@ void mesh_foreachScreenVert(
         void (*func)(void *userData, EditVert *eve, int x, int y, int index),
         void *userData, eV3DClipTest clipVerts)
 {
-       struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index);
-                    void *userData; ViewContext vc; eV3DClipTest clipVerts; } data;
-
+       foreachScreenVert_userData data;
        DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
        
        data.vc= *vc;
@@ -1994,8 +2032,7 @@ static int is_co_in_region(ARegion *ar, const short co[2])
 }
 static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0co, float *v1co)
 {
-       struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
-                    void *userData; ViewContext vc; eV3DClipTest clipVerts; } *data = userData;
+       foreachScreenEdge_userData *data = userData;
        EditEdge *eed = EM_get_edge_for_index(index);
        short s[2][2];
 
@@ -2026,8 +2063,7 @@ void mesh_foreachScreenEdge(
         void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index),
         void *userData, eV3DClipTest clipVerts)
 {
-       struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
-                    void *userData; ViewContext vc; eV3DClipTest clipVerts; } data;
+       foreachScreenEdge_userData data;
        DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
        data.vc= *vc;
@@ -2047,7 +2083,7 @@ void mesh_foreachScreenEdge(
 
 static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *cent, float *UNUSED(no))
 {
-       struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; } *data = userData;
+       foreachScreenFace_userData *data = userData;
        EditFace *efa = EM_get_face_for_index(index);
        short s[2];
 
@@ -2065,7 +2101,7 @@ void mesh_foreachScreenFace(
         void (*func)(void *userData, EditFace *efa, int x, int y, int index),
         void *userData)
 {
-       struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; } data;
+       foreachScreenFace_userData data;
        DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
        data.vc= *vc;
@@ -2210,7 +2246,7 @@ static void draw_dm_vert_normals(Scene *scene, DerivedMesh *dm)
        /* Draw verts with color set based on selection */
 static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
 {
-       struct { int sel; EditVert *eve_act; } * data = userData;
+       drawDMVerts_userData * data = userData;
        EditVert *eve = EM_get_vert_for_index(index);
 
        if (eve->h==0 && (eve->f&SELECT)==data->sel) {
@@ -2237,7 +2273,7 @@ static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *
 
 static void draw_dm_verts(DerivedMesh *dm, int sel, EditVert *eve_act)
 {
-       struct { int sel; EditVert *eve_act; } data;
+       drawDMVerts_userData data;
        data.sel = sel;
        data.eve_act = eve_act;
 
@@ -2251,7 +2287,7 @@ static int draw_dm_edges_sel__setDrawOptions(void *userData, int index)
 {
        EditEdge *eed = EM_get_edge_for_index(index);
        //unsigned char **cols = userData, *col;
-       struct { unsigned char *baseCol, *selCol, *actCol; EditEdge *eed_act; } * data = userData;
+       drawDMEdgesSel_userData * data = userData;
        unsigned char *col;
 
        if (eed->h==0) {
@@ -2275,7 +2311,7 @@ static int draw_dm_edges_sel__setDrawOptions(void *userData, int index)
 }
 static void draw_dm_edges_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditEdge *eed_act) 
 {
-       struct { unsigned char *baseCol, *selCol, *actCol; EditEdge *eed_act; } data;
+       drawDMEdgesSel_userData data;
        
        data.baseCol = baseCol;
        data.selCol = selCol;
@@ -2349,7 +2385,7 @@ static void draw_dm_edges_sharp(DerivedMesh *dm)
         * return 2 for the active face so it renders with stipple enabled */
 static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r))
 {
-       struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } * data = userData;
+       drawDMFacesSel_userData * data = userData;
        EditFace *efa = EM_get_face_for_index(index);
        unsigned char *col;
        
@@ -2369,7 +2405,7 @@ static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNU
 
 static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int next_index)
 {
-       struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } *data = userData;
+       drawDMFacesSel_userData *data = userData;
        EditFace *efa;
        EditFace *next_efa;
        unsigned char *col, *next_col;
@@ -2398,7 +2434,7 @@ static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int
 /* also draws the active face */
 static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditFace *efa_act) 
 {
-       struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } data;
+       drawDMFacesSel_userData data;
        data.cols[0] = baseCol;
        data.cols[1] = selCol;
        data.cols[2] = actCol;
@@ -6822,7 +6858,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
 
 static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
 {
-       struct {void* offset; MVert *mvert;} *data = userData;
+       bbsObmodeMeshVerts_userData *data = userData;
        MVert *mv = &data->mvert[index];
        int offset = (intptr_t) data->offset;
 
@@ -6834,7 +6870,7 @@ static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, float *co,
 
 static void bbs_obmode_mesh_verts(Object *ob, DerivedMesh *dm, int offset)
 {
-       struct {void* offset; struct MVert *mvert;} data;
+       bbsObmodeMeshVerts_userData data;
        Mesh *me = ob->data;
        MVert *mvert = me->mvert;
        data.mvert = mvert;