Logo Search packages:      
Sourcecode: blender version File versions  Download package

StridingMeshInterface.h

/*
 * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies.
 * Erwin Coumans makes no representations about the suitability 
 * of this software for any purpose.  
 * It is provided "as is" without express or implied warranty.
*/
#ifndef STRIDING_MESHINTERFACE_H
#define STRIDING_MESHINTERFACE_H

#include "SimdVector3.h"
#include "TriangleCallback.h"

/// PHY_ScalarType enumerates possible scalar types.
/// See the StridingMeshInterface for its use
typedef enum PHY_ScalarType {
      PHY_FLOAT,
      PHY_DOUBLE,
      PHY_INTEGER,
      PHY_SHORT,
      PHY_FIXEDPOINT88
} PHY_ScalarType;

///   StridingMeshInterface is the interface class for high performance access to triangle meshes
/// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory.
00029 class  StridingMeshInterface
{
      protected:
      
            SimdVector3 m_scaling;

      public:
            StridingMeshInterface() :m_scaling(1.f,1.f,1.f)
            {

            }

            virtual ~StridingMeshInterface();



            void  InternalProcessAllTriangles(InternalTriangleIndexCallback* callback,const SimdVector3& aabbMin,const SimdVector3& aabbMax) const;


            /// get read and write access to a subpart of a triangle mesh
            /// this subpart has a continuous array of vertices and indices
            /// in this way the mesh can be handled as chunks of memory with striding
            /// very similar to OpenGL vertexarray support
            /// make a call to unLockVertexBase when the read and write access is finished      
            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;
            
            virtual void      getLockedReadOnlyVertexIndexBase(const unsigned char **vertexbase, int& numverts,PHY_ScalarType& type, int& stride,const unsigned char **indexbase,int & indexstride,int& numfaces,PHY_ScalarType& indicestype,int subpart=0) const=0;
      
            /// unLockVertexBase finishes the access to a subpart of the triangle mesh
            /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished
            virtual void      unLockVertexBase(int subpart)=0;

            virtual void      unLockReadOnlyVertexBase(int subpart) const=0;


            /// getNumSubParts returns the number of seperate subparts
            /// each subpart has a continuous array of vertices and indices
            virtual int       getNumSubParts() const=0;

            virtual void      preallocateVertices(int numverts)=0;
            virtual void      preallocateIndices(int numindices)=0;

            const SimdVector3&      getScaling() const {
                  return m_scaling;
            }
            void  setScaling(const SimdVector3& scaling)
            {
                  m_scaling = scaling;
            }


};

#endif //STRIDING_MESHINTERFACE_H

Generated by  Doxygen 1.6.0   Back to index