diff options
Diffstat (limited to 'docs/doxygen/nel/coarse__mesh__manager_8cpp-source.html')
-rw-r--r-- | docs/doxygen/nel/coarse__mesh__manager_8cpp-source.html | 696 |
1 files changed, 696 insertions, 0 deletions
diff --git a/docs/doxygen/nel/coarse__mesh__manager_8cpp-source.html b/docs/doxygen/nel/coarse__mesh__manager_8cpp-source.html new file mode 100644 index 00000000..c84c7644 --- /dev/null +++ b/docs/doxygen/nel/coarse__mesh__manager_8cpp-source.html @@ -0,0 +1,696 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<HTML> +<HEAD> + <TITLE>nevrax.org : docs</TITLE> + <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css"> + <link href="doxygen.css" rel="stylesheet" type="text/css"> +</HEAD> +<BODY MARGINHEIGHT="0" MARGINWIDTH="0"> + +<!-- uplinks --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A> </TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A> </TD> + </TR> +</TABLE> + +<!-- banner Nevrax --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%> + <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR> +</TABLE> + +<!-- main table --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + + <!------ Begin Box ------> + <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black> + <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF> + <TABLE cellspacing=0 cellpadding=1 border=0> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr> + </TABLE> + </TD></TR></TABLE></TD></TR></TABLE> + <!------ End Box ------> + + </TD> + <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + +<!-- title --> +<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td> +<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A> +</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT=""> +</td></tr></table> + + +<!-- block --> +<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD> + <TD><B>Documentation</B></TD> + <TD ALIGN=RIGHT> </td> +</tr></table> +<!-- Generated by Doxygen 1.2.14 --> +<center> +<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">Compound 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">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> </center> +<hr><h1>coarse_mesh_manager.cpp</h1><a href="coarse__mesh__manager_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 +00007 <font class="comment">/* Copyright, 2001 Nevrax Ltd.</font> +00008 <font class="comment"> *</font> +00009 <font class="comment"> * This file is part of NEVRAX NEL.</font> +00010 <font class="comment"> * NEVRAX NEL is free software; you can redistribute it and/or modify</font> +00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font> +00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font> +00013 <font class="comment"> * any later version.</font> +00014 <font class="comment"></font> +00015 <font class="comment"> * NEVRAX NEL is distributed in the hope that it will be useful, but</font> +00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font> +00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font> +00018 <font class="comment"> * General Public License for more details.</font> +00019 <font class="comment"></font> +00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font> +00021 <font class="comment"> * along with NEVRAX NEL; see the file COPYING. If not, write to the</font> +00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font> +00023 <font class="comment"> * MA 02111-1307, USA.</font> +00024 <font class="comment"> */</font> +00025 +00026 <font class="preprocessor">#include "<a class="code" href="std3d_8h.html">std3d.h</a>"</font> +00027 +00028 <font class="preprocessor">#include "<a class="code" href="coarse__mesh__manager_8h.html">3d/coarse_mesh_manager.h</a>"</font> +00029 <font class="preprocessor">#include "<a class="code" href="mesh_8h.html">3d/mesh.h</a>"</font> +00030 <font class="preprocessor">#include "<a class="code" href="texture__file_8h.html">3d/texture_file.h</a>"</font> +00031 <font class="preprocessor">#include "<a class="code" href="hierarchical__timer_8h.html">nel/misc/hierarchical_timer.h</a>"</font> +00032 <font class="preprocessor">#include "<a class="code" href="clip__trav_8h.html">3d/clip_trav.h</a>"</font> +00033 +00034 +00035 <font class="keyword">namespace </font>NL3D +00036 { +00037 +00038 +00039 <a class="code" href="hierarchical__timer_8h.html#a6">H_AUTO_DECL</a>( NL3D_StaticLod_AddDelMesh ) +00040 <a class="code" href="hierarchical__timer_8h.html#a6">H_AUTO_DECL</a>( NL3D_StaticLod_UpdateMesh ) +00041 +00042 +00043 <font class="comment">// ***************************************************************************</font> +00044 +<a name="l00045"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#d0">00045</a> <font class="keywordtype">void</font> CCoarseMeshManager::registerBasic() +00046 { +00047 CMOT::registerModel (<a class="code" href="namespaceNL3D.html#a27">CoarseMeshManagerId</a>, <a class="code" href="namespaceNL3D.html#a276">TransformId</a>, CCoarseMeshManager::creator); +00048 CMOT::registerObs (<a class="code" href="namespaceNL3D.html#a25">ClipTravId</a>, <a class="code" href="namespaceNL3D.html#a27">CoarseMeshManagerId</a>, CCoarseMeshClipObs::creator); +00049 } +00050 +00051 <font class="comment">// ***************************************************************************</font> +00052 +<a name="l00053"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a0">00053</a> CCoarseMeshManager::CCoarseMeshManager() +00054 { +00055 <font class="comment">// Set as opaque</font> +00056 <a class="code" href="classNL3D_1_1CTransform.html#a0">setTransparency</a> (<font class="keyword">false</font>); +00057 <a class="code" href="classNL3D_1_1CTransform.html#a1">setOpacity</a> (<font class="keyword">true</font>); +00058 +00059 <font class="comment">// ** Init texture</font> +00060 +00061 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o1">_Texture</a>=<font class="keyword">new</font> CTextureFile (); +00062 +00063 <font class="comment">// ** Init material</font> +00064 +00065 <font class="comment">// Double sided</font> +00066 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.initUnlit (); +00067 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.setDoubleSided (<font class="keyword">true</font>); +00068 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.setAlphaTest (<font class="keyword">true</font>); +00069 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.setColor (CRGBA (255, 255, 255)); +00070 <font class="comment">// Init blend Factors, for possible Alpha transition</font> +00071 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.setSrcBlend(CMaterial::srcalpha); +00072 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.setDstBlend(CMaterial::invsrcalpha); +00073 +00074 <font class="comment">// Texture</font> +00075 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>.setTexture (0, <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o1">_Texture</a>); +00076 } +00077 +00078 <font class="comment">// ***************************************************************************</font> +00079 +<a name="l00080"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a1">00080</a> <font class="keywordtype">void</font> CCoarseMeshManager::setTextureFile (<font class="keyword">const</font> <font class="keywordtype">char</font>* <a class="code" href="cf__lexical_8cpp.html#a95">file</a>) +00081 { +00082 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o1">_Texture</a>->setFileName (<a class="code" href="cf__lexical_8cpp.html#a95">file</a>); +00083 } +00084 +00085 <font class="comment">// ***************************************************************************</font> +00086 +<a name="l00087"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a2">00087</a> uint64 CCoarseMeshManager::addMesh (<font class="keyword">const</font> CMeshGeom& geom) +00088 { +00089 <a class="code" href="hierarchical__timer_8h.html#a7">H_AUTO_USE</a>( NL3D_StaticLod_AddDelMesh ); +00090 +00091 <font class="comment">// Get vertex buffer ref</font> +00092 <font class="keyword">const</font> CVertexBuffer &vertexBuffer=geom.getVertexBuffer(); +00093 +00094 <font class="comment">// *** Find the good render pass</font> +00095 +00096 <font class="comment">// Normalized number of vertex</font> +00097 uint32 renderPass = vertexBuffer.getNumVertices () / <a class="code" href="coarse__mesh__manager_8h.html#a2">NL3D_COARSEMESH_VERTEXBUFFER_GRANULARITY</a>; +00098 <font class="keywordflow">if</font> (<a class="code" href="coarse__mesh__manager_8h.html#a1">NL3D_COARSEMESH_VERTEXBUFFER_GRANULARITY_MASK</a>&vertexBuffer.getNumVertices ()) +00099 renderPass++; +00100 +00101 <font class="comment">// Look for the good rendering pass</font> +00102 TRenderingPassMap::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.find (renderPass); +00103 +00104 <font class="comment">// Not found ?</font> +00105 <font class="keywordflow">if</font> ( ite==<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.end() ) +00106 { +00107 <font class="comment">// Add the rendering pass</font> +00108 <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.insert (TRenderingPassMap::value_type (renderPass, CRenderPass())); +00109 ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.find (renderPass); +00110 ite->second.init (renderPass*<a class="code" href="coarse__mesh__manager_8h.html#a2">NL3D_COARSEMESH_VERTEXBUFFER_GRANULARITY</a>); +00111 } +00112 +00113 <font class="comment">// Ok, add the mesh</font> +00114 uint32 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>=ite->second.addMesh (geom); +00115 <font class="keywordflow">if</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>==CRenderPass::CantAddMesh) +00116 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#s1s0">CantAddCoarseMesh</a>; +00117 <font class="keywordflow">else</font> +00118 <font class="comment">// Return an id</font> +00119 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f0">buildId</a> (renderPass, <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00120 } +00121 +00122 <font class="comment">// ***************************************************************************</font> +00123 +<a name="l00124"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a3">00124</a> <font class="keywordtype">void</font> CCoarseMeshManager::removeMesh (uint64 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>) +00125 { +00126 <a class="code" href="hierarchical__timer_8h.html#a7">H_AUTO_USE</a>( NL3D_StaticLod_AddDelMesh ); +00127 +00128 <font class="comment">// Get the render pass id</font> +00129 uint32 renderPass = <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f1">getRenderPassId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00130 +00131 <font class="comment">// Find the render pass</font> +00132 TRenderingPassMap::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.find (renderPass); +00133 +00134 <font class="comment">// Not found ?</font> +00135 <a class="code" href="debug_8h.html#a6">nlassert</a> ( ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.end() ); +00136 +00137 <font class="comment">// remove it</font> +00138 ite->second.removeMesh (<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f2">getRenderPassMeshId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>)); +00139 } +00140 +00141 <font class="comment">// ***************************************************************************</font> +00142 +<a name="l00143"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a4">00143</a> <font class="keywordtype">void</font> CCoarseMeshManager::setMatrixMesh (uint64 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>, <font class="keyword">const</font> CMeshGeom& geom, <font class="keyword">const</font> CMatrix& <a class="code" href="driver__opengl__extension__def_8h.html#a370">matrix</a>) +00144 { +00145 <a class="code" href="hierarchical__timer_8h.html#a7">H_AUTO_USE</a>( NL3D_StaticLod_UpdateMesh ); +00146 +00147 <font class="comment">// Get the render pass id</font> +00148 uint32 renderPass = <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f1">getRenderPassId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00149 +00150 <font class="comment">// Find the render pass</font> +00151 TRenderingPassMap::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.find (renderPass); +00152 +00153 <font class="comment">// Not found ?</font> +00154 <a class="code" href="debug_8h.html#a6">nlassert</a> ( ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.end() ); +00155 +00156 <font class="comment">// remove it</font> +00157 ite->second.setMatrixMesh (<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f2">getRenderPassMeshId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>), geom, <a class="code" href="driver__opengl__extension__def_8h.html#a370">matrix</a>); +00158 } +00159 +00160 <font class="comment">// ***************************************************************************</font> +00161 +<a name="l00162"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a5">00162</a> <font class="keywordtype">void</font> CCoarseMeshManager::setColorMesh (uint64 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>, <font class="keyword">const</font> CMeshGeom& geom, <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> color) +00163 { +00164 <a class="code" href="hierarchical__timer_8h.html#a7">H_AUTO_USE</a>( NL3D_StaticLod_UpdateMesh ); +00165 +00166 <font class="comment">// Get the render pass id</font> +00167 uint32 renderPass = <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f1">getRenderPassId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00168 +00169 <font class="comment">// Find the render pass</font> +00170 TRenderingPassMap::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.find (renderPass); +00171 +00172 <font class="comment">// Not found ?</font> +00173 <a class="code" href="debug_8h.html#a6">nlassert</a> ( ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.end() ); +00174 +00175 <font class="comment">// remove it</font> +00176 ite->second.setColorMesh (<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#f2">getRenderPassMeshId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>), geom.getVertexBuffer().getNumVertices(), color); +00177 } +00178 +00179 <font class="comment">// ***************************************************************************</font> +00180 +<a name="l00181"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager.html#a6">00181</a> <font class="keywordtype">void</font> CCoarseMeshManager::render (IDriver *drv) +00182 { +00183 <a class="code" href="hierarchical__timer_8h.html#a4">H_AUTO</a>( NL3D_StaticLod_Render ); +00184 +00185 <font class="comment">// Set Ident matrix</font> +00186 drv->setupModelMatrix (CMatrix::Identity); +00187 +00188 <font class="comment">// Render each render pass</font> +00189 TRenderingPassMap::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.begin (); +00190 <font class="keywordflow">while</font> (ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o0">_RenderPass</a>.end()) +00191 { +00192 <font class="comment">// Render the rendering pass</font> +00193 ite->second.render (drv, <a class="code" href="classNL3D_1_1CCoarseMeshManager.html#o2">_Material</a>); +00194 +00195 <font class="comment">// Next render pass</font> +00196 ite++; +00197 } +00198 } +00199 +00200 <font class="comment">// ***************************************************************************</font> +00201 +<a name="l00202"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a0">00202</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::init (uint blockSize) +00203 { +00204 <font class="comment">// Block size</font> +00205 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a> = blockSize; +00206 +00207 <font class="comment">// Set vertex type</font> +00208 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.setVertexFormat (<a class="code" href="coarse__mesh__manager_8h.html#a4">NL3D_COARSEMESH_VERTEX_FORMAT_MGR</a>); +00209 +00210 <font class="comment">// Reserve the vertex buffer</font> +00211 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.reserve (<a class="code" href="coarse__mesh__manager_8h.html#a3">NL3D_COARSEMESH_VERTEXBUFFER_RESERVE</a>*<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00212 } +00213 +00214 <font class="comment">// ***************************************************************************</font> +00215 +<a name="l00216"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a1">00216</a> uint32 CCoarseMeshManager::CRenderPass::addMesh (<font class="keyword">const</font> CMeshGeom& geom) +00217 { +00218 <font class="comment">// Is there a free vertex buffer ?</font> +00219 uint16 vertexBufferId; +00220 <a class="code" href="classstd_1_1list.html">std::list< uint16 ></a>::iterator iteBegin=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o2">FreeVBlock</a>.begin(); +00221 <font class="keywordflow">if</font> (iteBegin != <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o2">FreeVBlock</a>.end()) +00222 { +00223 <font class="comment">// Get a free id</font> +00224 vertexBufferId=*iteBegin; +00225 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o2">FreeVBlock</a>.erase (iteBegin); +00226 } +00227 <font class="keywordflow">else</font> +00228 { +00229 <font class="comment">// Number of vertex in the vertex buffer</font> +00230 uint vertexCount=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getNumVertices (); +00231 +00232 <font class="comment">// Is the vertex buffer filled ?</font> +00233 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.capacity () == vertexCount) +00234 { +00235 <font class="comment">// Double it's capacity</font> +00236 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.reserve (vertexCount*2); +00237 } +00238 +00239 <font class="comment">// *** Make a new block</font> +00240 +00241 <font class="comment">// Resize the vertex buffer</font> +00242 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.setNumVertices (vertexCount+<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00243 +00244 <font class="comment">// Set mesh id</font> +00245 vertexBufferId = vertexCount / <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>; +00246 } +00247 +00248 <font class="comment">// *** Copy the vertices</font> +00249 +00250 <font class="comment">// Src vertex buffer</font> +00251 <font class="keyword">const</font> CVertexBuffer &vbSrc=geom.getVertexBuffer(); +00252 +00253 <font class="comment">// Check the vertex format</font> +00254 <a class="code" href="debug_8h.html#a6">nlassert</a> (vbSrc.getVertexFormat() & (CVertexBuffer::PositionFlag|CVertexBuffer::TexCoord0Flag) ); +00255 +00256 <font class="comment">// Number of source vertex</font> +00257 uint32 nbVSrc = vbSrc.getNumVertices(); +00258 <a class="code" href="debug_8h.html#a6">nlassert</a> (nbVSrc<=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00259 +00260 <font class="comment">// First vertex index</font> +00261 uint firstVertex=vertexBufferId*<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>; +00262 +00263 <font class="comment">// Copy vector</font> +00264 <font class="keyword">const</font> <font class="keywordtype">void</font> *vSrc = vbSrc.getVertexCoordPointer (0); +00265 <font class="keywordtype">void</font> *vDest = <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getVertexCoordPointer (firstVertex); +00266 +00267 <font class="comment">// Copy it</font> +00268 <font class="keywordflow">for</font>(uint i=0; i<nbVSrc;i++) +00269 { +00270 CVector &dstPos= *(CVector*)vDest; +00271 CUV &dstUV= *(CUV*) ((uint8*)vDest + <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getTexCoordOff() ); +00272 CRGBA &dstRGBA= *(CRGBA*) ((uint8*)vDest + <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getColorOff() ); +00273 CVector &srcPos= *(CVector*)vSrc; +00274 CUV &srcUV= *(CUV*) ((uint8*)vSrc + <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getTexCoordOff() ); +00275 +00276 <font class="comment">// copy color/uv</font> +00277 dstPos= srcPos; +00278 dstUV= srcUV; +00279 <font class="comment">// init color to full white</font> +00280 dstRGBA= CRGBA::White; +00281 +00282 <font class="comment">// next</font> +00283 vSrc= (uint8*)vSrc + vbSrc.getVertexSize(); +00284 vDest= (uint8*)vDest + <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getVertexSize(); +00285 } +00286 +00287 <font class="comment">// *** Setup primitives indexes</font> +00288 +00289 <font class="comment">// Get number of tri in this geom</font> +00290 uint triCount=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a2">getTriCount</a> (geom); +00291 +00292 <font class="comment">// Try to add the primitive in a primitive blocks</font> +00293 <font class="keywordtype">bool</font> added=<font class="keyword">false</font>; +00294 uint16 primitiveBlockId=0; +00295 <a class="code" href="classstd_1_1list.html">std::list< CPrimitiveBlockInfo ></a>::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.begin(); +00296 <font class="keywordflow">while</font> (ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.end()) +00297 { +00298 <font class="comment">// Add it</font> +00299 <font class="keywordflow">if</font> ( (ite->addMesh (vertexBufferId, geom, firstVertex, triCount)) != CPrimitiveBlockInfo::Failed ) +00300 { +00301 added=<font class="keyword">true</font>; +00302 <font class="keywordflow">break</font>; +00303 } +00304 +00305 <font class="comment">// Next primitive block</font> +00306 ite++; +00307 primitiveBlockId++; +00308 } +00309 +00310 <font class="comment">// Can't be added ?</font> +00311 <font class="keywordflow">if</font> (ite==<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.end()) +00312 { +00313 <font class="comment">// Add a primitive block</font> +00314 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.push_back (CPrimitiveBlockInfo()); +00315 ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.end(); +00316 ite--; +00317 +00318 <font class="comment">// Resize it</font> +00319 ite->init (<a class="code" href="coarse__mesh__manager_8h.html#a6">NL3D_COARSEMESH_PRIMITIVE_BLOCK_SIZE</a>); +00320 +00321 <font class="comment">// Add the mesh</font> +00322 <font class="keywordflow">if</font> (ite->addMesh (vertexBufferId, geom, firstVertex, triCount)!=CPrimitiveBlockInfo::Failed) +00323 added=<font class="keyword">true</font>; +00324 } +00325 +00326 <font class="comment">// Can be added ?</font> +00327 <font class="keywordflow">if</font> (!added) +00328 <font class="comment">// Return error</font> +00329 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#s1s0">CantAddMesh</a>; +00330 +00331 <font class="comment">// Return an id</font> +00332 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#f0">buildId</a> (primitiveBlockId, vertexBufferId); +00333 } +00334 +00335 <font class="comment">// ***************************************************************************</font> +00336 +<a name="l00337"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a2">00337</a> uint CCoarseMeshManager::CRenderPass::getTriCount (<font class="keyword">const</font> CMeshGeom& geom) +00338 { +00339 <font class="comment">// Check count</font> +00340 uint count = 0; +00341 +00342 <font class="comment">// Count number of triangles</font> +00343 uint numMatrixBlock=geom.getNbMatrixBlock(); +00344 uint matrixBlock; +00345 <font class="keywordflow">for</font> (matrixBlock=0; matrixBlock<numMatrixBlock; matrixBlock++) +00346 { +00347 <font class="comment">// One render pass</font> +00348 uint numRenderPass=geom.getNbRdrPass (matrixBlock); +00349 uint renderPass; +00350 <font class="keywordflow">for</font> (renderPass=0; renderPass<numRenderPass; renderPass++) +00351 { +00352 <font class="comment">// Get the render pass</font> +00353 <font class="keyword">const</font> CPrimitiveBlock &pBlock=geom.getRdrPassPrimitiveBlock (matrixBlock, renderPass); +00354 +00355 <font class="comment">// Check there is enought room to insert this primitives</font> +00356 uint renderPassNumTri=pBlock.getNumTri (); +00357 count+=renderPassNumTri; +00358 } +00359 } +00360 +00361 <font class="comment">// Return count</font> +00362 <font class="keywordflow">return</font> count; +00363 } +00364 +00365 <font class="comment">// ***************************************************************************</font> +00366 +<a name="l00367"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a3">00367</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::removeMesh (uint32 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>) +00368 { +00369 <font class="comment">// Get ids</font> +00370 uint16 primitiveBlockId=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#f1">getPrimitiveblockId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00371 uint16 vertexBufferId=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#f2">getVertexBufferId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00372 +00373 <font class="comment">// *** Free the vertex buffer</font> +00374 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o2">FreeVBlock</a>.push_back (vertexBufferId); +00375 +00376 <font class="comment">// *** Remove the primitive block</font> +00377 +00378 <font class="comment">// Find the primitive block</font> +00379 <a class="code" href="classstd_1_1list.html">std::list< CPrimitiveBlockInfo ></a>::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.begin(); +00380 <font class="keywordflow">for</font> (uint i=0; i<primitiveBlockId; i++) +00381 ite++; +00382 +00383 <font class="comment">// Some checks</font> +00384 <a class="code" href="debug_8h.html#a6">nlassert</a> (ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.end()); +00385 +00386 <font class="comment">// Remove from there</font> +00387 ite->removeMesh (vertexBufferId); +00388 } +00389 +00390 <font class="comment">// ***************************************************************************</font> +00391 +<a name="l00392"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a4">00392</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::setMatrixMesh (uint32 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>, <font class="keyword">const</font> CMeshGeom& geom, <font class="keyword">const</font> CMatrix& <a class="code" href="driver__opengl__extension__def_8h.html#a370">matrix</a>) +00393 { +00394 <font class="comment">// Is there a free vertex buffer ?</font> +00395 uint16 vertexBufferId=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#f2">getVertexBufferId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00396 +00397 <font class="comment">// *** Transform the vertices</font> +00398 +00399 <font class="comment">// Src vertex buffer</font> +00400 <font class="keyword">const</font> CVertexBuffer &vbSrc=geom.getVertexBuffer(); +00401 +00402 <font class="comment">// Check the vertex format</font> +00403 <a class="code" href="debug_8h.html#a6">nlassert</a> (vbSrc.getVertexFormat() & (CVertexBuffer::PositionFlag|CVertexBuffer::TexCoord0Flag) ); +00404 +00405 <font class="comment">// Number of source vertices</font> +00406 uint32 nbVSrc = vbSrc.getNumVertices(); +00407 <a class="code" href="debug_8h.html#a6">nlassert</a> (nbVSrc<=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00408 <font class="comment">//int normalOffset = vbSrc.getNormalOff();</font> +00409 +00410 <font class="comment">// Vertex size</font> +00411 uint vtSrcSize=vbSrc.getVertexSize (); +00412 uint vtDstSize=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getVertexSize (); +00413 +00414 <font class="comment">// Copy vector</font> +00415 <font class="keyword">const</font> uint8 *vSrc = (<font class="keyword">const</font> uint8 *)vbSrc.getVertexCoordPointer (0); +00416 uint8 *vDest = (uint8 *)<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getVertexCoordPointer (vertexBufferId*<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00417 +00418 <font class="comment">// Transform it</font> +00419 <font class="keywordflow">for</font> (uint i=0; i<nbVSrc; i++) +00420 { +00421 <font class="comment">// Transform position</font> +00422 *(CVector*)vDest = <a class="code" href="driver__opengl__extension__def_8h.html#a370">matrix</a>.mulPoint (*(<font class="keyword">const</font> CVector*)vSrc); +00423 +00424 <font class="comment">// Transform normal</font> +00425 <font class="comment">// *(CVector*)(vDest+normalOffset) = matrix.mulVector (*(const CVector*)(vSrc+normalOffset));</font> +00426 +00427 <font class="comment">// Next point</font> +00428 vSrc+=vtSrcSize; +00429 vDest+=vtDstSize; +00430 } +00431 } +00432 +00433 <font class="comment">// ***************************************************************************</font> +00434 +<a name="l00435"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a5">00435</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::setColorMesh (uint32 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>, uint nVertices, CRGBA color) +00436 { +00437 <font class="comment">// Is there a free vertex buffer ?</font> +00438 uint16 vertexBufferId=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#f2">getVertexBufferId</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>); +00439 +00440 <font class="comment">// *** Copy color to vertices</font> +00441 +00442 <font class="comment">// Number of source vertices</font> +00443 uint32 nbVSrc = nVertices; +00444 <a class="code" href="debug_8h.html#a6">nlassert</a> (nbVSrc<=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00445 +00446 <font class="comment">// Vertex size</font> +00447 uint vtDstSize=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getVertexSize (); +00448 +00449 <font class="comment">// Copy vector</font> +00450 uint8 *vDest = (uint8 *)<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getVertexCoordPointer (vertexBufferId*<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o0">VBlockSize</a>); +00451 vDest+= <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>.getColorOff(); +00452 +00453 <font class="comment">// Transform it</font> +00454 <font class="keywordflow">for</font> (uint i=0; i<nbVSrc; i++) +00455 { +00456 <font class="comment">// Transform position</font> +00457 *(CRGBA*)vDest = color; +00458 +00459 <font class="comment">// Next point</font> +00460 vDest+=vtDstSize; +00461 } +00462 } +00463 +00464 <font class="comment">// ***************************************************************************</font> +00465 +<a name="l00466"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#a6">00466</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::render (IDriver *drv, CMaterial& mat) +00467 { +00468 <font class="comment">// Active the vertex buffer</font> +00469 drv->activeVertexBuffer (<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o1">VBuffer</a>); +00470 +00471 <font class="comment">// For each primitive block</font> +00472 <a class="code" href="classstd_1_1list.html">std::list< CPrimitiveBlockInfo ></a>::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.begin(); +00473 <font class="keywordflow">while</font> (ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass.html#o3">PrimitiveBlockInfoList</a>.end()) +00474 { +00475 <font class="comment">// Render it</font> +00476 drv->render (ite->PrimitiveBlock, mat); +00477 +00478 <font class="comment">// Next primitive block</font> +00479 ite++; +00480 } +00481 } +00482 +00483 <font class="comment">// ***************************************************************************</font> +00484 +<a name="l00485"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#a0">00485</a> uint CCoarseMeshManager::CRenderPass::CPrimitiveBlockInfo::addMesh (uint16 vertexBufferId, <font class="keyword">const</font> CMeshGeom& geom, uint32 firstVertexIndex, uint triCount) +00486 { +00487 <font class="comment">// Get num tri in the primitive block</font> +00488 uint oldNumTri=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.getNumTri(); +00489 +00490 <font class="comment">// Check capacity</font> +00491 <font class="keywordflow">if</font> ( triCount <= (<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.capacityTri()-oldNumTri) ) +00492 { +00493 <font class="preprocessor">#ifdef NL_DEBUG</font> +00494 <font class="preprocessor"></font> <font class="comment">// Check count</font> +00495 uint checkCount = 0; +00496 <font class="preprocessor">#endif // NL_DEBUG</font> +00497 <font class="preprocessor"></font> +00498 <font class="comment">// Resize pblock</font> +00499 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.setNumTri (oldNumTri+triCount); +00500 +00501 <font class="comment">// Destination pointer </font> +00502 uint32 *pTriDest=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.getTriPointer ()+3*oldNumTri; +00503 +00504 <font class="comment">// First index for the object</font> +00505 uint firstIndex=firstVertexIndex; +00506 +00507 <font class="comment">// Count number of triangles</font> +00508 uint numMatrixBlock=geom.getNbMatrixBlock(); +00509 uint matrixBlock; +00510 <font class="keywordflow">for</font> (matrixBlock=0; matrixBlock<numMatrixBlock; matrixBlock++) +00511 { +00512 <font class="comment">// One render pass</font> +00513 uint numRenderPass=geom.getNbRdrPass (matrixBlock); +00514 uint renderPass; +00515 <font class="keywordflow">for</font> (renderPass=0; renderPass<numRenderPass; renderPass++) +00516 { +00517 <font class="comment">// Get the render pass</font> +00518 <font class="keyword">const</font> CPrimitiveBlock &pBlock=geom.getRdrPassPrimitiveBlock (matrixBlock, renderPass); +00519 +00520 <font class="comment">// Check there is enought room to insert this primitives</font> +00521 uint renderPassNumIndex=3*pBlock.getNumTri (); +00522 <font class="preprocessor">#ifdef NL_DEBUG</font> +00523 <font class="preprocessor"></font> checkCount+=pBlock.getNumTri (); +00524 <font class="preprocessor">#endif // NL_DEBUG</font> +00525 <font class="preprocessor"></font> +00526 <font class="comment">// Tri pointer</font> +00527 <font class="keyword">const</font> uint32 *pTriSrc=pBlock.getTriPointer (); +00528 +00529 <font class="comment">// Insert and remap indexes</font> +00530 <font class="keywordflow">for</font> (uint <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a><renderPassNumIndex; <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>++) +00531 { +00532 <font class="comment">// Copy and remap the vertex indexes</font> +00533 *pTriDest=pTriSrc[<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>]+firstIndex; +00534 pTriDest++; +00535 } +00536 } +00537 } +00538 +00539 <font class="preprocessor">#ifdef NL_DEBUG</font> +00540 <font class="preprocessor"></font> <font class="comment">// Checks</font> +00541 <a class="code" href="debug_8h.html#a6">nlassert</a> (checkCount==triCount); +00542 <font class="preprocessor">#endif // NL_DEBUG</font> +00543 <font class="preprocessor"></font> +00544 <font class="comment">// Add a mesh info in the list</font> +00545 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m1">MeshIdList</a>.push_back (CMeshInfo (oldNumTri, triCount, vertexBufferId)); +00546 +00547 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#s2s1">Success</a>; +00548 } +00549 <font class="keywordflow">else</font> +00550 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#s2s0">Failed</a>; +00551 } +00552 +00553 <font class="comment">// ***************************************************************************</font> +00554 +<a name="l00555"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#a1">00555</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::CPrimitiveBlockInfo::removeMesh (uint16 vertexBufferId) +00556 { +00557 <font class="comment">// Get mesh info</font> +00558 <a class="code" href="classstd_1_1list.html">std::list< CMeshInfo ></a>::iterator ite=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m1">MeshIdList</a>.begin(); +00559 <font class="keywordflow">while</font> (ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m1">MeshIdList</a>.end()) +00560 { +00561 <font class="comment">// Good geom ?</font> +00562 <font class="keywordflow">if</font> (ite->VertexBufferId == vertexBufferId) +00563 { +00564 <font class="comment">// Remove indexes of this primitive</font> +00565 uint numIndexLeft=(<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.getNumTri()-(ite->Offset+ite->Length))*3; +00566 +00567 <font class="comment">// Source triangles</font> +00568 <font class="keyword">const</font> uint32 *pTriSrc=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.getTriPointer ()+3*(ite->Offset+ite->Length); +00569 +00570 <font class="comment">// Destination triangles</font> +00571 uint32 *pTriDest=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.getTriPointer ()+3*ite->Offset; +00572 +00573 <font class="comment">// Copy indexes</font> +00574 <font class="keywordflow">for</font> (uint <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a><numIndexLeft; <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>++) +00575 { +00576 pTriDest[<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>]=pTriSrc[<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>]; +00577 } +00578 +00579 <font class="comment">// Resize primitive block</font> +00580 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.setNumTri (<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.getNumTri()-ite->Length); +00581 +00582 <font class="comment">// Backup iterator</font> +00583 <a class="code" href="classstd_1_1list.html">std::list< CMeshInfo ></a>::iterator iteOther=ite; +00584 +00585 <font class="comment">// Patch offset for each others meshes in the primitive block</font> +00586 <font class="keywordflow">while</font> (iteOther!=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m1">MeshIdList</a>.end()) +00587 { +00588 <font class="comment">// Remap offset</font> +00589 iteOther->Offset-=ite->Length; +00590 +00591 <font class="comment">// Next mesh</font> +00592 iteOther++; +00593 } +00594 +00595 <font class="comment">// Remove info from list</font> +00596 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m1">MeshIdList</a>.erase (ite); +00597 +00598 <font class="comment">// Exit</font> +00599 <font class="keywordflow">return</font>; +00600 } +00601 +00602 <font class="comment">// Next </font> +00603 ite++; +00604 } +00605 +00606 <font class="comment">// Check it has been found</font> +00607 <a class="code" href="debug_8h.html#a6">nlassert</a> (ite!=<a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m1">MeshIdList</a>.end()); +00608 } +00609 +00610 <font class="comment">// ***************************************************************************</font> +00611 +<a name="l00612"></a><a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#a2">00612</a> <font class="keywordtype">void</font> CCoarseMeshManager::CRenderPass::CPrimitiveBlockInfo::init (uint size) +00613 { +00614 <font class="comment">// Reserve triangles</font> +00615 <a class="code" href="classNL3D_1_1CCoarseMeshManager_1_1CRenderPass_1_1CPrimitiveBlockInfo.html#m0">PrimitiveBlock</a>.reserveTri (size); +00616 } +00617 +00618 <font class="comment">// ***************************************************************************</font> +00619 +<a name="l00620"></a><a class="code" href="classNL3D_1_1CCoarseMeshClipObs.html#z398_0">00620</a> <font class="keywordtype">bool</font> CCoarseMeshClipObs::clip(IBaseClipObs *caller) +00621 { +00622 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00623 } +00624 +00625 <font class="comment">// ***************************************************************************</font> +00626 +00627 } <font class="comment">// NL3D</font> +</pre></div> + +<!-- footer --> +<BR><FONT Size=+5> </FONT> +</TD> +<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD> +</TR> +</TABLE> +</BODY> +</HTML> |