source: OGRE/trunk/ogrenew/Docs/api/html/OgreHardwareBuffer_8h-source.html @ 657

Revision 657, 17.8 KB checked in by mattausch, 18 years ago (diff)

added ogre dependencies and patched ogre sources

Line 
1<html>
2<head>
3<title>OgreHardwareBuffer.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4<link type="text/css" rel="stylesheet" href="style.css">
5</head>
6
7<body>
8<!-- Generated by Doxygen 1.3.6 -->
9<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
10<h1>OgreHardwareBuffer.h</h1><a href="OgreHardwareBuffer_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span>
1100002 <span class="comment">-----------------------------------------------------------------------------</span>
1200003 <span class="comment">This source file is part of OGRE</span>
1300004 <span class="comment">    (Object-oriented Graphics Rendering Engine)</span>
1400005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span>
1500006 <span class="comment"></span>
1600007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span>
1700008 <span class="comment">Also see acknowledgements in Readme.html</span>
1800009 <span class="comment"></span>
1900010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span>
2000011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span>
2100012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span>
2200013 <span class="comment">version.</span>
2300014 <span class="comment"></span>
2400015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span>
2500016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
2600017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span>
2700018 <span class="comment"></span>
2800019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span>
2900020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span>
3000021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span>
3100022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span>
3200023 <span class="comment">-----------------------------------------------------------------------------</span>
3300024 <span class="comment">*/</span>
3400025 <span class="preprocessor">#ifndef __HardwareBuffer__</span>
3500026 <span class="preprocessor"></span><span class="preprocessor">#define __HardwareBuffer__</span>
3600027 <span class="preprocessor"></span>
3700028 <span class="comment">// Precompiler options</span>
3800029 <span class="preprocessor">#include "<a class="code" href="OgrePrerequisites_8h.html">OgrePrerequisites.h</a>"</span>
3900030
4000031 <span class="keyword">namespace </span>Ogre {
4100032
42<a name="l00064"></a><a class="code" href="classOgre_1_1HardwareBuffer.html">00064</a>     <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a16">_OgreExport</a> HardwareBuffer
4300065     {
4400066
4500067         <span class="keyword">public</span>:
46<a name="l00069"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferw11">00069</a>             <span class="keyword">enum</span> Usage
4700070             {
4800074                 HBU_STATIC = 1,
4900080                 HBU_DYNAMIC = 2,
5000087                 HBU_WRITE_ONLY = 4,
5100096                 HBU_DISCARDABLE = 8,
5200098                 HBU_STATIC_WRITE_ONLY = 5,
5300104                 HBU_DYNAMIC_WRITE_ONLY = 6,
5400106                 HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE = 14
5500107
5600108
5700109             };
58<a name="l00111"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferw12">00111</a>             <span class="keyword">enum</span> LockOptions
5900112             {
6000114                 HBL_NORMAL,
6100119                 HBL_DISCARD,
6200123                 HBL_READ_ONLY,
6300127                 HBL_NO_OVERWRITE
6400128                 
6500129             };
6600130         <span class="keyword">protected</span>:
67<a name="l00131"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp2">00131</a>             size_t mSizeInBytes;
68<a name="l00132"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp3">00132</a>             Usage mUsage;
69<a name="l00133"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp4">00133</a>             <span class="keywordtype">bool</span> mIsLocked;
70<a name="l00134"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp5">00134</a>             size_t mLockStart;
71<a name="l00135"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp6">00135</a>             size_t mLockSize;
72<a name="l00136"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp7">00136</a>             <span class="keywordtype">bool</span> mSystemMemory;
73<a name="l00137"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp8">00137</a>             <span class="keywordtype">bool</span> mUseShadowBuffer;
74<a name="l00138"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp9">00138</a>             HardwareBuffer* mpShadowBuffer;
75<a name="l00139"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp10">00139</a>             <span class="keywordtype">bool</span> mShadowUpdated;
76<a name="l00140"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBufferp11">00140</a>             <span class="keywordtype">bool</span> mSuppressHardwareUpdate;
7700141             
7800143             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* lockImpl(size_t offset, size_t length, LockOptions options) = 0;
7900145             <span class="keyword">virtual</span> <span class="keywordtype">void</span> unlockImpl(<span class="keywordtype">void</span>) = 0;
8000146
8100147     <span class="keyword">public</span>:
82<a name="l00149"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareBuffera0">00149</a>             HardwareBuffer(Usage usage, <span class="keywordtype">bool</span> systemMemory, <span class="keywordtype">bool</span> useShadowBuffer)
8300150                 : mUsage(usage), mIsLocked(false), mSystemMemory(systemMemory),
8400151                 mUseShadowBuffer(useShadowBuffer), mpShadowBuffer(NULL), mShadowUpdated(false),
8500152                 mSuppressHardwareUpdate(false)
8600153             {
8700154                 <span class="comment">// If use shadow buffer, upgrade to WRITE_ONLY on hardware side</span>
8800155                 <span class="keywordflow">if</span> (useShadowBuffer &amp;&amp; usage == HBU_DYNAMIC)
8900156                 {
9000157                     mUsage = HBU_DYNAMIC_WRITE_ONLY;
9100158                 }
9200159                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (useShadowBuffer &amp;&amp; usage == HBU_STATIC)
9300160                 {
9400161                     mUsage = HBU_STATIC_WRITE_ONLY;
9500162                 }
9600163             }
97<a name="l00164"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareBuffera1">00164</a>             <span class="keyword">virtual</span> ~HardwareBuffer() {}
98<a name="l00171"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera4">00171</a>             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* lock(size_t offset, size_t length, LockOptions options)
9900172             {
10000173                 assert(!isLocked() &amp;&amp; <span class="stringliteral">"Cannot lock this buffer, it is already locked!"</span>);
10100174                 <span class="keywordtype">void</span>* ret;
10200175                 <span class="keywordflow">if</span> (mUseShadowBuffer)
10300176                 {
10400177                     <span class="keywordflow">if</span> (options != HBL_READ_ONLY)
10500178                     {
10600179                         <span class="comment">// we have to assume a read / write lock so we use the shadow buffer</span>
10700180                         <span class="comment">// and tag for sync on unlock()</span>
10800181                         mShadowUpdated = <span class="keyword">true</span>;
10900182                     }
11000183
11100184                     ret = mpShadowBuffer-&gt;lock(offset, length, options);
11200185                 }
11300186                 <span class="keywordflow">else</span>
11400187                 {
11500188                     <span class="comment">// Lock the real buffer if there is no shadow buffer </span>
11600189                     ret = lockImpl(offset, length, options);
11700190                     mIsLocked = <span class="keyword">true</span>;
11800191                 }
11900192                 mLockStart = offset;
12000193                 mLockSize = length;
12100194                 <span class="keywordflow">return</span> ret;
12200195             }
12300196
124<a name="l00201"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera5">00201</a>             <span class="keywordtype">void</span>* lock(LockOptions options)
12500202             {
12600203                 <span class="keywordflow">return</span> this-&gt;lock(0, mSizeInBytes, options);
12700204             }
128<a name="l00217"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera6">00217</a>             <span class="keyword">virtual</span> <span class="keywordtype">void</span> unlock(<span class="keywordtype">void</span>)
12900218             {
13000219                 assert(isLocked() &amp;&amp; <span class="stringliteral">"Cannot unlock this buffer, it is not locked!"</span>);
13100220
13200221                 <span class="comment">// If we used the shadow buffer this time...</span>
13300222                 <span class="keywordflow">if</span> (mUseShadowBuffer &amp;&amp; mpShadowBuffer-&gt;isLocked())
13400223                 {
13500224                     mpShadowBuffer-&gt;unlock();
13600225                     <span class="comment">// Potentially update the 'real' buffer from the shadow buffer</span>
13700226                     _updateFromShadow();
13800227                 }
13900228                 <span class="keywordflow">else</span>
14000229                 {
14100230                     <span class="comment">// Otherwise, unlock the real one</span>
14200231                     unlockImpl();
14300232                     mIsLocked = <span class="keyword">false</span>;
14400233                 }
14500234
14600235             }
14700236
14800243             <span class="keyword">virtual</span> <span class="keywordtype">void</span> readData(size_t offset, size_t length, <span class="keywordtype">void</span>* pDest) = 0;
14900252             <span class="keyword">virtual</span> <span class="keywordtype">void</span> writeData(size_t offset, size_t length, <span class="keyword">const</span> <span class="keywordtype">void</span>* pSource,
15000253                     <span class="keywordtype">bool</span> discardWholeBuffer = <span class="keyword">false</span>) = 0;
15100254
152<a name="l00265"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera9">00265</a>             <span class="keyword">virtual</span> <span class="keywordtype">void</span> copyData(HardwareBuffer&amp; srcBuffer, size_t srcOffset,
15300266                 size_t dstOffset, size_t length, <span class="keywordtype">bool</span> discardWholeBuffer = <span class="keyword">false</span>)
15400267             {
15500268                 <span class="keyword">const</span> <span class="keywordtype">void</span> *srcData = srcBuffer.<a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera4">lock</a>(
15600269                     srcOffset, length, HBL_READ_ONLY);
15700270                 this-&gt;writeData(dstOffset, length, srcData, discardWholeBuffer);
15800271                 srcBuffer.<a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera6">unlock</a>();
15900272             }
16000273
161<a name="l00275"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera10">00275</a>             <span class="keyword">virtual</span> <span class="keywordtype">void</span> _updateFromShadow(<span class="keywordtype">void</span>)
16200276             {
16300277                 <span class="keywordflow">if</span> (mUseShadowBuffer &amp;&amp; mShadowUpdated &amp;&amp; !mSuppressHardwareUpdate)
16400278                 {
16500279                     <span class="comment">// Do this manually to avoid locking problems</span>
16600280                     <span class="keyword">const</span> <span class="keywordtype">void</span> *srcData = mpShadowBuffer-&gt;lockImpl(
16700281                         mLockStart, mLockSize, HBL_READ_ONLY);
16800282                     <span class="comment">// Lock with discard if the whole buffer was locked, otherwise normal</span>
16900283                     LockOptions lockOpt;
17000284                     <span class="keywordflow">if</span> (mLockStart == 0 &amp;&amp; mLockSize == mSizeInBytes)
17100285                         lockOpt = HBL_DISCARD;
17200286                     <span class="keywordflow">else</span>
17300287                         lockOpt = HBL_NORMAL;
17400288                     
17500289                     <span class="keywordtype">void</span> *destData = this-&gt;lockImpl(
17600290                         mLockStart, mLockSize, lockOpt);
17700291                     <span class="comment">// Copy shadow to real</span>
17800292                     memcpy(destData, srcData, mLockSize);
17900293                     this-&gt;unlockImpl();
18000294                     mpShadowBuffer-&gt;unlockImpl();
18100295                     mShadowUpdated = <span class="keyword">false</span>;
18200296                 }
18300297             }
18400298
185<a name="l00300"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera11">00300</a>             size_t getSizeInBytes(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSizeInBytes; }
186<a name="l00302"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera12">00302</a>             Usage getUsage(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mUsage; }
187<a name="l00304"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera13">00304</a>             <span class="keywordtype">bool</span> isSystemMemory(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSystemMemory; }
188<a name="l00306"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera14">00306</a>             <span class="keywordtype">bool</span> hasShadowBuffer(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mUseShadowBuffer; }
189<a name="l00308"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera15">00308</a>             <span class="keywordtype">bool</span> isLocked(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{
19000309                 <span class="keywordflow">return</span> mIsLocked || (mUseShadowBuffer &amp;&amp; mpShadowBuffer-&gt;isLocked());
19100310             }
192<a name="l00312"></a><a class="code" href="classOgre_1_1HardwareBuffer.html#Ogre_1_1HardwareVertexBuffera16">00312</a>             <span class="keywordtype">void</span> suppressHardwareUpdate(<span class="keywordtype">bool</span> suppress) {
19300313                 mSuppressHardwareUpdate = suppress;
19400314                 <span class="keywordflow">if</span> (!suppress)
19500315                     _updateFromShadow();
19600316             }
19700317
19800318
19900319
20000320
20100321             
20200322     };
20300323 }
20400324 <span class="preprocessor">#endif</span>
20500325 <span class="preprocessor"></span>
20600326
207</pre></div><hr>
208<p>
209Copyright &copy; 2000-2005 by The OGRE Team<br />
210<!--Creative Commons License--><a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/"><img alt="Creative Commons License" border="0" src="http://creativecommons.org/images/public/somerights20.png"/></a><br/>
211This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License</a>.<br/>
212                <!--/Creative Commons License--><!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
213                <Work rdf:about="">
214                        <license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/" />
215        <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" />
216                </Work>
217                <License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"><permits rdf:resource="http://web.resource.org/cc/Reproduction"/><permits rdf:resource="http://web.resource.org/cc/Distribution"/><requires rdf:resource="http://web.resource.org/cc/Notice"/><requires rdf:resource="http://web.resource.org/cc/Attribution"/><permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/><requires rdf:resource="http://web.resource.org/cc/ShareAlike"/></License></rdf:RDF> -->
218
219Last modified Sun Feb 12 12:59:46 2006
220</p>
221</body>
222</html>
Note: See TracBrowser for help on using the repository browser.