Cycles: svn merge -r41225:41232 ^/trunk/blender
[blender.git] / source / gameengine / Rasterizer / RAS_Deformer.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file RAS_Deformer.h
29  *  \ingroup bgerast
30  */
31
32 #ifndef RAS_DEFORMER
33 #define RAS_DEFORMER
34
35 #if defined(WIN32) && !defined(FREE_WINDOWS)
36 #pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
37 #endif //WIN32
38
39 #include <stdlib.h>
40 #include "CTR_Map.h"
41
42 #ifdef WITH_CXX_GUARDEDALLOC
43 #include "MEM_guardedalloc.h"
44 #endif
45
46 struct DerivedMesh;
47 class RAS_MeshObject;
48
49 class RAS_Deformer
50 {
51 public:
52         RAS_Deformer() : m_pMesh(NULL), m_bDynamic(false) {};
53         virtual ~RAS_Deformer(){};
54         virtual void Relink(CTR_Map<class CTR_HashedPtr, void*>*map)=0;
55         virtual bool Apply(class RAS_IPolyMaterial *polymat)=0;
56         virtual bool Update(void)=0;
57         virtual bool UpdateBuckets(void)=0;
58         virtual RAS_Deformer *GetReplica()=0;
59         virtual void ProcessReplica()=0;
60         virtual bool SkipVertexTransform()
61         {
62                 return false;
63         }
64         virtual bool ShareVertexArray()
65         {
66                 return true;
67         }
68         virtual bool UseVertexArray()
69         {
70                 return true;
71         }
72         // true when deformer produces varying vertex (shape or armature)
73         bool IsDynamic()
74         {
75                 return m_bDynamic;
76         }
77         virtual struct DerivedMesh* GetFinalMesh()
78         {
79                 return NULL;
80         }
81         virtual struct DerivedMesh* GetPhysicsMesh()
82         {
83                 return NULL;
84         }
85         virtual class RAS_MeshObject* GetRasMesh()
86         {
87                 /* m_pMesh does not seem to be being used?? */
88                 return NULL;
89         }
90         virtual float (* GetTransVerts(int *tot))[3]    {       *tot= 0; return NULL; }
91
92 protected:
93         class RAS_MeshObject    *m_pMesh;
94         bool  m_bDynamic;       
95
96 #ifdef WITH_CXX_GUARDEDALLOC
97 public:
98         void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:RAS_Deformer"); }
99         void operator delete( void *mem ) { MEM_freeN(mem); }
100 #endif
101 };
102
103 #endif
104