This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/blenkernel/BKE_subsurf.h
Brecht Van Lommel 89320c911e Sculpt & modifiers: patch by Sergey Sharybin, with modifications by me.
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.
2010-06-02 18:04:31 +00:00

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