OgreMeshManager.h

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2012 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 #ifndef __MeshManager_H__
00029 #define __MeshManager_H__
00030 
00031 #include "OgrePrerequisites.h"
00032 
00033 #include "OgreResourceManager.h"
00034 #include "OgreSingleton.h"
00035 #include "OgreVector3.h"
00036 #include "OgreHardwareBuffer.h"
00037 #include "OgreMesh.h"
00038 #include "OgrePatchMesh.h"
00039 
00040 namespace Ogre {
00041 
00042     class MeshSerializerListener;
00043 
00057     class _OgreExport MeshManager: public ResourceManager, public Singleton<MeshManager>, 
00058         public ManualResourceLoader
00059     {
00060     public:
00061         MeshManager();
00062         ~MeshManager();
00063 
00065         void _initialise(void);
00066 
00079         ResourceCreateOrRetrieveResult createOrRetrieve(
00080             const String& name,
00081             const String& group,
00082             bool isManual=false, ManualResourceLoader* loader=0,
00083             const NameValuePairList* params=0,
00084             HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00085             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00086             bool vertexBufferShadowed = true, bool indexBufferShadowed = true);
00087 
00109         MeshPtr prepare( const String& filename, const String& groupName,
00110             HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00111             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00112             bool vertexBufferShadowed = true, bool indexBufferShadowed = true);
00113 
00135         MeshPtr load( const String& filename, const String& groupName,
00136             HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00137             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00138             bool vertexBufferShadowed = true, bool indexBufferShadowed = true);
00139 
00140 
00154         MeshPtr createManual( const String& name, const String& groupName, 
00155             ManualResourceLoader* loader = 0);
00156 
00196         MeshPtr createPlane(
00197             const String& name, const String& groupName, const Plane& plane,
00198             Real width, Real height,
00199             int xsegments = 1, int ysegments = 1,
00200             bool normals = true, unsigned short numTexCoordSets = 1,
00201             Real uTile = 1.0f, Real vTile = 1.0f, const Vector3& upVector = Vector3::UNIT_Y,
00202             HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00203             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
00204             bool vertexShadowBuffer = true, bool indexShadowBuffer = true);
00205 
00206         
00257         MeshPtr createCurvedIllusionPlane(
00258             const String& name, const String& groupName, const Plane& plane,
00259             Real width, Real height, Real curvature,
00260             int xsegments = 1, int ysegments = 1,
00261             bool normals = true, unsigned short numTexCoordSets = 1,
00262             Real uTile = 1.0f, Real vTile = 1.0f, const Vector3& upVector = Vector3::UNIT_Y,
00263             const Quaternion& orientation = Quaternion::IDENTITY,
00264             HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00265             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
00266             bool vertexShadowBuffer = true, bool indexShadowBuffer = true, 
00267             int ySegmentsToKeep = -1);
00268 
00310         MeshPtr createCurvedPlane( 
00311             const String& name, const String& groupName, const Plane& plane, 
00312             Real width, Real height, Real bow = 0.5f, 
00313             int xsegments = 1, int ysegments = 1,
00314             bool normals = false, unsigned short numTexCoordSets = 1, 
00315             Real xTile = 1.0f, Real yTile = 1.0f, const Vector3& upVector = Vector3::UNIT_Y,
00316             HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00317             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
00318             bool vertexShadowBuffer = true, bool indexShadowBuffer = true);
00319 
00356         PatchMeshPtr createBezierPatch(
00357             const String& name, const String& groupName, void* controlPointBuffer, 
00358             VertexDeclaration *declaration, size_t width, size_t height,
00359             size_t uMaxSubdivisionLevel = PatchSurface::AUTO_LEVEL, 
00360             size_t vMaxSubdivisionLevel = PatchSurface::AUTO_LEVEL,
00361             PatchSurface::VisibleSide visibleSide = PatchSurface::VS_FRONT,
00362             HardwareBuffer::Usage vbUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
00363             HardwareBuffer::Usage ibUsage = HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY,
00364             bool vbUseShadow = true, bool ibUseShadow = true);
00365         
00369         void setPrepareAllMeshesForShadowVolumes(bool enable);
00371         bool getPrepareAllMeshesForShadowVolumes(void);
00372 
00388         static MeshManager& getSingleton(void);
00404         static MeshManager* getSingletonPtr(void);
00405 
00409         Real getBoundsPaddingFactor(void);
00410     
00413         void setBoundsPaddingFactor(Real paddingFactor);
00414 
00417         void setListener(MeshSerializerListener *listener);
00418         
00421         MeshSerializerListener *getListener();
00422 
00424         void loadResource(Resource* res);
00425 
00426     protected:
00428         Resource* createImpl(const String& name, ResourceHandle handle, 
00429             const String& group, bool isManual, ManualResourceLoader* loader, 
00430             const NameValuePairList* createParams);
00431         
00434         void tesselate2DMesh(SubMesh* pSub, unsigned short meshWidth, unsigned short meshHeight, 
00435             bool doubleSided = false, 
00436             HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
00437             bool indexSysMem = false);
00438 
00439         void createPrefabPlane(void);
00440         void createPrefabCube(void);
00441         void createPrefabSphere(void);
00442     
00444         enum MeshBuildType
00445         {
00446             MBT_PLANE,
00447             MBT_CURVED_ILLUSION_PLANE,
00448             MBT_CURVED_PLANE
00449         };
00451         struct MeshBuildParams
00452         {
00453             MeshBuildType type;
00454             Plane plane;
00455             Real width;
00456             Real height;
00457             Real curvature;
00458             int xsegments;
00459             int ysegments;
00460             bool normals;
00461             unsigned short numTexCoordSets;
00462             Real xTile;
00463             Real yTile;
00464             Vector3 upVector;
00465             Quaternion orientation;
00466             HardwareBuffer::Usage vertexBufferUsage;
00467             HardwareBuffer::Usage indexBufferUsage;
00468             bool vertexShadowBuffer;
00469             bool indexShadowBuffer;
00470             int ySegmentsToKeep;
00471         };
00473         typedef map<Resource*, MeshBuildParams>::type MeshBuildParamsMap;
00474         MeshBuildParamsMap mMeshBuildParams;
00475 
00477         void loadManualPlane(Mesh* pMesh, MeshBuildParams& params);
00479         void loadManualCurvedPlane(Mesh* pMesh, MeshBuildParams& params);
00481         void loadManualCurvedIllusionPlane(Mesh* pMesh, MeshBuildParams& params);
00482 
00483         bool mPrepAllMeshesForShadowVolumes;
00484     
00485         //the factor by which the bounding box of an entity is padded   
00486         Real mBoundsPaddingFactor;
00487 
00488         // The listener to pass to serializers
00489         MeshSerializerListener *mListener;
00490     };
00491 
00495 } //namespace
00496 
00497 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:36:24 2012