ba8a925c8dd3d58cc7708f1d151250c4f8430983
[blender.git] / extern / bullet / Bullet / CollisionShapes / StridingMeshInterface.h
1 /*
2  * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
3  *
4  * Permission to use, copy, modify, distribute and sell this software
5  * and its documentation for any purpose is hereby granted without fee,
6  * provided that the above copyright notice appear in all copies.
7  * Erwin Coumans makes no representations about the suitability 
8  * of this software for any purpose.  
9  * It is provided "as is" without express or implied warranty.
10 */
11 #ifndef STRIDING_MESHINTERFACE_H
12 #define STRIDING_MESHINTERFACE_H
13
14 #include "SimdVector3.h"
15
16 /// PHY_ScalarType enumerates possible scalar types.
17 /// See the StridingMeshInterface for its use
18 typedef enum PHY_ScalarType {
19         PHY_FLOAT,
20         PHY_DOUBLE,
21         PHY_INTEGER,
22         PHY_SHORT,
23         PHY_FIXEDPOINT88
24 } PHY_ScalarType;
25
26 ///     StridingMeshInterface is the interface class for high performance access to triangle meshes
27 /// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory.
28 class  StridingMeshInterface
29 {
30         protected:
31         
32                 SimdVector3 m_scaling;
33
34         public:
35                 StridingMeshInterface() :m_scaling(1.f,1.f,1.f)
36                 {
37
38                 }
39
40                 virtual ~StridingMeshInterface();
41                 /// get read and write access to a subpart of a triangle mesh
42                 /// this subpart has a continuous array of vertices and indices
43                 /// in this way the mesh can be handled as chunks of memory with striding
44                 /// very similar to OpenGL vertexarray support
45                 /// make a call to unLockVertexBase when the read and write access is finished  
46         virtual void    getLockedVertexIndexBase(unsigned char **vertexbase, int& numverts,PHY_ScalarType& type, int& stride,unsigned char **indexbase,int & indexstride,int& numfaces,PHY_ScalarType& indicestype,int subpart=0)=0;
47                 
48
49                 /// unLockVertexBase finishes the access to a subpart of the triangle mesh
50                 /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished
51                 virtual void    unLockVertexBase(int subpart)=0;
52
53                 /// getNumSubParts returns the number of seperate subparts
54                 /// each subpart has a continuous array of vertices and indices
55                 virtual int             getNumSubParts()=0;
56
57                 virtual void    preallocateVertices(int numverts)=0;
58                 virtual void    preallocateIndices(int numindices)=0;
59
60                 const SimdVector3&      getScaling() {
61                         return m_scaling;
62                 }
63                 void    setScaling(const SimdVector3& scaling)
64                 {
65                         m_scaling = scaling;
66                 }
67
68
69 };
70
71 #endif //STRIDING_MESHINTERFACE_H