aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02892.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/doxygen/nel/a02892.html')
-rw-r--r--docs/doxygen/nel/a02892.html8248
1 files changed, 8248 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02892.html b/docs/doxygen/nel/a02892.html
new file mode 100644
index 00000000..a4816f08
--- /dev/null
+++ b/docs/doxygen/nel/a02892.html
@@ -0,0 +1,8248 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>NeL: NL3D::CMeshMRMGeom class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.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">Data&nbsp;Structures</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">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NL3D::CMeshMRMGeom Class Reference</h1><code>#include &lt;<a class="el" href="a06006.html">mesh_mrm.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for NL3D::CMeshMRMGeom:
+<p><center><img src="a02892.png" usemap="#NL3D::CMeshMRMGeom_map" border="0" alt=""></center>
+<map name="NL3D::CMeshMRMGeom_map">
+<area href="a02879.html" alt="NL3D::IMeshGeom" shape="rect" coords="0,112,152,136">
+<area href="a02867.html" alt="NLMISC::IStreamable" shape="rect" coords="0,56,152,80">
+<area href="a02540.html" alt="NLMISC::IClassable" shape="rect" coords="0,0,152,24">
+</map>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+An MRM mesh geometry, with no materials information.<p>
+To build a <a class="el" href="a02892.html">CMeshMRMGeom</a>, you should:<ul>
+<li>build a <a class="el" href="a02864.html">CMesh::CMeshBuild</a> meshBuild (see <a class="el" href="a02857.html">CMesh</a>)</li><li>call MeshMRMGeom.build(MeshBuild);</li></ul>
+<p>
+NB: internally, <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma1">build()</a> use <a class="el" href="a02951.html">CMRMBuilder</a>, a builder of MRM.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Lionel Berenguier <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2001 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00081">81</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>RawSkin optimisation.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_0">NumCacheVertexNormal1</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03309.html">CRawVertexNormalSkin1</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_1">NumCacheVertexNormal2</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03310.html">CRawVertexNormalSkin2</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_2">NumCacheVertexNormal3</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03311.html">CRawVertexNormalSkin3</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_3">NumCacheVertexNormal4</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03312.html">CRawVertexNormalSkin4</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_4">NumCacheVertexShadow</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a02897.html">CMeshMRMGeom::CShadowVertex</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_5">applyArrayRawSkinNormal1</a> (<a class="el" href="a03309.html">CRawVertexNormalSkin1</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_6">applyArrayRawSkinNormal2</a> (<a class="el" href="a03310.html">CRawVertexNormalSkin2</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_7">applyArrayRawSkinNormal3</a> (<a class="el" href="a03311.html">CRawVertexNormalSkin3</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_8">applyArrayRawSkinNormal4</a> (<a class="el" href="a03312.html">CRawVertexNormalSkin4</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_9">dirtMeshDataId</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Increment the refCount, so instances RawSkins are no longer valid. <a href="#NL3D_1_1CMeshMRMGeomz490_9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_10">updateRawSkinNormal</a> (bool enabled, <a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a14">sint</a> curLodId)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compute RawSkin info in the MRMInstance according to current skin setup. <a href="#NL3D_1_1CMeshMRMGeomz490_10"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Each time the mesh is loaded/built, this increment. <a href="#NL3D_1_1CMeshMRMGeomz490_11"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>ShadowMap Skin rendering</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_0">applyArrayShadowSkin</a> (<a class="el" href="a02897.html">CShadowVertex</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a03128.html">CVector</a> *dst, <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a04558.html#a15">uint</a> numVerts)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a11">uint32</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02897.html">CShadowVertex</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a></td></tr>
+
+<tr><td colspan=2><br><h2>Hard VB</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_0">deleteVertexBufferHard</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_1">fillAGPSkinPartWithVBHardPtr</a> (<a class="el" href="a02893.html">CLod</a> &amp;lod, <a class="el" href="a04558.html#a7">uint8</a> *vertexDst)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_2">updateVertexBufferHard</a> (<a class="el" href="a02434.html">IDriver</a> *drv, <a class="el" href="a04558.html#a11">uint32</a> numVertices)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">CRefPtr</a>&lt; <a class="el" href="a02434.html">IDriver</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">NB: HERE FOR PACKING ONLY. For clipping. Estimate if we must do a Precise clipping (ie with bboxes). <a href="#NL3D_1_1CMeshMRMGeomz484_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">CRefPtr</a>&lt; <a class="el" href="a03694.html">IVertexBufferHard</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a></td></tr>
+
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5">TRenderFlag</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw2">RenderOpaqueMaterial</a> = 1,
+<a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw4">RenderTransparentMaterial</a> = 2,
+<a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw3">RenderPassOpaque</a> = 4,
+<a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw1">RenderGlobalAlpha</a> = 8,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw0">RenderGADisableZWrite</a> = 16
+<br>
+ }</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Render Flags, used in render. <a href="#NL3D_1_1IMeshGeomw5">More...</a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma0">applyMaterialRemap</a> (const std::vector&lt; <a class="el" href="a04558.html#a14">sint</a> &gt; &amp;remap)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">change materials Ids (called from <a class="el" href="a02857.html#NL3D_1_1CMesha11">CMesh::optimizeMaterialUsage()</a>) <a href="#NL3D_1_1CMeshMRMGeoma0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma1">build</a> (<a class="el" href="a02864.html">CMesh::CMeshBuild</a> &amp;m, std::vector&lt; <a class="el" href="a02864.html">CMesh::CMeshBuild</a> * &gt; &amp;bsList, <a class="el" href="a04558.html#a15">uint</a> numMaxMaterial, const <a class="el" href="a02967.html">CMRMParameters</a> &amp;<a class="el" href="a04223.html#a565">params</a>=<a class="el" href="a02967.html">CMRMParameters</a>())</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma2">changeMRMDistanceSetup</a> (float distanceFinest, float distanceMiddle, float distanceCoarsest)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma3">CMeshMRMGeom</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <a href="#NL3D_1_1CMeshMRMGeoma3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02540.html#NL3D_1_1ITrackKeyFramer_3_01CKeyVector_01_4a6">getClassName</a> ()=0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02959.html">CMRMLevelDetail</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma5">getLevelDetail</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the MRM level detail information <a href="#NL3D_1_1CMeshMRMGeoma5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma6">hasMeshVertexProgram</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if this mesh has a vertexProgram. <a href="#NL3D_1_1CMeshMRMGeoma6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma7">~CMeshMRMGeom</a> ()</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Mesh Block Render Implementation</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_0">activeInstance</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;rdrCtx, <a class="el" href="a02873.html">CMeshBaseInstance</a> *inst, float polygonCount, void *vbDst)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_1">beginMesh</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;rdrCtx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_2">computeMeshVBHeap</a> (void *dst, <a class="el" href="a04558.html#a15">uint</a> indexStart)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_3">endMesh</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;rdrCtx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_4">getNumRdrPassesForInstance</a> (<a class="el" href="a02873.html">CMeshBaseInstance</a> *inst) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_5">getNumRdrPassesForMesh</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_6">getVBHeapInfo</a> (<a class="el" href="a04558.html#a15">uint</a> &amp;vertexFormat, <a class="el" href="a04558.html#a15">uint</a> &amp;numVertices)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_7">isActiveInstanceNeedVBFill</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_8">renderPass</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;rdrCtx, <a class="el" href="a02873.html">CMeshBaseInstance</a> *inst, float polygonCount, <a class="el" href="a04558.html#a15">uint</a> rdrPass)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_9">sortPerMaterial</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_10">supportMeshBlockRendering</a> () const </td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">From IMeshGeom</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_0">clip</a> (const std::vector&lt; <a class="el" href="a03082.html">CPlane</a> &gt; &amp;pyramid, const <a class="el" href="a02851.html">CMatrix</a> &amp;worldMatrix)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clip this mesh in a driver. true if visible. <a href="#NL3D_1_1CMeshMRMGeomz467_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_1">getNumTriangles</a> (float distance)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get an approximation of the number of triangles this instance will render for a fixed distance. <a href="#NL3D_1_1CMeshMRMGeomz467_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_2">initInstance</a> (<a class="el" href="a02873.html">CMeshBaseInstance</a> *mbi)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Init instance info. <a href="#NL3D_1_1CMeshMRMGeomz467_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_3">NLMISC_DECLARE_CLASS</a> (<a class="el" href="a02892.html">CMeshMRMGeom</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clip this mesh in a driver. true if visible. <a href="#NL3D_1_1CMeshMRMGeomz467_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_4">profileSceneRender</a> (<a class="el" href="a03325.html">CRenderTrav</a> *rdrTrav, <a class="el" href="a02537.html">CTransformShape</a> *trans, float polygonCount, <a class="el" href="a04558.html#a11">uint32</a> rdrFlags)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Scene profile. <a href="#NL3D_1_1CMeshMRMGeomz467_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render</a> (<a class="el" href="a02434.html">IDriver</a> *drv, <a class="el" href="a02537.html">CTransformShape</a> *trans, float polygonCount, <a class="el" href="a04558.html#a11">uint32</a> rdrFlags, float globalAlpha)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh in a driver, given an instance and his materials. <a href="#NL3D_1_1CMeshMRMGeomz467_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_6">renderSkin</a> (<a class="el" href="a02537.html">CTransformShape</a> *trans, float alphaMRM)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh as a skin <a href="#NL3D_1_1CMeshMRMGeomz467_6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_7">serial</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f) throw (NLMISC::EStream)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">serial this meshGeom. <a href="#NL3D_1_1CMeshMRMGeomz467_7"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Skinning Behavior</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_0">computeBonesId</a> (<a class="el" href="a03399.html">CSkeletonModel</a> *skeleton)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compute skinning id. <a href="#NL3D_1_1CMeshMRMGeomz473_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a02291.html">NLMISC::CBSphere</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_1">getSkinBoneSphere</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value. computeBonesId must has been called before. <a href="#NL3D_1_1CMeshMRMGeomz473_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a04558.html#a10">sint32</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_2">getSkinBoneUsage</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return array of bones used by the skin. computeBonesId must has been called before. <a href="#NL3D_1_1CMeshMRMGeomz473_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_3">isSkinned</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return true if the mesh is skinned, else return false. <a href="#NL3D_1_1CMeshMRMGeomz473_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_4">updateSkeletonUsage</a> (<a class="el" href="a03399.html">CSkeletonModel</a> *sm, bool increment)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">update Skeleton Usage. increment or decrement. computeBonesId must has been called before. <a href="#NL3D_1_1CMeshMRMGeomz473_4"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Geometry accessors</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; std::string &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_0">getBonesName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the bone names of the meshMRM. <a href="#NL3D_1_1CMeshMRMGeomz471_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_1">getBoundingBox</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the extended axis aligned bounding box of the mesh <a href="#NL3D_1_1CMeshMRMGeomz471_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_2">getGeomorphs</a> (<a class="el" href="a04558.html#a15">uint</a> lodId) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Advanced. get the geomorphs for a special lod. <a href="#NL3D_1_1CMeshMRMGeomz471_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_3">getNbBlendShapes</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the number of BlendShapes <a href="#NL3D_1_1CMeshMRMGeomz471_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_5">getNbRdrPass</a> (<a class="el" href="a04558.html#a15">uint</a> lodId) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_6">getRdrPassMaterial</a> (<a class="el" href="a04558.html#a15">uint</a> lodId, <a class="el" href="a04558.html#a15">uint</a> renderingPassIndex) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03105.html">CPrimitiveBlock</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_7">getRdrPassPrimitiveBlock</a> (<a class="el" href="a04558.html#a15">uint</a> lodId, <a class="el" href="a04558.html#a15">uint</a> renderingPassIndex) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a02865.html">CMesh::CSkinWeight</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_8">getSkinWeights</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the skinWeights used by the mrm mesh. NB: same size of the vertexBuffer. empty if !isSkinned() <a href="#NL3D_1_1CMeshMRMGeomz471_8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03692.html">CVertexBuffer</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_9">getVertexBuffer</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the vertex buffer used by the mrm mesh. NB: this VB store all Vertices used by All LODs. <a href="#NL3D_1_1CMeshMRMGeomz471_9"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Lod management.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_1">loadFirstLod</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_2">loadNextLod</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_3">unloadNextLod</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f)</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">ShadowMap Skin rendering</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_0">getNumShadowSkinVertices</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the num of shadow skin vertices. <a href="#NL3D_1_1CMeshMRMGeomz479_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_1">renderShadowSkinGeom</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a15">uint</a> remainingVertices, <a class="el" href="a04558.html#a7">uint8</a> *vbDest)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the num of shadow skin vertices. <a href="#NL3D_1_1CMeshMRMGeomz479_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_2">renderShadowSkinPrimitives</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a02839.html">CMaterial</a> &amp;castMat, <a class="el" href="a02434.html">IDriver</a> *drv, <a class="el" href="a04558.html#a15">uint</a> baseVertex)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the num of shadow skin vertices. <a href="#NL3D_1_1CMeshMRMGeomz479_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_3">setShadowMesh</a> (const std::vector&lt; <a class="el" href="a02897.html">CShadowVertex</a> &gt; &amp;shadowVertices, const std::vector&lt; <a class="el" href="a04558.html#a11">uint32</a> &gt; &amp;triangles)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Setup the ShadowMesh. <a href="#NL3D_1_1CMeshMRMGeomz479_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_4">supportShadowSkinGrouping</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Render the ShadowSkin (SkinGroup like). <a href="#NL3D_1_1CMeshMRMGeomz479_4"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Special SkinGrouping Rendering</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_0">renderSkinGroupGeom</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, float alphaMRM, <a class="el" href="a04558.html#a15">uint</a> remainingVertices, <a class="el" href="a04558.html#a7">uint8</a> *vbDest)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_1">renderSkinGroupPrimitives</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a15">uint</a> baseVertex, std::vector&lt; <a class="el" href="a03407.html">CSkinSpecularRdrPass</a> &gt; &amp;specularRdrPasses, <a class="el" href="a04558.html#a15">uint</a> skinIndex)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_2">renderSkinGroupSpecularRdrPass</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a15">uint</a> rdrPassId)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_3">supportSkinGrouping</a> () const </td></tr>
+
+<tr><td colspan=2><br><h2>Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a> (std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;geoms, float alphaLod, <a class="el" href="a03694.html">IVertexBufferHard</a> *currentVBHard)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Apply the geomorph to the _VBuffer, or the VBhard, if exist/used. <a href="#NL3D_1_1CMeshMRMGeomd0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd1">applyGeomorphPosNormalUV0</a> (std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;geoms, <a class="el" href="a04558.html#a7">uint8</a> *vertexPtr, <a class="el" href="a04558.html#a7">uint8</a> *vertexDestPtr, <a class="el" href="a04558.html#a10">sint32</a> vertexSize, float a, float a1)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Faster, but common geomorph apply. <a href="#NL3D_1_1CMeshMRMGeomd1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a> (std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;geoms, float alphaLod, <a class="el" href="a04558.html#a7">uint8</a> *vertexDestPtr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Apply the geomorph to the VBhard ptr, if not NULL. <a href="#NL3D_1_1CMeshMRMGeomd2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd3">applyRawSkinWithNormal</a> (<a class="el" href="a02893.html">CLod</a> &amp;lod, <a class="el" href="a03307.html">CRawSkinNormalCache</a> &amp;rawSkinLod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a04558.html#a7">uint8</a> *vbHard, float alphaLod)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd4">applySkin</a> (<a class="el" href="a02893.html">CLod</a> &amp;lod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Skinning: Apply skinning to the _VBuffer (before geomorph). <a href="#NL3D_1_1CMeshMRMGeomd4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd5">applySkinWithNormal</a> (<a class="el" href="a02893.html">CLod</a> &amp;lod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd6">applySkinWithTangentSpace</a> (<a class="el" href="a02893.html">CLod</a> &amp;lod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a04558.html#a15">uint</a> tangentSpaceTexCoord)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd7">bkupOriginalSkinVertices</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Skinning: bkup Vertex/Normal into _OriginalSkin* from VBuffer. <a href="#NL3D_1_1CMeshMRMGeomd7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd8">bkupOriginalSkinVerticesSubset</a> (<a class="el" href="a04558.html#a15">uint</a> wedgeStart, <a class="el" href="a04558.html#a15">uint</a> wedgeEnd)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd9">buildBoneUsageVer2</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a> (float alphaMRM, float &amp;alphaLod)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">choose the lod according to the alphaMRM [0,1] given. <a href="#NL3D_1_1CMeshMRMGeomd10"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd11">compileRunTime</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd12">load</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f) throw (NLMISC::EStream)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">load this mesh. <a href="#NL3D_1_1CMeshMRMGeomd12"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd13">loadHeader</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f) throw (NLMISC::EStream)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">load the header of this mesh. return the version of the header. <a href="#NL3D_1_1CMeshMRMGeomd13"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd14">restoreOriginalSkinPart</a> (<a class="el" href="a02893.html">CLod</a> &amp;lod, <a class="el" href="a03694.html">IVertexBufferHard</a> *currentVBHard)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Skinning: same as <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices()</a>, but for one Lod only. <a href="#NL3D_1_1CMeshMRMGeomd14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Skinning: restore Vertex/Normal from _OriginalSkin* to VBuffer. <a href="#NL3D_1_1CMeshMRMGeomd15"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd16">save</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f) throw (NLMISC::EStream)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">save the entire mesh. <a href="#NL3D_1_1CMeshMRMGeomd16"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f, <a class="el" href="a04558.html#a15">uint</a> startWedge, <a class="el" href="a04558.html#a15">uint</a> endWedge)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">serial a subset of the vertices. <a href="#NL3D_1_1CMeshMRMGeomd17"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd18">updateShiftedTriangleCache</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a14">sint</a> curLodId, <a class="el" href="a04558.html#a15">uint</a> baseVertex)</td></tr>
+
+<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02157.html">NLMISC::CAABBoxExt</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">For clipping. this is the BB of all vertices of all Lods. <a href="#NL3D_1_1CMeshMRMGeomr0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This boolean is true if the bones id have been passed in the skeleton. <a href="#NL3D_1_1CMeshMRMGeomr1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if the _BonesIdExt have been computed (for bone Usage). <a href="#NL3D_1_1CMeshMRMGeomr2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a10">sint32</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This array give the index in the skeleton of the local bones used. computed at first computeBoneId(). <a href="#NL3D_1_1CMeshMRMGeomr3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a10">sint32</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Same as _BonesId but with parent of bones added. (used for bone usage). <a href="#NL3D_1_1CMeshMRMGeomr4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This array give the name of the local bones. <a href="#NL3D_1_1CMeshMRMGeomr5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02291.html">NLMISC::CBSphere</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value <a href="#NL3D_1_1CMeshMRMGeomr6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Last lod rendered. used with renderSkinGroup*() only. <a href="#NL3D_1_1CMeshMRMGeomr7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02894.html">CLodInfo</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Info for pre-loading Lods. <a href="#NL3D_1_1CMeshMRMGeomr8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02893.html">CLod</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">List of Lods. <a href="#NL3D_1_1CMeshMRMGeomr9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02890.html">CMeshMorpher</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt; <a class="el" href="a02916.html">IMeshVertexProgram</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03128.html">CVector</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03128.html">CVector</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Skinning: this is the list of vertices (mirror of VBuffer), at the bind Pos. <a href="#NL3D_1_1CMeshMRMGeomr14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03128.html">CVector</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Skinning: This tells if the mesh is correctly skinned (suuport skinning). <a href="#NL3D_1_1CMeshMRMGeomr16"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02865.html">CMesh::CSkinWeight</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is the array of SkinWeights, same size as the VB. <a href="#NL3D_1_1CMeshMRMGeomr17"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">if true, then maybe use faster render <a href="#NL3D_1_1CMeshMRMGeomr18"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03692.html">CVertexBuffer</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The Final VBuffer. <a href="#NL3D_1_1CMeshMRMGeomr19"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03692.html">CVertexBuffer</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr20">_VBufferOriginal</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The Original VBuffer. <a href="#NL3D_1_1CMeshMRMGeomr20"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02959.html">CMRMLevelDetail</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a></td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Mesh Block Render Implementation</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_0">_MBRBkupNormalize</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">BeginMesh setup. <a href="#NL3D_1_1CMeshMRMGeomz486_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">global setup at activateInstance() <a href="#NL3D_1_1CMeshMRMGeomz486_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setuped at compileRunTime. <a href="#NL3D_1_1CMeshMRMGeomz486_2"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomn0">CMRMBuilder</a></td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Structures for building a MRM mesh.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a></td></tr>
+
+</table>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="NL3D_1_1IMeshGeomw5" doxytag="NL3D::CMeshMRMGeom::TRenderFlag" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> enum <a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5">NL3D::IMeshGeom::TRenderFlag</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Render Flags, used in render.
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw2" doxytag="RenderOpaqueMaterial" ></a>RenderOpaqueMaterial</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw4" doxytag="RenderTransparentMaterial" ></a>RenderTransparentMaterial</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw3" doxytag="RenderPassOpaque" ></a>RenderPassOpaque</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw1" doxytag="RenderGlobalAlpha" ></a>RenderGlobalAlpha</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw0" doxytag="RenderGADisableZWrite" ></a>RenderGADisableZWrite</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06000.html#l00082">82</a> of file <a class="el" href="a06000.html">mesh_geom.h</a>.
+<p>
+<div class="fragment"><pre>00083 {
+00084 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw2">RenderOpaqueMaterial</a>= 1, <span class="comment">// set when the mesh geom must render opaque material</span>
+00085 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw4">RenderTransparentMaterial</a>= 2, <span class="comment">// set when the mesh geom must render transparent material</span>
+00086 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw3">RenderPassOpaque</a>=4, <span class="comment">// set when the current traversal rdrPass is the opaque pass</span>
+00087 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw1">RenderGlobalAlpha</a>= 8, <span class="comment">// set when the caller wants to draw material with global alpha</span>
+00088 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw0">RenderGADisableZWrite</a>= 16, <span class="comment">// only when globalAlpha is used. set if must disable ZWrite</span>
+00089 };
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma3" doxytag="NL3D::CMeshMRMGeom::CMeshMRMGeom" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NL3D::CMeshMRMGeom::CMeshMRMGeom </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Constructor.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00204">204</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, <a class="el" href="a06006.html#l00639">_MeshDataId</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06006.html#l00560">_SupportMeshBlockRendering</a>, <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>, and <a class="el" href="a06006.html#l00498">_SupportSkinGrouping</a>.
+<p>
+<div class="fragment"><pre>00205 {
+00206 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+00207 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>= <span class="keyword">false</span>;
+00208 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= 0;
+00209 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a> = <span class="keyword">false</span>;
+00210 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a> = <span class="keyword">false</span>;
+00211 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a>= <span class="keyword">false</span>;
+00212 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= <span class="keyword">false</span>;
+00213 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>= 0;
+00214 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>= <span class="keyword">false</span>;
+00215 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>= 0;
+00216 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= <span class="keyword">false</span>;
+00217 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma7" doxytag="NL3D::CMeshMRMGeom::~CMeshMRMGeom" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NL3D::CMeshMRMGeom::~<a class="el" href="a02892.html">CMeshMRMGeom</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00221">221</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06005.html#l02209">deleteVertexBufferHard()</a>.
+<p>
+<div class="fragment"><pre>00222 {
+00223 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_0">deleteVertexBufferHard</a>();
+00224 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_0" doxytag="NL3D::CMeshMRMGeom::activeInstance" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::activeInstance </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrCtx</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02873.html">CMeshBaseInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>inst</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>polygonCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>void *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vbDst</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The framework call this method any time a change of instance occurs.
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_0">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02738">2738</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>, <a class="el" href="a06570.html#l00105">NL3D::CTransformShape::changeLightSetup()</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a06060.html#l00101">NL3D::CMRMLevelDetail::getLevelDetailFromPolyCount()</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, <a class="el" href="a06000.html#l00064">NL3D::CMeshGeomRenderContext::RenderTrav</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver::setupModelMatrix()</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>02739 {
+02740 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_RenderNormal );
+02741
+02742 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty())
+02743 <span class="keywordflow">return</span>;
+02744
+02745 <span class="comment">// get the result of the Load Balancing.</span>
+02746 <span class="keywordtype">float</span> alphaMRM= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getLevelDetailFromPolyCount(polygonCount);
+02747
+02748 <span class="comment">// choose the lod.</span>
+02749 <span class="keywordtype">float</span> alphaLod;
+02750 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod);
+02751
+02752 <span class="comment">// Geomorph the choosen Lod (if not the coarser mesh).</span>
+02753 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>&gt;0)
+02754 {
+02755 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap)
+02756 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a>(_Lods[_MBRCurrentLodId].Geomorphs, alphaLod, (<a class="code" href="a04558.html#a7">uint8</a>*)vbDst);
+02757 <span class="keywordflow">else</span>
+02758 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a>(_Lods[_MBRCurrentLodId].Geomorphs, alphaLod, _VBHard);
+02759 }
+02760
+02761 <span class="comment">// set the instance worldmatrix.</span>
+02762 rdrCtx.Driver-&gt;setupModelMatrix(inst-&gt;getWorldMatrix());
+02763
+02764 <span class="comment">// setupLighting.</span>
+02765 inst-&gt;changeLightSetup(rdrCtx.RenderTrav);
+02766 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_5" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal1" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal1 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03309.html">CRawVertexNormalSkin1</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>destVertexPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>boneMat3x4</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nInf</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00895">895</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_6" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal2" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal2 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03310.html">CRawVertexNormalSkin2</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>destVertexPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>boneMat3x4</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nInf</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l01074">1074</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_7" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal3" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal3 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03311.html">CRawVertexNormalSkin3</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>destVertexPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>boneMat3x4</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nInf</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l01377">1377</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_8" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal4" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal4 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03312.html">CRawVertexNormalSkin4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>destVertexPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>boneMat3x4</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nInf</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l01771">1771</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_0" doxytag="NL3D::CMeshMRMGeom::applyArrayShadowSkin" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayShadowSkin </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02897.html">CShadowVertex</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03128.html">CVector</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>skeleton</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numVerts</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00339">339</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06009.html#l00179">NL3D::computeBoneMatrixes3x4()</a>, <a class="el" href="a06006.html#l00392">NL3D::CMeshMRMGeom::CLod::MatrixInfluences</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a06009.html#l00389">NumCacheVertexShadow</a>, <a class="el" href="a05646.html#l01124">src</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l03376">renderShadowSkinGeom()</a>.
+<p>
+<div class="fragment"><pre>00340 {
+00341 <span class="comment">// For all matrix this Mesh use. (the shadow geometry cannot use other Matrix than the mesh use).</span>
+00342 <span class="comment">// NB: take the best lod since the lower lods cannot use other Matrix than the higher one.</span>
+00343 <span class="keyword">static</span> vector&lt;CMatrix3x4&gt; boneMat3x4;
+00344 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[_Lods.size()-1];
+00345 <a class="code" href="a05363.html#a433">computeBoneMatrixes3x4</a>(boneMat3x4, lod.MatrixInfluences, skeleton);
+00346
+00347 <span class="comment">// Then do the skin</span>
+00348 <span class="keywordflow">for</span>(;numVerts&gt;0;)
+00349 {
+00350 <span class="comment">// number of vertices to process for this block.</span>
+00351 <a class="code" href="a04558.html#a15">uint</a> nBlockInf= <a class="code" href="a04061.html#a0">min</a>(NumCacheVertexShadow, numVerts);
+00352 <span class="comment">// next block.</span>
+00353 numVerts-= nBlockInf;
+00354
+00355 <span class="comment">// cache the data in L1 cache.</span>
+00356 CFastMem::precache(src, nBlockInf * <span class="keyword">sizeof</span>(CShadowVertex));
+00357
+00358 <span class="comment">// for all InfluencedVertices only.</span>
+00359 <span class="keywordflow">for</span>(;nBlockInf&gt;0;nBlockInf--, <a class="code" href="a04223.html#a652">src</a>++, dst++)
+00360 {
+00361 boneMat3x4[ <a class="code" href="a04223.html#a652">src</a>-&gt;MatrixId ].mulSetPoint( <a class="code" href="a04223.html#a652">src</a>-&gt;Vertex, *dst );
+00362 }
+00363 }
+00364 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd0" doxytag="NL3D::CMeshMRMGeom::applyGeomorph" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyGeomorph </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>geoms</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaLod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>currentVBHard</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Apply the geomorph to the _VBuffer, or the VBhard, if exist/used.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00477">477</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>, <a class="el" href="a06713.html#l00053">NL3D::IVertexBufferHard::getVertexSize()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_0">NL3D::IVertexBufferHard::lock()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00096">uint8</a>, and <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_3">NL3D::IVertexBufferHard::unlock()</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l00927">render()</a>, and <a class="el" href="a06005.html#l01146">renderSkin()</a>.
+<p>
+<div class="fragment"><pre>00478 {
+00479 <span class="keywordflow">if</span>(currentVBHard!=NULL)
+00480 {
+00481 <span class="comment">// must write into it</span>
+00482 <a class="code" href="a04558.html#a7">uint8</a> *vertexDestPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)currentVBHard-&gt;lock();
+00483 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() == currentVBHard-&gt;getVertexSize());
+00484
+00485 <span class="comment">// apply the geomorph</span>
+00486 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a>(geoms, alphaLod, vertexDestPtr);
+00487
+00488 <span class="comment">// unlock. ATI: copy only geomorphed vertices.</span>
+00489 currentVBHard-&gt;unlock(0, geoms.size());
+00490 }
+00491 <span class="keywordflow">else</span>
+00492 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a>(geoms, alphaLod, NULL);
+00493
+00494 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd1" doxytag="NL3D::CMeshMRMGeom::applyGeomorphPosNormalUV0" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyGeomorphPosNormalUV0 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>geoms</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexDestPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>a1</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Faster, but common geomorph apply.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00817">817</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06062.html#l00185">NL3D::CMRMWedgeGeom::End</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06062.html#l00183">NL3D::CMRMWedgeGeom::Start</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>.
+<p>
+<div class="fragment"><pre>00818 {
+00819 <a class="code" href="a04199.html#a6">nlassert</a>(vertexSize==32);
+00820
+00821
+00822 <span class="comment">// For all geomorphs.</span>
+00823 <a class="code" href="a04558.html#a15">uint</a> nGeoms= geoms.size();
+00824 CMRMWedgeGeom *ptrGeom= &amp;(geoms[0]);
+00825 <a class="code" href="a04558.html#a7">uint8</a> *destPtr= vertexDestPtr;
+00826 <span class="keywordflow">for</span>(; nGeoms&gt;0; nGeoms--, ptrGeom++, destPtr+= vertexSize )
+00827 {
+00828 <span class="comment">// Consider the Pos/Normal/UV as an array of 8 float to interpolate.</span>
+00829 <span class="keywordtype">float</span> *start= (<span class="keywordtype">float</span>*)(vertexPtr + (ptrGeom-&gt;Start&lt;&lt;5));
+00830 <span class="keywordtype">float</span> *end= (<span class="keywordtype">float</span>*)(vertexPtr + (ptrGeom-&gt;End&lt;&lt;5));
+00831 <span class="keywordtype">float</span> *dst= (<span class="keywordtype">float</span>*)(destPtr);
+00832
+00833 <span class="comment">// unrolled</span>
+00834 dst[0]= start[0] * a + end[0]* a1;
+00835 dst[1]= start[1] * a + end[1]* a1;
+00836 dst[2]= start[2] * a + end[2]* a1;
+00837 dst[3]= start[3] * a + end[3]* a1;
+00838 dst[4]= start[4] * a + end[4]* a1;
+00839 dst[5]= start[5] * a + end[5]* a1;
+00840 dst[6]= start[6] * a + end[6]* a1;
+00841 dst[7]= start[7] * a + end[7]* a1;
+00842 }
+00843 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd2" doxytag="NL3D::CMeshMRMGeom::applyGeomorphWithVBHardPtr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyGeomorphWithVBHardPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="a02971.html">CMRMWedgeGeom</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>geoms</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaLod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexDestPtr</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Apply the geomorph to the VBhard ptr, if not NULL.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00498">498</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l00817">applyGeomorphPosNormalUV0()</a>, <a class="el" href="a06340.html#l00104">NLMISC::CRGBA::blendFromui()</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a06062.html#l00185">NL3D::CMRMWedgeGeom::End</a>, <a class="el" href="a06711.html#l00340">NL3D::CVertexBuffer::getColorOff()</a>, <a class="el" href="a06711.html#l00338">NL3D::CVertexBuffer::getNormalOff()</a>, <a class="el" href="a06711.html#l00341">NL3D::CVertexBuffer::getSpecularOff()</a>, <a class="el" href="a06711.html#l00339">NL3D::CVertexBuffer::getTexCoordOff()</a>, <a class="el" href="a06711.html#l00478">NL3D::CVertexBuffer::getValueType()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06062.html#l00183">NL3D::CMRMWedgeGeom::Start</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, and <a class="el" href="a06005.html#l00477">applyGeomorph()</a>.
+<p>
+<div class="fragment"><pre>00499 {
+00500 <span class="comment">// no geomorphs? quit.</span>
+00501 <span class="keywordflow">if</span>(geoms.size()==0)
+00502 <span class="keywordflow">return</span>;
+00503
+00504 <a class="code" href="a05378.html#a374">clamp</a>(alphaLod, 0.f, 1.f);
+00505 <span class="keywordtype">float</span> a= alphaLod;
+00506 <span class="keywordtype">float</span> a1= 1 - alphaLod;
+00507
+00508
+00509 <span class="comment">// info from VBuffer.</span>
+00510 <a class="code" href="a04558.html#a7">uint8</a> *vertexPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer();
+00511 <a class="code" href="a04558.html#a15">uint</a> flags= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat();
+00512 <a class="code" href="a04558.html#a10">sint32</a> vertexSize= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize();
+00513 <span class="comment">// because of the unrolled code for 4 first UV, must assert this.</span>
+00514 <a class="code" href="a04199.html#a6">nlassert</a>(CVertexBuffer::MaxStage&gt;=4);
+00515 <span class="comment">// must have XYZ.</span>
+00516 <a class="code" href="a04199.html#a6">nlassert</a>(flags &amp; CVertexBuffer::PositionFlag);
+00517
+00518
+00519 <span class="comment">// If VBuffer Hard disabled</span>
+00520 <span class="keywordflow">if</span>(vertexDestPtr==NULL)
+00521 {
+00522 <span class="comment">// write into vertexPtr.</span>
+00523 vertexDestPtr= vertexPtr;
+00524 }
+00525
+00526
+00527 <span class="comment">// if it is a common format</span>
+00528 <span class="keywordflow">if</span>( flags== (CVertexBuffer::PositionFlag | CVertexBuffer::NormalFlag | CVertexBuffer::TexCoord0Flag) &amp;&amp;
+00529 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getValueType(CVertexBuffer::TexCoord0) == CVertexBuffer::Float2 )
+00530 {
+00531 <span class="comment">// use a faster method</span>
+00532 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd1">applyGeomorphPosNormalUV0</a>(geoms, vertexPtr, vertexDestPtr, vertexSize, a, a1);
+00533 }
+00534 <span class="keywordflow">else</span>
+00535 {
+00536 <span class="comment">// for color interp</span>
+00537 <a class="code" href="a04558.html#a15">uint</a> i;
+00538 <a class="code" href="a04558.html#a15">uint</a> ua= (<a class="code" href="a04558.html#a15">uint</a>)(a*256);
+00539 <a class="code" href="a05378.html#a374">clamp</a>(ua, (<a class="code" href="a04558.html#a15">uint</a>)0, (<a class="code" href="a04558.html#a15">uint</a>)256);
+00540 <a class="code" href="a04558.html#a15">uint</a> ua1= 256 - ua;
+00541
+00542 <span class="comment">// if an offset is 0, it means that the component is not in the VBuffer.</span>
+00543 <a class="code" href="a04558.html#a10">sint32</a> normalOff;
+00544 <a class="code" href="a04558.html#a10">sint32</a> colorOff;
+00545 <a class="code" href="a04558.html#a10">sint32</a> specularOff;
+00546 <a class="code" href="a04558.html#a10">sint32</a> uvOff[CVertexBuffer::MaxStage];
+00547 <span class="keywordtype">bool</span> has3Coords[CVertexBuffer::MaxStage];
+00548
+00549
+00550 <span class="comment">// Compute offset of each component of the VB.</span>
+00551 <span class="keywordflow">if</span>(flags &amp; CVertexBuffer::NormalFlag)
+00552 normalOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalOff();
+00553 <span class="keywordflow">else</span>
+00554 normalOff= 0;
+00555 <span class="keywordflow">if</span>(flags &amp; CVertexBuffer::PrimaryColorFlag)
+00556 colorOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getColorOff();
+00557 <span class="keywordflow">else</span>
+00558 colorOff= 0;
+00559 <span class="keywordflow">if</span>(flags &amp; CVertexBuffer::SecondaryColorFlag)
+00560 specularOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getSpecularOff();
+00561 <span class="keywordflow">else</span>
+00562 specularOff= 0;
+00563
+00564 <span class="keywordflow">for</span>(i= 0; i&lt;CVertexBuffer::MaxStage;i++)
+00565 {
+00566 <span class="keywordflow">if</span>(flags &amp; (CVertexBuffer::TexCoord0Flag&lt;&lt;i))
+00567 {
+00568 uvOff[i]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordOff(i);
+00569 has3Coords[i] = (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getValueType(i + CVertexBuffer::TexCoord0) == CVertexBuffer::Float3);
+00570 }
+00571 <span class="keywordflow">else</span>
+00572 {
+00573 uvOff[i]= 0;
+00574 }
+00575 }
+00576
+00577
+00578 <span class="comment">// For all geomorphs.</span>
+00579 <a class="code" href="a04558.html#a15">uint</a> nGeoms= geoms.size();
+00580 CMRMWedgeGeom *ptrGeom= &amp;(geoms[0]);
+00581 <a class="code" href="a04558.html#a7">uint8</a> *destPtr= vertexDestPtr;
+00582 <span class="comment">/* NB: optimisation: lot of "if" in this Loop, but because of BTB, they always cost nothing (prediction is good).</span>
+00583 <span class="comment"> NB: this also is why we unroll the 4 1st Uv. The other (if any), are done in the other loop.</span>
+00584 <span class="comment"> NB: optimisation for AGP write cominers: the order of write (vertex, normal, uvs...) is important for good</span>
+00585 <span class="comment"> use of AGP write combiners.</span>
+00586 <span class="comment"> We have 2 version : one that tests for 3 coordinates texture coords, and one that doesn't</span>
+00587 <span class="comment"> */</span>
+00588
+00589 <span class="keywordflow">if</span> (!has3Coords[0] &amp;&amp; !has3Coords[1] &amp;&amp; !has3Coords[2] &amp;&amp; !has3Coords[3])
+00590 {
+00591 <span class="comment">// there are no texture coordinate of dimension 3</span>
+00592 <span class="keywordflow">for</span>(; nGeoms&gt;0; nGeoms--, ptrGeom++, destPtr+= vertexSize )
+00593 {
+00594 <a class="code" href="a04558.html#a7">uint8</a> *startPtr= vertexPtr + ptrGeom-&gt;Start*vertexSize;
+00595 <a class="code" href="a04558.html#a7">uint8</a> *endPtr= vertexPtr + ptrGeom-&gt;End*vertexSize;
+00596
+00597 <span class="comment">// Vertex.</span>
+00598 {
+00599 CVector *start= (CVector*)startPtr;
+00600 CVector *end= (CVector*)endPtr;
+00601 CVector *dst= (CVector*)destPtr;
+00602 *dst= *start * a + *end * a1;
+00603 }
+00604
+00605 <span class="comment">// Normal.</span>
+00606 <span class="keywordflow">if</span>(normalOff)
+00607 {
+00608 CVector *start= (CVector*)(startPtr + normalOff);
+00609 CVector *end= (CVector*)(endPtr + normalOff);
+00610 CVector *dst= (CVector*)(destPtr + normalOff);
+00611 *dst= *start * a + *end * a1;
+00612 }
+00613
+00614
+00615 <span class="comment">// Uvs.</span>
+00616 <span class="comment">// uv[0].</span>
+00617 <span class="keywordflow">if</span>(uvOff[0])
+00618 {
+00619 <span class="comment">// Uv.</span>
+00620 CUV *start= (CUV*)(startPtr + uvOff[0]);
+00621 CUV *end= (CUV*)(endPtr + uvOff[0]);
+00622 CUV *dst= (CUV*)(destPtr + uvOff[0]);
+00623 *dst= *start * a + *end * a1;
+00624 }
+00625 <span class="comment">// uv[1].</span>
+00626 <span class="keywordflow">if</span>(uvOff[1])
+00627 {
+00628 <span class="comment">// Uv.</span>
+00629 CUV *start= (CUV*)(startPtr + uvOff[1]);
+00630 CUV *end= (CUV*)(endPtr + uvOff[1]);
+00631 CUV *dst= (CUV*)(destPtr + uvOff[1]);
+00632 *dst= *start * a + *end * a1;
+00633 }
+00634 <span class="comment">// uv[2].</span>
+00635 <span class="keywordflow">if</span>(uvOff[2])
+00636 {
+00637 CUV *start= (CUV*)(startPtr + uvOff[2]);
+00638 CUV *end= (CUV*)(endPtr + uvOff[2]);
+00639 CUV *dst= (CUV*)(destPtr + uvOff[2]);
+00640 *dst= *start * a + *end * a1;
+00641 }
+00642 <span class="comment">// uv[3].</span>
+00643 <span class="keywordflow">if</span>(uvOff[3])
+00644 {
+00645 <span class="comment">// Uv.</span>
+00646 CUV *start= (CUV*)(startPtr + uvOff[3]);
+00647 CUV *end= (CUV*)(endPtr + uvOff[3]);
+00648 CUV *dst= (CUV*)(destPtr + uvOff[3]);
+00649 *dst= *start * a + *end * a1;
+00650 }
+00651 }
+00652 }
+00653 <span class="keywordflow">else</span> <span class="comment">// THERE ARE TEXTURE COORDINATES OF DIMENSION 3</span>
+00654 {
+00655 <span class="keywordflow">for</span>(; nGeoms&gt;0; nGeoms--, ptrGeom++, destPtr+= vertexSize )
+00656 {
+00657 <a class="code" href="a04558.html#a7">uint8</a> *startPtr= vertexPtr + ptrGeom-&gt;Start*vertexSize;
+00658 <a class="code" href="a04558.html#a7">uint8</a> *endPtr= vertexPtr + ptrGeom-&gt;End*vertexSize;
+00659
+00660 <span class="comment">// Vertex.</span>
+00661 {
+00662 CVector *start= (CVector*)startPtr;
+00663 CVector *end= (CVector*)endPtr;
+00664 CVector *dst= (CVector*)destPtr;
+00665 *dst= *start * a + *end * a1;
+00666 }
+00667
+00668 <span class="comment">// Normal.</span>
+00669 <span class="keywordflow">if</span>(normalOff)
+00670 {
+00671 CVector *start= (CVector*)(startPtr + normalOff);
+00672 CVector *end= (CVector*)(endPtr + normalOff);
+00673 CVector *dst= (CVector*)(destPtr + normalOff);
+00674 *dst= *start * a + *end * a1;
+00675 }
+00676 <span class="comment">// Uvs.</span>
+00677 <span class="comment">// uv[0].</span>
+00678 <span class="keywordflow">if</span>(uvOff[0])
+00679 {
+00680 <span class="keywordflow">if</span> (!has3Coords[0])
+00681 {
+00682 <span class="comment">// Uv.</span>
+00683 CUV *start= (CUV*)(startPtr + uvOff[0]);
+00684 CUV *end= (CUV*)(endPtr + uvOff[0]);
+00685 CUV *dst= (CUV*)(destPtr + uvOff[0]);
+00686 *dst= *start * a + *end * a1;
+00687 }
+00688 <span class="keywordflow">else</span>
+00689 {
+00690 <span class="comment">// Uv.</span>
+00691 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[0]);
+00692 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[0]);
+00693 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[0]);
+00694 *dst= *start * a + *end * a1;
+00695 }
+00696 }
+00697 <span class="comment">// uv[1].</span>
+00698 <span class="keywordflow">if</span>(uvOff[1])
+00699 {
+00700 <span class="keywordflow">if</span> (!has3Coords[1])
+00701 {
+00702 <span class="comment">// Uv.</span>
+00703 CUV *start= (CUV*)(startPtr + uvOff[1]);
+00704 CUV *end= (CUV*)(endPtr + uvOff[1]);
+00705 CUV *dst= (CUV*)(destPtr + uvOff[1]);
+00706 *dst= *start * a + *end * a1;
+00707 }
+00708 <span class="keywordflow">else</span>
+00709 {
+00710 <span class="comment">// Uv.</span>
+00711 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[1]);
+00712 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[1]);
+00713 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[1]);
+00714 *dst= *start * a + *end * a1;
+00715 }
+00716 }
+00717 <span class="comment">// uv[2].</span>
+00718 <span class="keywordflow">if</span>(uvOff[2])
+00719 {
+00720 <span class="keywordflow">if</span> (!has3Coords[2])
+00721 {
+00722 <span class="comment">// Uv.</span>
+00723 CUV *start= (CUV*)(startPtr + uvOff[2]);
+00724 CUV *end= (CUV*)(endPtr + uvOff[2]);
+00725 CUV *dst= (CUV*)(destPtr + uvOff[2]);
+00726 *dst= *start * a + *end * a1;
+00727 }
+00728 <span class="keywordflow">else</span>
+00729 {
+00730 <span class="comment">// Uv.</span>
+00731 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[2]);
+00732 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[2]);
+00733 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[2]);
+00734 *dst= *start * a + *end * a1;
+00735 }
+00736 }
+00737 <span class="comment">// uv[3].</span>
+00738 <span class="keywordflow">if</span>(uvOff[3])
+00739 {
+00740 <span class="keywordflow">if</span> (!has3Coords[3])
+00741 {
+00742 <span class="comment">// Uv.</span>
+00743 CUV *start= (CUV*)(startPtr + uvOff[3]);
+00744 CUV *end= (CUV*)(endPtr + uvOff[3]);
+00745 CUV *dst= (CUV*)(destPtr + uvOff[3]);
+00746 *dst= *start * a + *end * a1;
+00747 }
+00748 <span class="keywordflow">else</span>
+00749 {
+00750 <span class="comment">// Uv.</span>
+00751 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[3]);
+00752 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[3]);
+00753 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[3]);
+00754 *dst= *start * a + *end * a1;
+00755 }
+00756 }
+00757 <span class="comment">// color.</span>
+00758 <span class="keywordflow">if</span>(colorOff)
+00759 {
+00760 <a class="code" href="a03337.html">CRGBA</a> *start= (<a class="code" href="a03337.html">CRGBA</a>*)(startPtr + colorOff);
+00761 <a class="code" href="a03337.html">CRGBA</a> *end= (<a class="code" href="a03337.html">CRGBA</a>*)(endPtr + colorOff);
+00762 <a class="code" href="a03337.html">CRGBA</a> *dst= (<a class="code" href="a03337.html">CRGBA</a>*)(destPtr + colorOff);
+00763 dst-&gt;<a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(*start, *end, ua1);
+00764 }
+00765 <span class="comment">// specular.</span>
+00766 <span class="keywordflow">if</span>(specularOff)
+00767 {
+00768 <a class="code" href="a03337.html">CRGBA</a> *start= (<a class="code" href="a03337.html">CRGBA</a>*)(startPtr + specularOff);
+00769 <a class="code" href="a03337.html">CRGBA</a> *end= (<a class="code" href="a03337.html">CRGBA</a>*)(endPtr + specularOff);
+00770 <a class="code" href="a03337.html">CRGBA</a> *dst= (<a class="code" href="a03337.html">CRGBA</a>*)(destPtr + specularOff);
+00771 dst-&gt;<a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(*start, *end, ua1);
+00772 }
+00773 }
+00774 }
+00775
+00776
+00777 <span class="comment">// Process extra UVs (maybe never, so don't bother optims :)).</span>
+00778 <span class="comment">// For all stages after 4.</span>
+00779 <span class="keywordflow">for</span>(i=4;i&lt;CVertexBuffer::MaxStage;i++)
+00780 {
+00781 <a class="code" href="a04558.html#a15">uint</a> nGeoms= geoms.size();
+00782 CMRMWedgeGeom *ptrGeom= &amp;(geoms[0]);
+00783 <a class="code" href="a04558.html#a7">uint8</a> *destPtr= vertexDestPtr;
+00784
+00785 <span class="keywordflow">if</span>(uvOff[i]==0)
+00786 <span class="keywordflow">continue</span>;
+00787
+00788 <span class="comment">// For all geomorphs.</span>
+00789 <span class="keywordflow">for</span>(; nGeoms&gt;0; nGeoms--, ptrGeom++, destPtr+= vertexSize )
+00790 {
+00791 <a class="code" href="a04558.html#a7">uint8</a> *startPtr= vertexPtr + ptrGeom-&gt;Start*vertexSize;
+00792 <a class="code" href="a04558.html#a7">uint8</a> *endPtr= vertexPtr + ptrGeom-&gt;End*vertexSize;
+00793
+00794 <span class="comment">// uv[i].</span>
+00795 <span class="comment">// Uv.</span>
+00796 <span class="keywordflow">if</span> (!has3Coords[i])
+00797 {
+00798 CUV *start= (CUV*)(startPtr + uvOff[i]);
+00799 CUV *end= (CUV*)(endPtr + uvOff[i]);
+00800 CUV *dst= (CUV*)(destPtr + uvOff[i]);
+00801 *dst= *start * a + *end * a1;
+00802 }
+00803 <span class="keywordflow">else</span>
+00804 {
+00805 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[i]);
+00806 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[i]);
+00807 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[i]);
+00808 *dst= *start * a + *end * a1;
+00809 }
+00810 }
+00811 }
+00812 }
+00813 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma0" doxytag="NL3D::CMeshMRMGeom::applyMaterialRemap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyMaterialRemap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::vector&lt; <a class="el" href="a04558.html#a14">sint</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>remap</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+change materials Ids (called from <a class="el" href="a02857.html#NL3D_1_1CMesha11">CMesh::optimizeMaterialUsage()</a>)
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00462">462</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00186">getNbLod()</a>, <a class="el" href="a06006.html#l00192">getNbRdrPass()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02900">NL3D::CMeshMRM::optimizeMaterialUsage()</a>.
+<p>
+<div class="fragment"><pre>00463 {
+00464 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> lod=0;lod&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod</a>();lod++)
+00465 {
+00466 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> rp=0;rp&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_5">getNbRdrPass</a>(lod);rp++)
+00467 {
+00468 <span class="comment">// remap</span>
+00469 <a class="code" href="a04558.html#a11">uint32</a> &amp;matId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lod].RdrPass[rp].MaterialId;
+00470 <a class="code" href="a04199.html#a6">nlassert</a>(remap[matId]&gt;=0);
+00471 matId= remap[matId];
+00472 }
+00473 }
+00474 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd3" doxytag="NL3D::CMeshMRMGeom::applyRawSkinWithNormal" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyRawSkinWithNormal </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>lod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03307.html">CRawSkinNormalCache</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rawSkinLod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>skeleton</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vbHard</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaLod</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l01825">1825</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd4" doxytag="NL3D::CMeshMRMGeom::applySkin" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applySkin </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>lod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>skeleton</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Skinning: Apply skinning to the _VBuffer (before geomorph).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00207">207</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06009.html#l00179">NL3D::computeBoneMatrixes3x4()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a06006.html#l00390">NL3D::CMeshMRMGeom::CLod::InfluencedVertices</a>, <a class="el" href="a05990.html#l00116">NL3D::CMesh::CSkinWeight::MatrixId</a>, <a class="el" href="a06006.html#l00392">NL3D::CMeshMRMGeom::CLod::MatrixInfluences</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00096">uint8</a>, and <a class="el" href="a05990.html#l00118">NL3D::CMesh::CSkinWeight::Weights</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>.
+<p>
+<div class="fragment"><pre>00208 {
+00209 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+00210 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size()==0)
+00211 <span class="keywordflow">return</span>;
+00212
+00213 <span class="comment">// get vertexPtr.</span>
+00214 <span class="comment">//===========================</span>
+00215 <a class="code" href="a04558.html#a7">uint8</a> *destVertexPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer();
+00216 <a class="code" href="a04558.html#a15">uint</a> flags= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat();
+00217 <a class="code" href="a04558.html#a10">sint32</a> vertexSize= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize();
+00218 <span class="comment">// must have XYZ.</span>
+00219 <a class="code" href="a04199.html#a6">nlassert</a>(flags &amp; CVertexBuffer::PositionFlag);
+00220
+00221
+00222 <span class="comment">// compute src array.</span>
+00223 CMesh::CSkinWeight *srcSkinPtr;
+00224 CVector *srcVertexPtr;
+00225 srcSkinPtr= &amp;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[0];
+00226 srcVertexPtr= &amp;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[0];
+00227
+00228
+00229
+00230 <span class="comment">// Compute usefull Matrix for this lod.</span>
+00231 <span class="comment">//===========================</span>
+00232 <span class="comment">// Those arrays map the array of bones in skeleton.</span>
+00233 <span class="keyword">static</span> vector&lt;CMatrix3x4&gt; boneMat3x4;
+00234 <a class="code" href="a05363.html#a433">computeBoneMatrixes3x4</a>(boneMat3x4, lod.MatrixInfluences, skeleton);
+00235
+00236
+00237 <span class="comment">// apply skinning.</span>
+00238 <span class="comment">//===========================</span>
+00239 <span class="comment">// assert, code below is written especially for 4 per vertex.</span>
+00240 <a class="code" href="a04199.html#a6">nlassert</a>(NL3D_MESH_SKINNING_MAX_MATRIX==4);
+00241 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;i++)
+00242 {
+00243 <a class="code" href="a04558.html#a15">uint</a> nInf= lod.InfluencedVertices[i].size();
+00244 <span class="keywordflow">if</span>( nInf==0 )
+00245 <span class="keywordflow">continue</span>;
+00246 <a class="code" href="a04558.html#a11">uint32</a> *infPtr= &amp;(lod.InfluencedVertices[i][0]);
+00247
+00248 <span class="comment">// apply the skin to the vertices</span>
+00249 <span class="keywordflow">switch</span>(i)
+00250 {
+00251 <span class="comment">//=========</span>
+00252 <span class="keywordflow">case</span> 0:
+00253 <span class="comment">// Special case for Vertices influenced by one matrix. Just copy result of mul.</span>
+00254 <span class="comment">// for all InfluencedVertices only.</span>
+00255 <span class="keywordflow">for</span>(;nInf&gt;0;nInf--, infPtr++)
+00256 {
+00257 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr;
+00258 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>;
+00259 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>;
+00260 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize;
+00261 CVector *dstVertex= (CVector*)(dstVertexVB);
+00262
+00263
+00264 <span class="comment">// Vertex.</span>
+00265 boneMat3x4[ srcSkin-&gt;MatrixId[0] ].mulSetPoint( *srcVertex, *dstVertex);
+00266 }
+00267 <span class="keywordflow">break</span>;
+00268
+00269 <span class="comment">//=========</span>
+00270 <span class="keywordflow">case</span> 1:
+00271 <span class="comment">// for all InfluencedVertices only.</span>
+00272 <span class="keywordflow">for</span>(;nInf&gt;0;nInf--, infPtr++)
+00273 {
+00274 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr;
+00275 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>;
+00276 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>;
+00277 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize;
+00278 CVector *dstVertex= (CVector*)(dstVertexVB);
+00279
+00280
+00281 <span class="comment">// Vertex.</span>
+00282 boneMat3x4[ srcSkin-&gt;MatrixId[0] ].mulSetPoint( *srcVertex, srcSkin-&gt;Weights[0], *dstVertex);
+00283 boneMat3x4[ srcSkin-&gt;MatrixId[1] ].mulAddPoint( *srcVertex, srcSkin-&gt;Weights[1], *dstVertex);
+00284 }
+00285 <span class="keywordflow">break</span>;
+00286
+00287 <span class="comment">//=========</span>
+00288 <span class="keywordflow">case</span> 2:
+00289 <span class="comment">// for all InfluencedVertices only.</span>
+00290 <span class="keywordflow">for</span>(;nInf&gt;0;nInf--, infPtr++)
+00291 {
+00292 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr;
+00293 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>;
+00294 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>;
+00295 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize;
+00296 CVector *dstVertex= (CVector*)(dstVertexVB);
+00297
+00298
+00299 <span class="comment">// Vertex.</span>
+00300 boneMat3x4[ srcSkin-&gt;MatrixId[0] ].mulSetPoint( *srcVertex, srcSkin-&gt;Weights[0], *dstVertex);
+00301 boneMat3x4[ srcSkin-&gt;MatrixId[1] ].mulAddPoint( *srcVertex, srcSkin-&gt;Weights[1], *dstVertex);
+00302 boneMat3x4[ srcSkin-&gt;MatrixId[2] ].mulAddPoint( *srcVertex, srcSkin-&gt;Weights[2], *dstVertex);
+00303 }
+00304 <span class="keywordflow">break</span>;
+00305
+00306 <span class="comment">//=========</span>
+00307 <span class="keywordflow">case</span> 3:
+00308 <span class="comment">// for all InfluencedVertices only.</span>
+00309 <span class="keywordflow">for</span>(;nInf&gt;0;nInf--, infPtr++)
+00310 {
+00311 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr;
+00312 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>;
+00313 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>;
+00314 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize;
+00315 CVector *dstVertex= (CVector*)(dstVertexVB);
+00316
+00317
+00318 <span class="comment">// Vertex.</span>
+00319 boneMat3x4[ srcSkin-&gt;MatrixId[0] ].mulSetPoint( *srcVertex, srcSkin-&gt;Weights[0], *dstVertex);
+00320 boneMat3x4[ srcSkin-&gt;MatrixId[1] ].mulAddPoint( *srcVertex, srcSkin-&gt;Weights[1], *dstVertex);
+00321 boneMat3x4[ srcSkin-&gt;MatrixId[2] ].mulAddPoint( *srcVertex, srcSkin-&gt;Weights[2], *dstVertex);
+00322 boneMat3x4[ srcSkin-&gt;MatrixId[3] ].mulAddPoint( *srcVertex, srcSkin-&gt;Weights[3], *dstVertex);
+00323 }
+00324 <span class="keywordflow">break</span>;
+00325
+00326 }
+00327 }
+00328 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd5" doxytag="NL3D::CMeshMRMGeom::applySkinWithNormal" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applySkinWithNormal </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>lod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>skeleton</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The same as apply skin, but with normal modified. Normal is not normalized. 4 versions from slower to faster.
+<p>
+Definition at line <a class="el" href="a06009.html#l00741">741</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd6" doxytag="NL3D::CMeshMRMGeom::applySkinWithTangentSpace" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applySkinWithTangentSpace </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>lod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>skeleton</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>tangentSpaceTexCoord</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The same as apply skin with normal, but with a tangent space added (encoded in a texture coordinate). The tangent space is modified, but not normalized (must be done in a vertex program). 4 versions from slower to faster.
+<p>
+Definition at line <a class="el" href="a06009.html#l00804">804</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_1" doxytag="NL3D::CMeshMRMGeom::beginMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::beginMesh </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>rdrCtx</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The framework call this method when he will render instances of this meshGeom soon.
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_1">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02705">2705</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00562">_MBRBkupNormalize</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera3">NL3D::IDriver::activeVertexBufferHard()</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver::forceNormalize()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera46">NL3D::IDriver::isForceNormalize()</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, and <a class="el" href="a06005.html#l02224">updateVertexBufferHard()</a>.
+<p>
+<div class="fragment"><pre>02706 {
+02707 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty())
+02708 <span class="keywordflow">return</span>;
+02709
+02710 IDriver *drv= rdrCtx.Driver;
+02711
+02712 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap)
+02713 {
+02714 <span class="comment">// Don't setup VB in this case, since use the VBHeap setuped one.</span>
+02715 }
+02716 <span class="keywordflow">else</span>
+02717 {
+02718 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_2">updateVertexBufferHard</a>(drv, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+02719
+02720 <span class="comment">// active VB.</span>
+02721 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>)
+02722 {
+02723 drv-&gt;activeVertexBufferHard(_VBHard);
+02724 }
+02725 <span class="keywordflow">else</span>
+02726 {
+02727 drv-&gt;activeVertexBuffer(_VBufferFinal);
+02728 }
+02729 }
+02730
+02731
+02732 <span class="comment">// force normalisation of normals..</span>
+02733 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_0">_MBRBkupNormalize</a>= drv-&gt;isForceNormalize();
+02734 drv-&gt;forceNormalize(<span class="keyword">true</span>);
+02735
+02736 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd7" doxytag="NL3D::CMeshMRMGeom::bkupOriginalSkinVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::bkupOriginalSkinVertices </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Skinning: bkup Vertex/Normal into _OriginalSkin* from VBuffer.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02045">2045</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l02055">bkupOriginalSkinVerticesSubset()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, and <a class="el" href="a05622.html#l00290">nlassert</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00246">build()</a>.
+<p>
+<div class="fragment"><pre>02046 {
+02047 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+02048
+02049 <span class="comment">// bkup the entire array.</span>
+02050 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd8">bkupOriginalSkinVerticesSubset</a>(0, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+02051 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd8" doxytag="NL3D::CMeshMRMGeom::bkupOriginalSkinVerticesSubset" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::bkupOriginalSkinVerticesSubset </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>wedgeStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>wedgeEnd</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02055">2055</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06710.html#l00449">NL3D::CVertexBuffer::getNormalCoordPointer()</a>, <a class="el" href="a06710.html#l00976">NL3D::CVertexBuffer::getNumTexCoordUsed()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06710.html#l00497">NL3D::CVertexBuffer::getTexCoordPointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02045">bkupOriginalSkinVertices()</a>, and <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>.
+<p>
+<div class="fragment"><pre>02056 {
+02057 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+02058
+02059 <span class="comment">// Copy VBuffer content into Original vertices normals.</span>
+02060 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() &amp; CVertexBuffer::PositionFlag)
+02061 {
+02062 <span class="comment">// copy vertices from VBuffer. (NB: unusefull geomorphed vertices are still copied, but doesn't matter).</span>
+02063 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+02064 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=wedgeStart; i&lt;wedgeEnd;i++)
+02065 {
+02066 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[i]= *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(i);
+02067 }
+02068 }
+02069 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() &amp; CVertexBuffer::NormalFlag)
+02070 {
+02071 <span class="comment">// copy normals from VBuffer. (NB: unusefull geomorphed normals are still copied, but doesn't matter).</span>
+02072 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+02073 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=wedgeStart; i&lt;wedgeEnd;i++)
+02074 {
+02075 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[i]= *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalCoordPointer(i);
+02076 }
+02077 }
+02078
+02079 <span class="comment">// is there tangent space added ?</span>
+02080 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;needTangentSpace())
+02081 {
+02082 <span class="comment">// yes, backup it</span>
+02083 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed() &gt; 0);
+02084 <a class="code" href="a04558.html#a15">uint</a> tgSpaceStage = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed() - 1;
+02085 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+02086 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=wedgeStart; i&lt;wedgeEnd;i++)
+02087 {
+02088 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>[i]= *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(i, tgSpaceStage);
+02089 }
+02090 }
+02091 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma1" doxytag="NL3D::CMeshMRMGeom::build" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::build </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02864.html">CMesh::CMeshBuild</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::vector&lt; <a class="el" href="a02864.html">CMesh::CMeshBuild</a> * &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>bsList</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numMaxMaterial</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02967.html">CMRMParameters</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>params</em> = <a class="el" href="a02967.html">CMRMParameters</a>()</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Build a mesh, replacing old. this is much slower than <a class="el" href="a02878.html#NL3D_1_1CMeshGeoma1">CMeshGeom::build()</a>, because it computes the MRM. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>params</em>&nbsp;</td><td>parameters of the MRM build process.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00246">246</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00519">_LodInfos</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l02045">bkupOriginalSkinVertices()</a>, <a class="el" href="a06006.html#l00436">NL3D::CMeshMRMGeom::CMeshBuildMRM::BlendShapes</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a05990.html#l00190">NL3D::CMesh::CMeshBuild::BonesNames</a>, <a class="el" href="a06059.html#l00037">NL3D::CMRMLevelDetail::compileDistanceSetup()</a>, <a class="el" href="a06055.html#l02991">NL3D::CMRMBuilder::compileMRM()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l03052">dirtMeshDataId()</a>, <a class="el" href="a06006.html#l00445">NL3D::CMeshMRMGeom::CMeshBuildMRM::DistanceCoarsest</a>, <a class="el" href="a06060.html#l00065">NL3D::CMRMLevelDetail::DistanceCoarsest</a>, <a class="el" href="a06006.html#l00441">NL3D::CMeshMRMGeom::CMeshBuildMRM::DistanceFinest</a>, <a class="el" href="a06060.html#l00061">NL3D::CMRMLevelDetail::DistanceFinest</a>, <a class="el" href="a06006.html#l00443">NL3D::CMeshMRMGeom::CMeshBuildMRM::DistanceMiddle</a>, <a class="el" href="a06060.html#l00063">NL3D::CMRMLevelDetail::DistanceMiddle</a>, <a class="el" href="a05990.html#l00193">NL3D::CMesh::CMeshBuild::Faces</a>, <a class="el" href="a06198.html#l00160">NL3D::CPrimitiveBlock::getNumTriangles()</a>, <a class="el" href="a06006.html#l00433">NL3D::CMeshMRMGeom::CMeshBuildMRM::Lods</a>, <a class="el" href="a05989.html#l00058">NL3D::makeBBox()</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a06060.html#l00058">NL3D::CMRMLevelDetail::MaxFaceUsed</a>, <a class="el" href="a05990.html#l00202">NL3D::CMesh::CMeshBuild::MeshVertexProgram</a>, <a class="el" href="a06060.html#l00056">NL3D::CMRMLevelDetail::MinFaceUsed</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05646.html#l00223">params</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06710.html#l00401">NL3D::CVertexBuffer::reserve()</a>, <a class="el" href="a05385.html#l00181">NLMISC::CAABBoxExt::setCenter()</a>, <a class="el" href="a06710.html#l00409">NL3D::CVertexBuffer::setNumVertices()</a>, <a class="el" href="a05385.html#l00183">NLMISC::CAABBoxExt::setSize()</a>, <a class="el" href="a06006.html#l00424">NL3D::CMeshMRMGeom::CMeshBuildMRM::Skinned</a>, <a class="el" href="a06006.html#l00427">NL3D::CMeshMRMGeom::CMeshBuildMRM::SkinWeights</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a06006.html#l00430">NL3D::CMeshMRMGeom::CMeshBuildMRM::VBuffer</a>, and <a class="el" href="a05990.html#l00184">NL3D::CMesh::CMeshBuild::Vertices</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02878">NL3D::CMeshMRM::build()</a>.
+<p>
+<div class="fragment"><pre>00248 {
+00249
+00250 <span class="comment">// Dirt the VBuffer.</span>
+00251 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+00252
+00253 <span class="comment">// Empty geometry?</span>
+00254 <span class="keywordflow">if</span>(m.Vertices.size()==0 || m.Faces.size()==0)
+00255 {
+00256 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.setNumVertices(0);
+00257 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.reserve(0);
+00258 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.clear();
+00259 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1910_1">setCenter</a>(CVector::Null);
+00260 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1910_4">setSize</a>(CVector::Null);
+00261 <span class="keywordflow">return</span>;
+00262 }
+00263 <a class="code" href="a04199.html#a6">nlassert</a>(numMaxMaterial&gt;0);
+00264
+00265
+00266 <span class="comment">// SmartPtr Copy VertexProgram effect.</span>
+00267 <span class="comment">//================================================ </span>
+00268 this-&gt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>= m.MeshVertexProgram;
+00269
+00270
+00272 <span class="comment">//======================</span>
+00273 <span class="comment">// NB: this is equivalent as building BBox from MRM VBuffer, because CMRMBuilder create new vertices </span>
+00274 <span class="comment">// which are just interpolation of original vertices.</span>
+00275 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>= <a class="code" href="a05363.html#a431">makeBBox</a>(m.Vertices);
+00276
+00277
+00279 <span class="comment">//================================================</span>
+00280 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomn0">CMRMBuilder</a> mrmBuilder;
+00281 CMeshBuildMRM meshBuildMRM;
+00282
+00283 mrmBuilder.compileMRM(m, bsList, params, meshBuildMRM, numMaxMaterial);
+00284
+00285 <span class="comment">// Then just copy result!</span>
+00286 <span class="comment">//================================================</span>
+00287 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>= meshBuildMRM.VBuffer;
+00288 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>= meshBuildMRM.Lods;
+00289 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>= meshBuildMRM.Skinned;
+00290 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>= meshBuildMRM.SkinWeights;
+00291
+00292 <span class="comment">// Compute degradation control.</span>
+00293 <span class="comment">//================================================</span>
+00294 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest= meshBuildMRM.DistanceFinest;
+00295 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle= meshBuildMRM.DistanceMiddle;
+00296 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest= meshBuildMRM.DistanceCoarsest;
+00297 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest&gt;=0);
+00298 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle &gt; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest);
+00299 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest &gt; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle);
+00300 <span class="comment">// Compute OODistDelta and DistancePow</span>
+00301 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.compileDistanceSetup();
+00302
+00303
+00304 <span class="comment">// Build the _LodInfos.</span>
+00305 <span class="comment">//================================================</span>
+00306 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size());
+00307 <a class="code" href="a04558.html#a11">uint32</a> precNWedges= 0;
+00308 <a class="code" href="a04558.html#a15">uint</a> i;
+00309 <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();i++)
+00310 {
+00311 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>[i].StartAddWedge= precNWedges;
+00312 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>[i].EndAddWedges= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].NWedges;
+00313 precNWedges= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].NWedges;
+00314 <span class="comment">// LodOffset is filled in serial() when stream is input.</span>
+00315 }
+00316 <span class="comment">// After build, all lods are present in memory. </span>
+00317 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();
+00318
+00319
+00320 <span class="comment">// For load balancing.</span>
+00321 <span class="comment">//================================================</span>
+00322 <span class="comment">// compute Max Face Used</span>
+00323 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed= 0;
+00324 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed= 0;
+00325 <span class="comment">// Count of primitive block</span>
+00326 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()&gt;0)
+00327 {
+00328 <a class="code" href="a04558.html#a15">uint</a> pb;
+00329 <span class="comment">// Compute MinFaces.</span>
+00330 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;firstLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[0];
+00331 <span class="keywordflow">for</span> (pb=0; pb&lt;firstLod.RdrPass.size(); pb++)
+00332 {
+00333 CRdrPass &amp;pass= firstLod.RdrPass[pb];
+00334 <span class="comment">// Sum tri</span>
+00335 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed+= pass.PBlock.getNumTriangles ();
+00336 }
+00337 <span class="comment">// Compute MaxFaces.</span>
+00338 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lastLod= _Lods[_Lods.size()-1];
+00339 <span class="keywordflow">for</span> (pb=0; pb&lt;lastLod.RdrPass.size(); pb++)
+00340 {
+00341 CRdrPass &amp;pass= lastLod.RdrPass[pb];
+00342 <span class="comment">// Sum tri</span>
+00343 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed+= pass.PBlock.getNumTriangles ();
+00344 }
+00345 }
+00346
+00347
+00348 <span class="comment">// For skinning.</span>
+00349 <span class="comment">//================================================</span>
+00350 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> )
+00351 {
+00352 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd7">bkupOriginalSkinVertices</a>();
+00353 }
+00354 <span class="comment">// Inform that the mesh data has changed</span>
+00355 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_9">dirtMeshDataId</a>();
+00356
+00357
+00358 <span class="comment">// For AGP SKinning optim, and for Render optim</span>
+00359 <span class="comment">//================================================</span>
+00360 <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();i++)
+00361 {
+00362 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].buildSkinVertexBlocks();
+00363 <span class="comment">// sort triangles for better cache use.</span>
+00364 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].optimizeTriangleOrder();
+00365 }
+00366
+00367 <span class="comment">// Copy Blend Shapes</span>
+00368 <span class="comment">//================================================ </span>
+00369 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes = meshBuildMRM.BlendShapes;
+00370
+00371
+00372 <span class="comment">// Compact bone id and build a bone id names</span>
+00373 <span class="comment">//================================================ </span>
+00374
+00375 <span class="comment">// Skinned ?</span>
+00376 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+00377 {
+00378 <span class="comment">// Remap</span>
+00379 std::map&lt;uint, uint&gt; remap;
+00380
+00381 <span class="comment">// Current bone</span>
+00382 <a class="code" href="a04558.html#a15">uint</a> currentBone = 0;
+00383
+00384 <span class="comment">// Reserve memory</span>
+00385 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.reserve (m.BonesNames.size());
+00386
+00387 <span class="comment">// For each vertices</span>
+00388 <a class="code" href="a04558.html#a15">uint</a> vert;
+00389 <span class="keywordflow">for</span> (vert=0; vert&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++)
+00390 {
+00391 <span class="comment">// Found one ?</span>
+00392 <span class="keywordtype">bool</span> found=<span class="keyword">false</span>;
+00393
+00394 <span class="comment">// For each weight</span>
+00395 <a class="code" href="a04558.html#a15">uint</a> weight;
+00396 <span class="keywordflow">for</span> (weight=0; weight&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++)
+00397 {
+00398 <span class="comment">// Active ?</span>
+00399 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]&gt;0)||(weight==0))
+00400 {
+00401 <span class="comment">// Look for it</span>
+00402 std::map&lt;uint, uint&gt;::iterator ite = remap.find (_SkinWeights[vert].MatrixId[weight]);
+00403
+00404 <span class="comment">// Find ?</span>
+00405 <span class="keywordflow">if</span> (ite == remap.end())
+00406 {
+00407 <span class="comment">// Insert it</span>
+00408 remap.insert (std::map&lt;uint, uint&gt;::value_type (_SkinWeights[vert].MatrixId[weight], currentBone));
+00409
+00410 <span class="comment">// Check the id</span>
+00411 <a class="code" href="a04199.html#a6">nlassert</a> (_SkinWeights[vert].MatrixId[weight]&lt;m.BonesNames.size());
+00412
+00413 <span class="comment">// Set the bone name</span>
+00414 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.push_back (m.BonesNames[_SkinWeights[vert].MatrixId[weight]]);
+00415
+00416 <span class="comment">// Set the local bone id</span>
+00417 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight] = currentBone++;
+00418 }
+00419 <span class="keywordflow">else</span>
+00420 {
+00421 <span class="comment">// Set the local bone id</span>
+00422 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight] = ite-&gt;second;
+00423 }
+00424
+00425 <span class="comment">// Found one</span>
+00426 found = <span class="keyword">true</span>;
+00427 }
+00428 }
+00429
+00430 <span class="comment">// Found one ?</span>
+00431 <a class="code" href="a04199.html#a6">nlassert</a> (found);
+00432 }
+00433
+00434 <span class="comment">// Remap the vertex influence by lods</span>
+00435 <a class="code" href="a04558.html#a15">uint</a> lod;
+00436 <span class="keywordflow">for</span> (lod=0; lod&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); lod++)
+00437 {
+00438 <span class="comment">// For each matrix used</span>
+00439 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>;
+00440 <span class="keywordflow">for</span> (<a class="code" href="a04223.html#a578">matrix</a>=0; <a class="code" href="a04223.html#a578">matrix</a>&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lod].MatrixInfluences.size(); <a class="code" href="a04223.html#a578">matrix</a>++)
+00441 {
+00442 <span class="comment">// Remap</span>
+00443 std::map&lt;uint, uint&gt;::iterator ite = remap.find (_Lods[lod].MatrixInfluences[matrix]);
+00444
+00445 <span class="comment">// Find ?</span>
+00446 <a class="code" href="a04199.html#a6">nlassert</a> (ite != remap.end());
+00447
+00448 <span class="comment">// Remap</span>
+00449 _Lods[lod].MatrixInfluences[<a class="code" href="a04223.html#a578">matrix</a>] = ite-&gt;second;
+00450 }
+00451 }
+00452 }
+00453
+00454 <span class="comment">// Misc.</span>
+00455 <span class="comment">//===================</span>
+00456 <span class="comment">// Some runtime not serialized compilation</span>
+00457 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd11">compileRunTime</a>();
+00458
+00459 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd9" doxytag="NL3D::CMeshMRMGeom::buildBoneUsageVer2" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::buildBoneUsageVer2 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02482">2482</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01951">loadFirstLod()</a>.
+<p>
+<div class="fragment"><pre>02483 {
+02484 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+02485 {
+02486 <span class="comment">// parse all vertices, couting MaxBoneId used.</span>
+02487 <a class="code" href="a04558.html#a11">uint32</a> maxBoneId= 0;
+02488 <span class="comment">// for each vertex</span>
+02489 <a class="code" href="a04558.html#a15">uint</a> vert;
+02490 <span class="keywordflow">for</span> (vert=0; vert&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++)
+02491 {
+02492 <span class="comment">// For each weight</span>
+02493 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> weight=0; weight&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++)
+02494 {
+02495 <span class="comment">// Active ?</span>
+02496 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]&gt;0)||(weight==0))
+02497 {
+02498 maxBoneId= max(_SkinWeights[vert].MatrixId[weight], maxBoneId);
+02499 }
+02500 }
+02501 }
+02502
+02503 <span class="comment">// alloc an array of maxBoneId+1, reset to 0.</span>
+02504 std::vector&lt;uint8&gt; boneUsage;
+02505 boneUsage.resize(maxBoneId+1, 0);
+02506
+02507 <span class="comment">// reparse all vertices, counting usage for each bone.</span>
+02508 <span class="keywordflow">for</span> (vert=0; vert&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++)
+02509 {
+02510 <span class="comment">// For each weight</span>
+02511 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> weight=0; weight&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++)
+02512 {
+02513 <span class="comment">// Active ?</span>
+02514 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]&gt;0)||(weight==0))
+02515 {
+02516 <span class="comment">// mark this bone as used.</span>
+02517 boneUsage[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight]]= 1;
+02518 }
+02519 }
+02520 }
+02521
+02522 <span class="comment">// For each bone used</span>
+02523 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.clear();
+02524 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;boneUsage.size();i++)
+02525 {
+02526 <span class="comment">// if the bone is used by the mesh, add it to BoneId.</span>
+02527 <span class="keywordflow">if</span>(boneUsage[i])
+02528 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.push_back(i);
+02529 }
+02530 }
+02531 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma2" doxytag="NL3D::CMeshMRMGeom::changeMRMDistanceSetup" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::changeMRMDistanceSetup </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname" nowrap> <em>distanceFinest</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>distanceMiddle</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>distanceCoarsest</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Change MRM Distance setup. NB: no-op if distanceFinest&lt;0, distanceMiddle&lt;=distanceFinest or if distanceCoarsest&lt;=distanceMiddle. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>distanceFinest</em>&nbsp;</td><td>The MRM has its max faces when dist&lt;=distanceFinest. </td></tr>
+ <tr><td valign=top><em>distanceMiddle</em>&nbsp;</td><td>The MRM has 50% of its faces at dist==distanceMiddle. </td></tr>
+ <tr><td valign=top><em>distanceCoarsest</em>&nbsp;</td><td>The MRM has faces/Divisor (ie near 0) when dist&gt;=distanceCoarsest.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00228">228</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06059.html#l00037">NL3D::CMRMLevelDetail::compileDistanceSetup()</a>, <a class="el" href="a06060.html#l00065">NL3D::CMRMLevelDetail::DistanceCoarsest</a>, <a class="el" href="a06060.html#l00061">NL3D::CMRMLevelDetail::DistanceFinest</a>, and <a class="el" href="a06060.html#l00063">NL3D::CMRMLevelDetail::DistanceMiddle</a>.
+<p>
+Referenced by <a class="el" href="a06016.html#l00609">NL3D::CMeshMultiLod::changeMRMDistanceSetup()</a>, and <a class="el" href="a06005.html#l03011">NL3D::CMeshMRM::changeMRMDistanceSetup()</a>.
+<p>
+<div class="fragment"><pre>00229 {
+00230 <span class="comment">// check input.</span>
+00231 <span class="keywordflow">if</span>(distanceFinest&lt;0) <span class="keywordflow">return</span>;
+00232 <span class="keywordflow">if</span>(distanceMiddle&lt;=distanceFinest) <span class="keywordflow">return</span>;
+00233 <span class="keywordflow">if</span>(distanceCoarsest&lt;=distanceMiddle) <span class="keywordflow">return</span>;
+00234
+00235 <span class="comment">// Change.</span>
+00236 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest= distanceFinest;
+00237 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle= distanceMiddle;
+00238 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest= distanceCoarsest;
+00239
+00240 <span class="comment">// compile </span>
+00241 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.compileDistanceSetup();
+00242 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd10" doxytag="NL3D::CMeshMRMGeom::chooseLod" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::chooseLod </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaMRM</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaLod</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+choose the lod according to the alphaMRM [0,1] given.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l00898">898</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, <a class="el" href="a06005.html#l00927">render()</a>, <a class="el" href="a06005.html#l01146">renderSkin()</a>, and <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>.
+<p>
+<div class="fragment"><pre>00899 {
+00900 <span class="comment">// Choose what Lod to draw.</span>
+00901 alphaMRM*= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()-1;
+00902 <a class="code" href="a04558.html#a14">sint</a> numLod= (<a class="code" href="a04558.html#a14">sint</a>)ceil(alphaMRM);
+00903 <span class="keywordflow">if</span>(numLod==0)
+00904 {
+00905 numLod= 0;
+00906 alphaLod= 0;
+00907 }
+00908 <span class="keywordflow">else</span>
+00909 {
+00910 <span class="comment">// Lerp beetween lod i-1 and lod i.</span>
+00911 alphaLod= alphaMRM-(numLod-1);
+00912 }
+00913
+00914
+00915 <span class="comment">// If lod chosen is not loaded, take the best loaded.</span>
+00916 <span class="keywordflow">if</span>(numLod&gt;=(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>)
+00917 {
+00918 numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>-1;
+00919 alphaLod= 1;
+00920 }
+00921
+00922 <span class="keywordflow">return</span> numLod;
+00923 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_0" doxytag="NL3D::CMeshMRMGeom::clip" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::clip </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::vector&lt; <a class="el" href="a03082.html">CPlane</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>pyramid</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02851.html">CMatrix</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>worldMatrix</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+clip this mesh in a driver. true if visible.
+<p>
+
+<p>
+Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma0">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l00856">856</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a05504.html#l00088">NLMISC::CBSphere::applyTransform()</a>, <a class="el" href="a05505.html#l00048">NLMISC::CBSphere::Center</a>, <a class="el" href="a05384.html#l00319">NLMISC::CAABBoxExt::clipBack()</a>, <a class="el" href="a05385.html#l00199">NLMISC::CAABBoxExt::getCenter()</a>, <a class="el" href="a05385.html#l00204">NLMISC::CAABBoxExt::getRadius()</a>, <a class="el" href="a06172.html#l00068">NLMISC::CPlane::normalize()</a>, <a class="el" href="a05505.html#l00049">NLMISC::CBSphere::Radius</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02946">NL3D::CMeshMRM::clip()</a>.
+<p>
+<div class="fragment"><pre>00857 {
+00858 <span class="comment">// Speed Clip: clip just the sphere.</span>
+00859 <a class="code" href="a02291.html">CBSphere</a> localSphere(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_1">getCenter</a>(), <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_5">getRadius</a>());
+00860 <a class="code" href="a02291.html">CBSphere</a> worldSphere;
+00861
+00862 <span class="comment">// transform the sphere in WorldMatrix (with nearly good scale info).</span>
+00863 localSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSpherez1929_0">applyTransform</a>(worldMatrix, worldSphere);
+00864
+00865 <span class="comment">// if out of only plane, entirely out.</span>
+00866 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)pyramid.size();i++)
+00867 {
+00868 <span class="comment">// We are sure that pyramid has normalized plane normals.</span>
+00869 <span class="comment">// if SpherMax OUT return false.</span>
+00870 <span class="keywordtype">float</span> d= pyramid[i]*worldSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSphereo0">Center</a>;
+00871 <span class="keywordflow">if</span>(d&gt;worldSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSphereo1">Radius</a>)
+00872 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00873 }
+00874
+00875 <span class="comment">// test if must do a precise clip, according to mesh size.</span>
+00876 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a> )
+00877 {
+00878 CPlane localPlane;
+00879
+00880 <span class="comment">// if out of only plane, entirely out.</span>
+00881 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)pyramid.size();i++)
+00882 {
+00883 <span class="comment">// Transform the pyramid in Object space.</span>
+00884 localPlane= pyramid[i]*worldMatrix;
+00885 <span class="comment">// localPlane must be normalized, because worldMatrix mya have a scale.</span>
+00886 localPlane.normalize();
+00887 <span class="comment">// if the box is not partially inside the plane, quit</span>
+00888 <span class="keywordflow">if</span>( !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1914_0">clipBack</a>(localPlane) )
+00889 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00890 }
+00891 }
+00892
+00893 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00894 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd11" doxytag="NL3D::CMeshMRMGeom::compileRunTime" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::compileRunTime </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02554">2554</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06006.html#l00560">_SupportMeshBlockRendering</a>, <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>, <a class="el" href="a06006.html#l00498">_SupportSkinGrouping</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06198.html#l00087">NL3D::CPrimitiveBlock::getNumLine()</a>, <a class="el" href="a06198.html#l00141">NL3D::CPrimitiveBlock::getNumQuad()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a05385.html#l00204">NLMISC::CAABBoxExt::getRadius()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05990.html#l00066">NL3D_MESH_PRECISE_CLIP_THRESHOLD</a>, <a class="el" href="a06330.html#l00066">NL3D_MESH_SKIN_MANAGER_MAXVERTICES</a>, <a class="el" href="a06330.html#l00065">NL3D_MESH_SKIN_MANAGER_VERTEXFORMAT</a>, <a class="el" href="a06330.html#l00076">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>, <a class="el" href="a06330.html#l00075">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00246">build()</a>.
+<p>
+<div class="fragment"><pre>02555 {
+02556 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_5">getRadius</a>() &gt;= <a class="code" href="a04567.html#a1">NL3D_MESH_PRECISE_CLIP_THRESHOLD</a>;
+02557
+02558 <span class="comment">// Compute if can support SkinGrouping rendering</span>
+02559 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()==0 || !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+02560 {
+02561 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= <span class="keyword">false</span>;
+02562 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= <span class="keyword">false</span>;
+02563 }
+02564 <span class="keywordflow">else</span>
+02565 {
+02566 <span class="comment">// The Mesh must follow those restrictions, to support group skinning</span>
+02567 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>=
+02568 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() == <a class="code" href="a04907.html#a0">NL3D_MESH_SKIN_MANAGER_VERTEXFORMAT</a> &amp;&amp;
+02569 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices() &lt; <a class="code" href="a04907.html#a1">NL3D_MESH_SKIN_MANAGER_MAXVERTICES</a> &amp;&amp;
+02570 !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>;
+02571 <span class="comment">// Additionally, NONE of the RdrPass should have Quads or lines...</span>
+02572 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();i++)
+02573 {
+02574 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].RdrPass.size();j++)
+02575 {
+02576 CPrimitiveBlock &amp;pb= _Lods[i].RdrPass[j].PBlock;
+02577 <span class="keywordflow">if</span>( pb.getNumQuad() || pb.getNumLine() )
+02578 {
+02579 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= <span class="keyword">false</span>;
+02580 <span class="keywordflow">break</span>;
+02581 }
+02582 }
+02583 }
+02584
+02585 <span class="comment">// Support Shadow SkinGrouping if Shadow setuped, and if not too many vertices.</span>
+02586 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.empty() &amp;&amp;
+02587 <a class="code" href="a04907.html#a3">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>==CVertexBuffer::PositionFlag &amp;&amp;
+02588 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size() &lt;= <a class="code" href="a04907.html#a4">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>;
+02589 }
+02590
+02591 <span class="comment">// Support MeshBlockRendering only if not skinned/meshMorphed.</span>
+02592 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>= !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> &amp;&amp; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size()==0;
+02593
+02594 <span class="comment">// \todo yoyo: support later MeshVertexProgram </span>
+02595 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a> &amp;&amp; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>==NULL;
+02596 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_0" doxytag="NL3D::CMeshMRMGeom::computeBonesId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::computeBonesId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>skeleton</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compute skinning id.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02293">2293</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00510">_BonesSphere</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06394.html#l00098">NL3D::CSkeletonModel::Bones</a>, <a class="el" href="a06393.html#l00237">NL3D::CSkeletonModel::flagBoneAndParents()</a>, <a class="el" href="a06393.html#l00629">NL3D::CSkeletonModel::getBoneIdByName()</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05646.html#l00237">v</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02999">NL3D::CMeshMRM::computeBonesId()</a>.
+<p>
+<div class="fragment"><pre>02294 {
+02295 <span class="comment">// Already computed ?</span>
+02296 <span class="keywordflow">if</span> (!<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a>)
+02297 {
+02298 <span class="comment">// Get a pointer on the skeleton</span>
+02299 <a class="code" href="a04199.html#a6">nlassert</a> (skeleton);
+02300 <span class="keywordflow">if</span> (skeleton)
+02301 {
+02302 <span class="comment">// Resize boneId to the good size.</span>
+02303 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.size());
+02304
+02305 <span class="comment">// Remap bones id table</span>
+02306 std::vector&lt;uint&gt; remap (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.size());
+02307
+02308 <span class="comment">// **** For each bones, compute remap</span>
+02309 <a class="code" href="a04558.html#a15">uint</a> bone;
+02310 <span class="keywordflow">for</span> (bone=0; bone&lt;remap.size(); bone++)
+02311 {
+02312 <span class="comment">// Look for the bone</span>
+02313 <a class="code" href="a04558.html#a10">sint32</a> boneId = skeleton-&gt;getBoneIdByName (_BonesName[bone]);
+02314
+02315 <span class="comment">// Setup the _BoneId.</span>
+02316 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[bone]= boneId;
+02317
+02318 <span class="comment">// Bones found ?</span>
+02319 <span class="keywordflow">if</span> (boneId != -1)
+02320 {
+02321 <span class="comment">// Set the bone id</span>
+02322 remap[bone] = (<a class="code" href="a04558.html#a11">uint32</a>)boneId;
+02323 }
+02324 <span class="keywordflow">else</span>
+02325 {
+02326 <span class="comment">// Put id 0</span>
+02327 remap[bone] = 0;
+02328
+02329 <span class="comment">// Error</span>
+02330 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"Bone %s not found in the skeleton."</span>, _BonesName[bone].c_str());
+02331 }
+02332 }
+02333
+02334 <span class="comment">// **** Remap the vertices, and compute Bone Spheres.</span>
+02335
+02336 <span class="comment">// Find the Geomorph space: to process only real vertices, not geomorphed ones.</span>
+02337 <a class="code" href="a04558.html#a15">uint</a> nGeomSpace= 0;
+02338 <a class="code" href="a04558.html#a15">uint</a> lod;
+02339 <span class="keywordflow">for</span> (lod=0; lod&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); lod++)
+02340 {
+02341 nGeomSpace= max(nGeomSpace, (<a class="code" href="a04558.html#a15">uint</a>)_Lods[lod].Geomorphs.size());
+02342 }
+02343
+02344 <span class="comment">// Prepare Sphere compute</span>
+02345 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>.size() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size());
+02346 <span class="keyword">static</span> std::vector&lt;CAABBox&gt; boneBBoxes;
+02347 <span class="keyword">static</span> std::vector&lt;bool&gt; boneBBEmpty;
+02348 boneBBoxes.clear();
+02349 boneBBEmpty.clear();
+02350 boneBBoxes.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size());
+02351 boneBBEmpty.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size(), <span class="keyword">true</span>);
+02352
+02353 <span class="comment">// Remap the vertex, and compute the bone spheres. see CTransform::getSkinBoneSphere() doc.</span>
+02354 <span class="comment">// for true vertices</span>
+02355 <a class="code" href="a04558.html#a15">uint</a> vert;
+02356 <span class="keywordflow">for</span> (vert=nGeomSpace; vert&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++)
+02357 {
+02358 <span class="comment">// get the vertex position.</span>
+02359 CVector vertex= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vert];
+02360
+02361 <span class="comment">// For each weight</span>
+02362 <a class="code" href="a04558.html#a15">uint</a> weight;
+02363 <span class="keywordflow">for</span> (weight=0; weight&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++)
+02364 {
+02365 <span class="comment">// Active ?</span>
+02366 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]&gt;0)||(weight==0))
+02367 {
+02368 <span class="comment">// Check id</span>
+02369 <a class="code" href="a04558.html#a15">uint</a> srcId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight];
+02370 <a class="code" href="a04199.html#a6">nlassert</a> (srcId &lt; remap.size());
+02371 <span class="comment">// remap</span>
+02372 _SkinWeights[vert].MatrixId[weight] = remap[srcId];
+02373
+02374 <span class="comment">// if the boneId is valid (ie found)</span>
+02375 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[srcId]&gt;=0)
+02376 {
+02377 <span class="comment">// transform the vertex pos in BoneSpace</span>
+02378 CVector p= skeleton-&gt;Bones[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[srcId]].getBoneBase().InvBindPos * vertex;
+02379 <span class="comment">// extend the bone bbox.</span>
+02380 <span class="keywordflow">if</span>(boneBBEmpty[srcId])
+02381 {
+02382 boneBBoxes[srcId].setCenter(p);
+02383 boneBBEmpty[srcId]= <span class="keyword">false</span>;
+02384 }
+02385 <span class="keywordflow">else</span>
+02386 {
+02387 boneBBoxes[srcId].extend(p);
+02388 }
+02389 }
+02390 }
+02391 <span class="keywordflow">else</span>
+02392 <span class="keywordflow">break</span>;
+02393 }
+02394 }
+02395
+02396 <span class="comment">// Compile spheres</span>
+02397 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size());
+02398 <span class="keywordflow">for</span>(bone=0;bone&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>.size();bone++)
+02399 {
+02400 <span class="comment">// If the bone is empty, mark with -1 in the radius.</span>
+02401 <span class="keywordflow">if</span>(boneBBEmpty[bone])
+02402 {
+02403 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>[bone].Radius= -1;
+02404 }
+02405 <span class="keywordflow">else</span>
+02406 {
+02407 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>[bone].Center= boneBBoxes[bone].getCenter();
+02408 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>[bone].Radius= boneBBoxes[bone].getRadius();
+02409 }
+02410 }
+02411
+02412 <span class="comment">// **** Remap the vertex influence by lods</span>
+02413 <span class="keywordflow">for</span> (lod=0; lod&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); lod++)
+02414 {
+02415 <span class="comment">// For each matrix used</span>
+02416 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>;
+02417 <span class="keywordflow">for</span> (<a class="code" href="a04223.html#a578">matrix</a>=0; <a class="code" href="a04223.html#a578">matrix</a>&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lod].MatrixInfluences.size(); <a class="code" href="a04223.html#a578">matrix</a>++)
+02418 {
+02419 <span class="comment">// Check</span>
+02420 <a class="code" href="a04199.html#a6">nlassert</a> (_Lods[lod].MatrixInfluences[matrix]&lt;remap.size());
+02421
+02422 <span class="comment">// Remap</span>
+02423 _Lods[lod].MatrixInfluences[<a class="code" href="a04223.html#a578">matrix</a>] = remap[_Lods[lod].MatrixInfluences[<a class="code" href="a04223.html#a578">matrix</a>]];
+02424 }
+02425 }
+02426
+02427 <span class="comment">// **** Remap Shadow Vertices.</span>
+02428 <span class="keywordflow">for</span>(vert=0;vert&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size();vert++)
+02429 {
+02430 CShadowVertex &amp;<a class="code" href="a04223.html#a576">v</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>[vert];
+02431 <span class="comment">// Check id</span>
+02432 <a class="code" href="a04199.html#a6">nlassert</a> (<a class="code" href="a04223.html#a576">v</a>.MatrixId &lt; remap.size());
+02433 <a class="code" href="a04223.html#a576">v</a>.MatrixId= remap[<a class="code" href="a04223.html#a576">v</a>.MatrixId];
+02434 }
+02435
+02436 <span class="comment">// Computed</span>
+02437 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a> = <span class="keyword">true</span>;
+02438 }
+02439 }
+02440
+02441 <span class="comment">// Already extended ?</span>
+02442 <span class="keywordflow">if</span> (!<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a>)
+02443 {
+02444 <a class="code" href="a04199.html#a6">nlassert</a> (skeleton);
+02445 <span class="keywordflow">if</span> (skeleton)
+02446 {
+02447 <span class="comment">// the total bone Usage of the mesh.</span>
+02448 vector&lt;bool&gt; boneUsage;
+02449 boneUsage.resize(skeleton-&gt;Bones.size(), <span class="keyword">false</span>);
+02450
+02451 <span class="comment">// for all Bones marked as valid.</span>
+02452 <a class="code" href="a04558.html#a15">uint</a> i;
+02453 <span class="keywordflow">for</span>(i=0; i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size(); i++)
+02454 {
+02455 <span class="comment">// if not a valid boneId, skip it.</span>
+02456 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[i]&lt;0)
+02457 <span class="keywordflow">continue</span>;
+02458
+02459 <span class="comment">// mark him and his father in boneUsage.</span>
+02460 skeleton-&gt;flagBoneAndParents(_BonesId[i], boneUsage);
+02461 }
+02462
+02463 <span class="comment">// fill _BonesIdExt with bones of _BonesId and their parents.</span>
+02464 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>.clear();
+02465 <span class="keywordflow">for</span>(i=0; i&lt;boneUsage.size();i++)
+02466 {
+02467 <span class="comment">// if the bone is used by the mesh, add it to BoneIdExt.</span>
+02468 <span class="keywordflow">if</span>(boneUsage[i])
+02469 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>.push_back(i);
+02470 }
+02471
+02472 }
+02473
+02474 <span class="comment">// Extended</span>
+02475 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a>= <span class="keyword">true</span>;
+02476 }
+02477
+02478 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_2" doxytag="NL3D::CMeshMRMGeom::computeMeshVBHeap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::computeMeshVBHeap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void *&nbsp;</td>
+ <td class="mdname" nowrap> <em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indexStart</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+When the framework succes to allocate a VBHeap space, it call this method to fill this space and compute shifted Primitive block. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>the</em>&nbsp;</td><td>dest VertexBuffer. NB: start to fill at dst[0] </td></tr>
+ <tr><td valign=top><em>indexStart</em>&nbsp;</td><td>used to shift primitive block.</td></tr>
+ </table>
+</dl>
+
+<p>
+Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_2">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02811">2811</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06197.html#l00038">NL3D::CPrimitiveBlock::getLinePointer()</a>, <a class="el" href="a06198.html#l00087">NL3D::CPrimitiveBlock::getNumLine()</a>, <a class="el" href="a06198.html#l00141">NL3D::CPrimitiveBlock::getNumQuad()</a>, <a class="el" href="a06198.html#l00108">NL3D::CPrimitiveBlock::getNumTri()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06197.html#l00149">NL3D::CPrimitiveBlock::getQuadPointer()</a>, <a class="el" href="a06197.html#l00091">NL3D::CPrimitiveBlock::getTriPointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06197.html#l00061">NL3D::CPrimitiveBlock::setNumLine()</a>, <a class="el" href="a06197.html#l00180">NL3D::CPrimitiveBlock::setNumQuad()</a>, <a class="el" href="a06197.html#l00114">NL3D::CPrimitiveBlock::setNumTri()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>02812 {
+02813 <span class="comment">// Fill dst with Buffer content.</span>
+02814 memcpy(dst, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(), <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()*<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() );
+02815
+02816 <span class="comment">// For All Lods</span>
+02817 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> lodId=0; lodId&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();lodId++)
+02818 {
+02819 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId];
+02820
+02821 <span class="comment">// For all rdrPass.</span>
+02822 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;lod.RdrPass.size();i++)
+02823 {
+02824 <span class="comment">// shift the PB</span>
+02825 CPrimitiveBlock &amp;srcPb= lod.RdrPass[i].PBlock;
+02826 CPrimitiveBlock &amp;dstPb= lod.RdrPass[i].VBHeapPBlock;
+02827 <a class="code" href="a04558.html#a15">uint</a> j;
+02828
+02829 <span class="comment">// Lines.</span>
+02830 dstPb.setNumLine(srcPb.getNumLine());
+02831 <a class="code" href="a04558.html#a11">uint32</a> *srcLinePtr= srcPb.getLinePointer();
+02832 <a class="code" href="a04558.html#a11">uint32</a> *dstLinePtr= dstPb.getLinePointer();
+02833 <span class="keywordflow">for</span>(j=0; j&lt;dstPb.getNumLine()*2;j++)
+02834 {
+02835 dstLinePtr[j]= srcLinePtr[j]+indexStart;
+02836 }
+02837 <span class="comment">// Tris.</span>
+02838 dstPb.setNumTri(srcPb.getNumTri());
+02839 <a class="code" href="a04558.html#a11">uint32</a> *srcTriPtr= srcPb.getTriPointer();
+02840 <a class="code" href="a04558.html#a11">uint32</a> *dstTriPtr= dstPb.getTriPointer();
+02841 <span class="keywordflow">for</span>(j=0; j&lt;dstPb.getNumTri()*3;j++)
+02842 {
+02843 dstTriPtr[j]= srcTriPtr[j]+indexStart;
+02844 }
+02845 <span class="comment">// Quads.</span>
+02846 dstPb.setNumQuad(srcPb.getNumQuad());
+02847 <a class="code" href="a04558.html#a11">uint32</a> *srcQuadPtr= srcPb.getQuadPointer();
+02848 <a class="code" href="a04558.html#a11">uint32</a> *dstQuadPtr= dstPb.getQuadPointer();
+02849 <span class="keywordflow">for</span>(j=0; j&lt;dstPb.getNumQuad()*4;j++)
+02850 {
+02851 dstQuadPtr[j]= srcQuadPtr[j]+indexStart;
+02852 }
+02853 }
+02854 }
+02855 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_0" doxytag="NL3D::CMeshMRMGeom::deleteVertexBufferHard" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::deleteVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02209">2209</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a05622.html#l00290">nlassert</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00221">~CMeshMRMGeom()</a>.
+<p>
+<div class="fragment"><pre>02210 {
+02211 <span class="comment">// test (refptr) if the object still exist in memory.</span>
+02212 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL)
+02213 {
+02214 <span class="comment">// A vbufferhard should still exist only if driver still exist.</span>
+02215 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL);
+02216
+02217 <span class="comment">// delete it from driver.</span>
+02218 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>-&gt;deleteVertexBufferHard(_VBHard);
+02219 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>= NULL;
+02220 }
+02221 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_9" doxytag="NL3D::CMeshMRMGeom::dirtMeshDataId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::dirtMeshDataId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Increment the refCount, so instances RawSkins are no longer valid.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l03052">3052</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00639">_MeshDataId</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00246">build()</a>.
+<p>
+<div class="fragment"><pre>03053 {
+03054 <span class="comment">// see updateRawSkinNormal()</span>
+03055 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>++;
+03056 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_3" doxytag="NL3D::CMeshMRMGeom::endMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::endMesh </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>rdrCtx</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The framework call this method when it has done with this meshGeom
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_3">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02791">2791</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00562">_MBRBkupNormalize</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, and <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver::forceNormalize()</a>.
+<p>
+<div class="fragment"><pre>02792 {
+02793 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty())
+02794 <span class="keywordflow">return</span>;
+02795
+02796 <span class="comment">// bkup force normalisation.</span>
+02797 rdrCtx.Driver-&gt;forceNormalize(_MBRBkupNormalize);
+02798 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_1" doxytag="NL3D::CMeshMRMGeom::fillAGPSkinPartWithVBHardPtr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::fillAGPSkinPartWithVBHardPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>lod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexDst</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l01978">1978</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_0" doxytag="NL3D::CMeshMRMGeom::getBonesName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;std::string&gt;&amp; NL3D::CMeshMRMGeom::getBonesName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the bone names of the meshMRM.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00182">182</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+<div class="fragment"><pre>00182 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_1" doxytag="NL3D::CMeshMRMGeom::getBoundingBox" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a>&amp; NL3D::CMeshMRMGeom::getBoundingBox </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the extended axis aligned bounding box of the mesh
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz455_0">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06006.html#l00170">170</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06006.html#l00758">NL3D::CMeshMRM::getBoundingBox()</a>.
+<p>
+<div class="fragment"><pre>00171 {
+00172 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>;
+00173 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1ITrackKeyFramer_3_01CKeyVector_01_4a6" doxytag="NL3D::CMeshMRMGeom::getClassName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> virtual std::string NLMISC::IClassable::getClassName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [pure virtual, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implemented in <a class="el" href="a02995.html#NLAIAGENT_1_1CNumericIndexz1699_0">NLAIAGENT::CNumericIndex</a>, <a class="el" href="a02145.html#NLAIAGENT_1_1VectorTypez1764_0">NLAIC::IPointerGestion</a>, <a class="el" href="a02650.html#NLAIC_1_1CIdentTypez1766_0">NLAIC::CIdentType</a>, and <a class="el" href="a02241.html#CAutomataDescz1896_0">CAutomataDesc</a>.
+<p>
+Referenced by <a class="el" href="a05549.html#l00091">NLMISC::CClassRegistry::checkObject()</a>, and <a class="el" href="a06525.html#l00039">NL3D::GetTextureSize()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_2" doxytag="NL3D::CMeshMRMGeom::getGeomorphs" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a02971.html">CMRMWedgeGeom</a>&gt;&amp; NL3D::CMeshMRMGeom::getGeomorphs </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>lodId</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Advanced. get the geomorphs for a special lod.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00216">216</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00217 {
+00218 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].Geomorphs;
+00219 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma5" doxytag="NL3D::CMeshMRMGeom::getLevelDetail" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a02959.html">CMRMLevelDetail</a>&amp; NL3D::CMeshMRMGeom::getLevelDetail </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the MRM level detail information
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00275">275</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00181">NL3D::CMeshMRMInstance::getMRMLevelDetail()</a>.
+<p>
+<div class="fragment"><pre>00275 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_3" doxytag="NL3D::CMeshMRMGeom::getNbBlendShapes" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbBlendShapes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the number of BlendShapes
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00222">222</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00222 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size(); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_4" doxytag="NL3D::CMeshMRMGeom::getNbLod" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbLod </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the number of LOD.
+<p>
+Definition at line <a class="el" href="a06006.html#l00186">186</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00462">applyMaterialRemap()</a>, <a class="el" href="a06006.html#l00769">NL3D::CMeshMRM::getNbLod()</a>, and <a class="el" href="a06005.html#l02001">loadNextLod()</a>.
+<p>
+<div class="fragment"><pre>00186 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size() ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_0" doxytag="NL3D::CMeshMRMGeom::getNbLodLoaded" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbLodLoaded </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the number of LOD currently loaded.
+<p>
+Definition at line <a class="el" href="a06006.html#l00140">140</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02001">loadNextLod()</a>, and <a class="el" href="a06005.html#l02029">unloadNextLod()</a>.
+<p>
+<div class="fragment"><pre>00140 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a> ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_5" doxytag="NL3D::CMeshMRMGeom::getNbRdrPass" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbRdrPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>lodId</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the number of rendering pass of a LOD. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>lodId</em>&nbsp;</td><td>the id of the LOD.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00192">192</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00231">NL3D::CInstanceLighter::addTriangles()</a>, <a class="el" href="a06005.html#l00462">applyMaterialRemap()</a>, and <a class="el" href="a06006.html#l00775">NL3D::CMeshMRM::getNbRdrPass()</a>.
+<p>
+<div class="fragment"><pre>00192 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].RdrPass.size() ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_4" doxytag="NL3D::CMeshMRMGeom::getNumRdrPassesForInstance" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNumRdrPassesForInstance </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02873.html">CMeshBaseInstance</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>inst</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return the number of renderPasses for this instance. Called after activateInstance() Used only if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_9">sortPerMaterial()</a>) is false
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_4">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02700">2700</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02701 {
+02702 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>].RdrPass.size();
+02703 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_5" doxytag="NL3D::CMeshMRMGeom::getNumRdrPassesForMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNumRdrPassesForMesh </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return the number of renderPasses for this mesh. Used only if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_9">sortPerMaterial()</a>) is true
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_5">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02693">2693</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02694 {
+02695 <span class="comment">// not used...</span>
+02696 <span class="keywordflow">return</span> 0;
+02697
+02698 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_0" doxytag="NL3D::CMeshMRMGeom::getNumShadowSkinVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNumShadowSkinVertices </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the num of shadow skin vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l03370">3370</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>03371 {
+03372 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size();
+03373 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_1" doxytag="NL3D::CMeshMRMGeom::getNumTriangles" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> float NL3D::CMeshMRMGeom::getNumTriangles </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>distance</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get an approximation of the number of triangles this instance will render for a fixed distance.
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz455_1">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02200">2200</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, and <a class="el" href="a06060.html#l00082">NL3D::CMRMLevelDetail::getNumTriangles()</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02985">NL3D::CMeshMRM::getNumTriangles()</a>.
+<p>
+<div class="fragment"><pre>02201 {
+02202 <span class="comment">// NB: this is an approximation, but this is continious.</span>
+02203 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getNumTriangles(distance);
+02204 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_6" doxytag="NL3D::CMeshMRMGeom::getRdrPassMaterial" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> NL3D::CMeshMRMGeom::getRdrPassMaterial </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>lodId</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>renderingPassIndex</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the material ID associated with a rendering pass of a LOD. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>lodId</em>&nbsp;</td><td>the id of the LOD. </td></tr>
+ <tr><td valign=top><em>renderingPassIndex</em>&nbsp;</td><td>the index of the rendering pass in the matrix block</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00209">209</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, and <a class="el" href="a06006.html#l00792">NL3D::CMeshMRM::getRdrPassMaterial()</a>.
+<p>
+<div class="fragment"><pre>00210 {
+00211 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].RdrPass[renderingPassIndex].MaterialId ;
+00212 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_7" doxytag="NL3D::CMeshMRMGeom::getRdrPassPrimitiveBlock" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03105.html">CPrimitiveBlock</a>&amp; NL3D::CMeshMRMGeom::getRdrPassPrimitiveBlock </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>lodId</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>renderingPassIndex</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the primitive block associated with a rendering pass of a LOD. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>lodId</em>&nbsp;</td><td>the id of the LOD. </td></tr>
+ <tr><td valign=top><em>renderingPassIndex</em>&nbsp;</td><td>the index of the rendering pass</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00199">199</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00231">NL3D::CInstanceLighter::addTriangles()</a>, and <a class="el" href="a06006.html#l00782">NL3D::CMeshMRM::getRdrPassPrimitiveBlock()</a>.
+<p>
+<div class="fragment"><pre>00200 {
+00201 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].RdrPass[renderingPassIndex].PBlock ;
+00202 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_1" doxytag="NL3D::CMeshMRMGeom::getSkinBoneSphere" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a02291.html">NLMISC::CBSphere</a>&gt;&amp; NL3D::CMeshMRMGeom::getSkinBoneSphere </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value. computeBonesId must has been called before.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00246">246</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00510">_BonesSphere</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00136">NL3D::CMeshMRMInstance::getSkinBoneSphere()</a>.
+<p>
+<div class="fragment"><pre>00246 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_2" doxytag="NL3D::CMeshMRMGeom::getSkinBoneUsage" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a04558.html#a10">sint32</a>&gt;&amp; NL3D::CMeshMRMGeom::getSkinBoneUsage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return array of bones used by the skin. computeBonesId must has been called before.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00243">243</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00122">NL3D::CMeshMRMInstance::getSkinBoneUsage()</a>.
+<p>
+<div class="fragment"><pre>00243 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_8" doxytag="NL3D::CMeshMRMGeom::getSkinWeights" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a02865.html">CMesh::CSkinWeight</a>&gt;&amp; NL3D::CMeshMRMGeom::getSkinWeights </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the skinWeights used by the mrm mesh. NB: same size of the vertexBuffer. empty if !isSkinned()
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00179">179</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00490">_SkinWeights</a>.
+<p>
+<div class="fragment"><pre>00179 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_6" doxytag="NL3D::CMeshMRMGeom::getVBHeapInfo" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::getVBHeapInfo </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>numVertices</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The framework call this method to know if the mesh can fit in VBHeap. if yes, deriver must return mesh vertexFormat and num of vertices.
+<p>
+Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_6">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02802">2802</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00560">_SupportMeshBlockRendering</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02803 {
+02804 <span class="comment">// CMeshMRMGeom support VBHeap rendering, assuming _SupportMeshBlockRendering is true</span>
+02805 vertexFormat= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat();
+02806 numVertices= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices();
+02807 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>;
+02808 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_9" doxytag="NL3D::CMeshMRMGeom::getVertexBuffer" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03692.html">CVertexBuffer</a>&amp; NL3D::CMeshMRMGeom::getVertexBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the vertex buffer used by the mrm mesh. NB: this VB store all Vertices used by All LODs.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00176">176</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00231">NL3D::CInstanceLighter::addTriangles()</a>, and <a class="el" href="a06006.html#l00764">NL3D::CMeshMRM::getVertexBuffer()</a>.
+<p>
+<div class="fragment"><pre>00176 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a> ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeoma6" doxytag="NL3D::CMeshMRMGeom::hasMeshVertexProgram" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> virtual bool NL3D::CMeshMRMGeom::hasMeshVertexProgram </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+True if this mesh has a vertexProgram.
+<p>
+
+<p>
+Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma2">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06006.html#l00287">287</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00232">NL3D::CMeshMRMInstance::initRenderFilterType()</a>.
+<p>
+<div class="fragment"><pre>00287 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>!=NULL;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_2" doxytag="NL3D::CMeshMRMGeom::initInstance" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::initInstance </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02873.html">CMeshBaseInstance</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mbi</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Init instance info.
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma4">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l00847">847</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02924">NL3D::CMeshMRM::createInstance()</a>.
+<p>
+<div class="fragment"><pre>00848 {
+00849 <span class="comment">// init the instance with _MeshVertexProgram infos</span>
+00850 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>)
+00851 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;initInstance(mbi);
+00852 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_7" doxytag="NL3D::CMeshMRMGeom::isActiveInstanceNeedVBFill" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::isActiveInstanceNeedVBFill </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return true if the meshGeom has to Fill some Vertices at <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_0">activeInstance()</a> time if VBHeap enabled at this time, then vbDst in activeInstance(,,,vbDst) will contains the vb to write to.
+<p>
+Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_7">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02858">2858</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+<div class="fragment"><pre>02859 {
+02860 <span class="comment">// Yes, need it for geomorph</span>
+02861 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+02862 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IMeshGeomz457_8" doxytag="NL3D::CMeshMRMGeom::isMeshInVBHeap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::IMeshGeom::isMeshInVBHeap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return true if the meshGeom has to Fill some Vertices at <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_0">activeInstance()</a> time if VBHeap enabled at this time, then vbDst in activeInstance(,,,vbDst) will contains the vb to write to.
+<p>
+Definition at line <a class="el" href="a06000.html#l00215">215</a> of file <a class="el" href="a06000.html">mesh_geom.h</a>.
+<p>
+References <a class="el" href="a06000.html#l00233">NL3D::IMeshGeom::_MeshVBHeapId</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, and <a class="el" href="a05989.html#l01932">NL3D::CMeshGeom::profileSceneRender()</a>.
+<p>
+<div class="fragment"><pre>00215 {<span class="keywordflow">return</span> _MeshVBHeapId!=0;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_3" doxytag="NL3D::CMeshMRMGeom::isSkinned" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::isSkinned </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return true if the mesh is skinned, else return false.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00231">231</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00150">NL3D::CMeshMRMInstance::isSkinnable()</a>.
+<p>
+<div class="fragment"><pre>00232 {
+00233 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>;
+00234 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd12" doxytag="NL3D::CMeshMRMGeom::load" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::load </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+load this mesh.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01757">1757</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01758 {
+01759
+01760 <span class="comment">// because loading, flag the VertexBufferHard.</span>
+01761 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+01762
+01763
+01764 <span class="comment">// Load the header of the stream.</span>
+01765 <span class="comment">// ==================</span>
+01766 <a class="code" href="a04558.html#a14">sint</a> verHeader= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd13">loadHeader</a>(f);
+01767
+01768 <span class="comment">// Read All lod subsets.</span>
+01769 <span class="comment">// ==================</span>
+01770 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++)
+01771 {
+01772 <span class="comment">// read the lod face data.</span>
+01773 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[i]);
+01774 <span class="comment">// read the lod vertex data.</span>
+01775 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[i].StartAddWedge, _LodInfos[i].EndAddWedges);
+01776 <span class="comment">// if reading, must bkup all original vertices from VB.</span>
+01777 <span class="comment">// this is done in serialLodVertexData(). by subset</span>
+01778 }
+01779
+01780 <span class="comment">// Now, all lods are loaded.</span>
+01781 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();
+01782
+01783 <span class="comment">// If version doen't have boneNames, must build BoneId now.</span>
+01784 <span class="keywordflow">if</span>(verHeader &lt;= 2)
+01785 {
+01786 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd9">buildBoneUsageVer2</a> ();
+01787 }
+01788 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_1" doxytag="NL3D::CMeshMRMGeom::loadFirstLod" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::loadFirstLod </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Load the header and the first lod of a MRM in a stream. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>f</em>&nbsp;</td><td>the input stream to read. NB: after load, f.getPos() return the position of the second lod in the stream.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01951">1951</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00519">_LodInfos</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06005.html#l02482">buildBoneUsageVer2()</a>, <a class="el" href="a06005.html#l01627">loadHeader()</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01952 {
+01953
+01954 <span class="comment">// because loading, flag the VertexBufferHard.</span>
+01955 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+01956
+01957 <span class="comment">// Load the header of the stream.</span>
+01958 <span class="comment">// ==================</span>
+01959 <a class="code" href="a04558.html#a14">sint</a> verHeader= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd13">loadHeader</a>(f);
+01960
+01961
+01962 <span class="comment">// If empty MRM, quit.</span>
+01963 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size()==0)
+01964 <span class="keywordflow">return</span>;
+01965
+01966 <span class="comment">/* If the version is &lt;4, then SkinWeights are serialised per Lod.</span>
+01967 <span class="comment"> But for computebonesId(), we must have all SkinWeights RIGHT NOW.</span>
+01968 <span class="comment"> Hence, if too old version (&lt;4), serialize all the MRM....</span>
+01969 <span class="comment"> */</span>
+01970 <a class="code" href="a04558.html#a15">uint</a> numLodToLoad;
+01971 <span class="keywordflow">if</span>(verHeader&lt;4)
+01972 numLodToLoad= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size();
+01973 <span class="keywordflow">else</span>
+01974 numLodToLoad= 1;
+01975
+01976
+01977 <span class="comment">// Read lod subset(s).</span>
+01978 <span class="comment">// ==================</span>
+01979 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;numLodToLoad; i++)
+01980 {
+01981 <span class="comment">// read the lod face data.</span>
+01982 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[i]);
+01983 <span class="comment">// read the lod vertex data.</span>
+01984 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[i].StartAddWedge, _LodInfos[i].EndAddWedges);
+01985 <span class="comment">// if reading, must bkup all original vertices from VB.</span>
+01986 <span class="comment">// this is done in serialLodVertexData(). by subset</span>
+01987 }
+01988
+01989 <span class="comment">// Now, just first lod is loaded (but if too old file)</span>
+01990 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= numLodToLoad;
+01991
+01992 <span class="comment">// If version doen't have boneNames, must build BoneId now.</span>
+01993 <span class="keywordflow">if</span>(verHeader &lt;= 2)
+01994 {
+01995 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd9">buildBoneUsageVer2</a> ();
+01996 }
+01997 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd13" doxytag="NL3D::CMeshMRMGeom::loadHeader" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::loadHeader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+load the header of this mesh. return the version of the header.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01627">1627</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a02867.html#NL3D_1_1ITrackDefaulta6">NLMISC::IStreamable::serial()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01951">loadFirstLod()</a>.
+<p>
+<div class="fragment"><pre>01628 {
+01629 <span class="comment">/*</span>
+01630 <span class="comment"> Version 5:</span>
+01631 <span class="comment"> - Shadow Skinning</span>
+01632 <span class="comment"> Version 4:</span>
+01633 <span class="comment"> - serial SkinWeights per MRM, not per Lod</span>
+01634 <span class="comment"> Version 3:</span>
+01635 <span class="comment"> - Bones names.</span>
+01636 <span class="comment"> Version 2:</span>
+01637 <span class="comment"> - Mesh Vertex Program.</span>
+01638 <span class="comment"> Version 1:</span>
+01639 <span class="comment"> - added blend shapes</span>
+01640 <span class="comment"> Version 0:</span>
+01641 <span class="comment"> - base version.</span>
+01642 <span class="comment"> */</span>
+01643 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(5);
+01644
+01645
+01646 <span class="comment">// if &gt;= version 3, serial boens names</span>
+01647 <span class="keywordflow">if</span>(ver&gt;=3)
+01648 {
+01649 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_BonesName);
+01650 }
+01651
+01652 <span class="comment">// Version3-: Bones index are in skeleton model id list</span>
+01653 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a> = (ver &lt; 3);
+01654 <span class="comment">// Must always recompute usage of parents of bones used.</span>
+01655 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a> = <span class="keyword">false</span>;
+01656
+01657 <span class="comment">// Mesh Vertex Program.</span>
+01658 <span class="keywordflow">if</span> (ver &gt;= 2)
+01659 {
+01660 IMeshVertexProgram *mvp= NULL;
+01661 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_6">serialPolyPtr</a>(mvp);
+01662 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>= mvp;
+01663 }
+01664 <span class="keywordflow">else</span>
+01665 {
+01666 <span class="comment">// release vp</span>
+01667 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>= NULL;
+01668 }
+01669
+01670 <span class="comment">// blend shapes</span>
+01671 <span class="keywordflow">if</span> (ver &gt;= 1)
+01672 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_MeshMorpher);
+01673
+01674 <span class="comment">// serial Basic info.</span>
+01675 <span class="comment">// ==================</span>
+01676 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Skinned);
+01677 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_BBox);
+01678 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed);
+01679 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed);
+01680 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest);
+01681 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle);
+01682 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest);
+01683 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.OODistanceDelta);
+01684 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistancePow);
+01685 <span class="comment">// preload the Lods.</span>
+01686 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_LodInfos);
+01687
+01688 <span class="comment">// read/save number of wedges.</span>
+01689 <span class="comment">/* NB: prepare memory space too for vertices.</span>
+01690 <span class="comment"> \todo yoyo: TODO_OPTIMIZE. for now there is no Lod memory profit with vertices / skinWeights.</span>
+01691 <span class="comment"> But resizing arrays is a problem because of reallocation...</span>
+01692 <span class="comment"> */</span>
+01693 <a class="code" href="a04558.html#a11">uint32</a> nWedges;
+01694 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(nWedges);
+01695 <span class="comment">// Prepare the VBuffer.</span>
+01696 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.serialHeader(f);
+01697 <span class="comment">// If skinned, must allocate skinWeights.</span>
+01698 <a class="code" href="a05378.html#a381">contReset</a>(_SkinWeights);
+01699 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+01700 {
+01701 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.resize(nWedges);
+01702 }
+01703
+01704
+01705 <span class="comment">// If new version, serial SkinWeights in header, not in lods.</span>
+01706 <span class="keywordflow">if</span>(ver &gt;= 4)
+01707 {
+01708 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_SkinWeights);
+01709 }
+01710
+01711
+01712 <span class="comment">// if &gt;= version 5, serial Shadow Skin Information</span>
+01713 <span class="keywordflow">if</span>(ver&gt;=5)
+01714 {
+01715 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinVertices);
+01716 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinTriangles);
+01717 }
+01718
+01719
+01720 <span class="comment">// Serial lod offsets.</span>
+01721 <span class="comment">// ==================</span>
+01722 <span class="comment">// This is the reference pos, to load / save relative offsets.</span>
+01723 <a class="code" href="a04558.html#a10">sint32</a> startPos = f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>();
+01724 <span class="comment">// Those are the lodOffsets, relative to startPos.</span>
+01725 vector&lt;sint32&gt; lodOffsets;
+01726 lodOffsets.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(), 0);
+01727
+01728 <span class="comment">// read all relative offsets, and build the absolute offset of LodInfos.</span>
+01729 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++)
+01730 {
+01731 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(lodOffsets[i]);
+01732 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>[i].LodOffset= startPos + lodOffsets[i];
+01733 }
+01734
+01735
+01736 <span class="comment">// resest the Lod arrays. NB: each Lod is empty, and ready to receive Lod data.</span>
+01737 <span class="comment">// ==================</span>
+01738 <a class="code" href="a05378.html#a381">contReset</a>(_Lods);
+01739 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size());
+01740
+01741 <span class="comment">// Flag the fact that no lod is loaded for now.</span>
+01742 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= 0;
+01743
+01744 <span class="comment">// Inform that the mesh data has changed</span>
+01745 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_9">dirtMeshDataId</a>();
+01746
+01747
+01748 <span class="comment">// Some runtime not serialized compilation</span>
+01749 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd11">compileRunTime</a>();
+01750
+01751 <span class="comment">// return version of the header</span>
+01752 <span class="keywordflow">return</span> ver;
+01753 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_2" doxytag="NL3D::CMeshMRMGeom::loadNextLod" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::loadNextLod </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Load next lod of a stream. use <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a> to know what Lod will be loaded. NB: if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a> == <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod()</a>, no op. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>f</em>&nbsp;</td><td>the same input stream passed to <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_1">loadFirstLod()</a>. NB: after load, f.getPos() is "unedfined" (actually return the position of the next lod in the stream).</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02001">2001</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00519">_LodInfos</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06006.html#l00186">getNbLod()</a>, <a class="el" href="a06006.html#l00140">getNbLodLoaded()</a>, <a class="el" href="a06461.html#l00401">NLMISC::IStream::seek()</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, and <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>.
+<p>
+<div class="fragment"><pre>02002 {
+02003
+02004 <span class="comment">// because loading, flag the VertexBufferHard.</span>
+02005 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+02006
+02007 <span class="comment">// If all is loaded, quit.</span>
+02008 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded</a>() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod</a>())
+02009 <span class="keywordflow">return</span>;
+02010
+02011 <span class="comment">// Set pos to good lod.</span>
+02012 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_3">seek</a>(_LodInfos[_NbLodLoaded].LodOffset, IStream::begin);
+02013
+02014 <span class="comment">// Serial this lod data.</span>
+02015 <span class="comment">// read the lod face data.</span>
+02016 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[_NbLodLoaded]);
+02017 <span class="comment">// read the lod vertex data.</span>
+02018 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[_NbLodLoaded].StartAddWedge, _LodInfos[_NbLodLoaded].EndAddWedges);
+02019 <span class="comment">// if reading, must bkup all original vertices from VB.</span>
+02020 <span class="comment">// this is done in serialLodVertexData(). by subset</span>
+02021
+02022
+02023 <span class="comment">// Inc LodLoaded count.</span>
+02024 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>++;
+02025 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_3" doxytag="NL3D::CMeshMRMGeom::NLMISC_DECLARE_CLASS" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NL3D::CMeshMRMGeom::NLMISC_DECLARE_CLASS </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02892.html">CMeshMRMGeom</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+clip this mesh in a driver. true if visible.
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_4" doxytag="NL3D::CMeshMRMGeom::profileSceneRender" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::profileSceneRender </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03325.html">CRenderTrav</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrTrav</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02537.html">CTransformShape</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>trans</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>polygonCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrFlags</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Scene profile.
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma5">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02600">2600</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06349.html#l00531">NL3D::CScene::BenchRes</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06060.html#l00101">NL3D::CMRMLevelDetail::getLevelDetailFromPolyCount()</a>, <a class="el" href="a06198.html#l00108">NL3D::CPrimitiveBlock::getNumTri()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06349.html#l00533">NL3D::CScene::incrementProfileTriVBFormat()</a>, <a class="el" href="a06000.html#l00215">NL3D::IMeshGeom::isMeshInVBHeap()</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a06625.html#l00490">NL3D::UScene::CBenchResults::MeshMRMProfileTriVBFormat</a>, <a class="el" href="a06625.html#l00499">NL3D::UScene::CBenchResults::NumMeshMRMRdrBlock</a>, <a class="el" href="a06625.html#l00500">NL3D::UScene::CBenchResults::NumMeshMRMRdrBlockWithVBHeap</a>, <a class="el" href="a06625.html#l00498">NL3D::UScene::CBenchResults::NumMeshMRMRdrNormal</a>, <a class="el" href="a06625.html#l00502">NL3D::UScene::CBenchResults::NumMeshMRMTriRdrBlock</a>, <a class="el" href="a06625.html#l00503">NL3D::UScene::CBenchResults::NumMeshMRMTriRdrBlockWithVBHeap</a>, <a class="el" href="a06625.html#l00501">NL3D::UScene::CBenchResults::NumMeshMRMTriRdrNormal</a>, <a class="el" href="a06625.html#l00507">NL3D::UScene::CBenchResults::NumMeshMRMVBufferHard</a>, <a class="el" href="a06625.html#l00506">NL3D::UScene::CBenchResults::NumMeshMRMVBufferStd</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06583.html#l00055">NL3D::CTraversal::Scene</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06005.html#l02673">supportMeshBlockRendering()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l03030">NL3D::CMeshMRM::profileSceneRender()</a>.
+<p>
+<div class="fragment"><pre>02601 {
+02602 <span class="comment">// get the result of the Load Balancing.</span>
+02603 <span class="keywordtype">float</span> alphaMRM= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getLevelDetailFromPolyCount(polygonCount);
+02604
+02605 <span class="comment">// choose the lod.</span>
+02606 <span class="keywordtype">float</span> alphaLod;
+02607 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod);
+02608
+02609 <span class="comment">// Render the choosen Lod.</span>
+02610 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod];
+02611
+02612 <span class="comment">// get the mesh instance.</span>
+02613 CMeshBaseInstance *mi= safe_cast&lt;CMeshBaseInstance*&gt;(trans);
+02614
+02615 <span class="comment">// Profile all pass.</span>
+02616 <a class="code" href="a04558.html#a15">uint</a> triCount= 0;
+02617 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;lod.RdrPass.size();i++)
+02618 {
+02619 CRdrPass &amp;rdrPass= lod.RdrPass[i];
+02620 <span class="comment">// Profile with the Materials of the MeshInstance.</span>
+02621 <span class="keywordflow">if</span> ( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderOpaqueMaterial) ) ||
+02622 ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial) ) )
+02623 {
+02624 triCount+= rdrPass.PBlock.getNumTri();
+02625 }
+02626 }
+02627
+02628 <span class="comment">// Profile</span>
+02629 <span class="keywordflow">if</span>(triCount)
+02630 {
+02631 <span class="comment">// tri per VBFormat</span>
+02632 rdrTrav-&gt;Scene-&gt;incrementProfileTriVBFormat(rdrTrav-&gt;Scene-&gt;BenchRes.MeshMRMProfileTriVBFormat,
+02633 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(), triCount);
+02634
+02635 <span class="comment">// VBHard</span>
+02636 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>)
+02637 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMVBufferHard++;
+02638 <span class="keywordflow">else</span>
+02639 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMVBufferStd++;
+02640
+02641 <span class="comment">// rendered in BlockRendering, only if not transparent pass (known it if RenderTransparentMaterial is set)</span>
+02642 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_10">supportMeshBlockRendering</a>() &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial)==0 )
+02643 {
+02644 <span class="keywordflow">if</span>(<a class="code" href="a02879.html#NL3D_1_1IMeshGeomz457_8">isMeshInVBHeap</a>())
+02645 {
+02646 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMRdrBlockWithVBHeap++;
+02647 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMTriRdrBlockWithVBHeap+= triCount;
+02648 }
+02649 <span class="keywordflow">else</span>
+02650 {
+02651 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMRdrBlock++;
+02652 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMTriRdrBlock+= triCount;
+02653 }
+02654 }
+02655 <span class="keywordflow">else</span>
+02656 {
+02657 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMRdrNormal++;
+02658 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshMRMTriRdrNormal+= triCount;
+02659 }
+02660 }
+02661 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_5" doxytag="NL3D::CMeshMRMGeom::render" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::render </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02434.html">IDriver</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>drv</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02537.html">CTransformShape</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>trans</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>polygonCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrFlags</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>globalAlpha</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh in a driver, given an instance and his materials.
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma6">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l00927">927</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06006.html#l00485">_VBufferOriginal</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera3">NL3D::IDriver::activeVertexBufferHard()</a>, <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06583.html#l00079">NL3D::CTravCameraScene::CamPos</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver::forceNormalize()</a>, <a class="el" href="a06006.html#l00383">NL3D::CMeshMRMGeom::CLod::Geomorphs</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</a>, <a class="el" href="a06060.html#l00101">NL3D::CMRMLevelDetail::getLevelDetailFromPolyCount()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06003.html#l00073">NL3D::CMeshMorpher::init()</a>, <a class="el" href="a06003.html#l00082">NL3D::CMeshMorpher::initSkinned()</a>, <a class="el" href="a05972.html#l01090">NLMISC::CMatrix::inverted()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera46">NL3D::IDriver::isForceNormalize()</a>, <a class="el" href="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05701.html#l00125">NLMISC::OptFastFloor()</a>, <a class="el" href="a06006.html#l00394">NL3D::CMeshMRMGeom::CLod::OriginalSkinRestored</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a05995.html#l00037">NL3D::CMeshBlender::prepareRenderForGlobalAlpha()</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a06005.html#l02131">restoreOriginalSkinPart()</a>, <a class="el" href="a05995.html#l00099">NL3D::CMeshBlender::restoreRender()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver::setupModelMatrix()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a06003.html#l00103">NL3D::CMeshMorpher::update()</a>, <a class="el" href="a06003.html#l00236">NL3D::CMeshMorpher::updateSkinned()</a>, and <a class="el" href="a06005.html#l02224">updateVertexBufferHard()</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02953">NL3D::CMeshMRM::render()</a>.
+<p>
+<div class="fragment"><pre>00928 {
+00929 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+00930 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()==0)
+00931 <span class="keywordflow">return</span>;
+00932
+00933
+00934 <span class="comment">// get the meshMRM instance.</span>
+00935 CMeshBaseInstance *mi= safe_cast&lt;CMeshBaseInstance*&gt;(trans);
+00936 <span class="comment">// get a ptr on scene</span>
+00937 CScene *ownerScene= mi-&gt;getOwnerScene();
+00938 <span class="comment">// get a ptr on renderTrav</span>
+00939 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+00940
+00941
+00942 <span class="comment">// get the result of the Load Balancing.</span>
+00943 <span class="keywordtype">float</span> alphaMRM= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getLevelDetailFromPolyCount(polygonCount);
+00944
+00945 <span class="comment">// choose the lod.</span>
+00946 <span class="keywordtype">float</span> alphaLod;
+00947 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod);
+00948
+00949
+00950 <span class="comment">// Render the choosen Lod.</span>
+00951 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod];
+00952 <span class="keywordflow">if</span>(lod.RdrPass.size()==0)
+00953 <span class="keywordflow">return</span>;
+00954
+00955
+00956 <span class="comment">// Update the vertexBufferHard (if possible).</span>
+00957 <span class="comment">// \toto yoyo: TODO_OPTIMIZE: allocate only what is needed for the current Lod (Max of all instances, like</span>
+00958 <span class="comment">// the loading....) (see loadHeader()).</span>
+00959 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_2">updateVertexBufferHard</a>(drv, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+00960 <span class="comment">/* currentVBHard is NULL if must disable it temporarily</span>
+00961 <span class="comment"> For now, never disable it, but switch of VBHard may be VERY EXPENSIVE if NV_vertex_array_range2 is not</span>
+00962 <span class="comment"> supported (old drivers).</span>
+00963 <span class="comment"> */</span>
+00964 IVertexBufferHard *currentVBHard= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>;
+00965
+00966
+00967 <span class="comment">// get the skeleton model to which I am binded (else NULL).</span>
+00968 CSkeletonModel *skeleton;
+00969 skeleton = mi-&gt;getSkeletonModel();
+00970 <span class="comment">// The mesh must not be skinned for render()</span>
+00971 <a class="code" href="a04199.html#a6">nlassert</a>(!(_Skinned &amp;&amp; mi-&gt;isSkinned() &amp;&amp; skeleton));
+00972 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size() &gt; 0;
+00973 <span class="keywordtype">bool</span> useTangentSpace = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;needTangentSpace();
+00974
+00975
+00976 <span class="comment">// Profiling</span>
+00977 <span class="comment">//===========</span>
+00978 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_RenderNormal );
+00979
+00980
+00981 <span class="comment">// Morphing</span>
+00982 <span class="comment">// ========</span>
+00983 <span class="keywordflow">if</span> (bMorphApplied)
+00984 {
+00985 <span class="comment">// If _Skinned (NB: the skin is not applied) and if lod.OriginalSkinRestored, then restoreOriginalSkinPart is</span>
+00986 <span class="comment">// not called but mush morpher write changed vertices into VBHard so its ok. The unchanged vertices</span>
+00987 <span class="comment">// are written in the preceding call to restoreOriginalSkinPart.</span>
+00988 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+00989 {
+00990 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.initSkinned(&amp;_VBufferOriginal,
+00991 &amp;_VBufferFinal,
+00992 currentVBHard,
+00993 useTangentSpace,
+00994 &amp;_OriginalSkinVertices,
+00995 &amp;_OriginalSkinNormals,
+00996 useTangentSpace ? &amp;_OriginalTGSpace : NULL,
+00997 <span class="keyword">false</span> );
+00998 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.updateSkinned (mi-&gt;getBlendShapeFactors());
+00999 }
+01000 <span class="keywordflow">else</span> <span class="comment">// Not even skinned so we have to do all the stuff</span>
+01001 {
+01002 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.init(&amp;_VBufferOriginal,
+01003 &amp;_VBufferFinal,
+01004 currentVBHard,
+01005 useTangentSpace);
+01006 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.update (mi-&gt;getBlendShapeFactors());
+01007 }
+01008 }
+01009
+01010 <span class="comment">// Skinning.</span>
+01011 <span class="comment">//===========</span>
+01012 <span class="comment">// if mesh is skinned (but here skin not applied), we must copy vertices/normals from original vertices.</span>
+01013 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+01014 {
+01015 <span class="comment">// do it for this Lod only, and if cache say it is necessary.</span>
+01016 <span class="keywordflow">if</span> (!lod.OriginalSkinRestored)
+01017 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd14">restoreOriginalSkinPart</a>(lod, currentVBHard);
+01018 }
+01019
+01020
+01021 <span class="comment">// set the instance worldmatrix.</span>
+01022 drv-&gt;setupModelMatrix(trans-&gt;getWorldMatrix());
+01023
+01024
+01025 <span class="comment">// Geomorph.</span>
+01026 <span class="comment">//===========</span>
+01027 <span class="comment">// Geomorph the choosen Lod (if not the coarser mesh).</span>
+01028 <span class="keywordflow">if</span>(numLod&gt;0)
+01029 {
+01030 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a>(lod.Geomorphs, alphaLod, currentVBHard);
+01031 }
+01032
+01033
+01034 <span class="comment">// force normalisation of normals..</span>
+01035 <span class="keywordtype">bool</span> bkupNorm= drv-&gt;isForceNormalize();
+01036 drv-&gt;forceNormalize(<span class="keyword">true</span>);
+01037
+01038
+01039 <span class="comment">// Setup meshVertexProgram</span>
+01040 <span class="comment">//===========</span>
+01041
+01042 <span class="comment">// use MeshVertexProgram effect?</span>
+01043 <span class="keywordtype">bool</span> useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> != NULL;
+01044 <span class="keywordflow">if</span>( useMeshVP )
+01045 {
+01046 CMatrix invertedObjectMatrix;
+01047 invertedObjectMatrix = trans-&gt;getWorldMatrix().inverted();
+01048 <span class="comment">// really ok if success to begin VP</span>
+01049 useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;begin(drv, mi-&gt;getOwnerScene(), mi, invertedObjectMatrix, renderTrav-&gt;CamPos);
+01050 }
+01051
+01052
+01053 <span class="comment">// Render the lod.</span>
+01054 <span class="comment">//===========</span>
+01055 <span class="comment">// active VB.</span>
+01056 <span class="keywordflow">if</span>(currentVBHard)
+01057 drv-&gt;activeVertexBufferHard(currentVBHard);
+01058 <span class="keywordflow">else</span>
+01059 drv-&gt;activeVertexBuffer(_VBufferFinal);
+01060
+01061
+01062 <span class="comment">// Global alpha used ?</span>
+01063 <a class="code" href="a04558.html#a11">uint32</a> globalAlphaUsed= rdrFlags &amp; IMeshGeom::RenderGlobalAlpha;
+01064 <a class="code" href="a04558.html#a7">uint8</a> globalAlphaInt=(<a class="code" href="a04558.html#a7">uint8</a>)<a class="code" href="a05378.html#a397">NLMISC::OptFastFloor</a>(globalAlpha*255);
+01065
+01066 <span class="comment">// Render all pass.</span>
+01067 <span class="keywordflow">if</span> (globalAlphaUsed)
+01068 {
+01069 <span class="keywordtype">bool</span> gaDisableZWrite= (rdrFlags &amp; IMeshGeom::RenderGADisableZWrite)?<span class="keyword">true</span>:<span class="keyword">false</span>;
+01070
+01071 <span class="comment">// for all passes</span>
+01072 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;lod.RdrPass.size();i++)
+01073 {
+01074 CRdrPass &amp;rdrPass= lod.RdrPass[i];
+01075
+01076 <span class="keywordflow">if</span> ( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderOpaqueMaterial) ) ||
+01077 ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial) ) )
+01078 {
+01079 <span class="comment">// CMaterial Ref</span>
+01080 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+01081
+01082 <span class="comment">// Use a MeshBlender to modify material and driver.</span>
+01083 CMeshBlender blender;
+01084 blender.prepareRenderForGlobalAlpha(material, drv, globalAlpha, globalAlphaInt, gaDisableZWrite);
+01085
+01086 <span class="comment">// Setup VP material</span>
+01087 <span class="keywordflow">if</span> (useMeshVP)
+01088 {
+01089 <span class="keywordflow">if</span>(currentVBHard)
+01090 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, currentVBHard);
+01091 <span class="keywordflow">else</span>
+01092 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, &amp;_VBufferFinal);
+01093 }
+01094
+01095 <span class="comment">// Render</span>
+01096 drv-&gt;render(rdrPass.PBlock, material);
+01097
+01098 <span class="comment">// Resetup material/driver</span>
+01099 blender.restoreRender(material, drv, gaDisableZWrite);
+01100 }
+01101 }
+01102 }
+01103 <span class="keywordflow">else</span>
+01104 {
+01105 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;lod.RdrPass.size();i++)
+01106 {
+01107 CRdrPass &amp;rdrPass= lod.RdrPass[i];
+01108
+01109 <span class="keywordflow">if</span> ( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderOpaqueMaterial) ) ||
+01110 ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial) ) )
+01111 {
+01112 <span class="comment">// CMaterial Ref</span>
+01113 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+01114
+01115 <span class="comment">// Setup VP material</span>
+01116 <span class="keywordflow">if</span> (useMeshVP)
+01117 {
+01118 <span class="keywordflow">if</span>(currentVBHard)
+01119 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, currentVBHard);
+01120 <span class="keywordflow">else</span>
+01121 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, &amp;_VBufferFinal);
+01122 }
+01123
+01124 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+01125 drv-&gt;render(rdrPass.PBlock, material);
+01126 }
+01127 }
+01128 }
+01129
+01130
+01131 <span class="comment">// End VertexProgram effect</span>
+01132 <span class="keywordflow">if</span>(useMeshVP)
+01133 {
+01134 <span class="comment">// end it.</span>
+01135 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;end(drv);
+01136 }
+01137
+01138
+01139 <span class="comment">// bkup force normalisation.</span>
+01140 drv-&gt;forceNormalize(bkupNorm);
+01141
+01142 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_8" doxytag="NL3D::CMeshMRMGeom::renderPass" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrCtx</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02873.html">CMeshBaseInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>inst</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>polygonCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrPass</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The framework call this method to render the current renderPass, with the current instance NB: if the material is blended, DON'T render it!!
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_9">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02768">2768</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a06006.html#l00347">NL3D::CMeshMRMGeom::CRdrPass::VBHeapPBlock</a>.
+<p>
+<div class="fragment"><pre>02769 {
+02770 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty())
+02771 <span class="keywordflow">return</span>;
+02772
+02773 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>];
+02774 CRdrPass &amp;rdrPass= lod.RdrPass[rdrPassId];
+02775
+02776 <span class="keywordflow">if</span> ( mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span> )
+02777 {
+02778 <span class="comment">// CMaterial Ref</span>
+02779 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+02780
+02781 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+02782 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap)
+02783 <span class="comment">// render shifted primitives</span>
+02784 rdrCtx.Driver-&gt;render(rdrPass.VBHeapPBlock, material);
+02785 <span class="keywordflow">else</span>
+02786 rdrCtx.Driver-&gt;render(rdrPass.PBlock, material);
+02787 }
+02788 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_1" doxytag="NL3D::CMeshMRMGeom::renderShadowSkinGeom" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::renderShadowSkinGeom </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>remainingVertices</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vbDest</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the num of shadow skin vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l03376">3376</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06009.html#l00339">applyArrayShadowSkin()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a05788.html#l00064">H_AUTO_USE</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00260">NL3D::CMeshMRMInstance::renderShadowSkinGeom()</a>.
+<p>
+<div class="fragment"><pre>03377 {
+03378 <a class="code" href="a04558.html#a15">uint</a> numVerts= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size();
+03379
+03380 <span class="keywordflow">if</span>(numVerts==0)
+03381 <span class="keywordflow">return</span> 0;
+03382
+03383 <span class="comment">// If the Lod is too big to render in the VBufferHard</span>
+03384 <span class="keywordflow">if</span>(numVerts&gt;remainingVertices)
+03385 <span class="comment">// return Failure</span>
+03386 <span class="keywordflow">return</span> -1;
+03387
+03388 <span class="comment">// get the skeleton model to which I am skinned</span>
+03389 CSkeletonModel *skeleton;
+03390 skeleton = mi-&gt;getSkeletonModel();
+03391 <span class="comment">// must be skinned for renderSkin()</span>
+03392 <a class="code" href="a04199.html#a6">nlassert</a>(skeleton);
+03393
+03394
+03395 <span class="comment">// Profiling</span>
+03396 <span class="comment">//===========</span>
+03397 <a class="code" href="a04365.html#a7">H_AUTO_USE</a>( NL3D_MeshMRMGeom_RenderShadow );
+03398
+03399
+03400 <span class="comment">// Skinning.</span>
+03401 <span class="comment">//===========</span>
+03402
+03403 <span class="comment">// skinning with normal, but no tangent space</span>
+03404 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_0">applyArrayShadowSkin</a>(&amp;_ShadowSkinVertices[0], (CVector*)vbDest, skeleton, numVerts);
+03405
+03406
+03407 <span class="comment">// How many vertices are added to the VBuffer ???</span>
+03408 <span class="keywordflow">return</span> numVerts;
+03409 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_2" doxytag="NL3D::CMeshMRMGeom::renderShadowSkinPrimitives" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderShadowSkinPrimitives </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>castMat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html">IDriver</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>drv</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>baseVertex</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the num of shadow skin vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l03412">3412</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00571">_ShadowSkinTriangles</a>, <a class="el" href="a05788.html#l00064">H_AUTO_USE</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver::renderTriangles()</a>, <a class="el" href="a05646.html#l01124">src</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00270">NL3D::CMeshMRMInstance::renderShadowSkinPrimitives()</a>.
+<p>
+<div class="fragment"><pre>03413 {
+03414 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+03415
+03416 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>.empty())
+03417 <span class="keywordflow">return</span>;
+03418
+03419 <span class="comment">// Profiling</span>
+03420 <span class="comment">//===========</span>
+03421 <a class="code" href="a04365.html#a7">H_AUTO_USE</a>( NL3D_MeshMRMGeom_RenderShadow );
+03422
+03423 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span>
+03424 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span>
+03425
+03426 <span class="comment">// TODO_SHADOW: optim: Special triangle cache for shadow!</span>
+03427 <span class="keyword">static</span> vector&lt;uint32&gt; shiftedTris;
+03428 <span class="keywordflow">if</span>(shiftedTris.size()&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>.size())
+03429 {
+03430 shiftedTris.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>.size());
+03431 }
+03432 <a class="code" href="a04558.html#a11">uint32</a> *<a class="code" href="a04223.html#a652">src</a>= &amp;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>[0];
+03433 <a class="code" href="a04558.html#a11">uint32</a> *dst= &amp;shiftedTris[0];
+03434 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> n= _ShadowSkinTriangles.size();n&gt;0;n--, <a class="code" href="a04223.html#a652">src</a>++, dst++)
+03435 {
+03436 *dst= *<a class="code" href="a04223.html#a652">src</a> + baseVertex;
+03437 }
+03438
+03439 <span class="comment">// Render Triangles with cache</span>
+03440 <span class="comment">//===========</span>
+03441
+03442 <a class="code" href="a04558.html#a15">uint</a> numTris= _ShadowSkinTriangles.size()/3;
+03443
+03444 <span class="comment">// This speed up 4 ms for 80K polys.</span>
+03445 <a class="code" href="a04558.html#a15">uint</a> memToCache= numTris*12;
+03446 memToCache= <a class="code" href="a04061.html#a0">min</a>(memToCache, 4096U);
+03447 CFastMem::precache(&amp;shiftedTris[0], memToCache);
+03448
+03449 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+03450 drv-&gt;renderTriangles(castMat, &amp;shiftedTris[0], numTris);
+03451 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_6" doxytag="NL3D::CMeshMRMGeom::renderSkin" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderSkin </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02537.html">CTransformShape</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>trans</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaMRM</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh as a skin
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma7">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l01146">1146</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06006.html#l00485">_VBufferOriginal</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06009.html#l00207">applySkin()</a>, <a class="el" href="a06009.html#l00741">applySkinWithNormal()</a>, <a class="el" href="a06009.html#l00804">applySkinWithTangentSpace()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06583.html#l00079">NL3D::CTravCameraScene::CamPos</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06006.html#l00383">NL3D::CMeshMRMGeom::CLod::Geomorphs</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06710.html#l00976">NL3D::CVertexBuffer::getNumTexCoordUsed()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06003.html#l00082">NL3D::CMeshMorpher::initSkinned()</a>, <a class="el" href="a05972.html#l01090">NLMISC::CMatrix::inverted()</a>, <a class="el" href="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00394">NL3D::CMeshMRMGeom::CLod::OriginalSkinRestored</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06003.html#l00236">NL3D::CMeshMorpher::updateSkinned()</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00164">NL3D::CMeshMRMInstance::renderSkin()</a>.
+<p>
+<div class="fragment"><pre>01147 {
+01148 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_renderSkin );
+01149
+01150 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()==0)
+01151 <span class="keywordflow">return</span>;
+01152
+01153
+01154 <span class="comment">// get the meshMRM instance. only CMeshMRMInstance is possible when skinned (not MultiLod)</span>
+01155 CMeshMRMInstance *mi= safe_cast&lt;CMeshMRMInstance*&gt;(trans);
+01156 <span class="comment">// get a ptr on scene</span>
+01157 CScene *ownerScene= mi-&gt;getOwnerScene();
+01158 <span class="comment">// get a ptr on renderTrav</span>
+01159 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+01160 <span class="comment">// get a ptr on the driver</span>
+01161 IDriver *drv= renderTrav-&gt;getDriver();
+01162 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+01163
+01164
+01165 <span class="comment">// choose the lod.</span>
+01166 <span class="keywordtype">float</span> alphaLod;
+01167 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod);
+01168
+01169
+01170 <span class="comment">// Render the choosen Lod.</span>
+01171 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod];
+01172 <span class="keywordflow">if</span>(lod.RdrPass.size()==0)
+01173 <span class="keywordflow">return</span>;
+01174
+01175
+01176 <span class="comment">/*</span>
+01177 <span class="comment"> YOYO: renderSkin() no more support vertexBufferHard()!!! for AGP Memory optimisation concern.</span>
+01178 <span class="comment"> AGP Skin rendering is made when supportSkinGrouping() is true</span>
+01179 <span class="comment"> Hence if a skin is to be rendered here, because it doesn't have a good vertex format, or it has</span>
+01180 <span class="comment"> MeshVertexProgram etc..., it will be rendered WITHOUT VBHard =&gt; slower.</span>
+01181 <span class="comment"> */</span>
+01182
+01183
+01184 <span class="comment">// get the skeleton model to which I am skinned</span>
+01185 CSkeletonModel *skeleton;
+01186 skeleton = mi-&gt;getSkeletonModel();
+01187 <span class="comment">// must be skinned for renderSkin()</span>
+01188 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned &amp;&amp; mi-&gt;isSkinned() &amp;&amp; skeleton);
+01189 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size() &gt; 0;
+01190 <span class="keywordtype">bool</span> useNormal= (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() &amp; CVertexBuffer::NormalFlag)!=0;
+01191 <span class="keywordtype">bool</span> useTangentSpace = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;needTangentSpace();
+01192
+01193
+01194 <span class="comment">// Profiling</span>
+01195 <span class="comment">//===========</span>
+01196 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_renderSkin_go );
+01197
+01198
+01199 <span class="comment">// Morphing</span>
+01200 <span class="comment">// ========</span>
+01201 <span class="keywordflow">if</span> (bMorphApplied)
+01202 {
+01203 <span class="comment">// Since Skinned we must update original skin vertices and normals because skinning use it</span>
+01204 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.initSkinned(&amp;_VBufferOriginal,
+01205 &amp;_VBufferFinal,
+01206 NULL,
+01207 useTangentSpace,
+01208 &amp;_OriginalSkinVertices,
+01209 &amp;_OriginalSkinNormals,
+01210 useTangentSpace ? &amp;_OriginalTGSpace : NULL,
+01211 <span class="keyword">true</span> );
+01212 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.updateSkinned (mi-&gt;getBlendShapeFactors());
+01213 }
+01214
+01215 <span class="comment">// Skinning.</span>
+01216 <span class="comment">//===========</span>
+01217
+01218 <span class="comment">// Never use RawSkin. Actually used in skinGrouping.</span>
+01219 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_10">updateRawSkinNormal</a>(<span class="keyword">false</span>, mi, numLod);
+01220
+01221 <span class="comment">// applySkin.</span>
+01222 <span class="comment">//--------</span>
+01223
+01224 <span class="comment">// If skin without normal (rare/usefull?) always simple (slow) case.</span>
+01225 <span class="keywordflow">if</span>(!useNormal)
+01226 {
+01227 <span class="comment">// skinning with just position</span>
+01228 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd4">applySkin</a> (lod, skeleton);
+01229 }
+01230 <span class="keywordflow">else</span>
+01231 {
+01232 <span class="comment">// apply skin for this Lod only.</span>
+01233 <span class="keywordflow">if</span> (!useTangentSpace)
+01234 {
+01235 <span class="comment">// skinning with normal, but no tangent space</span>
+01236 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd5">applySkinWithNormal</a> (lod, skeleton);
+01237 }
+01238 <span class="keywordflow">else</span>
+01239 {
+01240 <span class="comment">// Tangent space stored in the last texture coordinate</span>
+01241 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd6">applySkinWithTangentSpace</a>(lod, skeleton, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed() - 1);
+01242 }
+01243 }
+01244
+01245 <span class="comment">// endSkin.</span>
+01246 <span class="comment">//--------</span>
+01247 <span class="comment">// dirt this lod part. (NB: this is not optimal, but sufficient :) ).</span>
+01248 lod.OriginalSkinRestored= <span class="keyword">false</span>;
+01249
+01250
+01251 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span>
+01252 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span>
+01253
+01254
+01255 <span class="comment">// Geomorph.</span>
+01256 <span class="comment">//===========</span>
+01257 <span class="comment">// Geomorph the choosen Lod (if not the coarser mesh).</span>
+01258 <span class="keywordflow">if</span>(numLod&gt;0)
+01259 {
+01260 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a>(lod.Geomorphs, alphaLod, NULL);
+01261 }
+01262
+01263
+01264 <span class="comment">// Setup meshVertexProgram</span>
+01265 <span class="comment">//===========</span>
+01266
+01267 <span class="comment">// use MeshVertexProgram effect?</span>
+01268 <span class="keywordtype">bool</span> useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> != NULL;
+01269 <span class="keywordflow">if</span>( useMeshVP )
+01270 {
+01271 CMatrix invertedObjectMatrix;
+01272 invertedObjectMatrix = skeleton-&gt;getWorldMatrix().inverted();
+01273 <span class="comment">// really ok if success to begin VP</span>
+01274 useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;begin(drv, mi-&gt;getOwnerScene(), mi, invertedObjectMatrix, renderTrav-&gt;CamPos);
+01275 }
+01276
+01277
+01278 <span class="comment">// Render the lod.</span>
+01279 <span class="comment">//===========</span>
+01280 <span class="comment">// active VB.</span>
+01281 drv-&gt;activeVertexBuffer(_VBufferFinal);
+01282
+01283
+01284 <span class="comment">// Render all pass.</span>
+01285 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;lod.RdrPass.size();i++)
+01286 {
+01287 CRdrPass &amp;rdrPass= lod.RdrPass[i];
+01288
+01289 <span class="comment">// CMaterial Ref</span>
+01290 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+01291
+01292 <span class="comment">// Setup VP material</span>
+01293 <span class="keywordflow">if</span> (useMeshVP)
+01294 {
+01295 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, &amp;_VBufferFinal);
+01296 }
+01297
+01298 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+01299 drv-&gt;render(rdrPass.PBlock, material);
+01300 }
+01301
+01302 <span class="comment">// End VertexProgram effect</span>
+01303 <span class="keywordflow">if</span>(useMeshVP)
+01304 {
+01305 <span class="comment">// end it.</span>
+01306 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;end(drv);
+01307 }
+01308 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_0" doxytag="NL3D::CMeshMRMGeom::renderSkinGroupGeom" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::renderSkinGroupGeom </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>alphaMRM</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>remainingVertices</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vbDest</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01318">1318</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00501">_LastLodComputed</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06008.html#l00126">NL3D::CMeshMRMInstance::_RawSkinCache</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06009.html#l01825">applyRawSkinWithNormal()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06314.html#l00111">NL3D::CRawSkinNormalCache::Geomorphs</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00381">NL3D::CMeshMRMGeom::CLod::NWedges</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06314.html#l00108">NL3D::CRawSkinNormalCache::TotalHardVertices</a>, <a class="el" href="a06314.html#l00107">NL3D::CRawSkinNormalCache::TotalSoftVertices</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a06003.html#l00399">NL3D::CMeshMorpher::updateRawSkin()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06314.html#l00122">NL3D::CRawSkinNormalCache::VertexRemap</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00204">NL3D::CMeshMRMInstance::renderSkinGroupGeom()</a>.
+<p>
+<div class="fragment"><pre>01319 {
+01320 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpGeom )
+01321
+01322 <span class="comment">// get a ptr on scene</span>
+01323 CScene *ownerScene= mi-&gt;getOwnerScene();
+01324 <span class="comment">// get a ptr on renderTrav</span>
+01325 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+01326 <span class="comment">// get a ptr on the driver</span>
+01327 IDriver *drv= renderTrav-&gt;getDriver();
+01328 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+01329
+01330
+01331 <span class="comment">// choose the lod.</span>
+01332 <span class="keywordtype">float</span> alphaLod;
+01333 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod);
+01334 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a>= numLod;
+01335
+01336
+01337 <span class="comment">// Render the choosen Lod.</span>
+01338 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod];
+01339 <span class="keywordflow">if</span>(lod.RdrPass.size()==0)
+01340 <span class="comment">// return no vertices added</span>
+01341 <span class="keywordflow">return</span> 0;
+01342
+01343 <span class="comment">// If the Lod is too big to render in the VBufferHard</span>
+01344 <span class="keywordflow">if</span>(lod.NWedges&gt;remainingVertices)
+01345 <span class="comment">// return Failure</span>
+01346 <span class="keywordflow">return</span> -1;
+01347
+01348 <span class="comment">// get the skeleton model to which I am skinned</span>
+01349 CSkeletonModel *skeleton;
+01350 skeleton = mi-&gt;getSkeletonModel();
+01351 <span class="comment">// must be skinned for renderSkin()</span>
+01352 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned &amp;&amp; mi-&gt;isSkinned() &amp;&amp; skeleton);
+01353 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size() &gt; 0;
+01354 <span class="keywordtype">bool</span> useNormal= (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() &amp; CVertexBuffer::NormalFlag)!=0;
+01355 <a class="code" href="a04199.html#a6">nlassert</a>(useNormal);
+01356
+01357
+01358 <span class="comment">// Profiling</span>
+01359 <span class="comment">//===========</span>
+01360 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpGeom_go );
+01361
+01362
+01363 <span class="comment">// Morphing</span>
+01364 <span class="comment">// ========</span>
+01365
+01366 <span class="comment">// Use RawSkin?. compute before morphing, cause of updateRawSkin</span>
+01367 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_10">updateRawSkinNormal</a>(<span class="keyword">true</span>, mi, numLod);
+01368 <a class="code" href="a04199.html#a6">nlassert</a>(mi-&gt;_RawSkinCache);
+01369
+01370 <span class="comment">// Apply morph</span>
+01371 <span class="keywordflow">if</span> (bMorphApplied)
+01372 {
+01373 <span class="comment">// No need to manage lod.OriginalSkinRestored, since in case of SkinGroupGeom, the VBuffer final is not modified.</span>
+01374
+01375 <span class="comment">// copy directly from the original VB, and apply BlendShapes. Dest is directly the RawSkin</span>
+01376 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.updateRawSkin(&amp;_VBufferFinal,
+01377 mi-&gt;_RawSkinCache-&gt;VertexRemap,
+01378 mi-&gt;getBlendShapeFactors());
+01379 }
+01380
+01381 <span class="comment">// Skinning.</span>
+01382 <span class="comment">//===========</span>
+01383
+01384 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span>
+01385 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span>
+01386
+01387 <span class="comment">// applySkin with RawSkin.</span>
+01388 <span class="comment">//--------</span>
+01389 <span class="comment">// always RawSkin now in SkinGrouping, even with MeshMorpher</span>
+01390 {
+01391 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_RawSkinning );
+01392
+01393 <span class="comment">// RawSkin do all the job in optimized way: Skinning, copy to VBHard and Geomorph.</span>
+01394
+01395 <span class="comment">// skinning with normal, but no tangent space</span>
+01396 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd3">applyRawSkinWithNormal</a> (lod, *(mi-&gt;_RawSkinCache), skeleton, vbDest, alphaLod);
+01397
+01398 <span class="comment">// Vertices are packed in RawSkin mode (ie no holes due to MRM!)</span>
+01399 <span class="keywordflow">return</span> mi-&gt;_RawSkinCache-&gt;Geomorphs.size() +
+01400 mi-&gt;_RawSkinCache-&gt;TotalSoftVertices +
+01401 mi-&gt;_RawSkinCache-&gt;TotalHardVertices;
+01402 }
+01403 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_1" doxytag="NL3D::CMeshMRMGeom::renderSkinGroupPrimitives" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderSkinGroupPrimitives </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>baseVertex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::vector&lt; <a class="el" href="a03407.html">CSkinSpecularRdrPass</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>specularRdrPasses</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>skinIndex</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01406">1406</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00501">_LastLodComputed</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06008.html#l00131">NL3D::CMeshMRMInstance::_ShiftedTriangleCache</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera32">NL3D::IDriver::getTextureHandle()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06387.html#l00052">NL3D::CShiftedTriangleCache::CRdrPass::NumTriangles</a>, <a class="el" href="a06387.html#l00059">NL3D::CShiftedTriangleCache::RdrPass</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06394.html#l00063">NL3D::CSkinSpecularRdrPass::RdrPassIndex</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver::renderTriangles()</a>, <a class="el" href="a06394.html#l00061">NL3D::CSkinSpecularRdrPass::SkinIndex</a>, <a class="el" href="a06394.html#l00065">NL3D::CSkinSpecularRdrPass::SpecId</a>, <a class="el" href="a06387.html#l00051">NL3D::CShiftedTriangleCache::CRdrPass::Triangles</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a06005.html#l01529">updateShiftedTriangleCache()</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00213">NL3D::CMeshMRMInstance::renderSkinGroupPrimitives()</a>.
+<p>
+<div class="fragment"><pre>01407 {
+01408 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpPrimitives );
+01409
+01410 <span class="comment">// get a ptr on scene</span>
+01411 CScene *ownerScene= mi-&gt;getOwnerScene();
+01412 <span class="comment">// get a ptr on renderTrav</span>
+01413 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+01414 <span class="comment">// get a ptr on the driver</span>
+01415 IDriver *drv= renderTrav-&gt;getDriver();
+01416 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+01417
+01418 <span class="comment">// Get the lod choosen in renderSkinGroupGeom()</span>
+01419 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a>];
+01420
+01421
+01422 <span class="comment">// must update primitive cache</span>
+01423 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd18">updateShiftedTriangleCache</a>(mi, _LastLodComputed, baseVertex);
+01424 <a class="code" href="a04199.html#a6">nlassert</a>(mi-&gt;_ShiftedTriangleCache);
+01425
+01426
+01427 <span class="comment">// Render Triangles with cache</span>
+01428 <span class="comment">//===========</span>
+01429 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;lod.RdrPass.size();i++)
+01430 {
+01431 CRdrPass &amp;rdrPass= lod.RdrPass[i];
+01432
+01433 <span class="comment">// CMaterial Ref</span>
+01434 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+01435
+01436 <span class="comment">// TestYoyo. Material Speed Test</span>
+01437 <span class="comment">/*if( material.getDiffuse()!=CRGBA(250, 251, 252) )</span>
+01438 <span class="comment"> {</span>
+01439 <span class="comment"> material.setDiffuse(CRGBA(250, 251, 252));</span>
+01440 <span class="comment"> // Set all texture the same.</span>
+01441 <span class="comment"> static CSmartPtr&lt;ITexture&gt; pTexFile= new CTextureFile("fy_hom_visage_c1_fy_e1.tga");</span>
+01442 <span class="comment"> material.setTexture(0, pTexFile );</span>
+01443 <span class="comment"> // Remove Specular.</span>
+01444 <span class="comment"> if(material.getShader()==CMaterial::Specular)</span>
+01445 <span class="comment"> {</span>
+01446 <span class="comment"> CSmartPtr&lt;ITexture&gt; tex= material.getTexture(0);</span>
+01447 <span class="comment"> material.setShader(CMaterial::Normal);</span>
+01448 <span class="comment"> material.setTexture(0, tex );</span>
+01449 <span class="comment"> }</span>
+01450 <span class="comment"> // Remove MakeUp</span>
+01451 <span class="comment"> material.setTexture(1, NULL);</span>
+01452 <span class="comment"> }*/</span>
+01453
+01454 <span class="comment">// If the material is a specular material, don't render it now!</span>
+01455 <span class="keywordflow">if</span>(material.getShader()==CMaterial::Specular)
+01456 {
+01457 <span class="comment">// Add it to the rdrPass to sort!</span>
+01458 CSkinSpecularRdrPass specRdrPass;
+01459 specRdrPass.SkinIndex= skinIndex;
+01460 specRdrPass.RdrPassIndex= i;
+01461 <span class="comment">// Get the handle of the specular Map as the sort Key</span>
+01462 ITexture *specTex= material.getTexture(1);
+01463 <span class="keywordflow">if</span>(!specTex)
+01464 specRdrPass.SpecId= 0;
+01465 <span class="keywordflow">else</span>
+01466 specRdrPass.SpecId= drv-&gt;getTextureHandle( *specTex );
+01467 <span class="comment">// Append it to the list</span>
+01468 specularRdrPasses.push_back(specRdrPass);
+01469 }
+01470 <span class="keywordflow">else</span>
+01471 {
+01472 <span class="comment">// Get the shifted triangles.</span>
+01473 CShiftedTriangleCache::CRdrPass &amp;shiftedRdrPass= mi-&gt;_ShiftedTriangleCache-&gt;RdrPass[i];
+01474
+01475 <span class="comment">// This speed up 4 ms for 80K polys.</span>
+01476 <a class="code" href="a04558.html#a15">uint</a> memToCache= shiftedRdrPass.NumTriangles*12;
+01477 memToCache= <a class="code" href="a04061.html#a0">min</a>(memToCache, 4096U);
+01478 CFastMem::precache(shiftedRdrPass.Triangles, memToCache);
+01479
+01480 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+01481 drv-&gt;renderTriangles(material, shiftedRdrPass.Triangles, shiftedRdrPass.NumTriangles);
+01482 }
+01483 }
+01484 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_2" doxytag="NL3D::CMeshMRMGeom::renderSkinGroupSpecularRdrPass" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderSkinGroupSpecularRdrPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rdrPassId</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01488">1488</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00501">_LastLodComputed</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06008.html#l00131">NL3D::CMeshMRMInstance::_ShiftedTriangleCache</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06387.html#l00052">NL3D::CShiftedTriangleCache::CRdrPass::NumTriangles</a>, <a class="el" href="a06387.html#l00059">NL3D::CShiftedTriangleCache::RdrPass</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver::renderTriangles()</a>, <a class="el" href="a06387.html#l00051">NL3D::CShiftedTriangleCache::CRdrPass::Triangles</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00222">NL3D::CMeshMRMInstance::renderSkinGroupSpecularRdrPass()</a>.
+<p>
+<div class="fragment"><pre>01489 {
+01490 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpSpecularRdrPass );
+01491
+01492 <span class="comment">// get a ptr on scene</span>
+01493 CScene *ownerScene= mi-&gt;getOwnerScene();
+01494 <span class="comment">// get a ptr on renderTrav</span>
+01495 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+01496 <span class="comment">// get a ptr on the driver</span>
+01497 IDriver *drv= renderTrav-&gt;getDriver();
+01498 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+01499
+01500 <span class="comment">// Get the lod choosen in renderSkinGroupGeom()</span>
+01501 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a>];
+01502
+01503
+01504 <span class="comment">// _ShiftedTriangleCache must have been computed in renderSkinGroupPrimitives</span>
+01505 <a class="code" href="a04199.html#a6">nlassert</a>(mi-&gt;_ShiftedTriangleCache);
+01506
+01507
+01508 <span class="comment">// Render Triangles with cache</span>
+01509 <span class="comment">//===========</span>
+01510 CRdrPass &amp;rdrPass= lod.RdrPass[rdrPassId];
+01511
+01512 <span class="comment">// CMaterial Ref</span>
+01513 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+01514
+01515 <span class="comment">// Get the shifted triangles.</span>
+01516 CShiftedTriangleCache::CRdrPass &amp;shiftedRdrPass= mi-&gt;_ShiftedTriangleCache-&gt;RdrPass[rdrPassId];
+01517
+01518 <span class="comment">// This speed up 4 ms for 80K polys.</span>
+01519 <a class="code" href="a04558.html#a15">uint</a> memToCache= shiftedRdrPass.NumTriangles*12;
+01520 memToCache= <a class="code" href="a04061.html#a0">min</a>(memToCache, 4096U);
+01521 CFastMem::precache(shiftedRdrPass.Triangles, memToCache);
+01522
+01523 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+01524 drv-&gt;renderTriangles(material, shiftedRdrPass.Triangles, shiftedRdrPass.NumTriangles);
+01525 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd14" doxytag="NL3D::CMeshMRMGeom::restoreOriginalSkinPart" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::restoreOriginalSkinPart </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>lod</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>currentVBHard</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Skinning: same as <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices()</a>, but for one Lod only.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02131">2131</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06711.html#l00338">NL3D::CVertexBuffer::getNormalOff()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a06006.html#l00390">NL3D::CMeshMRMGeom::CLod::InfluencedVertices</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00394">NL3D::CMeshMRMGeom::CLod::OriginalSkinRestored</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00927">render()</a>.
+<p>
+<div class="fragment"><pre>02132 {
+02133 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+02134
+02135
+02136 <span class="comment">/*</span>
+02137 <span class="comment"> YOYO: _Skinned mrms no more support vertexBufferHard</span>
+02138 <span class="comment"> see note in renderSkin()</span>
+02139 <span class="comment"> */</span>
+02140
+02141 <span class="comment">// get vertexPtr / normalOff.</span>
+02142 <span class="comment">//===========================</span>
+02143 <a class="code" href="a04558.html#a7">uint8</a> *destVertexPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer();
+02144 <a class="code" href="a04558.html#a15">uint</a> flags= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat();
+02145 <a class="code" href="a04558.html#a10">sint32</a> vertexSize= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize();
+02146 <span class="comment">// must have XYZ.</span>
+02147 <a class="code" href="a04199.html#a6">nlassert</a>(flags &amp; CVertexBuffer::PositionFlag);
+02148
+02149 <span class="comment">// Compute offset of each component of the VB.</span>
+02150 <a class="code" href="a04558.html#a10">sint32</a> normalOff;
+02151 <span class="keywordflow">if</span>(flags &amp; CVertexBuffer::NormalFlag)
+02152 normalOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalOff();
+02153 <span class="keywordflow">else</span>
+02154 normalOff= 0;
+02155
+02156
+02157 <span class="comment">// compute src array.</span>
+02158 CVector *srcVertexPtr;
+02159 CVector *srcNormalPtr= NULL;
+02160 srcVertexPtr= &amp;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[0];
+02161 <span class="keywordflow">if</span>(normalOff)
+02162 srcNormalPtr= &amp;(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[0]);
+02163
+02164
+02165 <span class="comment">// copy skinning.</span>
+02166 <span class="comment">//===========================</span>
+02167 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;i++)
+02168 {
+02169 <a class="code" href="a04558.html#a15">uint</a> nInf= lod.InfluencedVertices[i].size();
+02170 <span class="keywordflow">if</span>( nInf==0 )
+02171 <span class="keywordflow">continue</span>;
+02172 <a class="code" href="a04558.html#a11">uint32</a> *infPtr= &amp;(lod.InfluencedVertices[i][0]);
+02173
+02174 <span class="comment">// for all InfluencedVertices only.</span>
+02175 <span class="keywordflow">for</span>(;nInf&gt;0;nInf--, infPtr++)
+02176 {
+02177 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr;
+02178 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>;
+02179 CVector *srcNormal= srcNormalPtr + <a class="code" href="a04223.html#a566">index</a>;
+02180 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize;
+02181 CVector *dstVertex= (CVector*)(dstVertexVB);
+02182 CVector *dstNormal= (CVector*)(dstVertexVB + normalOff);
+02183
+02184
+02185 <span class="comment">// Vertex.</span>
+02186 *dstVertex= *srcVertex;
+02187 <span class="comment">// Normal.</span>
+02188 <span class="keywordflow">if</span>(normalOff)
+02189 *dstNormal= *srcNormal;
+02190 }
+02191 }
+02192
+02193
+02194 <span class="comment">// clean this lod part. (NB: this is not optimal, but sufficient :) ).</span>
+02195 lod.OriginalSkinRestored= <span class="keyword">true</span>;
+02196 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd15" doxytag="NL3D::CMeshMRMGeom::restoreOriginalSkinVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::restoreOriginalSkinVertices </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Skinning: restore Vertex/Normal from _OriginalSkin* to VBuffer.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02095">2095</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06710.html#l00449">NL3D::CVertexBuffer::getNormalCoordPointer()</a>, <a class="el" href="a06710.html#l00976">NL3D::CVertexBuffer::getNumTexCoordUsed()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06710.html#l00497">NL3D::CVertexBuffer::getTexCoordPointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02096 {
+02097 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+02098
+02099 <span class="comment">// Copy VBuffer content into Original vertices normals.</span>
+02100 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() &amp; CVertexBuffer::PositionFlag)
+02101 {
+02102 <span class="comment">// copy vertices from VBuffer. (NB: unusefull geomorphed vertices are still copied, but doesn't matter).</span>
+02103 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices();i++)
+02104 {
+02105 *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(i)= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[i];
+02106 }
+02107 }
+02108 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() &amp; CVertexBuffer::NormalFlag)
+02109 {
+02110 <span class="comment">// copy normals from VBuffer. (NB: unusefull geomorphed normals are still copied, but doesn't matter).</span>
+02111 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices();i++)
+02112 {
+02113 *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalCoordPointer(i)= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[i];
+02114 }
+02115 }
+02116 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>-&gt;needTangentSpace())
+02117 {
+02118 <a class="code" href="a04558.html#a15">uint</a> numTexCoords = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed();
+02119 <a class="code" href="a04199.html#a6">nlassert</a>(numTexCoords &gt;= 2);
+02120 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>.size() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices());
+02121 <span class="comment">// copy tangent space vectors</span>
+02122 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i = 0; i &lt; <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices(); ++i)
+02123 {
+02124 *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(i, numTexCoords - 1)= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>[i];
+02125 }
+02126 }
+02127 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd16" doxytag="NL3D::CMeshMRMGeom::save" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::save </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+save the entire mesh.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01792">1792</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>01793 {
+01794 <span class="comment">/*</span>
+01795 <span class="comment"> Version 5:</span>
+01796 <span class="comment"> - Shadow Skinning</span>
+01797 <span class="comment"> Version 4:</span>
+01798 <span class="comment"> - serial SkinWeights per MRM, not per Lod</span>
+01799 <span class="comment"> Version 3:</span>
+01800 <span class="comment"> - Bones names.</span>
+01801 <span class="comment"> Version 2:</span>
+01802 <span class="comment"> - Mesh Vertex Program.</span>
+01803 <span class="comment"> Version 1:</span>
+01804 <span class="comment"> - added blend shapes</span>
+01805 <span class="comment"> Version 0:</span>
+01806 <span class="comment"> - base version.</span>
+01807 <span class="comment"> */</span>
+01808 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(5);
+01809 <a class="code" href="a04558.html#a15">uint</a> i;
+01810
+01811 <span class="comment">// if &gt;= version 3, serial bones names</span>
+01812 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_BonesName);
+01813
+01814 <span class="comment">// Warning, if you have skinned this shape, you can't write it anymore because skinning id have been changed! </span>
+01815 <a class="code" href="a04199.html#a6">nlassert</a> (_BoneIdComputed==<span class="keyword">false</span>);
+01816
+01817 <span class="comment">// Mesh Vertex Program.</span>
+01818 <span class="keywordflow">if</span> (ver &gt;= 2)
+01819 {
+01820 IMeshVertexProgram *mvp= NULL;
+01821 mvp= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>;
+01822 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_6">serialPolyPtr</a>(mvp);
+01823 }
+01824
+01825 <span class="comment">// blend shapes</span>
+01826 <span class="keywordflow">if</span> (ver &gt;= 1)
+01827 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_MeshMorpher);
+01828
+01829 <span class="comment">// must have good original Skinned Vertex before writing.</span>
+01830 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> )
+01831 {
+01832 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices</a>();
+01833 }
+01834
+01835
+01836 <span class="comment">// serial Basic info.</span>
+01837 <span class="comment">// ==================</span>
+01838 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Skinned);
+01839 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_BBox);
+01840 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed);
+01841 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed);
+01842 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest);
+01843 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle);
+01844 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest);
+01845 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.OODistanceDelta);
+01846 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistancePow);
+01847 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_LodInfos);
+01848
+01849 <span class="comment">// save number of wedges.</span>
+01850 <a class="code" href="a04558.html#a11">uint32</a> nWedges;
+01851 nWedges= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices();
+01852 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(nWedges);
+01853 <span class="comment">// Save the VBuffer header.</span>
+01854 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.serialHeader(f);
+01855
+01856
+01857 <span class="comment">// If new version, serial SkinWeights in header, not in lods.</span>
+01858 <span class="keywordflow">if</span>(ver &gt;= 4)
+01859 {
+01860 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_SkinWeights);
+01861 }
+01862
+01863 <span class="comment">// if &gt;= version 5, serial Shadow Skin Information</span>
+01864 <span class="keywordflow">if</span>(ver&gt;=5)
+01865 {
+01866 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinVertices);
+01867 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinTriangles);
+01868 }
+01869
+01870 <span class="comment">// Serial lod offsets.</span>
+01871 <span class="comment">// ==================</span>
+01872 <span class="comment">// This is the reference pos, to load / save relative offsets.</span>
+01873 <a class="code" href="a04558.html#a10">sint32</a> startPos = f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>();
+01874 <span class="comment">// Those are the lodOffsets, relative to startPos.</span>
+01875 vector&lt;sint32&gt; lodOffsets;
+01876 lodOffsets.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(), 0);
+01877
+01878 <span class="comment">// write all dummy offset. For now (since we don't know what to set), compute the offset of </span>
+01879 <span class="comment">// the sint32 to come back in serial lod parts below.</span>
+01880 <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++)
+01881 {
+01882 lodOffsets[i]= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>();
+01883 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(lodOffsets[i]);
+01884 }
+01885
+01886 <span class="comment">// Serial lod subsets.</span>
+01887 <span class="comment">// ==================</span>
+01888
+01889 <span class="comment">// Save all the lods.</span>
+01890 <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++)
+01891 {
+01892 <span class="comment">// get current absolute position.</span>
+01893 <a class="code" href="a04558.html#a10">sint32</a> absCurPos= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>();
+01894
+01895 <span class="comment">// come back to "relative lodOffset" absolute position in the stream. (temp stored in lodOffset[i]).</span>
+01896 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_3">seek</a>(lodOffsets[i], IStream::begin);
+01897
+01898 <span class="comment">// write the relative position of the lod to the stream.</span>
+01899 <a class="code" href="a04558.html#a10">sint32</a> relCurPos= absCurPos - startPos;
+01900 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(relCurPos);
+01901
+01902 <span class="comment">// come back to absCurPos, to save the lod.</span>
+01903 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_3">seek</a>(absCurPos, IStream::begin);
+01904
+01905 <span class="comment">// And so now, save the lod.</span>
+01906 <span class="comment">// write the lod face data.</span>
+01907 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[i]);
+01908 <span class="comment">// write the lod vertex data.</span>
+01909 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[i].StartAddWedge, _LodInfos[i].EndAddWedges);
+01910 }
+01911
+01912
+01913 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_7" doxytag="NL3D::CMeshMRMGeom::serial" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::serial </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+serial this meshGeom.
+<p>
+
+<p>
+Implements <a class="el" href="a02867.html#NL3D_1_1ITrackDefaulta6">NLMISC::IStreamable</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l01613">1613</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+<div class="fragment"><pre>01614 {
+01615 <span class="comment">// because of complexity, serial is separated in save / load.</span>
+01616
+01617 <span class="keywordflow">if</span>(f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+01618 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd12">load</a>(f);
+01619 <span class="keywordflow">else</span>
+01620 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd16">save</a>(f);
+01621
+01622 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd17" doxytag="NL3D::CMeshMRMGeom::serialLodVertexData" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::serialLodVertexData </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>f</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>startWedge</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>endWedge</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+serial a subset of the vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01918">1918</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l02055">bkupOriginalSkinVerticesSubset()</a>, <a class="el" href="a06463.html#l00064">NLMISC::IStream::isReading()</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, <a class="el" href="a06710.html#l01008">NL3D::CVertexBuffer::serialSubset()</a>, <a class="el" href="a06461.html#l00266">NLMISC::IStream::serialVersion()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, and <a class="el" href="a06005.html#l02001">loadNextLod()</a>.
+<p>
+<div class="fragment"><pre>01919 {
+01920 <span class="comment">/*</span>
+01921 <span class="comment"> Version 1:</span>
+01922 <span class="comment"> - serial SkinWeights per MRM, not per Lod</span>
+01923 <span class="comment"> */</span>
+01924 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(1);
+01925
+01926 <span class="comment">// VBuffer part.</span>
+01927 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.serialSubset(f, startWedge, endWedge);
+01928
+01929 <span class="comment">// SkinWeights.</span>
+01930 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>)
+01931 {
+01932 <span class="comment">// Serialize SkinWeight per lod only for old versions.</span>
+01933 <span class="keywordflow">if</span>(ver&lt;1)
+01934 {
+01935 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i= startWedge; i&lt;endWedge; i++)
+01936 {
+01937 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_SkinWeights[i]);
+01938 }
+01939 }
+01940 <span class="comment">// if reading, must copy original vertices from VB.</span>
+01941 <span class="keywordflow">if</span>( f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+01942 {
+01943 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd8">bkupOriginalSkinVerticesSubset</a>(startWedge, endWedge);
+01944 }
+01945 }
+01946 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_3" doxytag="NL3D::CMeshMRMGeom::setShadowMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::setShadowMesh </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::vector&lt; <a class="el" href="a02897.html">CShadowVertex</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>shadowVertices</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const std::vector&lt; <a class="el" href="a04558.html#a11">uint32</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>triangles</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup the ShadowMesh.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l03359">3359</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00571">_ShadowSkinTriangles</a>, <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>, <a class="el" href="a06330.html#l00076">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>, and <a class="el" href="a06330.html#l00075">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>.
+<p>
+<div class="fragment"><pre>03360 {
+03361 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>= shadowVertices;
+03362 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>= triangles;
+03363 <span class="comment">// update flag. Support Shadow SkinGrouping if Shadow setuped, and if not too many vertices.</span>
+03364 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.empty() &amp;&amp;
+03365 <a class="code" href="a04907.html#a3">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>==CVertexBuffer::PositionFlag &amp;&amp;
+03366 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size() &lt;= <a class="code" href="a04907.html#a4">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>;
+03367 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_9" doxytag="NL3D::CMeshMRMGeom::sortPerMaterial" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::sortPerMaterial </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+true if the sort criterion must be by material. Else, sort per instance.
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_10">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02687">2687</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+<div class="fragment"><pre>02688 {
+02689 <span class="comment">// Can't do it per material since 2 lods may not have the same number of RdrPass!!</span>
+02690 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02691 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_10" doxytag="NL3D::CMeshMRMGeom::supportMeshBlockRendering" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::supportMeshBlockRendering </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+true if this meshGeom support meshBlock rendering. return false if skinned/meshMorphed.
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_11">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a06005.html#l02673">2673</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, and <a class="el" href="a06005.html#l03017">NL3D::CMeshMRM::supportMeshBlockRendering()</a>.
+<p>
+<div class="fragment"><pre>02674 {
+02675 <span class="comment">/*</span>
+02676 <span class="comment"> Yoyo: Don't Support It for MRM because too Slow!!</span>
+02677 <span class="comment"> The problem is that lock() unlock() on each instance, on the same VBHeap IS AS SLOWER AS</span>
+02678 <span class="comment"> VB switching.</span>
+02679 <span class="comment"></span>
+02680 <span class="comment"> TODO_OPTIMIZE: find a way to optimize MRM.</span>
+02681 <span class="comment"> */</span>
+02682 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02683 <span class="comment">//return _SupportMeshBlockRendering;</span>
+02684 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_4" doxytag="NL3D::CMeshMRMGeom::supportShadowSkinGrouping" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::supportShadowSkinGrouping </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Render the ShadowSkin (SkinGroup like).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00325">325</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+References <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00248">NL3D::CMeshMRMInstance::supportShadowSkinGrouping()</a>.
+<p>
+<div class="fragment"><pre>00325 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_3" doxytag="NL3D::CMeshMRMGeom::supportSkinGrouping" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::supportSkinGrouping </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01312">1312</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00498">_SupportSkinGrouping</a>.
+<p>
+Referenced by <a class="el" href="a06007.html#l00193">NL3D::CMeshMRMInstance::supportSkinGrouping()</a>.
+<p>
+<div class="fragment"><pre>01313 {
+01314 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>;
+01315 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_3" doxytag="NL3D::CMeshMRMGeom::unloadNextLod" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::unloadNextLod </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+UnLoad Lod <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a>-1 from memory. use <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a>-1 to know what Lod will be unloaded. NB: if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a> &lt;= 1, no op.
+<p>
+Definition at line <a class="el" href="a06005.html#l02029">2029</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, and <a class="el" href="a06006.html#l00140">getNbLodLoaded()</a>.
+<p>
+<div class="fragment"><pre>02030 {
+02031 <span class="comment">// If just first lod remain (or no lod), quit</span>
+02032 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded</a>() &lt;= 1)
+02033 <span class="keywordflow">return</span>;
+02034
+02035 <span class="comment">// Reset the entire Lod object. (Free Memory).</span>
+02036 <a class="code" href="a05378.html#a381">contReset</a>(_Lods[_NbLodLoaded-1]);
+02037
+02038
+02039 <span class="comment">// Dec LodLoaded count.</span>
+02040 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>--;
+02041 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_10" doxytag="NL3D::CMeshMRMGeom::updateRawSkinNormal" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateRawSkinNormal </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>enabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>curLodId</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+compute RawSkin info in the MRMInstance according to current skin setup.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l03060">3060</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00639">_MeshDataId</a>, <a class="el" href="a06008.html#l00126">NL3D::CMeshMRMInstance::_RawSkinCache</a>, <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06313.html#l00037">NL3D::CRawSkinNormalCache::clearArrays()</a>, <a class="el" href="a06007.html#l00068">NL3D::CMeshMRMInstance::clearRawSkinCache()</a>, <a class="el" href="a06314.html#l00111">NL3D::CRawSkinNormalCache::Geomorphs</a>, <a class="el" href="a06006.html#l00383">NL3D::CMeshMRMGeom::CLod::Geomorphs</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06710.html#l00497">NL3D::CVertexBuffer::getTexCoordPointer()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06314.html#l00105">NL3D::CRawSkinNormalCache::HardVertices</a>, <a class="el" href="a06006.html#l00390">NL3D::CMeshMRMGeom::CLod::InfluencedVertices</a>, <a class="el" href="a06314.html#l00116">NL3D::CRawSkinNormalCache::LodId</a>, <a class="el" href="a06314.html#l00118">NL3D::CRawSkinNormalCache::MeshDataId</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06314.html#l00113">NL3D::CRawSkinNormalCache::RdrPass</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; CRawSkinVertex *, false &gt;::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; CRawVertexNormalSkin4, false &gt;::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; CRawVertexNormalSkin3, false &gt;::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; CRawVertexNormalSkin2, false &gt;::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; CRawVertexNormalSkin1, false &gt;::resize()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; CRawVertexNormalSkin4, false &gt;::size()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; CRawVertexNormalSkin3, false &gt;::size()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; CRawVertexNormalSkin2, false &gt;::size()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; CRawVertexNormalSkin1, false &gt;::size()</a>, <a class="el" href="a06314.html#l00104">NL3D::CRawSkinNormalCache::SoftVertices</a>, <a class="el" href="a06314.html#l00108">NL3D::CRawSkinNormalCache::TotalHardVertices</a>, <a class="el" href="a06314.html#l00107">NL3D::CRawSkinNormalCache::TotalSoftVertices</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a06314.html#l00122">NL3D::CRawSkinNormalCache::VertexRemap</a>, <a class="el" href="a06314.html#l00095">NL3D::CRawSkinNormalCache::Vertices1</a>, <a class="el" href="a06314.html#l00097">NL3D::CRawSkinNormalCache::Vertices2</a>, <a class="el" href="a06314.html#l00099">NL3D::CRawSkinNormalCache::Vertices3</a>, and <a class="el" href="a06314.html#l00101">NL3D::CRawSkinNormalCache::Vertices4</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>, and <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>.
+<p>
+<div class="fragment"><pre>03061 {
+03062 <span class="keywordflow">if</span>(!enabled)
+03063 {
+03064 <span class="comment">// if the instance cache is not cleared, must clear.</span>
+03065 <span class="keywordflow">if</span>(mi-&gt;_RawSkinCache)
+03066 mi-&gt;clearRawSkinCache();
+03067 }
+03068 <span class="keywordflow">else</span>
+03069 {
+03070 <span class="comment">// If the instance has no RawSkin, or has a too old RawSkin cache, must delete it, and recreate</span>
+03071 <span class="keywordflow">if</span>( !mi-&gt;_RawSkinCache || mi-&gt;_RawSkinCache-&gt;MeshDataId!=<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>)
+03072 {
+03073 <span class="comment">// first delete if too old.</span>
+03074 <span class="keywordflow">if</span>(mi-&gt;_RawSkinCache)
+03075 mi-&gt;clearRawSkinCache();
+03076 <span class="comment">// Then recreate, and use _MeshDataId to verify that the instance works with same data.</span>
+03077 mi-&gt;_RawSkinCache= <span class="keyword">new</span> CRawSkinNormalCache;
+03078 mi-&gt;_RawSkinCache-&gt;MeshDataId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>;
+03079 mi-&gt;_RawSkinCache-&gt;LodId= -1;
+03080 }
+03081
+03082
+03083 <span class="comment">/* If the instance rawSkin has a different Lod (or if -1), then must recreate it.</span>
+03084 <span class="comment"> NB: The lod may change each frame per instance, but suppose not so many change, so we can cache those data.</span>
+03085 <span class="comment"> */</span>
+03086 <span class="keywordflow">if</span>( mi-&gt;_RawSkinCache-&gt;LodId != curLodId )
+03087 {
+03088 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_CMeshMRMGeom_updateRawSkinNormal );
+03089
+03090 CRawSkinNormalCache &amp;skinLod= *mi-&gt;_RawSkinCache;
+03091 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[curLodId];
+03092 <a class="code" href="a04558.html#a15">uint</a> i;
+03093 <a class="code" href="a04558.html#a14">sint</a> rawIdx;
+03094
+03095 <span class="comment">// Clear the raw skin mesh.</span>
+03096 skinLod.clearArrays();
+03097
+03098 <span class="comment">// Cache this lod</span>
+03099 mi-&gt;_RawSkinCache-&gt;LodId= curLodId;
+03100
+03101 <span class="comment">// For each matrix influence.</span>
+03102 <a class="code" href="a04199.html#a6">nlassert</a>(NL3D_MESH_SKINNING_MAX_MATRIX==4);
+03103
+03104 <span class="comment">// For each vertex, acknowledge if it is a src for geomorph.</span>
+03105 <span class="keyword">static</span> vector&lt;uint8&gt; softVertices;
+03106 softVertices.clear();
+03107 softVertices.resize( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices(), 0 );
+03108 <span class="keywordflow">for</span>(i=0;i&lt;lod.Geomorphs.size();i++)
+03109 {
+03110 softVertices[lod.Geomorphs[i].Start]= 1;
+03111 softVertices[lod.Geomorphs[i].End]= 1;
+03112 }
+03113
+03114 <span class="comment">// The remap from old index in _VBufferFinal to RawSkin vertices (without Geomorphs).</span>
+03115 <span class="keyword">static</span> vector&lt;uint32&gt; vertexRemap;
+03116 vertexRemap.resize( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices() );
+03117 <a class="code" href="a04558.html#a14">sint</a> softSize[4];
+03118 <a class="code" href="a04558.html#a14">sint</a> hardSize[4];
+03119 <a class="code" href="a04558.html#a14">sint</a> softStart[4];
+03120 <a class="code" href="a04558.html#a14">sint</a> hardStart[4];
+03121 <span class="comment">// count vertices</span>
+03122 skinLod.TotalSoftVertices= 0;
+03123 skinLod.TotalHardVertices= 0;
+03124 <span class="keywordflow">for</span>(i=0;i&lt;4;i++)
+03125 {
+03126 softSize[i]= 0;
+03127 hardSize[i]= 0;
+03128 <span class="comment">// Count.</span>
+03129 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j&lt;lod.InfluencedVertices[i].size();j++)
+03130 {
+03131 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[i][j];
+03132 <span class="keywordflow">if</span>(softVertices[vid])
+03133 softSize[i]++;
+03134 <span class="keywordflow">else</span>
+03135 hardSize[i]++;
+03136 }
+03137 skinLod.TotalSoftVertices+= softSize[i];
+03138 skinLod.TotalHardVertices+= hardSize[i];
+03139 skinLod.SoftVertices[i]= softSize[i];
+03140 skinLod.HardVertices[i]= hardSize[i];
+03141 }
+03142 <span class="comment">// compute offsets</span>
+03143 softStart[0]= 0;
+03144 hardStart[0]= skinLod.TotalSoftVertices;
+03145 <span class="keywordflow">for</span>(i=1;i&lt;4;i++)
+03146 {
+03147 softStart[i]= softStart[i-1]+softSize[i-1];
+03148 hardStart[i]= hardStart[i-1]+hardSize[i-1];
+03149 }
+03150 <span class="comment">// compute remap</span>
+03151 <span class="keywordflow">for</span>(i=0;i&lt;4;i++)
+03152 {
+03153 <a class="code" href="a04558.html#a15">uint</a> softIdx= softStart[i];
+03154 <a class="code" href="a04558.html#a15">uint</a> hardIdx= hardStart[i];
+03155 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j&lt;lod.InfluencedVertices[i].size();j++)
+03156 {
+03157 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[i][j];
+03158 <span class="keywordflow">if</span>(softVertices[vid])
+03159 vertexRemap[vid]= softIdx++;
+03160 <span class="keywordflow">else</span>
+03161 vertexRemap[vid]= hardIdx++;
+03162 }
+03163 }
+03164
+03165
+03166 <span class="comment">// Resize the dest array.</span>
+03167 skinLod.Vertices1.resize(lod.InfluencedVertices[0].size());
+03168 skinLod.Vertices2.resize(lod.InfluencedVertices[1].size());
+03169 skinLod.Vertices3.resize(lod.InfluencedVertices[2].size());
+03170 skinLod.Vertices4.resize(lod.InfluencedVertices[3].size());
+03171
+03172 <span class="comment">// Remap for BlendShape. Lasts 2 bits tells what RawSkin Array to seek (1 to 4), </span>
+03173 <span class="comment">// low Bits indicate the number in them. 0xFFFFFFFF is a special value indicating "NotUsed in this lod"</span>
+03174 <span class="keyword">static</span> vector&lt;uint32&gt; vertexFinalRemap;
+03175 vertexFinalRemap.clear();
+03176 vertexFinalRemap.resize(vertexRemap.size(), 0xFFFFFFFF);
+03177
+03178 <span class="comment">// 1 Matrix skinning.</span>
+03179 <span class="comment">//========</span>
+03180 <span class="keywordflow">for</span>(i=0;i&lt;skinLod.Vertices1.size();i++)
+03181 {
+03182 <span class="comment">// get the dest vertex.</span>
+03183 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[0][i];
+03184 <span class="comment">// where to store?</span>
+03185 rawIdx= vertexRemap[vid];
+03186 <span class="keywordflow">if</span>(softVertices[vid])
+03187 rawIdx-= softStart[0];
+03188 <span class="keywordflow">else</span>
+03189 rawIdx+= softSize[0]-hardStart[0];
+03190 <span class="comment">// for BlendShapes remapping</span>
+03191 vertexFinalRemap[vid]= (0&lt;&lt;30) + rawIdx;
+03192 <span class="comment">// fill raw struct</span>
+03193 skinLod.Vertices1[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0];
+03194 skinLod.Vertices1[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid];
+03195 skinLod.Vertices1[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid];
+03196 skinLod.Vertices1[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid);
+03197 }
+03198
+03199 <span class="comment">// 2 Matrix skinning.</span>
+03200 <span class="comment">//========</span>
+03201 <span class="keywordflow">for</span>(i=0;i&lt;skinLod.Vertices2.size();i++)
+03202 {
+03203 <span class="comment">// get the dest vertex.</span>
+03204 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[1][i];
+03205 <span class="comment">// where to store?</span>
+03206 rawIdx= vertexRemap[vid];
+03207 <span class="keywordflow">if</span>(softVertices[vid])
+03208 rawIdx-= softStart[1];
+03209 <span class="keywordflow">else</span>
+03210 rawIdx+= softSize[1]-hardStart[1];
+03211 <span class="comment">// for BlendShapes remapping</span>
+03212 vertexFinalRemap[vid]= (1&lt;&lt;30) + rawIdx;
+03213 <span class="comment">// fill raw struct</span>
+03214 skinLod.Vertices2[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0];
+03215 skinLod.Vertices2[rawIdx].MatrixId[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[1];
+03216 skinLod.Vertices2[rawIdx].Weights[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[0];
+03217 skinLod.Vertices2[rawIdx].Weights[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[1];
+03218 skinLod.Vertices2[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid];
+03219 skinLod.Vertices2[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid];
+03220 skinLod.Vertices2[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid);
+03221 }
+03222
+03223 <span class="comment">// 3 Matrix skinning.</span>
+03224 <span class="comment">//========</span>
+03225 <span class="keywordflow">for</span>(i=0;i&lt;skinLod.Vertices3.size();i++)
+03226 {
+03227 <span class="comment">// get the dest vertex.</span>
+03228 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[2][i];
+03229 <span class="comment">// where to store?</span>
+03230 rawIdx= vertexRemap[vid];
+03231 <span class="keywordflow">if</span>(softVertices[vid])
+03232 rawIdx-= softStart[2];
+03233 <span class="keywordflow">else</span>
+03234 rawIdx+= softSize[2]-hardStart[2];
+03235 <span class="comment">// for BlendShapes remapping</span>
+03236 vertexFinalRemap[vid]= (2&lt;&lt;30) + rawIdx;
+03237 <span class="comment">// fill raw struct</span>
+03238 skinLod.Vertices3[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0];
+03239 skinLod.Vertices3[rawIdx].MatrixId[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[1];
+03240 skinLod.Vertices3[rawIdx].MatrixId[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[2];
+03241 skinLod.Vertices3[rawIdx].Weights[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[0];
+03242 skinLod.Vertices3[rawIdx].Weights[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[1];
+03243 skinLod.Vertices3[rawIdx].Weights[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[2];
+03244 skinLod.Vertices3[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid];
+03245 skinLod.Vertices3[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid];
+03246 skinLod.Vertices3[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid);
+03247 }
+03248
+03249 <span class="comment">// 4 Matrix skinning.</span>
+03250 <span class="comment">//========</span>
+03251 <span class="keywordflow">for</span>(i=0;i&lt;skinLod.Vertices4.size();i++)
+03252 {
+03253 <span class="comment">// get the dest vertex.</span>
+03254 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[3][i];
+03255 <span class="comment">// where to store?</span>
+03256 rawIdx= vertexRemap[vid];
+03257 <span class="keywordflow">if</span>(softVertices[vid])
+03258 rawIdx-= softStart[3];
+03259 <span class="keywordflow">else</span>
+03260 rawIdx+= softSize[3]-hardStart[3];
+03261 <span class="comment">// for BlendShapes remapping</span>
+03262 vertexFinalRemap[vid]= (3&lt;&lt;30) + rawIdx;
+03263 <span class="comment">// fill raw struct</span>
+03264 skinLod.Vertices4[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0];
+03265 skinLod.Vertices4[rawIdx].MatrixId[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[1];
+03266 skinLod.Vertices4[rawIdx].MatrixId[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[2];
+03267 skinLod.Vertices4[rawIdx].MatrixId[3]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[3];
+03268 skinLod.Vertices4[rawIdx].Weights[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[0];
+03269 skinLod.Vertices4[rawIdx].Weights[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[1];
+03270 skinLod.Vertices4[rawIdx].Weights[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[2];
+03271 skinLod.Vertices4[rawIdx].Weights[3]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[3];
+03272 skinLod.Vertices4[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid];
+03273 skinLod.Vertices4[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid];
+03274 skinLod.Vertices4[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid);
+03275 }
+03276
+03277 <span class="comment">// Remap Geomorphs.</span>
+03278 <span class="comment">//========</span>
+03279 <a class="code" href="a04558.html#a15">uint</a> numGeoms= lod.Geomorphs.size();
+03280 skinLod.Geomorphs.resize( numGeoms );
+03281 <span class="keywordflow">for</span>(i=0;i&lt;numGeoms;i++)
+03282 {
+03283 <span class="comment">// NB: don't add "numGeoms" to the index because RawSkin look in a TempArray in RAM, wich start at 0...</span>
+03284 skinLod.Geomorphs[i].Start= vertexRemap[lod.Geomorphs[i].Start];
+03285 skinLod.Geomorphs[i].End= vertexRemap[lod.Geomorphs[i].End];
+03286 }
+03287
+03288 <span class="comment">// Remap RdrPass.</span>
+03289 <span class="comment">//========</span>
+03290 skinLod.RdrPass.resize(lod.RdrPass.size());
+03291 <span class="keywordflow">for</span>(i=0;i&lt;skinLod.RdrPass.size();i++)
+03292 {
+03293 <span class="comment">// NB: since RawSkin is possible only with SkinGrouping, and since SkniGrouping is </span>
+03294 <span class="comment">// possible only with no Quads/Lines, we should have only Tris here.</span>
+03295 <a class="code" href="a04199.html#a6">nlassert</a>( lod.RdrPass[i].PBlock.getNumQuad()== 0);
+03296 <a class="code" href="a04199.html#a6">nlassert</a>( lod.RdrPass[i].PBlock.getNumLine()== 0);
+03297 <span class="comment">// remap tris.</span>
+03298 skinLod.RdrPass[i].setNumTri(lod.RdrPass[i].PBlock.getNumTri());
+03299 <a class="code" href="a04558.html#a11">uint32</a> *srcTriPtr= lod.RdrPass[i].PBlock.getTriPointer();
+03300 <a class="code" href="a04558.html#a11">uint32</a> *dstTriPtr= skinLod.RdrPass[i].getTriPointer();
+03301 <a class="code" href="a04558.html#a11">uint32</a> numIndices= lod.RdrPass[i].PBlock.getNumTri()*3;
+03302 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j&lt;numIndices;j++, srcTriPtr++, dstTriPtr++)
+03303 {
+03304 <a class="code" href="a04558.html#a15">uint</a> vid= *srcTriPtr;
+03305 <span class="comment">// If this index refers to a Geomorphed vertex, don't modify!</span>
+03306 <span class="keywordflow">if</span>(vid&lt;numGeoms)
+03307 *dstTriPtr= vid;
+03308 <span class="keywordflow">else</span>
+03309 *dstTriPtr= vertexRemap[vid] + numGeoms;
+03310 }
+03311 }
+03312
+03313 <span class="comment">// Case of MeshMorpher</span>
+03314 <span class="comment">//========</span>
+03315 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size()&gt;0)
+03316 {
+03317 skinLod.VertexRemap.resize(vertexFinalRemap.size());
+03318
+03319 <span class="keywordflow">for</span>(i=0;i&lt;vertexFinalRemap.size();i++)
+03320 {
+03321 <a class="code" href="a04558.html#a15">uint</a> vfr= vertexFinalRemap[i];
+03322 <span class="keywordflow">if</span>(vfr!=0xFFFFFFFF)
+03323 {
+03324 <a class="code" href="a04558.html#a15">uint</a> rsArrayId= vfr &gt;&gt; 30;
+03325 <a class="code" href="a04558.html#a15">uint</a> rsIndex= vfr &amp; ((1&lt;&lt;30)-1);
+03326 <span class="keywordflow">switch</span>(rsArrayId)
+03327 {
+03328 <span class="keywordflow">case</span> 0:
+03329 skinLod.VertexRemap[i]= &amp;skinLod.Vertices1[rsIndex].Vertex;
+03330 <span class="keywordflow">break</span>;
+03331 <span class="keywordflow">case</span> 1:
+03332 skinLod.VertexRemap[i]= &amp;skinLod.Vertices2[rsIndex].Vertex;
+03333 <span class="keywordflow">break</span>;
+03334 <span class="keywordflow">case</span> 2:
+03335 skinLod.VertexRemap[i]= &amp;skinLod.Vertices3[rsIndex].Vertex;
+03336 <span class="keywordflow">break</span>;
+03337 <span class="keywordflow">case</span> 3:
+03338 skinLod.VertexRemap[i]= &amp;skinLod.Vertices4[rsIndex].Vertex;
+03339 <span class="keywordflow">break</span>;
+03340 };
+03341 }
+03342 <span class="keywordflow">else</span>
+03343 skinLod.VertexRemap[i]= NULL;
+03344 }
+03345 }
+03346 }
+03347 }
+03348 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomd18" doxytag="NL3D::CMeshMRMGeom::updateShiftedTriangleCache" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateShiftedTriangleCache </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>mi</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>curLodId</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>baseVertex</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l01529">1529</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00639">_MeshDataId</a>, <a class="el" href="a06008.html#l00126">NL3D::CMeshMRMInstance::_RawSkinCache</a>, <a class="el" href="a06008.html#l00131">NL3D::CMeshMRMInstance::_ShiftedTriangleCache</a>, <a class="el" href="a06387.html#l00066">NL3D::CShiftedTriangleCache::BaseVertex</a>, <a class="el" href="a06007.html#l00075">NL3D::CMeshMRMInstance::clearShiftedTriangleCache()</a>, <a class="el" href="a06116.html#l00195">NLMISC::CObjectVector&lt; uint32, false &gt;::getPtr()</a>, <a class="el" href="a06387.html#l00062">NL3D::CShiftedTriangleCache::LodId</a>, <a class="el" href="a06387.html#l00064">NL3D::CShiftedTriangleCache::MeshDataId</a>, <a class="el" href="a06387.html#l00052">NL3D::CShiftedTriangleCache::CRdrPass::NumTriangles</a>, <a class="el" href="a06387.html#l00057">NL3D::CShiftedTriangleCache::RawIndices</a>, <a class="el" href="a06387.html#l00059">NL3D::CShiftedTriangleCache::RdrPass</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06314.html#l00113">NL3D::CRawSkinNormalCache::RdrPass</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; uint32, false &gt;::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector&lt; CRdrPass, false &gt;::resize()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06387.html#l00051">NL3D::CShiftedTriangleCache::CRdrPass::Triangles</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01406">renderSkinGroupPrimitives()</a>.
+<p>
+<div class="fragment"><pre>01530 {
+01531 <span class="comment">// if the instance has a cache, but not sync to us, delete it.</span>
+01532 <span class="keywordflow">if</span>( mi-&gt;_ShiftedTriangleCache &amp;&amp; (
+01533 mi-&gt;_ShiftedTriangleCache-&gt;MeshDataId != <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a> ||
+01534 mi-&gt;_ShiftedTriangleCache-&gt;LodId != curLodId ||
+01535 mi-&gt;_ShiftedTriangleCache-&gt;BaseVertex != baseVertex) )
+01536 {
+01537 mi-&gt;clearShiftedTriangleCache();
+01538 }
+01539
+01540 <span class="comment">// If the instance has not a valid cache, must create it.</span>
+01541 <span class="keywordflow">if</span>( !mi-&gt;_ShiftedTriangleCache )
+01542 {
+01543 mi-&gt;_ShiftedTriangleCache= <span class="keyword">new</span> CShiftedTriangleCache;
+01544 <span class="comment">// Fill the cache Key.</span>
+01545 mi-&gt;_ShiftedTriangleCache-&gt;MeshDataId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>;
+01546 mi-&gt;_ShiftedTriangleCache-&gt;LodId= curLodId;
+01547 mi-&gt;_ShiftedTriangleCache-&gt;BaseVertex= baseVertex;
+01548
+01549 <span class="comment">// Build list of PBlock. From Lod, or from RawSkin cache.</span>
+01550 <span class="keyword">static</span> vector&lt;CPrimitiveBlock*&gt; pbList;
+01551 pbList.clear();
+01552 <span class="keywordflow">if</span>(mi-&gt;_RawSkinCache)
+01553 {
+01554 pbList.resize(mi-&gt;_RawSkinCache-&gt;RdrPass.size());
+01555 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;pbList.size();i++)
+01556 {
+01557 pbList[i]= &amp;mi-&gt;_RawSkinCache-&gt;RdrPass[i];
+01558 }
+01559 }
+01560 <span class="keywordflow">else</span>
+01561 {
+01562 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &amp;lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[curLodId];
+01563 pbList.resize(lod.RdrPass.size());
+01564 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;pbList.size();i++)
+01565 {
+01566 pbList[i]= &amp;lod.RdrPass[i].PBlock;
+01567 }
+01568 }
+01569
+01570 <span class="comment">// Build RdrPass</span>
+01571 mi-&gt;_ShiftedTriangleCache-&gt;RdrPass.resize(pbList.size());
+01572
+01573 <span class="comment">// First pass, count number of triangles, and fill header info</span>
+01574 <a class="code" href="a04558.html#a15">uint</a> totalTri= 0;
+01575 <a class="code" href="a04558.html#a15">uint</a> i;
+01576 <span class="keywordflow">for</span>(i=0;i&lt;pbList.size();i++)
+01577 {
+01578 mi-&gt;_ShiftedTriangleCache-&gt;RdrPass[i].NumTriangles= pbList[i]-&gt;getNumTri();
+01579 totalTri+= pbList[i]-&gt;getNumTri();
+01580 }
+01581
+01582 <span class="comment">// Allocate triangles indices.</span>
+01583 mi-&gt;_ShiftedTriangleCache-&gt;RawIndices.resize(totalTri*3);
+01584 <a class="code" href="a04558.html#a11">uint32</a> *rawPtr= mi-&gt;_ShiftedTriangleCache-&gt;RawIndices.getPtr();
+01585
+01586 <span class="comment">// Second pass, fill ptrs, and fill Arrays</span>
+01587 <a class="code" href="a04558.html#a15">uint</a> indexTri= 0;
+01588 <span class="keywordflow">for</span>(i=0;i&lt;pbList.size();i++)
+01589 {
+01590 CShiftedTriangleCache::CRdrPass &amp;dstRdrPass= mi-&gt;_ShiftedTriangleCache-&gt;RdrPass[i];
+01591 dstRdrPass.Triangles= rawPtr + indexTri*3;
+01592
+01593 <span class="comment">// Fill the array</span>
+01594 <a class="code" href="a04558.html#a15">uint</a> numTris= pbList[i]-&gt;getNumTri();
+01595 <span class="keywordflow">if</span>(numTris)
+01596 {
+01597 <a class="code" href="a04558.html#a15">uint</a> nIds= numTris*3;
+01598 <span class="comment">// index, and fill</span>
+01599 <a class="code" href="a04558.html#a11">uint32</a> *pSrcTri= pbList[i]-&gt;getTriPointer();
+01600 <a class="code" href="a04558.html#a11">uint32</a> *pDstTri= dstRdrPass.Triangles;
+01601 <span class="keywordflow">for</span>(;nIds&gt;0;nIds--,pSrcTri++,pDstTri++)
+01602 *pDstTri= *pSrcTri + baseVertex;
+01603 }
+01604
+01605 <span class="comment">// Next</span>
+01606 indexTri+= dstRdrPass.NumTriangles;
+01607 }
+01608 }
+01609 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_4" doxytag="NL3D::CMeshMRMGeom::updateSkeletonUsage" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateSkeletonUsage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03399.html">CSkeletonModel</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>sm</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>increment</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+update Skeleton Usage. increment or decrement. computeBonesId must has been called before.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02535">2535</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06394.html#l00098">NL3D::CSkeletonModel::Bones</a>, <a class="el" href="a06393.html#l00213">NL3D::CSkeletonModel::decBoneUsage()</a>, <a class="el" href="a06393.html#l00189">NL3D::CSkeletonModel::incBoneUsage()</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l03005">NL3D::CMeshMRM::updateSkeletonUsage()</a>.
+<p>
+<div class="fragment"><pre>02536 {
+02537 <span class="comment">// For all Bones used.</span>
+02538 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>.size();i++)
+02539 {
+02540 <a class="code" href="a04558.html#a15">uint</a> boneId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>[i];
+02541 <span class="comment">// Some explicit Error.</span>
+02542 <span class="keywordflow">if</span>(boneId&gt;=sm-&gt;Bones.size())
+02543 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">" Skin is incompatible with Skeleton: tries to use bone %d"</span>, boneId);
+02544 <span class="comment">// increment or decrement not Forced, because CMeshGeom use getActiveBoneSkinMatrix().</span>
+02545 <span class="keywordflow">if</span>(increment)
+02546 sm-&gt;incBoneUsage(boneId, CSkeletonModel::UsageNormal);
+02547 <span class="keywordflow">else</span>
+02548 sm-&gt;decBoneUsage(boneId, CSkeletonModel::UsageNormal);
+02549 }
+02550 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_2" doxytag="NL3D::CMeshMRMGeom::updateVertexBufferHard" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02434.html">IDriver</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>drv</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numVertices</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06005.html#l02224">2224</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>.
+<p>
+References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06711.html#l00504">NL3D::CVertexBuffer::getUVRouting()</a>, <a class="el" href="a06711.html#l00483">NL3D::CVertexBuffer::getValueTypePointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera75">NL3D::IDriver::slowUnlockVertexBufferHard()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera78">NL3D::IDriver::supportVertexBufferHard()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02705">beginMesh()</a>, and <a class="el" href="a06005.html#l00927">render()</a>.
+<p>
+<div class="fragment"><pre>02225 {
+02226 <span class="keywordflow">if</span>(!drv-&gt;supportVertexBufferHard() || numVertices==0)
+02227 <span class="keywordflow">return</span>;
+02228
+02229
+02239 <span class="keywordtype">bool</span> avoidVBHard;
+02240 avoidVBHard= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> || ( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size()&gt;0 &amp;&amp; drv-&gt;slowUnlockVertexBufferHard() );
+02241 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a> &amp;&amp; avoidVBHard )
+02242 {
+02243 <span class="comment">// delete possible old VBHard.</span>
+02244 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL)
+02245 {
+02246 <span class="comment">// VertexBufferHard lifetime &lt; Driver lifetime.</span>
+02247 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL);
+02248 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>-&gt;deleteVertexBufferHard(_VBHard);
+02249 }
+02250 <span class="keywordflow">return</span>;
+02251 }
+02252
+02253
+02254 <span class="comment">// If the vbufferhard is not here, or if dirty, or if do not have enough vertices.</span>
+02255 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>==NULL || <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a> || <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>-&gt;getNumVertices() &lt; numVertices)
+02256 {
+02257 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">false</span>;
+02258
+02259 <span class="comment">// delete possible old _VBHard.</span>
+02260 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL)
+02261 {
+02262 <span class="comment">// VertexBufferHard lifetime &lt; Driver lifetime.</span>
+02263 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL);
+02264 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>-&gt;deleteVertexBufferHard(_VBHard);
+02265 }
+02266
+02267 <span class="comment">// bkup drv in a refptr. (so we know if the vbuffer hard has to be deleted).</span>
+02268 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>= drv;
+02269 <span class="comment">// try to create new one, in AGP Ram</span>
+02270 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>-&gt;createVertexBufferHard(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(), <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getValueTypePointer (), numVertices, IDriver::VBHardAGP, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getUVRouting());
+02271
+02272
+02273 <span class="comment">// If KO, use normal VertexBuffer, else, Fill it with VertexBuffer.</span>
+02274 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL)
+02275 {
+02276 <span class="keywordtype">void</span> *vertexPtr= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>-&gt;lock();
+02277
+02278 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>-&gt;getVertexFormat());
+02279 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices() &gt;= numVertices);
+02280 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>-&gt;getVertexSize());
+02281
+02282 <span class="comment">// \todo yoyo: TODO_DX8 and DX8 ???</span>
+02283 <span class="comment">// Because same internal format, just copy all block.</span>
+02284 memcpy(vertexPtr, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(), numVertices * <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() );
+02285
+02286 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>-&gt;unlock();
+02287 }
+02288 }
+02289
+02290 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Friends And Related Function Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz481_0" doxytag="NL3D::CMeshMRMGeom::CLod" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> friend class <a class="el" href="a02893.html">CLod</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00416">416</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomn0" doxytag="NL3D::CMeshMRMGeom::CMRMBuilder" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> friend class <a class="el" href="a02951.html">CMRMBuilder</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00333">333</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr0" doxytag="NL3D::CMeshMRMGeom::_BBox" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">NL3D::CMeshMRMGeom::_BBox</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+For clipping. this is the BB of all vertices of all Lods.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00515">515</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr1" doxytag="NL3D::CMeshMRMGeom::_BoneIdComputed" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">NL3D::CMeshMRMGeom::_BoneIdComputed</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This boolean is true if the bones id have been passed in the skeleton.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00493">493</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr2" doxytag="NL3D::CMeshMRMGeom::_BoneIdExtended" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">NL3D::CMeshMRMGeom::_BoneIdExtended</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+true if the _BonesIdExt have been computed (for bone Usage).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00495">495</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr3" doxytag="NL3D::CMeshMRMGeom::_BonesId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a10">sint32</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">NL3D::CMeshMRMGeom::_BonesId</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This array give the index in the skeleton of the local bones used. computed at first computeBoneId().
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00506">506</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr4" doxytag="NL3D::CMeshMRMGeom::_BonesIdExt" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a10">sint32</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">NL3D::CMeshMRMGeom::_BonesIdExt</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Same as _BonesId but with parent of bones added. (used for bone usage).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00508">508</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr5" doxytag="NL3D::CMeshMRMGeom::_BonesName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;std::string&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">NL3D::CMeshMRMGeom::_BonesName</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This array give the name of the local bones.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00504">504</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr6" doxytag="NL3D::CMeshMRMGeom::_BonesSphere" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02291.html">NLMISC::CBSphere</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">NL3D::CMeshMRMGeom::_BonesSphere</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00510">510</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02293">computeBonesId()</a>, and <a class="el" href="a06006.html#l00246">getSkinBoneSphere()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_3" doxytag="NL3D::CMeshMRMGeom::_Driver" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">CRefPtr</a>&lt;<a class="el" href="a02434.html">IDriver</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">NL3D::CMeshMRMGeom::_Driver</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00534">534</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr7" doxytag="NL3D::CMeshMRMGeom::_LastLodComputed" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a7">uint8</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">NL3D::CMeshMRMGeom::_LastLodComputed</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Last lod rendered. used with renderSkinGroup*() only.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00501">501</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>, <a class="el" href="a06005.html#l01406">renderSkinGroupPrimitives()</a>, and <a class="el" href="a06005.html#l01488">renderSkinGroupSpecularRdrPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz482_0" doxytag="NL3D::CMeshMRMGeom::_LevelDetail" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02959.html">CMRMLevelDetail</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">NL3D::CMeshMRMGeom::_LevelDetail</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00525">525</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l00228">changeMRMDistanceSetup()</a>, <a class="el" href="a06006.html#l00275">getLevelDetail()</a>, <a class="el" href="a06005.html#l02200">getNumTriangles()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, and <a class="el" href="a06005.html#l00927">render()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr8" doxytag="NL3D::CMeshMRMGeom::_LodInfos" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02894.html">CLodInfo</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">NL3D::CMeshMRMGeom::_LodInfos</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Info for pre-loading Lods.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00519">519</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, and <a class="el" href="a06005.html#l02001">loadNextLod()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr9" doxytag="NL3D::CMeshMRMGeom::_Lods" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02893.html">CLod</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">NL3D::CMeshMRMGeom::_Lods</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+List of Lods.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00513">513</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06009.html#l00339">applyArrayShadowSkin()</a>, <a class="el" href="a06005.html#l00462">applyMaterialRemap()</a>, <a class="el" href="a06005.html#l02705">beginMesh()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l02293">computeBonesId()</a>, <a class="el" href="a06005.html#l02811">computeMeshVBHeap()</a>, <a class="el" href="a06005.html#l02791">endMesh()</a>, <a class="el" href="a06006.html#l00216">getGeomorphs()</a>, <a class="el" href="a06006.html#l00186">getNbLod()</a>, <a class="el" href="a06006.html#l00192">getNbRdrPass()</a>, <a class="el" href="a06005.html#l02700">getNumRdrPassesForInstance()</a>, <a class="el" href="a06006.html#l00209">getRdrPassMaterial()</a>, <a class="el" href="a06006.html#l00199">getRdrPassPrimitiveBlock()</a>, <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, <a class="el" href="a06005.html#l02001">loadNextLod()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, <a class="el" href="a06005.html#l00927">render()</a>, <a class="el" href="a06005.html#l02768">renderPass()</a>, <a class="el" href="a06005.html#l01146">renderSkin()</a>, <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>, <a class="el" href="a06005.html#l01406">renderSkinGroupPrimitives()</a>, <a class="el" href="a06005.html#l01488">renderSkinGroupSpecularRdrPass()</a>, <a class="el" href="a06005.html#l02029">unloadNextLod()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06005.html#l01529">updateShiftedTriangleCache()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz486_0" doxytag="NL3D::CMeshMRMGeom::_MBRBkupNormalize" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_0">NL3D::CMeshMRMGeom::_MBRBkupNormalize</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+BeginMesh setup.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00562">562</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02705">beginMesh()</a>, and <a class="el" href="a06005.html#l02791">endMesh()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz486_1" doxytag="NL3D::CMeshMRMGeom::_MBRCurrentLodId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">NL3D::CMeshMRMGeom::_MBRCurrentLodId</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+global setup at activateInstance()
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00564">564</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02700">getNumRdrPassesForInstance()</a>, and <a class="el" href="a06005.html#l02768">renderPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_11" doxytag="NL3D::CMeshMRMGeom::_MeshDataId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">NL3D::CMeshMRMGeom::_MeshDataId</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Each time the mesh is loaded/built, this increment.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00639">639</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l03052">dirtMeshDataId()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06005.html#l01529">updateShiftedTriangleCache()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr10" doxytag="NL3D::CMeshMRMGeom::_MeshMorpher" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02890.html">CMeshMorpher</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">NL3D::CMeshMRMGeom::_MeshMorpher</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00552">552</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr11" doxytag="NL3D::CMeshMRMGeom::_MeshVertexProgram" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt;<a class="el" href="a02916.html">IMeshVertexProgram</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">NL3D::CMeshMRMGeom::_MeshVertexProgram</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00555">555</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr12" doxytag="NL3D::CMeshMRMGeom::_NbLodLoaded" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">NL3D::CMeshMRMGeom::_NbLodLoaded</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00520">520</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06006.html#l00140">getNbLodLoaded()</a>, <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, <a class="el" href="a06005.html#l02001">loadNextLod()</a>, and <a class="el" href="a06005.html#l02029">unloadNextLod()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr13" doxytag="NL3D::CMeshMRMGeom::_OriginalSkinNormals" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03128.html">CVector</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">NL3D::CMeshMRMGeom::_OriginalSkinNormals</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00481">481</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr14" doxytag="NL3D::CMeshMRMGeom::_OriginalSkinVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03128.html">CVector</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">NL3D::CMeshMRMGeom::_OriginalSkinVertices</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Skinning: this is the list of vertices (mirror of VBuffer), at the bind Pos.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00480">480</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr15" doxytag="NL3D::CMeshMRMGeom::_OriginalTGSpace" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03128.html">CVector</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">NL3D::CMeshMRMGeom::_OriginalTGSpace</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00482">482</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_4" doxytag="NL3D::CMeshMRMGeom::_PreciseClipping" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">NL3D::CMeshMRMGeom::_PreciseClipping</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+NB: HERE FOR PACKING ONLY. For clipping. Estimate if we must do a Precise clipping (ie with bboxes).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00538">538</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_1" doxytag="NL3D::CMeshMRMGeom::_ShadowSkinTriangles" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a11">uint32</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">NL3D::CMeshMRMGeom::_ShadowSkinTriangles</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00571">571</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l03412">renderShadowSkinPrimitives()</a>, and <a class="el" href="a06005.html#l03359">setShadowMesh()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_2" doxytag="NL3D::CMeshMRMGeom::_ShadowSkinVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02897.html">CShadowVertex</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">NL3D::CMeshMRMGeom::_ShadowSkinVertices</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00570">570</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l02293">computeBonesId()</a>, <a class="el" href="a06005.html#l03370">getNumShadowSkinVertices()</a>, <a class="el" href="a06005.html#l03376">renderShadowSkinGeom()</a>, and <a class="el" href="a06005.html#l03359">setShadowMesh()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr16" doxytag="NL3D::CMeshMRMGeom::_Skinned" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">NL3D::CMeshMRMGeom::_Skinned</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Skinning: This tells if the mesh is correctly skinned (suuport skinning).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00478">478</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr17" doxytag="NL3D::CMeshMRMGeom::_SkinWeights" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02865.html">CMesh::CSkinWeight</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">NL3D::CMeshMRMGeom::_SkinWeights</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This is the array of SkinWeights, same size as the VB.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00490">490</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06009.html#l00207">applySkin()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l02482">buildBoneUsageVer2()</a>, <a class="el" href="a06005.html#l02293">computeBonesId()</a>, <a class="el" href="a06006.html#l00179">getSkinWeights()</a>, <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>, and <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz486_2" doxytag="NL3D::CMeshMRMGeom::_SupportMeshBlockRendering" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">NL3D::CMeshMRMGeom::_SupportMeshBlockRendering</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setuped at compileRunTime.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00560">560</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, and <a class="el" href="a06005.html#l02802">getVBHeapInfo()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_3" doxytag="NL3D::CMeshMRMGeom::_SupportShadowSkinGrouping" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">NL3D::CMeshMRMGeom::_SupportShadowSkinGrouping</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00572">572</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l03359">setShadowMesh()</a>, and <a class="el" href="a06006.html#l00325">supportShadowSkinGrouping()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr18" doxytag="NL3D::CMeshMRMGeom::_SupportSkinGrouping" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">NL3D::CMeshMRMGeom::_SupportSkinGrouping</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+if true, then maybe use faster render
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00498">498</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, and <a class="el" href="a06005.html#l01312">supportSkinGrouping()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_5" doxytag="NL3D::CMeshMRMGeom::_VBHard" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">CRefPtr</a>&lt;<a class="el" href="a03694.html">IVertexBufferHard</a>&gt; <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">NL3D::CMeshMRMGeom::_VBHard</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00532">532</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr19" doxytag="NL3D::CMeshMRMGeom::_VBufferFinal" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03692.html">CVertexBuffer</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">NL3D::CMeshMRMGeom::_VBufferFinal</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The Final VBuffer.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00487">487</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>, <a class="el" href="a06009.html#l00207">applySkin()</a>, <a class="el" href="a06005.html#l02705">beginMesh()</a>, <a class="el" href="a06005.html#l02045">bkupOriginalSkinVertices()</a>, <a class="el" href="a06005.html#l02055">bkupOriginalSkinVerticesSubset()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l02811">computeMeshVBHeap()</a>, <a class="el" href="a06005.html#l02802">getVBHeapInfo()</a>, <a class="el" href="a06006.html#l00176">getVertexBuffer()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, <a class="el" href="a06005.html#l00927">render()</a>, <a class="el" href="a06005.html#l01146">renderSkin()</a>, <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>, <a class="el" href="a06005.html#l02131">restoreOriginalSkinPart()</a>, <a class="el" href="a06005.html#l02095">restoreOriginalSkinVertices()</a>, <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06005.html#l02224">updateVertexBufferHard()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomr20" doxytag="NL3D::CMeshMRMGeom::_VBufferOriginal" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03692.html">CVertexBuffer</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr20">NL3D::CMeshMRMGeom::_VBufferOriginal</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The Original VBuffer.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00485">485</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.
+<p>
+Referenced by <a class="el" href="a06005.html#l00927">render()</a>, and <a class="el" href="a06005.html#l01146">renderSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_6" doxytag="NL3D::CMeshMRMGeom::_VertexBufferHardDirty" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">NL3D::CMeshMRMGeom::_VertexBufferHardDirty</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06006.html#l00535">535</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_0" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal1" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_0">NL3D::CMeshMRMGeom::NumCacheVertexNormal1</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03309.html">CRawVertexNormalSkin1</a>)<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00380">380</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_1" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal2" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_1">NL3D::CMeshMRMGeom::NumCacheVertexNormal2</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03310.html">CRawVertexNormalSkin2</a>)<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00382">382</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_2" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal3" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_2">NL3D::CMeshMRMGeom::NumCacheVertexNormal3</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03311.html">CRawVertexNormalSkin3</a>)<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00384">384</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_3" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal4" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_3">NL3D::CMeshMRMGeom::NumCacheVertexNormal4</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03312.html">CRawVertexNormalSkin4</a>)<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00386">386</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_4" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexShadow" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_4">NL3D::CMeshMRMGeom::NumCacheVertexShadow</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a02897.html">CMeshMRMGeom::CShadowVertex</a>)<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06009.html#l00389">389</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>.
+<p>
+Referenced by <a class="el" href="a06009.html#l00339">applyArrayShadowSkin()</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a06006.html">mesh_mrm.h</a><li><a class="el" href="a06005.html">mesh_mrm.cpp</a><li><a class="el" href="a06009.html">mesh_mrm_skin.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 06:53:13 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>