source: OGRE/trunk/ogrenew/Docs/api/html/OgreRenderQueueSortingGrouping_8h-source.html @ 692

Revision 692, 40.7 KB checked in by mattausch, 19 years ago (diff)

adding ogre 1.2 and dependencies

Line 
1<html>
2<head>
3<title>OgreRenderQueueSortingGrouping.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>OgreRenderQueueSortingGrouping.h</h1><a href="OgreRenderQueueSortingGrouping_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 __RenderQueueSortingGrouping_H__</span>
3500026 <span class="preprocessor"></span><span class="preprocessor">#define __RenderQueueSortingGrouping_H__</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 <span class="preprocessor">#include "<a class="code" href="OgreIteratorWrappers_8h.html">OgreIteratorWrappers.h</a>"</span>
4000031 <span class="preprocessor">#include "<a class="code" href="OgreMaterial_8h.html">OgreMaterial.h</a>"</span>
4100032 <span class="preprocessor">#include "<a class="code" href="OgreTechnique_8h.html">OgreTechnique.h</a>"</span>
4200033 <span class="preprocessor">#include "<a class="code" href="OgrePass_8h.html">OgrePass.h</a>"</span>
4300034 <span class="preprocessor">#include "<a class="code" href="OgreRadixSort_8h.html">OgreRadixSort.h</a>"</span>
4400035
4500036 <span class="keyword">namespace </span>Ogre {
4600037
47<a name="l00042"></a><a class="code" href="structOgre_1_1RenderablePass.html">00042</a>     <span class="keyword">struct </span><a class="code" href="structOgre_1_1RenderablePass.html">RenderablePass</a>
4800043     {
49<a name="l00045"></a><a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">00045</a>         <a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* <a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a>;
50<a name="l00047"></a><a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso1">00047</a>         <a class="code" href="classOgre_1_1Pass.html">Pass</a>* pass;
5100048
52<a name="l00049"></a><a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePassa0">00049</a>         <a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePassa0">RenderablePass</a>(<a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* rend, <a class="code" href="classOgre_1_1Pass.html">Pass</a>* p) :<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a>(rend), pass(p) {}
5300050     };
5400051
5500052
56<a name="l00060"></a><a class="code" href="classOgre_1_1QueuedRenderableVisitor.html">00060</a>     <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a16">_OgreExport</a> QueuedRenderableVisitor
5700061     {
5800062     <span class="keyword">public</span>:
59<a name="l00063"></a><a class="code" href="classOgre_1_1QueuedRenderableVisitor.html#Ogre_1_1QueuedRenderableVisitora0">00063</a>         QueuedRenderableVisitor() {}
60<a name="l00064"></a><a class="code" href="classOgre_1_1QueuedRenderableVisitor.html#Ogre_1_1QueuedRenderableVisitora1">00064</a>         <span class="keyword">virtual</span> ~QueuedRenderableVisitor() {}
6100065         
6200072         <span class="keyword">virtual</span> <span class="keywordtype">void</span> visit(<span class="keyword">const</span> <a class="code" href="structOgre_1_1RenderablePass.html">RenderablePass</a>* rp) = 0;
6300073
6400074         <span class="comment">/* When visiting a collection grouped by pass, this is</span>
6500075 <span class="comment">            called when the grouping pass changes.</span>
6600076 <span class="comment">        @remarks</span>
6700077 <span class="comment">            If this method is called, the RenderablePass visit </span>
6800078 <span class="comment">            method will not be called for this collection. The </span>
6900079 <span class="comment">            Renderable visit method will be called for each item</span>
7000080 <span class="comment">            underneath the pass grouping level.</span>
7100081 <span class="comment">        @returns True to continue, false to skip the Renderables underneath</span>
7200082 <span class="comment">        */</span>
7300083         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visit(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Pass.html">Pass</a>* p) = 0;
7400090         <span class="keyword">virtual</span> <span class="keywordtype">void</span> visit(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* r) = 0;
7500091         
7600092         
7700093     };
7800094
79<a name="l00104"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html">00104</a>     <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> QueuedRenderableCollection
8000105     {
8100106     <span class="keyword">public</span>:
82<a name="l00115"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionw3">00115</a>         <span class="keyword">enum</span> OrganisationMode
8300116         {
8400118             OM_PASS_GROUP = 1,
8500120             OM_SORT_DESCENDING = 2,
8600124             OM_SORT_ASCENDING = 6
8700125         };
8800126
8900127     <span class="keyword">protected</span>:
90<a name="l00129"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1PassGroupLess.html">00129</a>         <span class="keyword">struct </span><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1PassGroupLess.html">PassGroupLess</a>
9100130         {
92<a name="l00131"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1PassGroupLess.html#Ogre_1_1QueuedRenderableCollection_1_1PassGroupLessa0">00131</a>             <span class="keywordtype">bool</span> <a class="code" href="class__OgreExport.html">_OgreExport</a> operator()(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Pass.html">Pass</a>* a, <span class="keyword">const</span> <a class="code" href="classOgre_1_1Pass.html">Pass</a>* b)<span class="keyword"> const</span>
9300132 <span class="keyword">            </span>{
9400133                 <span class="comment">// Sort by passHash, which is pass, then texture unit changes</span>
9500134                 <a class="code" href="namespaceOgre.html#a455">uint32</a> hasha = a-&gt;<a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa130">getHash</a>();
9600135                 <a class="code" href="namespaceOgre.html#a455">uint32</a> hashb = b-&gt;<a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa130">getHash</a>();
9700136                 <span class="keywordflow">if</span> (hasha == hashb)
9800137                 {
9900138                     <span class="comment">// Must differentTransparentQueueItemLessiate by pointer incase 2 passes end up with the same hash</span>
10000139                     <span class="keywordflow">return</span> a &lt; b;
10100140                 }
10200141                 <span class="keywordflow">else</span>
10300142                 {
10400143                     <span class="keywordflow">return</span> hasha &lt; hashb;
10500144                 }
10600145             }
10700146         };
108<a name="l00148"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLess.html">00148</a>         <span class="keyword">struct </span><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLess.html">DepthSortDescendingLess</a>
10900149         {
110<a name="l00150"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLess.html#Ogre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLesso0">00150</a>             <span class="keyword">const</span> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* camera;
11100151
112<a name="l00152"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLess.html#Ogre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLessa0">00152</a>             <a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLess.html">DepthSortDescendingLess</a>(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* cam)
11300153                 : camera(cam)
11400154             {
11500155             }
11600156
117<a name="l00157"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLess.html#Ogre_1_1QueuedRenderableCollection_1_1DepthSortDescendingLessa1">00157</a>             <span class="keywordtype">bool</span> <a class="code" href="class__OgreExport.html">_OgreExport</a> operator()(<span class="keyword">const</span> <a class="code" href="structOgre_1_1RenderablePass.html">RenderablePass</a>&amp; a, <span class="keyword">const</span> <a class="code" href="structOgre_1_1RenderablePass.html">RenderablePass</a>&amp; b)<span class="keyword"> const</span>
11800158 <span class="keyword">            </span>{
11900159                 <span class="keywordflow">if</span> (a.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a> == b.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a>)
12000160                 {
12100161                     <span class="comment">// Same renderable, sort by pass hash</span>
12200162                     <span class="keywordflow">return</span> a.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso1">pass</a>-&gt;<a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa130">getHash</a>() &lt; b.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso1">pass</a>-&gt;<a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa130">getHash</a>();
12300163                 }
12400164                 <span class="keywordflow">else</span>
12500165                 {
12600166                     <span class="comment">// Different renderables, sort by depth</span>
12700167                     <a class="code" href="namespaceOgre.html#a465">Real</a> adepth = a.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a>-&gt;<a class="code" href="classOgre_1_1Renderable.html#Ogre_1_1SimpleRenderablea61">getSquaredViewDepth</a>(camera);
12800168                     <a class="code" href="namespaceOgre.html#a465">Real</a> bdepth = b.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a>-&gt;<a class="code" href="classOgre_1_1Renderable.html#Ogre_1_1SimpleRenderablea61">getSquaredViewDepth</a>(camera);
12900169                     <span class="keywordflow">if</span> (adepth == bdepth)
13000170                     {
13100171                         <span class="comment">// Must return deterministic result, doesn't matter what</span>
13200172                         <span class="keywordflow">return</span> a.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso1">pass</a> &lt; b.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso1">pass</a>;
13300173                     }
13400174                     <span class="keywordflow">else</span>
13500175                     {
13600176                         <span class="comment">// Sort DESCENDING by depth (ie far objects first)</span>
13700177                         <span class="keywordflow">return</span> (adepth &gt; bdepth);
13800178                     }
13900179                 }
14000180
14100181             }
14200182         };
14300183
144<a name="l00187"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx0">00187</a>         <span class="keyword">typedef</span> std::vector&lt;RenderablePass&gt; <a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx0">RenderablePassList</a>;
145<a name="l00188"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx1">00188</a>         <span class="keyword">typedef</span> std::vector&lt;Renderable*&gt; <a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx1">RenderableList</a>;
146<a name="l00190"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx2">00190</a>         <span class="keyword">typedef</span> std::map&lt;Pass*, RenderableList*, PassGroupLess&gt; <a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx2">PassGroupRenderableMap</a>;
14700191
148<a name="l00193"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorPass.html">00193</a>         <span class="keyword">struct </span><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorPass.html">RadixSortFunctorPass</a>
14900194         {
150<a name="l00195"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorPass.html#Ogre_1_1QueuedRenderableCollection_1_1RadixSortFunctorPassa0">00195</a>             <a class="code" href="namespaceOgre.html#a455">uint32</a> operator()(<span class="keyword">const</span> <a class="code" href="structOgre_1_1RenderablePass.html">RenderablePass</a>&amp; p)<span class="keyword"> const</span>
15100196 <span class="keyword">            </span>{
15200197                 <span class="keywordflow">return</span> p.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso1">pass</a>-&gt;<a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa130">getHash</a>();
15300198             }
15400199         };
15500200
156<a name="l00202"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectiont0">00202</a>         <span class="keyword">static</span> <a class="code" href="classOgre_1_1RadixSort.html">RadixSort&lt;RenderablePassList, RenderablePass, uint32&gt;</a> msRadixSorter1;
15700203
158<a name="l00205"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistance.html">00205</a>         <span class="keyword">struct </span><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistance.html">RadixSortFunctorDistance</a>
15900206         {
160<a name="l00207"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistance.html#Ogre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistanceo0">00207</a>             <span class="keyword">const</span> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* camera;
16100208
162<a name="l00209"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistance.html#Ogre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistancea0">00209</a>             <a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistance.html">RadixSortFunctorDistance</a>(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* cam)
16300210                 : camera(cam)
16400211             {
16500212             }
16600213
167<a name="l00214"></a><a class="code" href="structOgre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistance.html#Ogre_1_1QueuedRenderableCollection_1_1RadixSortFunctorDistancea1">00214</a>             <span class="keywordtype">float</span> operator()(<span class="keyword">const</span> <a class="code" href="structOgre_1_1RenderablePass.html">RenderablePass</a>&amp; p)<span class="keyword"> const</span>
16800215 <span class="keyword">            </span>{
16900216                 <span class="comment">// Sort DESCENDING by depth (ie far objects first), use negative distance</span>
17000217                 <span class="comment">// here because radix sorter always dealing with accessing sort</span>
17100218                 <span class="keywordflow">return</span> static_cast&lt;float&gt;(- p.<a class="code" href="structOgre_1_1RenderablePass.html#Ogre_1_1RenderablePasso0">renderable</a>-&gt;<a class="code" href="classOgre_1_1Renderable.html#Ogre_1_1SimpleRenderablea61">getSquaredViewDepth</a>(camera));
17200219             }
17300220         };
17400221
175<a name="l00223"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectiont1">00223</a>         <span class="keyword">static</span> <a class="code" href="classOgre_1_1RadixSort.html">RadixSort&lt;RenderablePassList, RenderablePass, float&gt;</a> msRadixSorter2;
17600224
177<a name="l00226"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionp0">00226</a>         <a class="code" href="namespaceOgre.html#a457">uint8</a> mOrganisationMode;
17800227
179<a name="l00229"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionp1">00229</a>         <a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx2">PassGroupRenderableMap</a> mGrouped;
180<a name="l00231"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionp2">00231</a>         <a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectionx0">RenderablePassList</a> mSortedDescending;
18100232
18200234         <span class="keywordtype">void</span> acceptVisitorGrouped(QueuedRenderableVisitor* visitor) <span class="keyword">const</span>;
18300236         <span class="keywordtype">void</span> acceptVisitorDescending(QueuedRenderableVisitor* visitor) <span class="keyword">const</span>;
18400238         <span class="keywordtype">void</span> acceptVisitorAscending(QueuedRenderableVisitor* visitor) <span class="keyword">const</span>;
18500239
18600240     <span class="keyword">public</span>:
18700241         QueuedRenderableCollection();
18800242         ~QueuedRenderableCollection();
18900243
19000245         <span class="keywordtype">void</span> clear(<span class="keywordtype">void</span>);
19100246
19200252         <span class="keywordtype">void</span> removePassGroup(<a class="code" href="classOgre_1_1Pass.html">Pass</a>* p);
19300253         
194<a name="l00259"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectiona4">00259</a>         <span class="keywordtype">void</span> resetOrganisationModes(<span class="keywordtype">void</span>)
19500260         {
19600261             mOrganisationMode = 0;
19700262         }
19800263         
199<a name="l00269"></a><a class="code" href="classOgre_1_1QueuedRenderableCollection.html#Ogre_1_1QueuedRenderableCollectiona5">00269</a>         <span class="keywordtype">void</span> addOrganisationMode(OrganisationMode om)
20000270         {
20100271             mOrganisationMode |= om;
20200272         }
20300273
20400275         <span class="keywordtype">void</span> addRenderable(<a class="code" href="classOgre_1_1Pass.html">Pass</a>* pass, <a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* rend);
20500276         
20600280         <span class="keywordtype">void</span> sort(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* cam);
20700281
20800288         <span class="keywordtype">void</span> acceptVisitor(QueuedRenderableVisitor* visitor, OrganisationMode om) <span class="keyword">const</span>;
20900289         
21000290     };
21100291
212<a name="l00311"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html">00311</a>     <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> RenderPriorityGroup
21300312     {
21400313     <span class="keyword">protected</span>:
21500314
216<a name="l00316"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp0">00316</a>         <a class="code" href="classOgre_1_1RenderQueueGroup.html">RenderQueueGroup</a>* mParent;
217<a name="l00317"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp1">00317</a>         <span class="keywordtype">bool</span> mSplitPassesByLightingType;
218<a name="l00318"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp2">00318</a>         <span class="keywordtype">bool</span> mSplitNoShadowPasses;
219<a name="l00319"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp3">00319</a>         <span class="keywordtype">bool</span> mShadowCastersNotReceivers;
220<a name="l00321"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp4">00321</a>         QueuedRenderableCollection mSolidsBasic;
221<a name="l00323"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp5">00323</a>         QueuedRenderableCollection mSolidsDiffuseSpecular;
222<a name="l00325"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp6">00325</a>         QueuedRenderableCollection mSolidsDecal;
223<a name="l00327"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp7">00327</a>         QueuedRenderableCollection mSolidsNoShadowReceive;
224<a name="l00329"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupp8">00329</a>         QueuedRenderableCollection mTransparents;
22500330
22600332         <span class="keywordtype">void</span> removePassEntry(<a class="code" href="classOgre_1_1Pass.html">Pass</a>* p);
22700333
22800335         <span class="keywordtype">void</span> addSolidRenderable(<a class="code" href="classOgre_1_1Technique.html">Technique</a>* pTech, <a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* rend, <span class="keywordtype">bool</span> toNoShadowMap);
22900337         <span class="keywordtype">void</span> addSolidRenderableSplitByLightType(<a class="code" href="classOgre_1_1Technique.html">Technique</a>* pTech, <a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* rend);
23000339         <span class="keywordtype">void</span> addTransparentRenderable(<a class="code" href="classOgre_1_1Technique.html">Technique</a>* pTech, <a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* rend);
23100340
23200341     <span class="keyword">public</span>:
23300342         RenderPriorityGroup(<a class="code" href="classOgre_1_1RenderQueueGroup.html">RenderQueueGroup</a>* parent,
23400343             <span class="keywordtype">bool</span> splitPassesByLightingType,
23500344             <span class="keywordtype">bool</span> splitNoShadowPasses,
23600345             <span class="keywordtype">bool</span> shadowCastersNotReceivers);
23700346           
238<a name="l00347"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa1">00347</a>         ~RenderPriorityGroup() { }
23900348
240<a name="l00353"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa2">00353</a>         <span class="keyword">const</span> QueuedRenderableCollection&amp; getSolidsBasic(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
24100354 <span class="keyword">        </span>{ <span class="keywordflow">return</span> mSolidsBasic; }
242<a name="l00357"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa3">00357</a>         <span class="keyword">const</span> QueuedRenderableCollection&amp; getSolidsDiffuseSpecular(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
24300358 <span class="keyword">        </span>{ <span class="keywordflow">return</span> mSolidsDiffuseSpecular; }
244<a name="l00361"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa4">00361</a>         <span class="keyword">const</span> QueuedRenderableCollection&amp; getSolidsDecal(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
24500362 <span class="keyword">        </span>{ <span class="keywordflow">return</span> mSolidsDecal; }
246<a name="l00365"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa5">00365</a>         <span class="keyword">const</span> QueuedRenderableCollection&amp; getSolidsNoShadowReceive(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
24700366 <span class="keyword">        </span>{ <span class="keywordflow">return</span> mSolidsNoShadowReceive; }
248<a name="l00368"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa6">00368</a>         <span class="keyword">const</span> QueuedRenderableCollection&amp; getTransparents(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
24900369 <span class="keyword">        </span>{ <span class="keywordflow">return</span> mTransparents; }
25000370
25100371
25200378         <span class="keywordtype">void</span> resetOrganisationModes(<span class="keywordtype">void</span>);
25300379         
25400386         <span class="keywordtype">void</span> addOrganisationMode(QueuedRenderableCollection::OrganisationMode om);
25500387
25600394         <span class="keywordtype">void</span> defaultOrganisationMode(<span class="keywordtype">void</span>);
25700395
25800397         <span class="keywordtype">void</span> addRenderable(<a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* pRend, <a class="code" href="classOgre_1_1Technique.html">Technique</a>* pTech);
25900398
26000401         <span class="keywordtype">void</span> sort(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* cam);
26100402
26200405         <span class="keywordtype">void</span> clear(<span class="keywordtype">void</span>);
26300406
264<a name="l00410"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa13">00410</a>         <span class="keywordtype">void</span> setSplitPassesByLightingType(<span class="keywordtype">bool</span> split)
26500411         {
26600412             mSplitPassesByLightingType = split;
26700413         }
26800414
269<a name="l00418"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa14">00418</a>         <span class="keywordtype">void</span> setSplitNoShadowPasses(<span class="keywordtype">bool</span> split)
27000419         {
27100420             mSplitNoShadowPasses = split;
27200421         }
27300422
274<a name="l00426"></a><a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa15">00426</a>         <span class="keywordtype">void</span> setShadowCastersCannotBeReceivers(<span class="keywordtype">bool</span> ind)
27500427         {
27600428             mShadowCastersNotReceivers = ind;
27700429         }
27800430
27900431
28000432
28100433     };
28200434
28300435
284<a name="l00443"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html">00443</a>     <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> RenderQueueGroup
28500444     {
28600445     <span class="keyword">public</span>:
287<a name="l00446"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupw0">00446</a>         <span class="keyword">typedef</span> std::map&lt;ushort, RenderPriorityGroup*, std::less&lt;ushort&gt; &gt; <a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupw0">PriorityMap</a>;
288<a name="l00447"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupw1">00447</a>         <span class="keyword">typedef</span> <a class="code" href="classOgre_1_1MapIterator.html">MapIterator&lt;PriorityMap&gt;</a> <a class="code" href="classOgre_1_1MapIterator.html">PriorityMapIterator</a>;
28900448     <span class="keyword">protected</span>:
290<a name="l00449"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupp0">00449</a>         <a class="code" href="classOgre_1_1RenderQueue.html">RenderQueue</a>* mParent;
291<a name="l00450"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupp1">00450</a>         <span class="keywordtype">bool</span> mSplitPassesByLightingType;
292<a name="l00451"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupp2">00451</a>         <span class="keywordtype">bool</span> mSplitNoShadowPasses;
293<a name="l00452"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupp3">00452</a>         <span class="keywordtype">bool</span> mShadowCastersNotReceivers;
294<a name="l00454"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupp4">00454</a>         <a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupw0">PriorityMap</a> mPriorityGroups;
295<a name="l00456"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupp5">00456</a>         <span class="keywordtype">bool</span> mShadowsEnabled;
29600457
29700458
29800459     <span class="keyword">public</span>:
299<a name="l00460"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa0">00460</a>         RenderQueueGroup(<a class="code" href="classOgre_1_1RenderQueue.html">RenderQueue</a>* parent,
30000461             <span class="keywordtype">bool</span> splitPassesByLightingType,
30100462             <span class="keywordtype">bool</span> splitNoShadowPasses,
30200463             <span class="keywordtype">bool</span> shadowCastersNotReceivers)
30300464             : mParent(parent)
30400465             , mSplitPassesByLightingType(splitPassesByLightingType)
30500466             , mSplitNoShadowPasses(splitNoShadowPasses)
30600467             , mShadowCastersNotReceivers(shadowCastersNotReceivers)
30700468             , mShadowsEnabled(true)
30800469         {
30900470         }
31000471
311<a name="l00472"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa1">00472</a>         ~RenderQueueGroup() {
31200473             <span class="comment">// destroy contents now</span>
31300474             PriorityMap::iterator i;
31400475             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != mPriorityGroups.end(); ++i)
31500476             {
31600477                 <span class="keyword">delete</span> i-&gt;second;
31700478             }
31800479         }
31900480
320<a name="l00482"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa2">00482</a>         <a class="code" href="classOgre_1_1MapIterator.html">PriorityMapIterator</a> getIterator(<span class="keywordtype">void</span>)
32100483         {
32200484             <span class="keywordflow">return</span> <a class="code" href="classOgre_1_1MapIterator.html">PriorityMapIterator</a>(mPriorityGroups.begin(), mPriorityGroups.end());
32300485         }
32400486
325<a name="l00488"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa3">00488</a>         <span class="keywordtype">void</span> addRenderable(<a class="code" href="classOgre_1_1Renderable.html">Renderable</a>* pRend, <a class="code" href="classOgre_1_1Technique.html">Technique</a>* pTech, <a class="code" href="namespaceOgre.html#a467">ushort</a> priority)
32600489         {
32700490             <span class="comment">// Check if priority group is there</span>
32800491             PriorityMap::iterator i = mPriorityGroups.find(priority);
32900492             RenderPriorityGroup* pPriorityGrp;
33000493             <span class="keywordflow">if</span> (i == mPriorityGroups.end())
33100494             {
33200495                 <span class="comment">// Missing, create</span>
33300496                 pPriorityGrp = <span class="keyword">new</span> RenderPriorityGroup(<span class="keyword">this</span>,
33400497                     mSplitPassesByLightingType,
33500498                     mSplitNoShadowPasses,
33600499                     mShadowCastersNotReceivers);
33700500                 mPriorityGroups.insert(PriorityMap::value_type(priority, pPriorityGrp));
33800501             }
33900502             <span class="keywordflow">else</span>
34000503             {
34100504                 pPriorityGrp = i-&gt;second;
34200505             }
34300506
34400507             <span class="comment">// Add</span>
34500508             pPriorityGrp-&gt;<a class="code" href="classOgre_1_1RenderPriorityGroup.html#Ogre_1_1RenderPriorityGroupa10">addRenderable</a>(pRend, pTech);
34600509
34700510         }
34800511
349<a name="l00519"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa4">00519</a>         <span class="keywordtype">void</span> clear(<span class="keywordtype">bool</span> destroy = <span class="keyword">false</span>)
35000520         {
35100521             PriorityMap::iterator i, iend;
35200522             iend = mPriorityGroups.end();
35300523             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
35400524             {
35500525                 <span class="keywordflow">if</span> (destroy)
35600526                     <span class="keyword">delete</span> i-&gt;second;
35700527                 <span class="keywordflow">else</span>
35800528                     i-&gt;second-&gt;clear();
35900529             }
36000530
36100531             <span class="keywordflow">if</span> (destroy)
36200532                 mPriorityGroups.clear();
36300533
36400534         }
36500535
366<a name="l00548"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa5">00548</a>         <span class="keywordtype">void</span> setShadowsEnabled(<span class="keywordtype">bool</span> enabled) { mShadowsEnabled = enabled; }
36700549
368<a name="l00551"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa6">00551</a>         <span class="keywordtype">bool</span> getShadowsEnabled(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mShadowsEnabled; }
36900552
370<a name="l00556"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa7">00556</a>         <span class="keywordtype">void</span> setSplitPassesByLightingType(<span class="keywordtype">bool</span> split)
37100557         {
37200558             mSplitPassesByLightingType = split;
37300559             PriorityMap::iterator i, iend;
37400560             iend = mPriorityGroups.end();
37500561             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
37600562             {
37700563                 i-&gt;second-&gt;setSplitPassesByLightingType(split);
37800564             }
37900565         }
380<a name="l00570"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa8">00570</a>         <span class="keywordtype">void</span> setSplitNoShadowPasses(<span class="keywordtype">bool</span> split)
38100571         {
38200572             mSplitNoShadowPasses = split;
38300573             PriorityMap::iterator i, iend;
38400574             iend = mPriorityGroups.end();
38500575             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
38600576             {
38700577                 i-&gt;second-&gt;setSplitNoShadowPasses(split);
38800578             }
38900579         }
390<a name="l00583"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa9">00583</a>         <span class="keywordtype">void</span> setShadowCastersCannotBeReceivers(<span class="keywordtype">bool</span> ind)
39100584         {
39200585             mShadowCastersNotReceivers = ind;
39300586             PriorityMap::iterator i, iend;
39400587             iend = mPriorityGroups.end();
39500588             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
39600589             {
39700590                 i-&gt;second-&gt;setShadowCastersCannotBeReceivers(ind);
39800591             }
39900592         }
400<a name="l00599"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa10">00599</a>         <span class="keywordtype">void</span> resetOrganisationModes(<span class="keywordtype">void</span>)
40100600         {
40200601             PriorityMap::iterator i, iend;
40300602             iend = mPriorityGroups.end();
40400603             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
40500604             {
40600605                 i-&gt;second-&gt;resetOrganisationModes();
40700606             }
40800607         }
40900608         
410<a name="l00615"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa11">00615</a>         <span class="keywordtype">void</span> addOrganisationMode(QueuedRenderableCollection::OrganisationMode om)
41100616         {
41200617             PriorityMap::iterator i, iend;
41300618             iend = mPriorityGroups.end();
41400619             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
41500620             {
41600621                 i-&gt;second-&gt;addOrganisationMode(om);
41700622             }
41800623         }
41900624
420<a name="l00631"></a><a class="code" href="classOgre_1_1RenderQueueGroup.html#Ogre_1_1RenderQueueGroupa12">00631</a>         <span class="keywordtype">void</span> defaultOrganisationMode(<span class="keywordtype">void</span>)
42100632         {
42200633             PriorityMap::iterator i, iend;
42300634             iend = mPriorityGroups.end();
42400635             <span class="keywordflow">for</span> (i = mPriorityGroups.begin(); i != iend; ++i)
42500636             {
42600637                 i-&gt;second-&gt;defaultOrganisationMode();
42700638             }
42800639         }
42900640
43000641     };
43100642
43200643
43300644
43400645 }
43500646
43600647 <span class="preprocessor">#endif</span>
43700648 <span class="preprocessor"></span>
43800649
439</pre></div><hr>
440<p>
441Copyright &copy; 2000-2005 by The OGRE Team<br />
442<!--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/>
443This 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/>
444                <!--/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#">
445                <Work rdf:about="">
446                        <license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/" />
447        <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" />
448                </Work>
449                <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> -->
450
451Last modified Sun Mar 12 14:37:48 2006
452</p>
453</body>
454</html>
Note: See TracBrowser for help on using the repository browser.