Fixes various crashes and redraw problems, most noticeable new feature is that you can now sculpt on a multires mesh with deforming modifiers preceding it. I've left out support for sculpting on multires with enabled modifiers following it, in this case only the base mesh can be sculpted now. The code changes needed to do this are just too ugly in my opinion, would need a more torough redesign which I don't think we should try now. In my opinion this is also not really an important case, since it's going to be incredibly slow anyway to run a modifier on a high res mesh while sculpting. So, to summarize current state: * Fastest sculpting: base mesh with no modifiers or multires with only modifiers preceding it. * Slower sculpting: base mesh with modifiers, depends on the speed of the modifiers. * Not supported: multires mesh with modifiers following it.
100 lines
2.5 KiB
C++
100 lines
2.5 KiB
C++
/* $Id$
|
|
*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
#ifndef BKE_SUBSURF_H
|
|
#define BKE_SUBSURF_H
|
|
|
|
struct DMGridAdjacency;
|
|
struct DMGridData;
|
|
struct DerivedMesh;
|
|
struct EditMesh;
|
|
struct IndexNode;
|
|
struct ListBase;
|
|
struct Mesh;
|
|
struct MultiresSubsurf;
|
|
struct Object;
|
|
struct PBVH;
|
|
struct SubsurfModifierData;
|
|
struct _CCGEdge;
|
|
struct _CCGFace;
|
|
struct _CCGSubsurf;
|
|
struct _CCGVert;
|
|
|
|
/**************************** External *****************************/
|
|
|
|
struct DerivedMesh *subsurf_make_derived_from_derived(
|
|
struct DerivedMesh *dm,
|
|
struct SubsurfModifierData *smd,
|
|
int useRenderParams, float (*vertCos)[3],
|
|
int isFinalCalc, int editMode);
|
|
|
|
void subsurf_calculate_limit_positions(struct Mesh *me, float (*positions_r)[3]);
|
|
|
|
/**************************** Internal *****************************/
|
|
|
|
typedef struct CCGDerivedMesh {
|
|
DerivedMesh dm;
|
|
|
|
struct _CCGSubSurf *ss;
|
|
int freeSS;
|
|
int drawInteriorEdges, useSubsurfUv;
|
|
|
|
struct {int startVert; struct _CCGVert *vert;} *vertMap;
|
|
struct {int startVert; int startEdge; struct _CCGEdge *edge;} *edgeMap;
|
|
struct {int startVert; int startEdge;
|
|
int startFace; struct _CCGFace *face;} *faceMap;
|
|
|
|
short *edgeFlags;
|
|
char *faceFlags;
|
|
|
|
struct PBVH *pbvh;
|
|
int pbvh_draw;
|
|
struct ListBase *fmap;
|
|
struct IndexNode *fmap_mem;
|
|
|
|
struct DMGridData **gridData;
|
|
struct DMGridAdjacency *gridAdjacency;
|
|
int *gridOffset;
|
|
struct _CCGFace **gridFaces;
|
|
|
|
struct {
|
|
struct MultiresModifierData *mmd;
|
|
int local_mmd;
|
|
|
|
int lvl, totlvl;
|
|
float (*orco)[3];
|
|
|
|
struct Object *ob;
|
|
int modified;
|
|
|
|
void (*update)(DerivedMesh*);
|
|
} multires;
|
|
} CCGDerivedMesh;
|
|
|
|
#endif
|
|
|