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:
authorDaniel Dunbar <daniel@zuster.org>2005-03-29 20:43:39 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-03-29 20:43:39 +0400
commite229722d5b20c0603f0b0cf0e559a43b4c5ec546 (patch)
treeda5a3b7ca09e989aa9246f5172ef7135297659a5 /source/blender/src/drawobject.c
parentda0a55d2b41d563385679d9beb12c26eaf7f1f63 (diff)
- added Mesh->derived and Mesh->decimated DerivedMesh pointers
- removed DL_MESH displist type!!!! Now store a DerivedMesh directly. - May still be some issues left having to do with releasing this at the right time (old code just splashed free_displist all over the place).
Diffstat (limited to 'source/blender/src/drawobject.c')
-rw-r--r--source/blender/src/drawobject.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index d12b767290a..2c3796c2496 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -1000,9 +1000,8 @@ void calc_mesh_facedots_ext(void)
}
/* window coord, assuming all matrices are set OK */
-static void calc_meshverts(void)
+static void calc_meshverts(DerivedMesh *dm)
{
- DerivedMesh *dm = mesh_get_cage_derived(G.obedit);
float co[3], mat[4][4];
EditVert *eve;
@@ -1017,26 +1016,31 @@ static void calc_meshverts(void)
}
MTC_Mat4SwapMat4(G.vd->persmat, mat);
- dm->release(dm);
}
/* window coord for current window, sets matrices temporal */
void calc_meshverts_ext(void)
{
+ int dmNeedsFree;
+ DerivedMesh *dm = mesh_get_cage_derived(G.obedit, &dmNeedsFree);
areawinset(curarea->win);
persp(PERSP_VIEW);
mymultmatrix(G.obedit->obmat);
- calc_meshverts();
+ calc_meshverts(dm);
myloadmatrix(G.vd->viewmat);
-
+
+ if (dmNeedsFree) {
+ dm->release(dm);
+ }
}
/* window coord for current window, sets matrices temporal, sets (eve->f & 2) when not visible */
void calc_meshverts_ext_f2(void)
{
- DerivedMesh *dm = mesh_get_cage_derived(G.obedit);
+ int dmNeedsFree;
+ DerivedMesh *dm = mesh_get_cage_derived(G.obedit, &dmNeedsFree);
float co[3], mat[4][4];
EditVert *eve;
@@ -1063,7 +1067,9 @@ void calc_meshverts_ext_f2(void)
MTC_Mat4SwapMat4(G.vd->persmat, mat);
myloadmatrix(G.vd->viewmat);
- dm->release(dm);
+ if (dmNeedsFree) {
+ dm->release(dm);
+ }
}
@@ -1569,8 +1575,7 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *baseDM, Derived
}
if(ob==G.obedit) {
- // XXX Not clear this is needed here. - zr
- calc_meshverts();
+ calc_meshverts(cageDM);
draw_em_fancy_verts(em, cageDM);
if(G.f & G_DRAWNORMALS) {
@@ -1620,8 +1625,8 @@ static void draw_mesh_fancy(Object *ob, DerivedMesh *baseDM, DerivedMesh *realDM
// This is only for objects from the decimator and
// is a temporal solution, a reconstruction of the
// displist system should take care of it (zr/ton)
- if(obDL && obDL->mesh) {
- DispListMesh *dlm = obDL->mesh;
+ if(me->decimated) {
+ DispListMesh *dlm = me->decimated;
MVert *mvert= dlm->mvert;
MFace *mface= dlm->mface;
int i;
@@ -1751,9 +1756,6 @@ static void draw_mesh_object(Object *ob, int dt)
}
baseDM->release(baseDM);
- if (realDM) {
- realDM->release(realDM);
- }
}
/* ************** DRAW DISPLIST ****************** */
@@ -3737,6 +3739,7 @@ static int bbs_mesh_solid(Object *ob, DerivedMesh *dm, int facecol)
void draw_object_backbufsel(Object *ob)
{
extern int em_solidoffs, em_wireoffs, em_vertoffs; // let linker solve it... from editmesh_mods.c
+ int dmNeedsFree;
DerivedMesh *dm;
mymultmatrix(ob->obmat);
@@ -3746,7 +3749,7 @@ void draw_object_backbufsel(Object *ob)
switch( ob->type) {
case OB_MESH:
- dm = mesh_get_cage_derived(ob);
+ dm = mesh_get_cage_derived(ob, &dmNeedsFree);
if(G.obedit) {
em_solidoffs= bbs_mesh_solid(ob, dm, G.scene->selectmode & SCE_SELECT_FACE);
@@ -3764,7 +3767,9 @@ void draw_object_backbufsel(Object *ob)
}
else bbs_mesh_solid(ob, dm, 1); // 1= facecol, faceselect
- dm->release(dm);
+ if (dmNeedsFree) {
+ dm->release(dm);
+ }
break;
case OB_CURVE:
case OB_SURF: