Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h1
-rw-r--r--source/blender/blenkernel/BKE_dmgrid.h35
-rw-r--r--source/blender/blenkernel/BKE_subsurf.h34
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c4
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.h4
-rw-r--r--source/blender/blenkernel/intern/multires.c17
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c29
-rw-r--r--source/blender/blenlib/intern/pbvh.c2
-rw-r--r--source/blender/editors/sculpt_paint/paint_mask.c2
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c2
-rw-r--r--source/blender/gpu/gpu_buffers.h4
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c2
12 files changed, 66 insertions, 70 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 0aa902a514e..beb28403256 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -69,7 +69,6 @@ struct PBVH;
#define SUB_ELEMS_FACE 4
typedef struct DMGridData DMGridData;
-typedef struct GridKey GridKey;
typedef struct DMGridAdjacency {
int index[4];
diff --git a/source/blender/blenkernel/BKE_dmgrid.h b/source/blender/blenkernel/BKE_dmgrid.h
new file mode 100644
index 00000000000..e1419995676
--- /dev/null
+++ b/source/blender/blenkernel/BKE_dmgrid.h
@@ -0,0 +1,35 @@
+#ifndef BKE_DMGRID_H
+#define BKE_DMGRID_H
+
+/* Each grid element can contain zero or more layers of coordinates,
+ paint masks, and normals; these numbers are stored in the GridKey
+
+ For now, co and no can have only zero or one layers, only mask is
+ really variable.
+*/
+typedef struct GridKey {
+ int co;
+ int mask;
+ int no;
+} GridKey;
+
+#define GRIDELEM_KEY_INIT(_gridkey, _totco, _totmask, _totno) \
+ ((_gridkey)->co = _totco, (_gridkey)->mask = _totmask, (_gridkey)->no = _totno)
+
+#define GRIDELEM_SIZE(_key) ((3*(_key)->co + (_key)->mask + 3*(_key)->no) * sizeof(float))
+#define GRIDELEM_MASK_OFFSET(_key) ((_key)->mask ? 3*(_key)->co*sizeof(float) : -1)
+#define GRIDELEM_NO_OFFSET(_key) ((_key)->no ? (3*(_key)->co + (_key)->mask) * sizeof(float) : -1)
+#define GRIDELEM_INTERP_COUNT(_key) (3*(_key)->co + (_key)->mask)
+
+#define GRIDELEM_AT(_grid, _elem, _key) ((struct DMGridData*)(((char*)(_grid)) + (_elem) * GRIDELEM_SIZE(_key)))
+#define GRIDELEM_INC(_grid, _inc, _key) ((_grid) = GRIDELEM_AT(_grid, _inc, _key))
+
+#define GRIDELEM_CO(_grid, _key) ((float*)(_grid))
+#define GRIDELEM_NO(_grid, _key) ((float*)((char*)(_grid) + GRIDELEM_NO_OFFSET(_key)))
+#define GRIDELEM_MASK(_grid, _key) ((float*)((char*)(_grid) + GRIDELEM_MASK_OFFSET(_key)))
+
+#define GRIDELEM_CO_AT(_grid, _elem, _key) GRIDELEM_CO(GRIDELEM_AT(_grid, _elem, _key), _key)
+#define GRIDELEM_NO_AT(_grid, _elem, _key) GRIDELEM_NO(GRIDELEM_AT(_grid, _elem, _key), _key)
+#define GRIDELEM_MASK_AT(_grid, _elem, _key) GRIDELEM_MASK(GRIDELEM_AT(_grid, _elem, _key), _key)
+
+#endif
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index 0bfcdbac874..5e581c86c08 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -32,6 +32,7 @@ struct DMGridAdjacency;
struct DMGridData;
struct DerivedMesh;
struct EditMesh;
+struct GridKey;
struct IndexNode;
struct ListBase;
struct Mesh;
@@ -46,39 +47,6 @@ struct _CCGVert;
/**************************** External *****************************/
-/* Grids */
-
-/* Each grid element can contain zero or more layers of coordinates,
- paint masks, and normals; these numbers are stored in the GridKey
-
- For now, co and no can have only zero or one layers, only mask is
- really variable.
-*/
-struct GridKey {
- int co;
- int mask;
- int no;
-};
-
-#define GRIDELEM_KEY_INIT(_gridkey, _totco, _totmask, _totno) \
- (_gridkey->co = _totco, _gridkey->mask = _totmask, _gridkey->no = _totno)
-
-#define GRIDELEM_SIZE(_key) ((3*_key->co + _key->mask + 3*_key->no) * sizeof(float))
-#define GRIDELEM_MASK_OFFSET(_key) (_key->mask ? 3*_key->co*sizeof(float) : -1)
-#define GRIDELEM_NO_OFFSET(_key) (_key->no ? (3*_key->co + _key->mask) * sizeof(float) : -1)
-#define GRIDELEM_INTERP_COUNT(_key) (3*_key->co + _key->mask)
-
-#define GRIDELEM_AT(_grid, _elem, _key) ((struct DMGridData*)(((char*)(_grid)) + (_elem) * GRIDELEM_SIZE(_key)))
-#define GRIDELEM_INC(_grid, _inc, _key) ((_grid) = GRIDELEM_AT(_grid, _inc, _key))
-
-#define GRIDELEM_CO(_grid, _key) ((float*)(_grid))
-#define GRIDELEM_NO(_grid, _key) ((float*)((char*)(_grid) + GRIDELEM_NO_OFFSET(_key)))
-#define GRIDELEM_MASK(_grid, _key) ((float*)((char*)(_grid) + GRIDELEM_MASK_OFFSET(_key)))
-
-#define GRIDELEM_CO_AT(_grid, _elem, _key) GRIDELEM_CO(GRIDELEM_AT(_grid, _elem, _key), _key)
-#define GRIDELEM_NO_AT(_grid, _elem, _key) GRIDELEM_NO(GRIDELEM_AT(_grid, _elem, _key), _key)
-#define GRIDELEM_MASK_AT(_grid, _elem, _key) GRIDELEM_MASK(GRIDELEM_AT(_grid, _elem, _key), _key)
-
struct DerivedMesh *subsurf_make_derived_from_derived(
struct DerivedMesh *dm,
struct SubsurfModifierData *smd,
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 4df9cde3739..c3ccde1625b 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -749,8 +749,6 @@ void ccgSubSurf_free(CCGSubSurf *ss) {
_ehash_free(ss->eMap, (EHEntryFreeFP) _edge_free, ss);
_ehash_free(ss->vMap, (EHEntryFreeFP) _vert_free, ss);
- MEM_freeN(ss->meshIFC.gridkey);
-
CCGSUBSURF_free(ss, ss);
if (allocatorIFC.release) {
@@ -2558,7 +2556,7 @@ int ccgSubSurf_getGridLevelSize(CCGSubSurf *ss, int level) {
}
struct GridKey *ccgSubSurf_getGridKey(CCGSubSurf *ss) {
- return ss->meshIFC.gridkey;
+ return &ss->meshIFC.gridkey;
}
/* Vert accessors */
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.h b/source/blender/blenkernel/intern/CCGSubSurf.h
index 75f2b4dd5c2..b1238849404 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.h
+++ b/source/blender/blenkernel/intern/CCGSubSurf.h
@@ -1,5 +1,7 @@
/* $Id$ */
+#include "BKE_dmgrid.h"
+
typedef void* CCGMeshHDL;
typedef void* CCGVertHDL;
typedef void* CCGEdgeHDL;
@@ -19,7 +21,7 @@ struct _CCGMeshIFC {
that would be (3+1) floats, so finterpCount would be 4. */
int finterpCount;
- struct GridKey* gridkey;
+ struct GridKey gridkey;
};
/***/
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 3bd38680c89..c5ba159b9ab 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -458,18 +458,11 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv
return multires_dm_create_from_derived(&mmd, 1, dm, ob, 0, 0);
}
-static GridKey *create_gridkey(CustomData *cd)
-{
- GridKey *gridkey = MEM_callocN(sizeof(GridKey), "create_gridkey");
-
- GRIDELEM_KEY_INIT(gridkey, 1, CustomData_number_of_layers(cd, CD_PAINTMASK), 1);
-
- return gridkey;
-}
-
static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal)
{
SubsurfModifierData smd;
+ GridKey gridkey;
+ int pmask_totlayer;
memset(&smd, 0, sizeof(SubsurfModifierData));
smd.levels = smd.renderLevels = lvl;
@@ -479,7 +472,11 @@ static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl
if(optimal)
smd.flags |= eSubsurfModifierFlag_ControlEdges;
- return subsurf_make_derived_from_derived(dm, &smd, create_gridkey(&get_mesh(ob)->vdata), 0, NULL, 0, 0);
+ pmask_totlayer = CustomData_number_of_layers(&get_mesh(ob)->vdata,
+ CD_PAINTMASK);
+ GRIDELEM_KEY_INIT(&gridkey, 1, pmask_totlayer, 1);
+
+ return subsurf_make_derived_from_derived(dm, &smd, &gridkey, 0, NULL, 0, 0);
}
static DMGridData **copy_grids(DMGridData **grids, int totgrid, int gridsize, GridKey *gridkey)
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 084533572ed..e2e427a1d66 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -117,7 +117,7 @@ static CCGSubSurf *_getSubSurf(CCGSubSurf *prevSS, GridKey *gridkey, int subdivL
}
ifc.vertDataSize = GRIDELEM_SIZE(gridkey);
ifc.finterpCount = GRIDELEM_INTERP_COUNT(gridkey);
- ifc.gridkey = gridkey;
+ ifc.gridkey = *gridkey;
if (useArena) {
CCGAllocatorIFC allocatorIFC;
@@ -317,16 +317,15 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result,
int index, gridSize, gridFaces, edgeSize, totface, x, y, S;
MTFace *dmtface = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, n);
MTFace *tface = CustomData_get_layer_n(&result->faceData, CD_MTFACE, n);
- GridKey *gridkey;
+ GridKey gridkey;
if(!dmtface || !tface)
return;
- gridkey = MEM_callocN(sizeof(GridKey), "Subsurf UV GridKey");
- GRIDELEM_KEY_INIT(gridkey, 1, 0, 0); /* TODO */
+ GRIDELEM_KEY_INIT(&gridkey, 1, 0, 0); /* TODO */
/* create a CCGSubSurf from uv's */
- uvss = _getSubSurf(NULL, gridkey, ccgSubSurf_getSubdivisionLevels(ss), 0, 1, 0);
+ uvss = _getSubSurf(NULL, &gridkey, ccgSubSurf_getSubdivisionLevels(ss), 0, 1, 0);
if(!ss_sync_from_uv(uvss, ss, dm, dmtface)) {
ccgSubSurf_free(uvss);
@@ -361,10 +360,10 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result,
for(y = 0; y < gridFaces; y++) {
for(x = 0; x < gridFaces; x++) {
- float *a = GRIDELEM_CO_AT(faceGridData, (y + 0)*gridSize + x + 0, gridkey);
- float *b = GRIDELEM_CO_AT(faceGridData, (y + 0)*gridSize + x + 1, gridkey);
- float *c = GRIDELEM_CO_AT(faceGridData, (y + 1)*gridSize + x + 1, gridkey);
- float *d = GRIDELEM_CO_AT(faceGridData, (y + 1)*gridSize + x + 0, gridkey);
+ float *a = GRIDELEM_CO_AT(faceGridData, (y + 0)*gridSize + x + 0, &gridkey);
+ float *b = GRIDELEM_CO_AT(faceGridData, (y + 0)*gridSize + x + 1, &gridkey);
+ float *c = GRIDELEM_CO_AT(faceGridData, (y + 1)*gridSize + x + 1, &gridkey);
+ float *d = GRIDELEM_CO_AT(faceGridData, (y + 1)*gridSize + x + 0, &gridkey);
tf->uv[0][0] = a[0]; tf->uv[0][1] = a[1];
tf->uv[1][0] = d[0]; tf->uv[1][1] = d[1];
@@ -2666,11 +2665,11 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
int useSubsurfUv = smd->flags & eSubsurfModifierFlag_SubsurfUv;
int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges);
CCGDerivedMesh *result;
+ GridKey default_gridkey;
if(!gridkey) {
- /* create default gridkey */
- gridkey = MEM_callocN(sizeof(GridKey), "subsurf_make_derived_from_derived.GridKey");
- GRIDELEM_KEY_INIT(gridkey, 1, 0, 1);
+ GRIDELEM_KEY_INIT(&default_gridkey, 1, 0, 1);
+ gridkey = &default_gridkey;
}
if(editMode) {
@@ -2759,12 +2758,8 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
float edge_sum[3], face_sum[3];
CCGVertIterator *vi;
DerivedMesh *dm = CDDM_from_mesh(me, NULL);
- GridKey *gridkey;
- gridkey = MEM_callocN(sizeof(GridKey), "limit_positions.gridkey");
- GRIDELEM_KEY_INIT(gridkey, 1, 0, 1);
-
- ss = _getSubSurf(NULL, gridkey, 1, 0, 1, 0);
+ ss = _getSubSurf(NULL, NULL, 1, 0, 1, 0);
ss_sync_from_derivedmesh(ss, dm, NULL, 0);
vi = ccgSubSurf_getVertIterator(ss);
diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c
index 5aa45157cfe..52a5a9b121a 100644
--- a/source/blender/blenlib/intern/pbvh.c
+++ b/source/blender/blenlib/intern/pbvh.c
@@ -28,7 +28,7 @@
#include "BLI_pbvh.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_subsurf.h"
+#include "BKE_dmgrid.h"
#include "BKE_mesh.h" /* for mesh_calc_normals */
#include "gpu_buffers.h"
diff --git a/source/blender/editors/sculpt_paint/paint_mask.c b/source/blender/editors/sculpt_paint/paint_mask.c
index e2e5b91e55a..f52065e5af7 100644
--- a/source/blender/editors/sculpt_paint/paint_mask.c
+++ b/source/blender/editors/sculpt_paint/paint_mask.c
@@ -19,10 +19,10 @@
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_dmgrid.h"
#include "BKE_mesh.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
-#include "BKE_subsurf.h"
#include "BLI_listbase.h"
#include "BLI_pbvh.h"
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 966efd5bab4..7633895d3aa 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -51,6 +51,7 @@
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
+#include "BKE_dmgrid.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_key.h"
@@ -61,7 +62,6 @@
#include "BKE_multires.h"
#include "BKE_paint.h"
#include "BKE_report.h"
-#include "BKE_subsurf.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BKE_colortools.h"
diff --git a/source/blender/gpu/gpu_buffers.h b/source/blender/gpu/gpu_buffers.h
index 566a94737d3..fe06d472cc5 100644
--- a/source/blender/gpu/gpu_buffers.h
+++ b/source/blender/gpu/gpu_buffers.h
@@ -50,6 +50,7 @@
struct DerivedMesh;
struct GHash;
+struct GridKey;
/* V - vertex, N - normal, T - uv, C - color
F - float, UB - unsigned byte */
@@ -137,7 +138,8 @@ void GPU_update_mesh_buffers(void *buffers, struct MVert *mvert,
void *GPU_build_grid_buffers(struct DMGridData **grids,
int *grid_indices, int totgrid, int gridsize);
void GPU_update_grid_buffers(void *buffers_v, struct DMGridData **grids,
- int *grid_indices, int totgrid, int gridsize, GridKey *gridkey, int smooth);
+ int *grid_indices, int totgrid, int gridsize,
+ struct GridKey *gridkey, int smooth);
void GPU_draw_buffers(void *buffers);
void GPU_free_buffers(void *buffers);
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index d5a8709e87c..11cfe96a8f1 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -44,7 +44,7 @@
#include "DNA_meshdata_types.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_subsurf.h"
+#include "BKE_dmgrid.h"
#include "BKE_utildefines.h"
#include "DNA_userdef_types.h"