* Multithread parts of multires and subsurf. Only loops working on face grid data and do no memory allocation have been multithreaded, others would be more complicated. * Force some CCGSubsurf functions to be inlined, gives a small overall speedup in subsurf code. * Fix sculpting not working correct with transformed objects. * Fix a few cases of "spikes" on lower level multires levels. There's still cases where it happens, usually on boundary cornders. The problem is that in such cases the limit surfaces can be very different from the low res surface, so the tangent space is very different too.. * Fix crash deleting multires higher levels with level set to 0. * Fix crashes that happened sometimes when adding faces in editmode.
95 lines
2.5 KiB
C++
95 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 Mesh;
|
|
struct Object;
|
|
struct DerivedMesh;
|
|
struct EditMesh;
|
|
struct MultiresSubsurf;
|
|
struct SubsurfModifierData;
|
|
struct _CCGSubsurf;
|
|
struct _CCGVert;
|
|
struct _CCGEdge;
|
|
struct _CCGFace;
|
|
struct PBVH;
|
|
struct DMGridData;
|
|
struct DMGridAdjacency;
|
|
|
|
/**************************** 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(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;
|
|
|
|
struct DMGridData **gridData;
|
|
struct DMGridAdjacency *gridAdjacency;
|
|
int *gridOffset;
|
|
struct _CCGFace **gridFaces;
|
|
|
|
struct {
|
|
struct MultiresModifierData *mmd;
|
|
int local_mmd;
|
|
|
|
int lvl, totlvl;
|
|
float (*orco)[3];
|
|
|
|
Object *ob;
|
|
int modified;
|
|
|
|
void (*update)(DerivedMesh*);
|
|
} multires;
|
|
} CCGDerivedMesh;
|
|
|
|
#endif
|
|
|