<html> <head> <title>OgreHardwareBufferManager.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <!-- Generated by Doxygen 1.3.6 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div> <h1>OgreHardwareBufferManager.h</h1><a href="OgreHardwareBufferManager_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span> 00002 <span class="comment">-----------------------------------------------------------------------------</span> 00003 <span class="comment">This source file is part of OGRE</span> 00004 <span class="comment"> (Object-oriented Graphics Rendering Engine)</span> 00005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span> 00006 <span class="comment"></span> 00007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span> 00008 <span class="comment">Also see acknowledgements in Readme.html</span> 00009 <span class="comment"></span> 00010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span> 00011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span> 00012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span> 00013 <span class="comment">version.</span> 00014 <span class="comment"></span> 00015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span> 00016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span> 00017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span> 00018 <span class="comment"></span> 00019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span> 00020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span> 00021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span> 00022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span> 00023 <span class="comment">-----------------------------------------------------------------------------</span> 00024 <span class="comment">*/</span> 00025 <span class="preprocessor">#ifndef __HardwareBufferManager__</span> 00026 <span class="preprocessor"></span><span class="preprocessor">#define __HardwareBufferManager__</span> 00027 <span class="preprocessor"></span> 00028 <span class="comment">// Precompiler options</span> 00029 <span class="preprocessor">#include "<a class="code" href="OgrePrerequisites_8h.html">OgrePrerequisites.h</a>"</span> 00030 00031 <span class="preprocessor">#include "<a class="code" href="OgreSingleton_8h.html">OgreSingleton.h</a>"</span> 00032 <span class="preprocessor">#include "<a class="code" href="OgreHardwareVertexBuffer_8h.html">OgreHardwareVertexBuffer.h</a>"</span> 00033 <span class="preprocessor">#include "<a class="code" href="OgreHardwareIndexBuffer_8h.html">OgreHardwareIndexBuffer.h</a>"</span> 00034 00035 00036 <span class="keyword">namespace </span>Ogre { 00037 <a name="l00048"></a><a class="code" href="classOgre_1_1HardwareBufferLicensee.html">00048</a> <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a13">_OgreExport</a> HardwareBufferLicensee 00049 { 00050 <span class="keyword">public</span>: <a name="l00051"></a><a class="code" href="classOgre_1_1HardwareBufferLicensee.html#Ogre_1_1HardwareBufferLicenseea0">00051</a> <span class="keyword">virtual</span> ~HardwareBufferLicensee() { } 00054 <span class="keyword">virtual</span> <span class="keywordtype">void</span> licenseExpired(<a class="code" href="classOgre_1_1HardwareBuffer.html">HardwareBuffer</a>* buffer) = 0; 00055 }; 00056 <a name="l00058"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html">00058</a> <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> TempBlendedBufferInfo : <span class="keyword">public</span> HardwareBufferLicensee 00059 { 00060 <span class="keyword">public</span>: 00061 <span class="comment">// Pre-blended </span> <a name="l00062"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo0">00062</a> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> srcPositionBuffer; <a name="l00063"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo1">00063</a> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> srcNormalBuffer; 00064 <span class="comment">// Post-blended </span> <a name="l00065"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo2">00065</a> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> destPositionBuffer; <a name="l00066"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo3">00066</a> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> destNormalBuffer; <a name="l00068"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo4">00068</a> <span class="keywordtype">bool</span> posNormalShareBuffer; <a name="l00069"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo5">00069</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> posBindIndex; <a name="l00070"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo6">00070</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> normBindIndex; <a name="l00071"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo7">00071</a> <span class="keywordtype">bool</span> bindPositions; <a name="l00072"></a><a class="code" href="classOgre_1_1TempBlendedBufferInfo.html#Ogre_1_1TempBlendedBufferInfoo8">00072</a> <span class="keywordtype">bool</span> bindNormals; 00073 00075 <span class="keywordtype">void</span> checkoutTempCopies(<span class="keywordtype">bool</span> positions = <span class="keyword">true</span>, <span class="keywordtype">bool</span> normals = <span class="keyword">true</span>); 00077 <span class="keywordtype">void</span> bindTempCopies(<a class="code" href="classOgre_1_1VertexData.html">VertexData</a>* targetData, <span class="keywordtype">bool</span> suppressHardwareUpload); 00079 <span class="keywordtype">void</span> licenseExpired(<a class="code" href="classOgre_1_1HardwareBuffer.html">HardwareBuffer</a>* buffer); 00080 }; 00081 00082 <a name="l00085"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html">00085</a> <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> HardwareBufferManager : <span class="keyword">public</span> <a class="code" href="classOgre_1_1Singleton.html">Singleton</a><HardwareBufferManager> 00086 { <a name="l00087"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagern0">00087</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>; <a name="l00088"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagern1">00088</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOgre_1_1HardwareIndexBufferSharedPtr.html">HardwareIndexBufferSharedPtr</a>; 00089 <span class="keyword">protected</span>: <a name="l00090"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx0">00090</a> <span class="keyword">typedef</span> std::list<VertexDeclaration*> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx0">VertexDeclarationList</a>; <a name="l00091"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx1">00091</a> <span class="keyword">typedef</span> std::list<VertexBufferBinding*> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx1">VertexBufferBindingList</a>; 00092 <a name="l00093"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerp0">00093</a> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx0">VertexDeclarationList</a> mVertexDeclarations; <a name="l00094"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerp1">00094</a> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx1">VertexBufferBindingList</a> mVertexBufferBindings; 00095 00096 00097 <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroyAllDeclarations(<span class="keywordtype">void</span>); 00098 <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroyAllBindings(<span class="keywordtype">void</span>); 00099 00100 <span class="keyword">public</span>: 00101 <a name="l00102"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerw2">00102</a> <span class="keyword">enum</span> BufferLicenseType 00103 { 00105 BLT_MANUAL_RELEASE, 00107 BLT_AUTOMATIC_RELEASE 00108 }; 00109 00110 <span class="keyword">protected</span>: <a name="l00112"></a><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html">00112</a> <span class="keyword">class </span><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html">VertexBufferLicense</a> 00113 { 00114 <span class="keyword">public</span>: <a name="l00115"></a><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html#Ogre_1_1HardwareBufferManager_1_1VertexBufferLicenseo0">00115</a> <a class="code" href="classOgre_1_1HardwareVertexBuffer.html">HardwareVertexBuffer</a>* originalBufferPtr; <a name="l00116"></a><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html#Ogre_1_1HardwareBufferManager_1_1VertexBufferLicenseo1">00116</a> BufferLicenseType licenseType; <a name="l00117"></a><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html#Ogre_1_1HardwareBufferManager_1_1VertexBufferLicenseo2">00117</a> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> buffer; <a name="l00118"></a><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html#Ogre_1_1HardwareBufferManager_1_1VertexBufferLicenseo3">00118</a> HardwareBufferLicensee* licensee; <a name="l00119"></a><a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html#Ogre_1_1HardwareBufferManager_1_1VertexBufferLicensea0">00119</a> <a class="code" href="classOgre_1_1HardwareBufferManager_1_1VertexBufferLicense.html">VertexBufferLicense</a>( 00120 <a class="code" href="classOgre_1_1HardwareVertexBuffer.html">HardwareVertexBuffer</a>* orig, 00121 BufferLicenseType ltype, 00122 <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> buf, 00123 HardwareBufferLicensee* lic) 00124 : originalBufferPtr(orig), licenseType(ltype), buffer(buf), licensee(lic) {} 00125 00126 }; 00127 <a name="l00129"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx2">00129</a> <span class="keyword">typedef</span> std::vector<HardwareVertexBufferSharedPtr> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx2">FreeTemporaryVertexBufferList</a>; <a name="l00131"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx3">00131</a> <span class="keyword">typedef</span> std::map<HardwareVertexBuffer*, FreeTemporaryVertexBufferList*> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx3">FreeTemporaryVertexBufferMap</a>; <a name="l00133"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerp2">00133</a> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx3">FreeTemporaryVertexBufferMap</a> mFreeTempVertexBufferMap; <a name="l00135"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx4">00135</a> <span class="keyword">typedef</span> std::vector<VertexBufferLicense> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx4">TemporaryVertexBufferLicenseList</a>; <a name="l00137"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerp3">00137</a> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx4">TemporaryVertexBufferLicenseList</a> mTempVertexBufferLicenses; 00138 <a name="l00139"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx5">00139</a> <span class="keyword">typedef</span> std::set<HardwareVertexBuffer*> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx5">VertexBufferList</a>; <a name="l00140"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx6">00140</a> <span class="keyword">typedef</span> std::set<HardwareIndexBuffer*> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx6">IndexBufferList</a>; <a name="l00141"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerp4">00141</a> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx5">VertexBufferList</a> mVertexBuffers; <a name="l00142"></a><a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerp5">00142</a> <a class="code" href="classOgre_1_1HardwareBufferManager.html#Ogre_1_1HardwareBufferManagerx6">IndexBufferList</a> mIndexBuffers; 00143 00144 00146 <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> makeBufferCopy( 00147 <span class="keyword">const</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>& source, 00148 HardwareBuffer::Usage usage, <span class="keywordtype">bool</span> useShadowBuffer); 00149 00150 <span class="keyword">public</span>: 00151 HardwareBufferManager(); 00152 <span class="keyword">virtual</span> ~HardwareBufferManager(); 00181 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> 00182 createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, 00183 <span class="keywordtype">bool</span> useShadowBuffer = <span class="keyword">false</span>) = 0; 00200 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1HardwareIndexBufferSharedPtr.html">HardwareIndexBufferSharedPtr</a> 00201 createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, 00202 HardwareBuffer::Usage usage, <span class="keywordtype">bool</span> useShadowBuffer = <span class="keyword">false</span>) = 0; 00204 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1VertexDeclaration.html">VertexDeclaration</a>* createVertexDeclaration(<span class="keywordtype">void</span>); 00206 <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroyVertexDeclaration(<a class="code" href="classOgre_1_1VertexDeclaration.html">VertexDeclaration</a>* decl); 00207 00209 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1VertexBufferBinding.html">VertexBufferBinding</a>* createVertexBufferBinding(<span class="keywordtype">void</span>); 00211 <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroyVertexBufferBinding(<a class="code" href="classOgre_1_1VertexBufferBinding.html">VertexBufferBinding</a>* binding); 00212 00218 <span class="keyword">virtual</span> <span class="keywordtype">void</span> registerVertexBufferSourceAndCopy( 00219 <span class="keyword">const</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>& sourceBuffer, 00220 <span class="keyword">const</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>& copy); 00221 00238 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> allocateVertexBufferCopy( 00239 <span class="keyword">const</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>& sourceBuffer, 00240 BufferLicenseType licenseType, 00241 HardwareBufferLicensee* licensee, 00242 <span class="keywordtype">bool</span> copyData = <span class="keyword">false</span>); 00251 <span class="keyword">virtual</span> <span class="keywordtype">void</span> releaseVertexBufferCopy( 00252 <span class="keyword">const</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>& bufferCopy); 00253 00256 <span class="keyword">virtual</span> <span class="keywordtype">void</span> _releaseBufferCopies(<span class="keywordtype">void</span>); 00257 00265 <span class="keyword">virtual</span> <span class="keywordtype">void</span> _forceReleaseBufferCopies( 00266 <span class="keyword">const</span> <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a>& sourceBuffer); 00267 00269 <span class="keywordtype">void</span> _notifyVertexBufferDestroyed(<a class="code" href="classOgre_1_1HardwareVertexBuffer.html">HardwareVertexBuffer</a>* buf); 00271 <span class="keywordtype">void</span> _notifyIndexBufferDestroyed(<a class="code" href="classOgre_1_1HardwareIndexBuffer.html">HardwareIndexBuffer</a>* buf); 00272 00288 <span class="keyword">static</span> HardwareBufferManager& getSingleton(<span class="keywordtype">void</span>); 00304 <span class="keyword">static</span> HardwareBufferManager* getSingletonPtr(<span class="keywordtype">void</span>); 00305 00306 }; 00307 00308 } 00309 00310 <span class="preprocessor">#endif</span> 00311 <span class="preprocessor"></span> </pre></div><p> Copyright © 2000-2005 by The OGRE Team<br /> Last modified Wed Feb 23 00:19:07 2005 </p> </body> </html>