aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02878.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/doxygen/nel/a02878.html5263
1 files changed, 5263 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02878.html b/docs/doxygen/nel/a02878.html
new file mode 100644
index 00000000..631f409c
--- /dev/null
+++ b/docs/doxygen/nel/a02878.html
@@ -0,0 +1,5263 @@
+<!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::CMeshGeom 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::CMeshGeom Class Reference</h1><code>#include &lt;<a class="el" href="a05990.html">mesh.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for NL3D::CMeshGeom:
+<p><center><img src="a02878.png" usemap="#NL3D::CMeshGeom_map" border="0" alt=""></center>
+<map name="NL3D::CMeshGeom_map">
+<area href="a02879.html" alt="NL3D::IMeshGeom" shape="rect" coords="0,112,131,136">
+<area href="a02867.html" alt="NLMISC::IStreamable" shape="rect" coords="0,56,131,80">
+<area href="a02540.html" alt="NLMISC::IClassable" shape="rect" coords="0,0,131,24">
+</map>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A mesh geometry. Skinning support: support only palette skinning. <dl compact><dt><b>Author:</b></dt><dd>Lionel Berenguier <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2000 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00335">335</a> of file <a class="el" href="a05990.html">mesh.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Mesh Block Render Implementation</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0">TMBRSupport</a> { <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy3">MBROk</a> = 1,
+<a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4">MBRSortPerMaterial</a> = 2,
+<a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a> = 4
+ }</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setuped at compileRunTime. <a href="#NL3D_1_1CMeshGeomz421_0">More...</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="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setuped at compileRunTime. <a href="#NL3D_1_1CMeshGeomz421_1"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Skinning</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0">TSkinType</a> { <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy5">SkinPosOnly</a> = 0,
+<a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy6">SkinWithNormal</a>,
+<a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy7">SkinWithTgSpace</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_1">applySkin</a> (<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="a02878.html#NL3D_1_1CMeshGeomz423_2">bkupOriginalSkinVertices</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_3">buildBoneUsageVer3</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_4">buildSkin</a> (<a class="el" href="a02864.html">CMesh::CMeshBuild</a> &amp;m, std::vector&lt; <a class="el" href="a02883.html">CFaceTmp</a> &gt; &amp;tmpFaces)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_5">computeSkinMatrixes</a> (<a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a02852.html">CMatrix3x4</a> *matrixes, <a class="el" href="a02884.html">CMatrixBlock</a> *prevBlock, <a class="el" href="a02884.html">CMatrixBlock</a> &amp;curBlock)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_6">computeSoftwarePointSkinning</a> (<a class="el" href="a02852.html">CMatrix3x4</a> *matrixes, <a class="el" href="a03128.html">CVector</a> *srcVector, <a class="el" href="a03038.html">CPaletteSkin</a> *srcPal, float *srcWgt, <a class="el" href="a03128.html">CVector</a> *dstVector)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_7">computeSoftwareVectorSkinning</a> (<a class="el" href="a02852.html">CMatrix3x4</a> *matrixes, <a class="el" href="a03128.html">CVector</a> *srcVector, <a class="el" href="a03038.html">CPaletteSkin</a> *srcPal, float *srcWgt, <a class="el" href="a03128.html">CVector</a> *dstVector)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_8">flagSkinVerticesForMatrixBlock</a> (<a class="el" href="a04558.html#a7">uint8</a> *skinFlags, <a class="el" href="a02884.html">CMatrixBlock</a> &amp;mb)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_9">restoreOriginalSkinVertices</a> ()</td></tr>
+
+<tr><td colspan=2><br><h2>VBufferHard mgt.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz419_0">updateVertexBufferHard</a> (<a class="el" href="a02434.html">IDriver</a> *drv)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">update the VertexBufferHard if NULL (ie not created or deleted by driver) or if VertexBufferDirty. <a href="#NL3D_1_1CMeshGeomz419_0"></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="a02434.html">IDriver</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz419_1">_Driver</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is the driver used to setup the vbuffer hard. error if a mesh has not the same driver in his life. <a href="#NL3D_1_1CMeshGeomz419_1"></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="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The only one VBufferHard of the mesh. NULL by default. <a href="#NL3D_1_1CMeshGeomz419_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="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This tells if the VBuffer has changed since the last time or not. <a href="#NL3D_1_1CMeshGeomz419_3"></a><br><br></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="a02878.html#NL3D_1_1CMeshGeoma0">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_1CMeshGeoma0"></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="a02878.html#NL3D_1_1CMeshGeoma1">build</a> (<a class="el" href="a02864.html">CMesh::CMeshBuild</a> &amp;mbuild, <a class="el" href="a04558.html#a15">uint</a> numMaxMaterial)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Build a meshGeom. <a href="#NL3D_1_1CMeshGeoma1"></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="a02878.html#NL3D_1_1CMeshGeoma2">CMeshGeom</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <a href="#NL3D_1_1CMeshGeoma2"></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>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeoma4">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_1CMeshGeoma4"></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="a02878.html#NL3D_1_1CMeshGeoma5">renderSimpleWithMaterial</a> (<a class="el" href="a02434.html">IDriver</a> *drv, const <a class="el" href="a02851.html">CMatrix</a> &amp;worldMatrix, <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeoma6">setBlendShapes</a> (std::vector&lt; <a class="el" href="a02273.html">CBlendShape</a> &gt; &amp;bs)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeoma7">~CMeshGeom</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="a02878.html#NL3D_1_1CMeshGeomz417_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="a02878.html#NL3D_1_1CMeshGeomz417_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="a02878.html#NL3D_1_1CMeshGeomz417_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="a02878.html#NL3D_1_1CMeshGeomz417_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="a02878.html#NL3D_1_1CMeshGeomz417_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="a02878.html#NL3D_1_1CMeshGeomz417_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="a02878.html#NL3D_1_1CMeshGeomz417_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 void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz417_7">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="a02878.html#NL3D_1_1CMeshGeomz417_8">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="a02878.html#NL3D_1_1CMeshGeomz417_9">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="a02878.html#NL3D_1_1CMeshGeomz411_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 <a href="#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_1">getNumTriangles</a> (float distance)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clip this mesh <a href="#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_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_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_3">NLMISC_DECLARE_CLASS</a> (<a class="el" href="a02878.html">CMeshGeom</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clip this mesh <a href="#NL3D_1_1CMeshGeomz411_3"></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="a02878.html#NL3D_1_1CMeshGeomz411_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">clip this mesh <a href="#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_5">render()</a> this mesh in a driver. <a href="#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_5">render()</a> this mesh as a skin <a href="#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz411_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 mesh. <a href="#NL3D_1_1CMeshGeomz411_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="a02878.html#NL3D_1_1CMeshGeomz415_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_1CMeshGeomz415_0"></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="a02878.html#NL3D_1_1CMeshGeomz415_1">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_1CMeshGeomz415_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="a02878.html#NL3D_1_1CMeshGeomz415_2">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_1CMeshGeomz415_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="a02878.html#NL3D_1_1CMeshGeomz415_3">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_1CMeshGeomz415_3"></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 <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz413_0">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_1CMeshGeomz413_0"></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="a02878.html#NL3D_1_1CMeshGeomz413_1">getNbBlendShapes</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the number of BlendShapes <a href="#NL3D_1_1CMeshGeomz413_1"></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="a02878.html#NL3D_1_1CMeshGeomz413_2">getNbMatrixBlock</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the number of matrix block <a href="#NL3D_1_1CMeshGeomz413_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="a02878.html#NL3D_1_1CMeshGeomz413_3">getNbRdrPass</a> (<a class="el" href="a04558.html#a15">uint</a> matrixBlockIndex) 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="a02878.html#NL3D_1_1CMeshGeomz413_4">getRdrPassMaterial</a> (<a class="el" href="a04558.html#a15">uint</a> matrixBlockIndex, <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="a02878.html#NL3D_1_1CMeshGeomz413_5">getRdrPassPrimitiveBlock</a> (<a class="el" href="a04558.html#a15">uint</a> matrixBlockIndex, <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="a03692.html">CVertexBuffer</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomz413_6">getVertexBuffer</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the vertex buffer used by the mesh <a href="#NL3D_1_1CMeshGeomz413_6"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Private Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef TBoneMap::iterator&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomy0">ItBoneMap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef TCornerSet::iterator&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomy1">ItCornerSet</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef std::map&lt; <a class="el" href="a04558.html#a15">uint</a>, <a class="el" href="a02880.html">CBoneTmp</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomy8">TBoneMap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef std::set&lt; <a class="el" href="a02882.html">CCornerTmp</a> *,<br>
+ <a class="el" href="a02881.html">CCornerPred</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomy9">TCornerSet</a></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="a02878.html#NL3D_1_1CMeshGeomd0">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="a02878.html#NL3D_1_1CMeshGeomd1">findVBId</a> (<a class="el" href="a02878.html#NL3D_1_1CMeshGeomy9">TCornerSet</a> &amp;corners, const <a class="el" href="a02882.html">CCornerTmp</a> *corn, <a class="el" href="a04558.html#a14">sint</a> &amp;currentVBIndex, const <a class="el" href="a03128.html">CVector</a> &amp;vert, const <a class="el" href="a02864.html">CMesh::CMeshBuild</a> &amp;mb)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomd2">optimizeTriangleOrder</a> ()</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="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">For clipping. <a href="#NL3D_1_1CMeshGeomr0"></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="a02878.html#NL3D_1_1CMeshGeomr1">_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_1CMeshGeomr1"></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="a02878.html#NL3D_1_1CMeshGeomr2">_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_1CMeshGeomr2"></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="a02878.html#NL3D_1_1CMeshGeomr3">_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_1CMeshGeomr3"></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="a02878.html#NL3D_1_1CMeshGeomr4">_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_1CMeshGeomr4"></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="a02878.html#NL3D_1_1CMeshGeomr5">_BonesName</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This array give the name of the local bones used. <a href="#NL3D_1_1CMeshGeomr5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02884.html">CMatrixBlock</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The matrix blocks. <a href="#NL3D_1_1CMeshGeomr6"></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="a02878.html#NL3D_1_1CMeshGeomr7">_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="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</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="a02878.html#NL3D_1_1CMeshGeomr9">_OriginalSkinNormals</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02878.html#NL3D_1_1CMeshGeomr10">_OriginalSkinRestored</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This tells if the mesh VBuffer has coorect BindPos vertices. <a href="#NL3D_1_1CMeshGeomr10"></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="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</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="a02878.html#NL3D_1_1CMeshGeomr12">_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="a02878.html#NL3D_1_1CMeshGeomr13">_PreciseClipping</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Estimate if we must do a Precise clipping (ie with bboxes). <a href="#NL3D_1_1CMeshGeomr13"></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="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This tells if the mesh is correctly skinned. <a href="#NL3D_1_1CMeshGeomr14"></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="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">VBuffer of the mesh (potentially modified by the mesh morpher and skinning). <a href="#NL3D_1_1CMeshGeomr15"></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="a02878.html#NL3D_1_1CMeshGeomr16">_VBufferOri</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The original VBuffer of the mesh used only if there are blend shapes. <a href="#NL3D_1_1CMeshGeomr16"></a><br><br></td></tr>
+</table>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshGeomy0" doxytag="NL3D::CMeshGeom::ItBoneMap" ></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"> typedef TBoneMap::iterator <a class="el" href="a02878.html#NL3D_1_1CMeshGeomy0">NL3D::CMeshGeom::ItBoneMap</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="a05990.html#l00606">606</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01105">buildSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomy1" doxytag="NL3D::CMeshGeom::ItCornerSet" ></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"> typedef TCornerSet::iterator <a class="el" href="a02878.html#NL3D_1_1CMeshGeomy1">NL3D::CMeshGeom::ItCornerSet</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="a05990.html#l00730">730</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05990.html#l00733">findVBId()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomy8" doxytag="NL3D::CMeshGeom::TBoneMap" ></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"> typedef std::map&lt;<a class="el" href="a04558.html#a15">uint</a>, <a class="el" href="a02880.html">CBoneTmp</a>&gt; <a class="el" href="a02878.html#NL3D_1_1CMeshGeomy8">NL3D::CMeshGeom::TBoneMap</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Just for build process. A map of Bone.
+<p>
+Definition at line <a class="el" href="a05990.html#l00605">605</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01105">buildSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomy9" doxytag="NL3D::CMeshGeom::TCornerSet" ></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"> typedef std::set&lt;<a class="el" href="a02882.html">CCornerTmp</a>*, <a class="el" href="a02881.html">CCornerPred</a>&gt; <a class="el" href="a02878.html#NL3D_1_1CMeshGeomy9">NL3D::CMeshGeom::TCornerSet</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="a05990.html#l00729">729</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, and <a class="el" href="a05990.html#l00733">findVBId()</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshGeomz421_0" doxytag="NL3D::CMeshGeom::TMBRSupport" ></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="a02878.html#NL3D_1_1CMeshGeomz421_0">NL3D::CMeshGeom::TMBRSupport</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>
+<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_1CMeshGeomz421_0NL3D_1_1CMeshGeomy3" doxytag="MBROk" ></a>MBROk</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4" doxytag="MBRSortPerMaterial" ></a>MBRSortPerMaterial</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2" doxytag="MBRCurrentUseVP" ></a>MBRCurrentUseVP</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00698">698</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+<div class="fragment"><pre>00699 {
+00700 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy3">MBROk</a>= 1,
+00701 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4">MBRSortPerMaterial</a>= 2,
+00702 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>= 4,
+00703 };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IMeshGeomw5" doxytag="NL3D::CMeshGeom::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>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_0" doxytag="NL3D::CMeshGeom::TSkinType" ></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="a02878.html#NL3D_1_1CMeshGeomz423_0">NL3D::CMeshGeom::TSkinType</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<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_1CMeshGeomz423_0NL3D_1_1CMeshGeomy5" doxytag="SkinPosOnly" ></a>SkinPosOnly</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy6" doxytag="SkinWithNormal" ></a>SkinWithNormal</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy7" doxytag="SkinWithTgSpace" ></a>SkinWithTgSpace</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00799">799</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>.
+<p>
+<div class="fragment"><pre>00799 {<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy5">SkinPosOnly</a>=0, <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy6">SkinWithNormal</a>, <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy7">SkinWithTgSpace</a>};
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshGeoma2" doxytag="NL3D::CMeshGeom::CMeshGeom" ></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::CMeshGeom::CMeshGeom </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="a05989.html#l00123">123</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00669">_BoneIdComputed</a>, <a class="el" href="a05990.html#l00671">_BoneIdExtended</a>, <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00666">_OriginalSkinRestored</a>, <a class="el" href="a05990.html#l00709">_PreciseClipping</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, and <a class="el" href="a05990.html#l00688">_VertexBufferHardDirty</a>.
+<p>
+<div class="fragment"><pre>00124 {
+00125 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>= <span class="keyword">false</span>;
+00126 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr10">_OriginalSkinRestored</a>= <span class="keyword">true</span>;
+00127 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+00128 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a> = <span class="keyword">new</span> CMeshMorpher;
+00129 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr1">_BoneIdComputed</a> = <span class="keyword">false</span>;
+00130 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr2">_BoneIdExtended</a>= <span class="keyword">false</span>;
+00131 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr13">_PreciseClipping</a>= <span class="keyword">false</span>;
+00132 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeoma7" doxytag="NL3D::CMeshGeom::~CMeshGeom" ></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::CMeshGeom::~<a class="el" href="a02878.html">CMeshGeom</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><code> [virtual]</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="a05989.html#l00136">136</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00684">_VertexBufferHard</a>, and <a class="el" href="a05622.html#l00290">nlassert</a>.
+<p>
+<div class="fragment"><pre>00137 {
+00138 <span class="comment">// test (refptr) if the object still exist in memory.</span>
+00139 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>!=NULL)
+00140 {
+00141 <span class="comment">// A vbufferhard should still exist only if driver still exist.</span>
+00142 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL);
+00143
+00144 <span class="comment">// delete it from driver.</span>
+00145 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_1">_Driver</a>-&gt;deleteVertexBufferHard(_VertexBufferHard);
+00146 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>= NULL;
+00147 }
+00148 <span class="keyword">delete</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>;
+00149 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02058">2058</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>, <a class="el" href="a06570.html#l00105">NL3D::CTransformShape::changeLightSetup()</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05972.html#l01090">NLMISC::CMatrix::inverted()</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>, <a class="el" href="a06000.html#l00064">NL3D::CMeshGeomRenderContext::RenderTrav</a>, <a class="el" href="a06000.html#l00063">NL3D::CMeshGeomRenderContext::Scene</a>, and <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver::setupModelMatrix()</a>.
+<p>
+<div class="fragment"><pre>02059 {
+02060 <span class="comment">// setup instance matrix</span>
+02061 rdrCtx.Driver-&gt;setupModelMatrix(inst-&gt;getWorldMatrix());
+02062
+02063 <span class="comment">// setupLighting.</span>
+02064 inst-&gt;changeLightSetup(rdrCtx.RenderTrav);
+02065
+02066 <span class="comment">// MeshVertexProgram ?</span>
+02067 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a> &amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a> )
+02068 {
+02069 CMatrix invertedObjectMatrix;
+02070 invertedObjectMatrix = inst-&gt;getWorldMatrix().inverted();
+02071 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;beginMBRInstance(rdrCtx.Driver, rdrCtx.Scene, inst, invertedObjectMatrix);
+02072 }
+02073 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeoma0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l00458">458</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00393">getNbMatrixBlock()</a>, <a class="el" href="a05990.html#l00398">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="a05989.html#l02316">NL3D::CMesh::optimizeMaterialUsage()</a>.
+<p>
+<div class="fragment"><pre>00459 {
+00460 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb=0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz413_2">getNbMatrixBlock</a>();mb++)
+00461 {
+00462 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> rp=0;rp&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz413_3">getNbRdrPass</a>(mb);rp++)
+00463 {
+00464 <span class="comment">// remap</span>
+00465 <a class="code" href="a04558.html#a11">uint32</a> &amp;matId= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb].RdrPass[rp].MaterialId;
+00466 <a class="code" href="a04199.html#a6">nlassert</a>(remap[matId]&gt;=0);
+00467 matId= remap[matId];
+00468 }
+00469 }
+00470 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_1" doxytag="NL3D::CMeshGeom::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::CMeshGeom::applySkin </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><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="a05989.html#l01715">1715</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00652">_OriginalSkinNormals</a>, <a class="el" href="a05990.html#l00666">_OriginalSkinRestored</a>, <a class="el" href="a05990.html#l00651">_OriginalSkinVertices</a>, <a class="el" href="a05990.html#l00653">_OriginalTGSpace</a>, <a class="el" href="a05989.html#l01914">computeSkinMatrixes()</a>, <a class="el" href="a05989.html#l01870">computeSoftwarePointSkinning()</a>, <a class="el" href="a05989.html#l01892">computeSoftwareVectorSkinning()</a>, <a class="el" href="a05989.html#l01836">flagSkinVerticesForMatrixBlock()</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="a06710.html#l00529">NL3D::CVertexBuffer::getPaletteSkinPointer()</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#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a06710.html#l00513">NL3D::CVertexBuffer::getWeightPointer()</a>, <a class="el" href="a06711.html#l00089">NL3D::CPaletteSkin::MatrixId</a>, <a class="el" href="a05989.html#l01708">NL3D_SOFTSKIN_VCOMPUTED</a>, <a class="el" href="a05989.html#l01707">NL3D_SOFTSKIN_VMUSTCOMPUTE</a>, <a class="el" href="a05989.html#l01706">NL3D_SOFTSKIN_VNEEDCOMPUTE</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05646.html#l00645">size</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy5">SkinPosOnly</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy6">SkinWithNormal</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy7">SkinWithTgSpace</a>, <a class="el" href="a05990.html#l00799">TSkinType</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="a05989.html#l00788">renderSkin()</a>.
+<p>
+<div class="fragment"><pre>01716 {
+01717 <span class="comment">// init.</span>
+01718 <span class="comment">//===================</span>
+01719 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</a>.empty())
+01720 <span class="keywordflow">return</span>;
+01721
+01722 <span class="comment">// Use correct skinning</span>
+01723 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0">TSkinType</a> skinType;
+01724 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr9">_OriginalSkinNormals</a>.empty() )
+01725 skinType= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy5">SkinPosOnly</a>;
+01726 <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr12">_OriginalTGSpace</a>.empty() )
+01727 skinType= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy6">SkinWithNormal</a>;
+01728 <span class="keywordflow">else</span>
+01729 skinType= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_0NL3D_1_1CMeshGeomy7">SkinWithTgSpace</a>;
+01730
+01731 <span class="comment">// Get VB src/dst info/ptrs.</span>
+01732 <a class="code" href="a04558.html#a15">uint</a> numVertices= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</a>.size();
+01733 <a class="code" href="a04558.html#a15">uint</a> dstStride= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexSize();
+01734 <span class="comment">// Get dst TgSpace.</span>
+01735 <a class="code" href="a04558.html#a15">uint</a> tgSpaceStage = 0;
+01736 <span class="keywordflow">if</span>( skinType&gt;= SkinWithTgSpace)
+01737 {
+01738 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumTexCoordUsed() &gt; 0);
+01739 tgSpaceStage= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumTexCoordUsed() - 1;
+01740 }
+01741
+01742 <span class="comment">// Mark all vertices flag to not computed.</span>
+01743 <span class="keyword">static</span> vector&lt;uint8&gt; skinFlags;
+01744 skinFlags.resize(numVertices);
+01745 <span class="comment">// reset all flags</span>
+01746 memset(&amp;skinFlags[0], NL3D_SOFTSKIN_VNEEDCOMPUTE, numVertices );
+01747
+01748
+01749 <span class="comment">// For all MatrixBlocks</span>
+01750 <span class="comment">//===================</span>
+01751 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb= 0; mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+01752 {
+01753 <span class="comment">// compute matrixes for this block.</span>
+01754 <span class="keyword">static</span> CMatrix3x4 matrixes[IDriver::MaxModelMatrix];
+01755 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_5">computeSkinMatrixes</a>(skeleton, matrixes, mb==0?NULL:&amp;_MatrixBlocks[mb-1], _MatrixBlocks[mb]);
+01756
+01757 <span class="comment">// check what vertex to skin for this PB.</span>
+01758 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_8">flagSkinVerticesForMatrixBlock</a>(&amp;skinFlags[0], _MatrixBlocks[mb]);
+01759
+01760 <span class="comment">// Get VB src/dst ptrs.</span>
+01761 <a class="code" href="a04558.html#a7">uint8</a> *pFlag= &amp;skinFlags[0];
+01762 CVector *srcVector= &amp;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</a>[0];
+01763 <a class="code" href="a04558.html#a7">uint8</a> *srcPal= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getPaletteSkinPointer(0);
+01764 <a class="code" href="a04558.html#a7">uint8</a> *srcWgt= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getWeightPointer(0);
+01765 <a class="code" href="a04558.html#a7">uint8</a> *dstVector= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexCoordPointer(0);
+01766 <span class="comment">// Normal.</span>
+01767 CVector *srcNormal= NULL;
+01768 <a class="code" href="a04558.html#a7">uint8</a> *dstNormal= NULL;
+01769 <span class="keywordflow">if</span>(skinType&gt;=SkinWithNormal)
+01770 {
+01771 srcNormal= &amp;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr9">_OriginalSkinNormals</a>[0];
+01772 dstNormal= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNormalCoordPointer(0);
+01773 }
+01774 <span class="comment">// TgSpace.</span>
+01775 CVector *srcTgSpace= NULL;
+01776 <a class="code" href="a04558.html#a7">uint8</a> *dstTgSpace= NULL;
+01777 <span class="keywordflow">if</span>(skinType&gt;=SkinWithTgSpace)
+01778 {
+01779 srcTgSpace= &amp;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr12">_OriginalTGSpace</a>[0];
+01780 dstTgSpace= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getTexCoordPointer(0, tgSpaceStage);
+01781 }
+01782
+01783
+01784 <span class="comment">// For all vertices that need to be computed.</span>
+01785 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a587">size</a>= numVertices;
+01786 <span class="keywordflow">for</span>(;<a class="code" href="a04223.html#a587">size</a>&gt;0;<a class="code" href="a04223.html#a587">size</a>--)
+01787 {
+01788 <span class="comment">// If we must compute this vertex.</span>
+01789 <span class="keywordflow">if</span>(*pFlag==<a class="code" href="a04566.html#a1">NL3D_SOFTSKIN_VMUSTCOMPUTE</a>)
+01790 {
+01791 <span class="comment">// Flag this vertex as computed.</span>
+01792 *pFlag=<a class="code" href="a04566.html#a2">NL3D_SOFTSKIN_VCOMPUTED</a>;
+01793
+01794 CPaletteSkin *psPal= (CPaletteSkin*)srcPal;
+01795
+01796 <span class="comment">// checks indices.</span>
+01797 <a class="code" href="a04199.html#a6">nlassert</a>(psPal-&gt;MatrixId[0]&lt;IDriver::MaxModelMatrix);
+01798 <a class="code" href="a04199.html#a6">nlassert</a>(psPal-&gt;MatrixId[1]&lt;IDriver::MaxModelMatrix);
+01799 <a class="code" href="a04199.html#a6">nlassert</a>(psPal-&gt;MatrixId[2]&lt;IDriver::MaxModelMatrix);
+01800 <a class="code" href="a04199.html#a6">nlassert</a>(psPal-&gt;MatrixId[3]&lt;IDriver::MaxModelMatrix);
+01801
+01802 <span class="comment">// compute vertex part.</span>
+01803 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_6">computeSoftwarePointSkinning</a>(matrixes, srcVector, psPal, (<span class="keywordtype">float</span>*)srcWgt, (CVector*)dstVector);
+01804
+01805 <span class="comment">// compute normal part.</span>
+01806 <span class="keywordflow">if</span>(skinType&gt;=SkinWithNormal)
+01807 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_7">computeSoftwareVectorSkinning</a>(matrixes, srcNormal, psPal, (<span class="keywordtype">float</span>*)srcWgt, (CVector*)dstNormal);
+01808
+01809 <span class="comment">// compute tg part.</span>
+01810 <span class="keywordflow">if</span>(skinType&gt;=SkinWithTgSpace)
+01811 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_7">computeSoftwareVectorSkinning</a>(matrixes, srcTgSpace, psPal, (<span class="keywordtype">float</span>*)srcWgt, (CVector*)dstTgSpace);
+01812 }
+01813
+01814 <span class="comment">// inc flags.</span>
+01815 pFlag++;
+01816 <span class="comment">// inc src (all whatever skin type used...)</span>
+01817 srcVector++;
+01818 srcNormal++;
+01819 srcTgSpace++;
+01820 <span class="comment">// inc paletteSkin and dst (all whatever skin type used...)</span>
+01821 srcPal+= dstStride;
+01822 srcWgt+= dstStride;
+01823 dstVector+= dstStride;
+01824 dstNormal+= dstStride;
+01825 dstTgSpace+= dstStride;
+01826 }
+01827 }
+01828
+01829
+01830 <span class="comment">// dirt</span>
+01831 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr10">_OriginalSkinRestored</a>= <span class="keyword">false</span>;
+01832 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_1" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02021">2021</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>, <a class="el" href="a05990.html#l00684">_VertexBufferHard</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="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, <a class="el" href="a06000.html#l00063">NL3D::CMeshGeomRenderContext::Scene</a>, and <a class="el" href="a05989.html#l00523">updateVertexBufferHard()</a>.
+<p>
+<div class="fragment"><pre>02022 {
+02023 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap)
+02024 {
+02025 <span class="comment">// Don't setup VB in this case, since use the VBHeap setuped one.</span>
+02026 <span class="comment">// NB: no VertexProgram test since VBHeap not possible with it...</span>
+02027 <a class="code" href="a04199.html#a6">nlassert</a>( (_SupportMBRFlags &amp; MBRCurrentUseVP)==0 );
+02028 }
+02029 <span class="keywordflow">else</span>
+02030 {
+02031 <span class="comment">// update the VBufferHard (create/delete), to maybe render in AGP memory.</span>
+02032 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_0">updateVertexBufferHard</a> ( rdrCtx.Driver );
+02033
+02034 <span class="comment">// use MeshVertexProgram effect?</span>
+02035 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> != NULL &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;isMBRVpOk(rdrCtx.Driver) )
+02036 {
+02037 <span class="comment">// Ok will use it.</span>
+02038 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a>|= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>;
+02039 <span class="comment">// Before VB activation</span>
+02040 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;beginMBRMesh(rdrCtx.Driver, rdrCtx.Scene );
+02041 }
+02042
+02043
+02044 <span class="comment">// if VB Hard is here, use it.</span>
+02045 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a> != NULL)
+02046 {
+02047 <span class="comment">// active VB Hard.</span>
+02048 rdrCtx.Driver-&gt;activeVertexBufferHard(_VertexBufferHard);
+02049 }
+02050 <span class="keywordflow">else</span>
+02051 {
+02052 <span class="comment">// active VB. SoftwareSkinning: reset flags for skinning.</span>
+02053 rdrCtx.Driver-&gt;activeVertexBuffer(_VBuffer);
+02054 }
+02055 }
+02056 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_2" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>
+
+<p>
+Definition at line <a class="el" href="a05989.html#l01615">1615</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00652">_OriginalSkinNormals</a>, <a class="el" href="a05990.html#l00651">_OriginalSkinVertices</a>, <a class="el" href="a05990.html#l00653">_OriginalTGSpace</a>, <a class="el" href="a05990.html#l00664">_Skinned</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="a05989.html#l01062">compileRunTime()</a>.
+<p>
+<div class="fragment"><pre>01616 {
+01617 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+01618
+01619 <span class="comment">// reset</span>
+01620 <a class="code" href="a05378.html#a381">contReset</a>(_OriginalSkinVertices);
+01621 <a class="code" href="a05378.html#a381">contReset</a>(_OriginalSkinNormals);
+01622 <a class="code" href="a05378.html#a381">contReset</a>(_OriginalTGSpace);
+01623
+01624 <span class="comment">// get num of vertices</span>
+01625 <a class="code" href="a04558.html#a15">uint</a> numVertices= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices();
+01626
+01627 <span class="comment">// Copy VBuffer content into Original vertices normals.</span>
+01628 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat() &amp; CVertexBuffer::PositionFlag)
+01629 {
+01630 <span class="comment">// copy vertices from VBuffer. (NB: unusefull geomorphed vertices are still copied, but doesn't matter).</span>
+01631 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</a>.resize(numVertices);
+01632 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;numVertices;i++)
+01633 {
+01634 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</a>[i]= *(CVector*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexCoordPointer(i);
+01635 }
+01636 }
+01637 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat() &amp; CVertexBuffer::NormalFlag)
+01638 {
+01639 <span class="comment">// copy normals from VBuffer. (NB: unusefull geomorphed normals are still copied, but doesn't matter).</span>
+01640 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr9">_OriginalSkinNormals</a>.resize(numVertices);
+01641 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;numVertices;i++)
+01642 {
+01643 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr9">_OriginalSkinNormals</a>[i]= *(CVector*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNormalCoordPointer(i);
+01644 }
+01645 }
+01646
+01647 <span class="comment">// is there tangent space added ?</span>
+01648 <span class="keywordflow">if</span> (<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;needTangentSpace())
+01649 {
+01650 <span class="comment">// yes, backup it</span>
+01651 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumTexCoordUsed() &gt; 0);
+01652 <a class="code" href="a04558.html#a15">uint</a> tgSpaceStage = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumTexCoordUsed() - 1;
+01653 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr12">_OriginalTGSpace</a>.resize(numVertices);
+01654 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;numVertices;i++)
+01655 {
+01656 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr12">_OriginalTGSpace</a>[i]= *(CVector*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getTexCoordPointer(i, tgSpaceStage);
+01657 }
+01658 }
+01659 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeoma1" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numMaxMaterial</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>
+Build a meshGeom.
+<p>
+0. First, make bbox.<p>
+1. If skinning, group by matrix Block the vertices.<p>
+2. Then, for all faces, resolve continuities, building VBuffer.<p>
+3. build the RdrPass material.<p>
+4. Then, for all faces, build the RdrPass PBlock.<p>
+5. Remove empty RdrPasses.<p>
+6. Misc.<p>
+7. Compact bones id and build bones name array.
+<p>
+If all texture coordinates are of dimension 2, we can setup the flags as before. If this isn't the case, we must setup a custom format<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000017">Todo:</a></b></dt><dd>yoyo: TODO_OPTIMIZE: it should be interesting to sort the materials, depending on their attributes. But must change next loop too...</dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05989.html#l00172">172</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00669">_BoneIdComputed</a>, <a class="el" href="a05990.html#l00671">_BoneIdExtended</a>, <a class="el" href="a05990.html#l00674">_BonesName</a>, <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, <a class="el" href="a05990.html#l00688">_VertexBufferHardDirty</a>, <a class="el" href="a06710.html#l00338">NL3D::CVertexBuffer::addValueEx()</a>, <a class="el" href="a05990.html#l00196">NL3D::CMesh::CMeshBuild::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="a05989.html#l01105">buildSkin()</a>, <a class="el" href="a06710.html#l00271">NL3D::CVertexBuffer::clearValueEx()</a>, <a class="el" href="a05989.html#l01062">compileRunTime()</a>, <a class="el" href="a05990.html#l00613">NL3D::CMeshGeom::CFaceTmp::Corner</a>, <a class="el" href="a05990.html#l00193">NL3D::CMesh::CMeshBuild::Faces</a>, <a class="el" href="a05990.html#l00733">findVBId()</a>, <a class="el" href="a06710.html#l00369">NL3D::CVertexBuffer::initEx()</a>, <a class="el" href="a05989.html#l00058">NL3D::makeBBox()</a>, <a class="el" href="a05990.html#l00614">NL3D::CMeshGeom::CFaceTmp::MaterialId</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a05990.html#l00616">NL3D::CMeshGeom::CFaceTmp::MatrixBlockId</a>, <a class="el" href="a05990.html#l00512">NL3D::CMeshGeom::CMatrixBlock::MatrixId</a>, <a class="el" href="a05990.html#l00202">NL3D::CMesh::CMeshBuild::MeshVertexProgram</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05990.html#l00180">NL3D::CMesh::CMeshBuild::NumCoords</a>, <a class="el" href="a05990.html#l00514">NL3D::CMeshGeom::CMatrixBlock::NumMatrix</a>, <a class="el" href="a05989.html#l00153">optimizeTriangleOrder()</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="a06711.html#l00505">NL3D::CVertexBuffer::setUVRouting()</a>, <a class="el" href="a06710.html#l00169">NL3D::CVertexBuffer::setVertexFormat()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05990.html#l00187">NL3D::CMesh::CMeshBuild::SkinWeights</a>, <a class="el" href="a05990.html#l00729">TCornerSet</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05990.html#l00181">NL3D::CMesh::CMeshBuild::UVRouting</a>, <a class="el" href="a05990.html#l00550">NL3D::CMeshGeom::CCornerTmp::VBId</a>, <a class="el" href="a05990.html#l00087">NL3D::CMesh::CCorner::Vertex</a>, <a class="el" href="a05990.html#l00179">NL3D::CMesh::CMeshBuild::VertexFlags</a>, <a class="el" href="a05990.html#l00184">NL3D::CMesh::CMeshBuild::Vertices</a>, and <a class="el" href="a05990.html#l00199">NL3D::CMesh::CMeshBuild::VertLink</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02305">NL3D::CMesh::build()</a>.
+<p>
+<div class="fragment"><pre>00173 {
+00174 <a class="code" href="a04558.html#a14">sint</a> i;
+00175
+00176 <span class="comment">// Dirt the VBuffer.</span>
+00177 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a>= <span class="keyword">true</span>;
+00178
+00179 <span class="comment">// Empty geometry?</span>
+00180 <span class="keywordflow">if</span>(m.Vertices.size()==0 || m.Faces.size()==0)
+00181 {
+00182 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setNumVertices(0);
+00183 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.reserve(0);
+00184 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.clear();
+00185 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1910_1">setCenter</a>(CVector::Null);
+00186 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1910_4">setSize</a>(CVector::Null);
+00187 <span class="keywordflow">return</span>;
+00188 }
+00189 <a class="code" href="a04199.html#a6">nlassert</a>(numMaxMaterial&gt;0);
+00190
+00191 <span class="comment">// Copy the UV routing table</span>
+00192 <span class="keywordflow">for</span> (i=0; i&lt;CVertexBuffer::MaxStage; i++)
+00193 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setUVRouting (i, m.UVRouting[i]);
+00194
+00196 <span class="comment">//======================</span>
+00197 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>= <a class="code" href="a05363.html#a431">makeBBox</a>(m.Vertices);
+00198
+00199
+00201 <span class="comment">//================================================</span>
+00202
+00203 <span class="comment">// First, copy Face array.</span>
+00204 vector&lt;CFaceTmp&gt; tmpFaces;
+00205 tmpFaces.resize(m.Faces.size());
+00206 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)tmpFaces.size();i++)
+00207 tmpFaces[i]= m.Faces[i];
+00208
+00209 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>= ((m.VertexFlags &amp; CVertexBuffer::PaletteSkinFlag)==CVertexBuffer::PaletteSkinFlag);
+00210 <span class="comment">// Skinning is OK only if SkinWeights are of same size as vertices.</span>
+00211 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a> &amp;&amp; (m.Vertices.size()==m.SkinWeights.size());
+00212
+00213 <span class="comment">// If skinning is KO, remove the Skin option.</span>
+00214 <a class="code" href="a04558.html#a15">uint</a> vbFlags= m.VertexFlags;
+00215 <span class="keywordflow">if</span>(!<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+00216 vbFlags&amp;= ~CVertexBuffer::PaletteSkinFlag;
+00217 <span class="comment">// Force presence of vertex.</span>
+00218 vbFlags|= CVertexBuffer::PositionFlag;
+00219
+00220
+00221 <span class="comment">// If the mesh is not skinned, we have just 1 _MatrixBlocks.</span>
+00222 <span class="keywordflow">if</span>(!<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+00223 {
+00224 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.resize(1);
+00225 <span class="comment">// For each faces, assign it to the matrix block 0.</span>
+00226 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)tmpFaces.size();i++)
+00227 tmpFaces[i].MatrixBlockId= 0;
+00228 }
+00229 <span class="comment">// Else We must group/compute the matrixs blocks.</span>
+00230 <span class="keywordflow">else</span>
+00231 {
+00232 <span class="comment">// reset matrix blocks.</span>
+00233 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.clear();
+00234 <span class="comment">// build matrix blocks, and link faces to good matrix blocks.</span>
+00235 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_4">buildSkin</a>(m, tmpFaces);
+00236 }
+00237
+00238
+00240 <span class="comment">//================================================</span>
+00241 <span class="comment">// Setup VB.</span>
+00242 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setNumVertices(0);
+00243 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.reserve(0);
+00244
+00245 <span class="keywordtype">bool</span> useFormatExt = <span class="keyword">false</span>;
+00249 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; CVertexBuffer::MaxStage; ++k)
+00250 {
+00251 <span class="keywordflow">if</span> (
+00252 (vbFlags &amp; (CVertexBuffer::TexCoord0Flag &lt;&lt; k))
+00253 &amp;&amp; m.NumCoords[k] != 2)
+00254 {
+00255 useFormatExt = <span class="keyword">true</span>;
+00256 <span class="keywordflow">break</span>;
+00257 }
+00258 }
+00259
+00260 <span class="keywordflow">if</span> (!useFormatExt)
+00261 {
+00262 <span class="comment">// setup standard format</span>
+00263 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setVertexFormat(vbFlags);
+00264 }
+00265 <span class="keywordflow">else</span> <span class="comment">// setup extended format</span>
+00266 {
+00267 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.clearValueEx();
+00268 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::PositionFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::Position, CVertexBuffer::Float3);
+00269 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::NormalFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::Normal, CVertexBuffer::Float3);
+00270 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::PrimaryColorFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::PrimaryColor, CVertexBuffer::UChar4);
+00271 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::SecondaryColorFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::SecondaryColor, CVertexBuffer::UChar4);
+00272 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::WeightFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::Weight, CVertexBuffer::Float4);
+00273 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::PaletteSkinFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::PaletteSkin, CVertexBuffer::UChar4);
+00274 <span class="keywordflow">if</span> (vbFlags &amp; CVertexBuffer::FogFlag) <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx(CVertexBuffer::Fog, CVertexBuffer::Float1);
+00275
+00276 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; CVertexBuffer::MaxStage; ++k)
+00277 {
+00278 <span class="keywordflow">if</span> (vbFlags &amp; (CVertexBuffer::TexCoord0Flag &lt;&lt; k))
+00279 {
+00280 <span class="keywordflow">switch</span>(m.NumCoords[k])
+00281 {
+00282 <span class="keywordflow">case</span> 2:
+00283 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx((CVertexBuffer::TValue) (CVertexBuffer::TexCoord0 + k), CVertexBuffer::Float2);
+00284 <span class="keywordflow">break</span>;
+00285 <span class="keywordflow">case</span> 3:
+00286 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.addValueEx((CVertexBuffer::TValue) (CVertexBuffer::TexCoord0 + k), CVertexBuffer::Float3);
+00287 <span class="keywordflow">break</span>;
+00288 <span class="keywordflow">default</span>:
+00289 <a class="code" href="a04199.html#a6">nlassert</a>(0);
+00290 <span class="keywordflow">break</span>;
+00291 }
+00292 }
+00293 }
+00294 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.initEx();
+00295 }
+00296
+00297 <span class="comment">// Set local flags for corner comparison.</span>
+00298 CCornerTmp::Flags= vbFlags;
+00299 <span class="comment">// Setup locals.</span>
+00300 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomy9">TCornerSet</a> corners;
+00301 <span class="keyword">const</span> CFaceTmp *pFace= &amp;(*tmpFaces.begin());
+00302 <a class="code" href="a04558.html#a11">uint32</a> nFaceMB = 0;
+00303 <a class="code" href="a04558.html#a14">sint</a> N= tmpFaces.size();
+00304 <a class="code" href="a04558.html#a14">sint</a> currentVBIndex=0;
+00305
+00306 m.VertLink.clear ();
+00307
+00308 <span class="comment">// process each face, building up the VB.</span>
+00309 <span class="keywordflow">for</span>(;N&gt;0;N--, pFace++)
+00310 {
+00311 <a class="code" href="a04558.html#a14">sint</a> v0= pFace-&gt;Corner[0].Vertex;
+00312 <a class="code" href="a04558.html#a14">sint</a> v1= pFace-&gt;Corner[1].Vertex;
+00313 <a class="code" href="a04558.html#a14">sint</a> v2= pFace-&gt;Corner[2].Vertex;
+00314 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd1">findVBId</a>(corners, &amp;pFace-&gt;Corner[0], currentVBIndex, m.Vertices[v0], m);
+00315 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd1">findVBId</a>(corners, &amp;pFace-&gt;Corner[1], currentVBIndex, m.Vertices[v1], m);
+00316 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd1">findVBId</a>(corners, &amp;pFace-&gt;Corner[2], currentVBIndex, m.Vertices[v2], m);
+00317 CMesh::CVertLink vl1(nFaceMB, 0, pFace-&gt;Corner[0].VBId);
+00318 CMesh::CVertLink vl2(nFaceMB, 1, pFace-&gt;Corner[1].VBId);
+00319 CMesh::CVertLink vl3(nFaceMB, 2, pFace-&gt;Corner[2].VBId);
+00320 m.VertLink.push_back(vl1);
+00321 m.VertLink.push_back(vl2);
+00322 m.VertLink.push_back(vl3);
+00323 ++nFaceMB;
+00324 }
+00325
+00326
+00328 <span class="comment">//================================</span>
+00329 <a class="code" href="a04558.html#a15">uint</a> mb;
+00330
+00331 <span class="comment">// For each _MatrixBlocks, point on those materials.</span>
+00332 <span class="keywordflow">for</span>(mb= 0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+00333 {
+00334 <span class="comment">// Build RdrPass ids.</span>
+00335 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb].RdrPass.resize (numMaxMaterial);
+00336
+00338 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb].RdrPass.size(); i++)
+00339 {
+00340 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb].RdrPass[i].MaterialId= i;
+00341 }
+00342 }
+00343
+00344
+00346 <span class="comment">//===================================================</span>
+00347 pFace= &amp;(*tmpFaces.begin());
+00348 N= tmpFaces.size();
+00349 <span class="keywordflow">for</span>(;N&gt;0;N--, pFace++)
+00350 {
+00351 <a class="code" href="a04558.html#a14">sint</a> mbId= pFace-&gt;MatrixBlockId;
+00352 <a class="code" href="a04199.html#a6">nlassert</a>(mbId&gt;=0 &amp;&amp; mbId&lt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size());
+00353 <span class="comment">// Insert the face in good MatrixBlock/RdrPass.</span>
+00354 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mbId].RdrPass[pFace-&gt;MaterialId].PBlock.addTri(pFace-&gt;Corner[0].VBId, pFace-&gt;Corner[1].VBId, pFace-&gt;Corner[2].VBId);
+00355 }
+00356
+00357
+00359 <span class="comment">//============================</span>
+00360 <span class="keywordflow">for</span>(mb= 0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+00361 {
+00362 <span class="comment">// NB: slow process (erase from a vector). Doens't matter since made at build.</span>
+00363 vector&lt;CRdrPass&gt;::iterator itPass;
+00364 <span class="keywordflow">for</span>( itPass=<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb].RdrPass.begin(); itPass!=_MatrixBlocks[mb].RdrPass.end(); )
+00365 {
+00366 <span class="comment">// If this pass is empty, remove it.</span>
+00367 <span class="keywordflow">if</span>( itPass-&gt;PBlock.getNumTri()==0 )
+00368 itPass= _MatrixBlocks[mb].RdrPass.erase(itPass);
+00369 <span class="keywordflow">else</span>
+00370 itPass++;
+00371 }
+00372 }
+00373
+00375 <span class="comment">//============================</span>
+00376 <span class="comment">// BShapes</span>
+00377 this-&gt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes = m.BlendShapes;
+00378
+00379 <span class="comment">// sort triangles for better cache use.</span>
+00380 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd2">optimizeTriangleOrder</a>();
+00381
+00382 <span class="comment">// SmartPtr Copy VertexProgram effect.</span>
+00383 this-&gt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>= m.MeshVertexProgram;
+00384
+00386 <span class="comment">//================================================= </span>
+00387
+00388 <span class="comment">// If skinned</span>
+00389 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+00390 {
+00391 <span class="comment">// Reserve some space</span>
+00392 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr5">_BonesName</a>.reserve (m.BonesNames.size ());
+00393
+00394 <span class="comment">// Current local bone</span>
+00395 <a class="code" href="a04558.html#a15">uint</a> currentBone = 0;
+00396
+00397 <span class="comment">// For each matrix block</span>
+00398 <a class="code" href="a04558.html#a15">uint</a> matrixBlock;
+00399 <span class="keywordflow">for</span> (matrixBlock=0; matrixBlock&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size(); matrixBlock++)
+00400 {
+00401 <span class="comment">// Ref on the matrix block</span>
+00402 CMatrixBlock &amp;mb = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlock];
+00403
+00404 <span class="comment">// Remap the skeleton index in model index</span>
+00405 std::map&lt;uint, uint&gt; remap;
+00406
+00407 <span class="comment">// For each matrix</span>
+00408 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>;
+00409 <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;mb.NumMatrix; <a class="code" href="a04223.html#a578">matrix</a>++)
+00410 {
+00411 <span class="comment">// Get bone id in the skeleton</span>
+00412 std::map&lt;uint, uint&gt;::iterator ite = remap.find (mb.MatrixId[matrix]);
+00413
+00414 <span class="comment">// Not found</span>
+00415 <span class="keywordflow">if</span> (ite == remap.end())
+00416 {
+00417 <span class="comment">// Insert it</span>
+00418 remap.insert (std::map&lt;uint, uint&gt;::value_type (mb.MatrixId[matrix], currentBone));
+00419
+00420 <span class="comment">// Check the matrix id</span>
+00421 <a class="code" href="a04199.html#a6">nlassert</a> (mb.MatrixId[matrix] &lt; m.BonesNames.size());
+00422
+00423 <span class="comment">// Set the bone name</span>
+00424 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr5">_BonesName</a>.push_back (m.BonesNames[mb.MatrixId[matrix]]);
+00425
+00426 <span class="comment">// Set the id in local</span>
+00427 mb.MatrixId[<a class="code" href="a04223.html#a578">matrix</a>] = currentBone++;
+00428 }
+00429 <span class="keywordflow">else</span>
+00430 {
+00431 <span class="comment">// Set the id in local</span>
+00432 mb.MatrixId[<a class="code" href="a04223.html#a578">matrix</a>] = ite-&gt;second;
+00433 }
+00434 }
+00435 }
+00436
+00437 <span class="comment">// Bone id in local</span>
+00438 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr1">_BoneIdComputed</a> = <span class="keyword">false</span>;
+00439 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr2">_BoneIdExtended</a> = <span class="keyword">false</span>;
+00440 }
+00441
+00442
+00443 <span class="comment">// End!!</span>
+00444 <span class="comment">// Some runtime not serialized compilation</span>
+00445 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd0">compileRunTime</a>();
+00446 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_3" doxytag="NL3D::CMeshGeom::buildBoneUsageVer3" ></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::CMeshGeom::buildBoneUsageVer3 </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="a05989.html#l01549">1549</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00676">_BonesId</a>, <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a05990.html#l00512">NL3D::CMeshGeom::CMatrixBlock::MatrixId</a>, <a class="el" href="a05990.html#l00514">NL3D::CMeshGeom::CMatrixBlock::NumMatrix</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>01550 {
+01551 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+01552 {
+01553 <span class="comment">// parse all matrixBlocks, couting MaxBoneId used.</span>
+01554 <a class="code" href="a04558.html#a11">uint32</a> maxBoneId= 0;
+01555 <span class="comment">// For each matrix block</span>
+01556 <a class="code" href="a04558.html#a15">uint</a> matrixBlock;
+01557 <span class="keywordflow">for</span> (matrixBlock=0; matrixBlock&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size(); matrixBlock++)
+01558 {
+01559 CMatrixBlock &amp;mb = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlock];
+01560 <span class="comment">// For each matrix</span>
+01561 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>=0; <a class="code" href="a04223.html#a578">matrix</a>&lt;mb.NumMatrix; <a class="code" href="a04223.html#a578">matrix</a>++)
+01562 {
+01563 maxBoneId= max(mb.MatrixId[matrix], maxBoneId);
+01564 }
+01565 }
+01566
+01567 <span class="comment">// alloc an array of maxBoneId+1, reset to 0.</span>
+01568 std::vector&lt;uint8&gt; boneUsage;
+01569 boneUsage.resize(maxBoneId+1, 0);
+01570
+01571 <span class="comment">// reparse all matrixBlocks, counting usage for each bone.</span>
+01572 <span class="keywordflow">for</span> (matrixBlock=0; matrixBlock&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size(); matrixBlock++)
+01573 {
+01574 CMatrixBlock &amp;mb = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlock];
+01575 <span class="comment">// For each matrix</span>
+01576 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>=0; <a class="code" href="a04223.html#a578">matrix</a>&lt;mb.NumMatrix; <a class="code" href="a04223.html#a578">matrix</a>++)
+01577 {
+01578 <span class="comment">// mark this bone as used.</span>
+01579 boneUsage[mb.MatrixId[<a class="code" href="a04223.html#a578">matrix</a>]]= 1;
+01580 }
+01581 }
+01582
+01583 <span class="comment">// For each bone used</span>
+01584 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>.clear();
+01585 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;boneUsage.size();i++)
+01586 {
+01587 <span class="comment">// if the bone is used by the mesh, add it to BoneId.</span>
+01588 <span class="keywordflow">if</span>(boneUsage[i])
+01589 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>.push_back(i);
+01590 }
+01591 }
+01592 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_4" doxytag="NL3D::CMeshGeom::buildSkin" ></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::CMeshGeom::buildSkin </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="a02883.html">CFaceTmp</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tmpFaces</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="a05989.html#l01105">1105</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00613">NL3D::CMeshGeom::CFaceTmp::Corner</a>, <a class="el" href="a05989.html#l01415">NL3D::CMeshGeom::CMatrixBlock::getMatrixIdLocation()</a>, <a class="el" href="a05990.html#l00591">NL3D::CMeshGeom::CBoneTmp::Inserted</a>, <a class="el" href="a05990.html#l00606">ItBoneMap</a>, <a class="el" href="a05990.html#l00616">NL3D::CMeshGeom::CFaceTmp::MatrixBlockId</a>, <a class="el" href="a06711.html#l00089">NL3D::CPaletteSkin::MatrixId</a>, <a class="el" href="a05990.html#l00512">NL3D::CMeshGeom::CMatrixBlock::MatrixId</a>, <a class="el" href="a05990.html#l00116">NL3D::CMesh::CSkinWeight::MatrixId</a>, <a class="el" href="a05990.html#l00593">NL3D::CMeshGeom::CBoneTmp::MatrixIdInMB</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="a05990.html#l00514">NL3D::CMeshGeom::CMatrixBlock::NumMatrix</a>, <a class="el" href="a05990.html#l00544">NL3D::CMeshGeom::CCornerTmp::Palette</a>, <a class="el" href="a05990.html#l00589">NL3D::CMeshGeom::CBoneTmp::RefCount</a>, <a class="el" href="a05990.html#l00643">NL3D::CMeshGeom::CMatrixBlockRemap::Remap</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05990.html#l00187">NL3D::CMesh::CMeshBuild::SkinWeights</a>, <a class="el" href="a05990.html#l00605">TBoneMap</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05990.html#l00087">NL3D::CMesh::CCorner::Vertex</a>, <a class="el" href="a05990.html#l00545">NL3D::CMeshGeom::CCornerTmp::Weights</a>, and <a class="el" href="a05990.html#l00118">NL3D::CMesh::CSkinWeight::Weights</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>.
+<p>
+<div class="fragment"><pre>01106 {
+01107 <a class="code" href="a04558.html#a14">sint</a> i,j,k;
+01108 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomy8">TBoneMap</a> remainingBones;
+01109 <a class="code" href="a03889.html">list&lt;uint&gt;</a> remainingFaces;
+01110
+01111
+01112 <span class="comment">// 0. normalize SkinWeights: for all weights at 0, copy the matrixId from 0th matrix =&gt; no random/bad use of matrix.</span>
+01113 <span class="comment">//================================</span>
+01114 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)m.SkinWeights.size();i++)
+01115 {
+01116 CMesh::CSkinWeight &amp;sw= m.SkinWeights[i];
+01117
+01118 <span class="comment">// 0th weight must not be 0.</span>
+01119 <a class="code" href="a04199.html#a6">nlassert</a>(sw.Weights[0]!=0);
+01120
+01121 <span class="comment">// Begin at 1, tests all other weights.</span>
+01122 <span class="keywordflow">for</span>(j=1;j&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;j++)
+01123 {
+01124 <span class="comment">// We don't use this entry??</span>
+01125 <span class="keywordflow">if</span>(sw.Weights[j]==0)
+01126 {
+01127 <span class="comment">// Setup MatrixId so that this vertex do no use more matrix than it really wants.</span>
+01128 sw.MatrixId[j]= sw.MatrixId[0];
+01129 }
+01130 }
+01131 }
+01132
+01133
+01134 <span class="comment">// 1. build the list of used/remaining bones, in ascending order. (so we use the depth-first topolgy of hierarchy).</span>
+01135 <span class="comment">//================================</span>
+01136 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)tmpFaces.size();i++)
+01137 {
+01138 CFaceTmp &amp;face= tmpFaces[i];
+01139
+01140 <span class="keywordflow">for</span>(j=0;j&lt;3;j++)
+01141 {
+01142 CMesh::CSkinWeight &amp;sw= m.SkinWeights[face.Corner[j].Vertex];
+01143 <span class="keywordflow">for</span>(k=0;k&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;k++)
+01144 {
+01145 <span class="comment">// insert (if not already here) the used bone in the set.</span>
+01146 <span class="comment">// and insert his refcount. (NB: ctor() init it to 0 :) ).</span>
+01147 remainingBones[sw.MatrixId[k]].RefCount++;
+01148 }
+01149 }
+01150 }
+01151
+01152
+01153 <span class="comment">// 2. Create the list of un-inserted faces.</span>
+01154 <span class="comment">//================================</span>
+01155 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)tmpFaces.size();i++)
+01156 {
+01157 remainingFaces.push_back(i);
+01158 }
+01159
+01160
+01161
+01162 <span class="comment">// 3. Create as many Blocks as necessary.</span>
+01163 <span class="comment">//================================</span>
+01164 <span class="comment">// Which bones a face use (up to 12).</span>
+01165 vector&lt;uint&gt; boneUse;
+01166 boneUse.reserve(NL3D_MESH_SKINNING_MAX_MATRIX*3);
+01167
+01168 <span class="comment">// While still exist faces.</span>
+01169 <span class="keywordflow">while</span>(!remainingFaces.empty())
+01170 {
+01171 <span class="comment">// create a new matrix block.</span>
+01172 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.push_back(CMatrixBlock());
+01173 CMatrixBlock &amp;matrixBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[_MatrixBlocks.size()-1];
+01174 matrixBlock.NumMatrix=0;
+01175
+01176 <span class="comment">// a. reset remainingBones as not inserted in the current matrixBlock.</span>
+01177 <span class="comment">//============================</span>
+01178 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomy0">ItBoneMap</a> itBone;
+01179 <span class="keywordflow">for</span>(itBone= remainingBones.begin();itBone!=remainingBones.end();itBone++)
+01180 {
+01181 itBone-&gt;second.Inserted= <span class="keyword">false</span>;
+01182 }
+01183
+01184
+01185 <span class="comment">// b. while still exist bones, try to insert faces which use them in matrixBlock.</span>
+01186 <span class="comment">//============================</span>
+01187 <span class="keywordflow">while</span>(!remainingBones.empty())
+01188 {
+01189 <span class="comment">// get the first bone from the map. (remind: depth-first order).</span>
+01190 <a class="code" href="a04558.html#a15">uint</a> currentBoneId= remainingBones.begin()-&gt;first;
+01191
+01192 <span class="comment">// If no more faces in the remainingFace list use this bone, remove it, and continue.</span>
+01193 <span class="keywordflow">if</span>(remainingBones.begin()-&gt;second.RefCount==0)
+01194 {
+01195 remainingBones.erase(remainingBones.begin());
+01196 <span class="keywordflow">continue</span>;
+01197 }
+01198
+01199 <span class="comment">// this is a marker, to know if a face insertion will occurs.</span>
+01200 <span class="keywordtype">bool</span> faceAdded= <span class="keyword">false</span>;
+01201
+01202 <span class="comment">// traverse all faces, trying to insert them in current MatrixBlock processed.</span>
+01203 <a class="code" href="a03889.html">list&lt;uint&gt;</a>::iterator itFace;
+01204 <span class="keywordflow">for</span>(itFace= remainingFaces.begin(); itFace!=remainingFaces.end();)
+01205 {
+01206 <span class="keywordtype">bool</span> useCurrentBoneId;
+01207 <a class="code" href="a04558.html#a15">uint</a> newBoneAdded;
+01208
+01209 <span class="comment">// i/ Get info on current face.</span>
+01210 <span class="comment">//-----------------------------</span>
+01211
+01212 <span class="comment">// build which bones this face use.</span>
+01213 tmpFaces[*itFace].buildBoneUse(boneUse, m.SkinWeights);
+01214
+01215 <span class="comment">// test if this face use the currentBoneId.</span>
+01216 useCurrentBoneId= <span class="keyword">false</span>;
+01217 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)boneUse.size();i++)
+01218 {
+01219 <span class="comment">// if this face use the currentBoneId</span>
+01220 <span class="keywordflow">if</span>(boneUse[i]==currentBoneId)
+01221 {
+01222 useCurrentBoneId= <span class="keyword">true</span>;
+01223 <span class="keywordflow">break</span>;
+01224 }
+01225 }
+01226 <span class="comment">// compute how many bones that are not in the current matrixblock this face use.</span>
+01227 newBoneAdded=0;
+01228 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)boneUse.size();i++)
+01229 {
+01230 <span class="comment">// if this bone is not inserted in the current matrix block, inform it.</span>
+01231 <span class="keywordflow">if</span>(!remainingBones[boneUse[i]].Inserted)
+01232 newBoneAdded++;
+01233 }
+01234
+01235
+01236 <span class="comment">// ii/ insert/reject face.</span>
+01237 <span class="comment">//------------------------</span>
+01238
+01239 <span class="comment">// If this face do not add any more bone, we can insert it into the current matrixblock.</span>
+01240 <span class="comment">// If it use the currentBoneId, and do not explode max count, we allow insert it too in the current matrixblock.</span>
+01241 <span class="keywordflow">if</span>( newBoneAdded==0 ||
+01242 (useCurrentBoneId &amp;&amp; newBoneAdded+matrixBlock.NumMatrix &lt; IDriver::MaxModelMatrix) )
+01243 {
+01244 <span class="comment">// Insert this face in the current matrix block</span>
+01245
+01246 CFaceTmp &amp;face= tmpFaces[*itFace];
+01247
+01248 <span class="comment">// for all vertices of this face.</span>
+01249 <span class="keywordflow">for</span>(j=0;j&lt;3;j++)
+01250 {
+01251 CMesh::CSkinWeight &amp;sw= m.SkinWeights[face.Corner[j].Vertex];
+01252
+01253 <span class="comment">// for each corner weight (4)</span>
+01254 <span class="keywordflow">for</span>(k=0;k&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;k++)
+01255 {
+01256 <span class="comment">// get the global boneId this corner weight use.</span>
+01257 <a class="code" href="a04558.html#a15">uint</a> boneId= sw.MatrixId[k];
+01258 <span class="comment">// get the CBoneTmp this corner weight use.</span>
+01259 CBoneTmp &amp;bone= remainingBones[boneId];
+01260
+01261 <span class="comment">// decRef the bone .</span>
+01262 bone.RefCount--;
+01263
+01264 <span class="comment">// Is this bone already inserted in the MatrixBlock ?</span>
+01265 <span class="keywordflow">if</span>( !bone.Inserted )
+01266 {
+01267 <span class="comment">// No, insert it.</span>
+01268 bone.Inserted= <span class="keyword">true</span>;
+01269 <span class="comment">// link it to the MatrixId in the current matrixBlock.</span>
+01270 bone.MatrixIdInMB= matrixBlock.NumMatrix;
+01271
+01272 <span class="comment">// modify the matrixBlock</span>
+01273 matrixBlock.MatrixId[matrixBlock.NumMatrix]= boneId;
+01274 <span class="comment">// increment the number of matrix in the matrixBlock.</span>
+01275 matrixBlock.NumMatrix++;
+01276 }
+01277
+01278 <span class="comment">// Copy Weight info for this Corner.</span>
+01279 <span class="comment">// Set what matrix in the current matrix block this corner use.</span>
+01280 face.Corner[j].Palette.MatrixId[k]= bone.MatrixIdInMB;
+01281 <span class="comment">// Set weight.</span>
+01282 face.Corner[j].Weights[k]= sw.Weights[k];
+01283 }
+01284 }
+01285
+01286 <span class="comment">// to Which matrixblock this face is inserted.</span>
+01287 face.MatrixBlockId= _MatrixBlocks.size()-1;
+01288
+01289 <span class="comment">// remove the face from remain face list.</span>
+01290 itFace= remainingFaces.erase(itFace);
+01291
+01292 <span class="comment">// inform the algorithm that a face has been added.</span>
+01293 faceAdded= <span class="keyword">true</span>;
+01294 }
+01295 <span class="keywordflow">else</span>
+01296 {
+01297 <span class="comment">// do not append this face to the current matrix block, skip to the next</span>
+01298 itFace++;
+01299 }
+01300 }
+01301
+01302 <span class="comment">// If no faces have been added during this pass, we are blocked, and either the MatrixBlock may be full,</span>
+01303 <span class="comment">// or there is no more face. So quit this block and process a new one.</span>
+01304 <span class="keywordflow">if</span>(!faceAdded)
+01305 <span class="keywordflow">break</span>;
+01306 }
+01307
+01308 }
+01309 <span class="comment">// NB: at the end of this loop, remainingBones may not be empty(), but all remainingBones should have RefCount==0.</span>
+01310
+01311
+01312
+01313 <span class="comment">// 4. Re-order matrix use in MatrixBlocks, for minimum matrix change between MatrixBlocks.</span>
+01314 <span class="comment">//================================</span>
+01315 vector&lt;CMatrixBlockRemap&gt; blockRemaps;
+01316 blockRemaps.resize(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size());
+01317
+01318
+01319 <span class="comment">// For all MatrixBlocks &gt; first, try to "mirror" bones from previous.</span>
+01320 <span class="keywordflow">for</span>(i=1;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();i++)
+01321 {
+01322 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[i];
+01323 CMatrixBlock &amp;mPrevBlock= _MatrixBlocks[i-1];
+01324 CMatrixBlockRemap &amp;remap= blockRemaps[i];
+01325
+01326 <span class="comment">// First bkup the bone ids in remap table.</span>
+01327 <span class="keywordflow">for</span>(j=0;j&lt;(<a class="code" href="a04558.html#a14">sint</a>)mBlock.NumMatrix;j++)
+01328 {
+01329 remap.Remap[j]= mBlock.MatrixId[j];
+01330 }
+01331
+01332 <span class="comment">// For all ids of this blocks, try to mirror them.</span>
+01333 <span class="keywordflow">for</span>(j=0;j&lt;(<a class="code" href="a04558.html#a14">sint</a>)mBlock.NumMatrix;j++)
+01334 {
+01335 <span class="comment">// get the location of this bone in the prev bone.</span>
+01336 <a class="code" href="a04558.html#a14">sint</a> idLoc= mPrevBlock.getMatrixIdLocation(mBlock.MatrixId[j]);
+01337 <span class="comment">// If not found, or if bigger than current array, fails (cant be mirrored).</span>
+01338 <span class="comment">// Or if already mirrored.</span>
+01339 <span class="keywordflow">if</span>(idLoc==-1 || idLoc&gt;=(<a class="code" href="a04558.html#a14">sint</a>)mBlock.NumMatrix || idLoc==j)
+01340 {
+01341 <span class="comment">// next id.</span>
+01342 j++;
+01343 }
+01344 <span class="keywordflow">else</span>
+01345 {
+01346 <span class="comment">// puts me on my mirrored location. and swap with the current one at this mirrored location.</span>
+01347 swap(mBlock.MatrixId[j], mBlock.MatrixId[idLoc]);
+01348 <span class="comment">// mBlock.MatrixId[j] is now a candidate for mirror.</span>
+01349 }
+01350 }
+01351
+01352 <span class="comment">// Then build the Remap table, to re-order faces matrixId which use this matrix block.</span>
+01353 <span class="keywordflow">for</span>(j=0;j&lt;(<a class="code" href="a04558.html#a14">sint</a>)mBlock.NumMatrix;j++)
+01354 {
+01355 <span class="comment">// get the boneid which was at this position j before.</span>
+01356 <a class="code" href="a04558.html#a15">uint</a> boneId= remap.Remap[j];
+01357 <span class="comment">// search his new position, and store the result in the remap table.</span>
+01358 remap.Remap[j]= mBlock.getMatrixIdLocation(boneId);
+01359 }
+01360
+01361 <span class="comment">// NB: this matrixBlock is re-ordered. next matrixBlock use this state.</span>
+01362 }
+01363
+01364
+01365 <span class="comment">// For all faces/corners/weights, remap MatrixIds.</span>
+01366 <span class="keywordflow">for</span>(i=0;i&lt;(<a class="code" href="a04558.html#a14">sint</a>)tmpFaces.size();i++)
+01367 {
+01368 CFaceTmp &amp;face= tmpFaces[i];
+01369 <span class="comment">// do it but for matrixblock0.</span>
+01370 <span class="keywordflow">if</span>(face.MatrixBlockId!=0)
+01371 {
+01372 CMatrixBlockRemap &amp;remap= blockRemaps[face.MatrixBlockId];
+01373 <span class="comment">// For all corners.</span>
+01374 <span class="keywordflow">for</span>(j=0;j&lt;3;j++)
+01375 {
+01376 <span class="keywordflow">for</span>(k=0;k&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;k++)
+01377 {
+01378 <a class="code" href="a04558.html#a15">uint</a> oldId= face.Corner[j].Palette.MatrixId[k];
+01379 face.Corner[j].Palette.MatrixId[k]= (<a class="code" href="a04558.html#a7">uint8</a>)remap.Remap[oldId];
+01380 }
+01381 }
+01382 }
+01383 }
+01384
+01385 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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
+<p>
+
+<p>
+Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma0">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a05989.html#l00482">482</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00709">_PreciseClipping</a>, <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="a05989.html#l02379">NL3D::CMesh::clip()</a>.
+<p>
+<div class="fragment"><pre>00483 {
+00484 <span class="comment">// Speed Clip: clip just the sphere.</span>
+00485 <a class="code" href="a02291.html">CBSphere</a> localSphere(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_1">getCenter</a>(), <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_5">getRadius</a>());
+00486 <a class="code" href="a02291.html">CBSphere</a> worldSphere;
+00487
+00488 <span class="comment">// transform the sphere in WorldMatrix (with nearly good scale info).</span>
+00489 localSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSpherez1929_0">applyTransform</a>(worldMatrix, worldSphere);
+00490
+00491 <span class="comment">// if out of only plane, entirely out.</span>
+00492 <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++)
+00493 {
+00494 <span class="comment">// We are sure that pyramid has normalized plane normals.</span>
+00495 <span class="comment">// if SpherMax OUT return false.</span>
+00496 <span class="keywordtype">float</span> d= pyramid[i]*worldSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSphereo0">Center</a>;
+00497 <span class="keywordflow">if</span>(d&gt;worldSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSphereo1">Radius</a>)
+00498 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00499 }
+00500
+00501 <span class="comment">// test if must do a precise clip, according to mesh size.</span>
+00502 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr13">_PreciseClipping</a> )
+00503 {
+00504 CPlane localPlane;
+00505
+00506 <span class="comment">// if out of only plane, entirely out.</span>
+00507 <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++)
+00508 {
+00509 <span class="comment">// Transform the pyramid in Object space.</span>
+00510 localPlane= pyramid[i]*worldMatrix;
+00511 <span class="comment">// localPlane must be normalized, because worldMatrix mya have a scale.</span>
+00512 localPlane.normalize();
+00513 <span class="comment">// if the box is not partially inside the plane, quit</span>
+00514 <span class="keywordflow">if</span>( !<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1914_0">clipBack</a>(localPlane) )
+00515 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00516 }
+00517 }
+00518
+00519 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00520 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomd0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l01062">1062</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00709">_PreciseClipping</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>, <a class="el" href="a05989.html#l01615">bkupOriginalSkinVertices()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a05385.html#l00204">NLMISC::CAABBoxExt::getRadius()</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy3">MBROk</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4">MBRSortPerMaterial</a>, and <a class="el" href="a05990.html#l00066">NL3D_MESH_PRECISE_CLIP_THRESHOLD</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, and <a class="el" href="a05989.html#l00449">setBlendShapes()</a>.
+<p>
+<div class="fragment"><pre>01063 {
+01064 <span class="comment">// if skinned, prepare skinning</span>
+01065 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+01066 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_2">bkupOriginalSkinVertices</a>();
+01067
+01068 <span class="comment">// Do precise clipping for big object??</span>
+01069 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr13">_PreciseClipping</a>= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_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>;
+01070
+01071 <span class="comment">// Support MeshBlockRendering only if not skinned/meshMorphed.</span>
+01072 <span class="keywordtype">bool</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz417_9">supportMeshBlockRendering</a>= !<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a> &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes.size()==0;
+01073
+01074 <span class="comment">// true only if one matrix block, and at least one rdrPass.</span>
+01075 supportMeshBlockRendering= supportMeshBlockRendering &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size()==1 &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[0].RdrPass.size()&gt;0;
+01076 <span class="keywordflow">if</span> (supportMeshBlockRendering &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>)
+01077 {
+01078 supportMeshBlockRendering = supportMeshBlockRendering &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;supportMeshBlockRendering();
+01079 }
+01080
+01081 <span class="comment">// TestYoyo</span>
+01082 <span class="comment">//supportMeshBlockRendering= false;</span>
+01083
+01084 <span class="comment">// support MeshVertexProgram, but no material sorting...</span>
+01085 <span class="keywordtype">bool</span> supportMBRPerMaterial= supportMeshBlockRendering &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>==NULL;
+01086
+01087
+01088 <span class="comment">// setup flags</span>
+01089 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a>= 0;
+01090 <span class="keywordflow">if</span>(supportMeshBlockRendering)
+01091 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a>|= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy3">MBROk</a>;
+01092 <span class="keywordflow">if</span>(supportMBRPerMaterial)
+01093 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a>|= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4">MBRSortPerMaterial</a>;
+01094 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz415_0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l01456">1456</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00669">_BoneIdComputed</a>, <a class="el" href="a05990.html#l00671">_BoneIdExtended</a>, <a class="el" href="a05990.html#l00676">_BonesId</a>, <a class="el" href="a05990.html#l00678">_BonesIdExt</a>, <a class="el" href="a05990.html#l00674">_BonesName</a>, <a class="el" href="a05990.html#l00660">_MatrixBlocks</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#l00512">NL3D::CMeshGeom::CMatrixBlock::MatrixId</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05990.html#l00514">NL3D::CMeshGeom::CMatrixBlock::NumMatrix</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="a05989.html#l02468">NL3D::CMesh::computeBonesId()</a>.
+<p>
+<div class="fragment"><pre>01457 {
+01458 <span class="comment">// Already computed ?</span>
+01459 <span class="keywordflow">if</span> (!<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr1">_BoneIdComputed</a>)
+01460 {
+01461 <span class="comment">// Get a pointer on the skeleton</span>
+01462 <a class="code" href="a04199.html#a6">nlassert</a> (skeleton);
+01463 <span class="keywordflow">if</span> (skeleton)
+01464 {
+01465 <span class="comment">// Resize boneId to the good size.</span>
+01466 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>.resize(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr5">_BonesName</a>.size());
+01467
+01468 <span class="comment">// For each matrix block</span>
+01469 <a class="code" href="a04558.html#a15">uint</a> matrixBlock;
+01470 <span class="keywordflow">for</span> (matrixBlock=0; matrixBlock&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size(); matrixBlock++)
+01471 {
+01472 <span class="comment">// Ref on the matrix block</span>
+01473 CMatrixBlock &amp;mb = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlock];
+01474
+01475 <span class="comment">// For each matrix</span>
+01476 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>;
+01477 <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;mb.NumMatrix; <a class="code" href="a04223.html#a578">matrix</a>++)
+01478 {
+01479 <span class="comment">// Get bone id in the skeleton</span>
+01480 <a class="code" href="a04199.html#a6">nlassert</a> (mb.MatrixId[matrix]&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr5">_BonesName</a>.size());
+01481 <a class="code" href="a04558.html#a10">sint32</a> boneId = skeleton-&gt;getBoneIdByName (_BonesName[mb.MatrixId[matrix]]);
+01482
+01483 <span class="comment">// Setup the _BoneId.</span>
+01484 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>[mb.MatrixId[<a class="code" href="a04223.html#a578">matrix</a>]]= boneId;
+01485
+01486 <span class="comment">// Bones found ?</span>
+01487 <span class="keywordflow">if</span> (boneId != -1)
+01488 {
+01489 <span class="comment">// Set the bone id</span>
+01490 mb.MatrixId[<a class="code" href="a04223.html#a578">matrix</a>] = (<a class="code" href="a04558.html#a11">uint32</a>)boneId;
+01491 }
+01492 <span class="keywordflow">else</span>
+01493 {
+01494 <span class="comment">// Put id 0</span>
+01495 mb.MatrixId[<a class="code" href="a04223.html#a578">matrix</a>] = 0;
+01496
+01497 <span class="comment">// Error</span>
+01498 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"Bone %s not found in the skeleton."</span>, _BonesName[mb.MatrixId[matrix]].c_str());
+01499 }
+01500 }
+01501 }
+01502
+01503 <span class="comment">// Computed</span>
+01504 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr1">_BoneIdComputed</a> = <span class="keyword">true</span>;
+01505 }
+01506 }
+01507
+01508 <span class="comment">// Already extended ?</span>
+01509 <span class="keywordflow">if</span> (!<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr2">_BoneIdExtended</a>)
+01510 {
+01511 <a class="code" href="a04199.html#a6">nlassert</a> (skeleton);
+01512 <span class="keywordflow">if</span> (skeleton)
+01513 {
+01514 <span class="comment">// the total bone Usage of the mesh.</span>
+01515 vector&lt;bool&gt; boneUsage;
+01516 boneUsage.resize(skeleton-&gt;Bones.size(), <span class="keyword">false</span>);
+01517
+01518 <span class="comment">// for all Bones marked as valid.</span>
+01519 <a class="code" href="a04558.html#a15">uint</a> i;
+01520 <span class="keywordflow">for</span>(i=0; i&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>.size(); i++)
+01521 {
+01522 <span class="comment">// if not a valid boneId, skip it.</span>
+01523 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>[i]&lt;0)
+01524 <span class="keywordflow">continue</span>;
+01525
+01526 <span class="comment">// mark him and his father in boneUsage.</span>
+01527 skeleton-&gt;flagBoneAndParents(_BonesId[i], boneUsage);
+01528 }
+01529
+01530 <span class="comment">// fill _BonesIdExt with bones of _BonesId and their parents.</span>
+01531 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr4">_BonesIdExt</a>.clear();
+01532 <span class="keywordflow">for</span>(i=0; i&lt;boneUsage.size();i++)
+01533 {
+01534 <span class="comment">// if the bone is used by the mesh, add it to BoneIdExt.</span>
+01535 <span class="keywordflow">if</span>(boneUsage[i])
+01536 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr4">_BonesIdExt</a>.push_back(i);
+01537 }
+01538
+01539 }
+01540
+01541 <span class="comment">// Extended</span>
+01542 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr2">_BoneIdExtended</a>= <span class="keyword">true</span>;
+01543 }
+01544
+01545 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_2" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02133">2133</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</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="a05622.html#l00290">nlassert</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::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>02134 {
+02135 <span class="comment">// Fill dst with Buffer content.</span>
+02136 memcpy(dst, <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexCoordPointer(), <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices()*<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexSize() );
+02137
+02138 <span class="comment">// NB: only 1 MB is possible ...</span>
+02139 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size()==1);
+02140 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[0];
+02141 <span class="comment">// For all rdrPass.</span>
+02142 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;mBlock.RdrPass.size();i++)
+02143 {
+02144 <span class="comment">// shift the PB</span>
+02145 CPrimitiveBlock &amp;srcPb= mBlock.RdrPass[i].PBlock;
+02146 CPrimitiveBlock &amp;dstPb= mBlock.RdrPass[i].VBHeapPBlock;
+02147 <a class="code" href="a04558.html#a15">uint</a> j;
+02148
+02149 <span class="comment">// Lines.</span>
+02150 dstPb.setNumLine(srcPb.getNumLine());
+02151 <a class="code" href="a04558.html#a11">uint32</a> *srcLinePtr= srcPb.getLinePointer();
+02152 <a class="code" href="a04558.html#a11">uint32</a> *dstLinePtr= dstPb.getLinePointer();
+02153 <span class="keywordflow">for</span>(j=0; j&lt;dstPb.getNumLine()*2;j++)
+02154 {
+02155 dstLinePtr[j]= srcLinePtr[j]+indexStart;
+02156 }
+02157 <span class="comment">// Tris.</span>
+02158 dstPb.setNumTri(srcPb.getNumTri());
+02159 <a class="code" href="a04558.html#a11">uint32</a> *srcTriPtr= srcPb.getTriPointer();
+02160 <a class="code" href="a04558.html#a11">uint32</a> *dstTriPtr= dstPb.getTriPointer();
+02161 <span class="keywordflow">for</span>(j=0; j&lt;dstPb.getNumTri()*3;j++)
+02162 {
+02163 dstTriPtr[j]= srcTriPtr[j]+indexStart;
+02164 }
+02165 <span class="comment">// Quads.</span>
+02166 dstPb.setNumQuad(srcPb.getNumQuad());
+02167 <a class="code" href="a04558.html#a11">uint32</a> *srcQuadPtr= srcPb.getQuadPointer();
+02168 <a class="code" href="a04558.html#a11">uint32</a> *dstQuadPtr= dstPb.getQuadPointer();
+02169 <span class="keywordflow">for</span>(j=0; j&lt;dstPb.getNumQuad()*4;j++)
+02170 {
+02171 dstQuadPtr[j]= srcQuadPtr[j]+indexStart;
+02172 }
+02173 }
+02174 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_5" doxytag="NL3D::CMeshGeom::computeSkinMatrixes" ></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::CMeshGeom::computeSkinMatrixes </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>skeleton</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>matrixes</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02884.html">CMatrixBlock</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>prevBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02884.html">CMatrixBlock</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>curBlock</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="a05989.html#l01914">1914</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a06393.html#l00487">NL3D::CSkeletonModel::getActiveBoneSkinMatrix()</a>, <a class="el" href="a05990.html#l00512">NL3D::CMeshGeom::CMatrixBlock::MatrixId</a>, <a class="el" href="a05990.html#l00514">NL3D::CMeshGeom::CMatrixBlock::NumMatrix</a>, <a class="el" href="a05975.html#l00059">NL3D::CMatrix3x4::set()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>.
+<p>
+<div class="fragment"><pre>01915 {
+01916 <span class="comment">// For all matrix of this mBlock.</span>
+01917 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> idMat=0;idMat&lt;mBlock.NumMatrix;idMat++)
+01918 {
+01919 <a class="code" href="a04558.html#a15">uint</a> curBoneId= mBlock.MatrixId[idMat];
+01920
+01921 <span class="comment">// If same matrix binded as previous block, no need to bind!!</span>
+01922 <span class="keywordflow">if</span>(prevBlock &amp;&amp; idMat&lt;prevBlock-&gt;NumMatrix &amp;&amp; prevBlock-&gt;MatrixId[idMat]== curBoneId)
+01923 <span class="keywordflow">continue</span>;
+01924
+01925 <span class="comment">// Else, we must setup the matrix </span>
+01926 matrixes[idMat].set(skeleton-&gt;getActiveBoneSkinMatrix(curBoneId));
+01927 }
+01928 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_6" doxytag="NL3D::CMeshGeom::computeSoftwarePointSkinning" ></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::CMeshGeom::computeSoftwarePointSkinning </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02852.html">CMatrix3x4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>matrixes</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>srcVector</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03038.html">CPaletteSkin</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>srcPal</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>srcWgt</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>dstVector</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="a05989.html#l01870">1870</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a06711.html#l00089">NL3D::CPaletteSkin::MatrixId</a>, <a class="el" href="a05975.html#l00108">NL3D::CMatrix3x4::mulAddPoint()</a>, and <a class="el" href="a05975.html#l00076">NL3D::CMatrix3x4::mulSetPoint()</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>.
+<p>
+<div class="fragment"><pre>01871 {
+01872 CMatrix3x4 *pMat;
+01873
+01874 <span class="comment">// \todo yoyo: TODO_OPTIMIZE: SSE verion...</span>
+01875
+01876 <span class="comment">// 0th matrix influence.</span>
+01877 pMat= matrixes + srcPal-&gt;MatrixId[0];
+01878 pMat-&gt;mulSetPoint(*srcVec, srcWgt[0], *pDst);
+01879 <span class="comment">// 1th matrix influence.</span>
+01880 pMat= matrixes + srcPal-&gt;MatrixId[1];
+01881 pMat-&gt;mulAddPoint(*srcVec, srcWgt[1], *pDst);
+01882 <span class="comment">// 2th matrix influence.</span>
+01883 pMat= matrixes + srcPal-&gt;MatrixId[2];
+01884 pMat-&gt;mulAddPoint(*srcVec, srcWgt[2], *pDst);
+01885 <span class="comment">// 3th matrix influence.</span>
+01886 pMat= matrixes + srcPal-&gt;MatrixId[3];
+01887 pMat-&gt;mulAddPoint(*srcVec, srcWgt[3], *pDst);
+01888 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_7" doxytag="NL3D::CMeshGeom::computeSoftwareVectorSkinning" ></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::CMeshGeom::computeSoftwareVectorSkinning </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02852.html">CMatrix3x4</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>matrixes</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>srcVector</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03038.html">CPaletteSkin</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>srcPal</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>srcWgt</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>dstVector</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="a05989.html#l01892">1892</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a06711.html#l00089">NL3D::CPaletteSkin::MatrixId</a>, <a class="el" href="a05975.html#l00101">NL3D::CMatrix3x4::mulAddVector()</a>, and <a class="el" href="a05975.html#l00069">NL3D::CMatrix3x4::mulSetVector()</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>.
+<p>
+<div class="fragment"><pre>01893 {
+01894 CMatrix3x4 *pMat;
+01895
+01896 <span class="comment">// \todo yoyo: TODO_OPTIMIZE: SSE verion...</span>
+01897
+01898 <span class="comment">// 0th matrix influence.</span>
+01899 pMat= matrixes + srcPal-&gt;MatrixId[0];
+01900 pMat-&gt;mulSetVector(*srcVec, srcWgt[0], *pDst);
+01901 <span class="comment">// 1th matrix influence.</span>
+01902 pMat= matrixes + srcPal-&gt;MatrixId[1];
+01903 pMat-&gt;mulAddVector(*srcVec, srcWgt[1], *pDst);
+01904 <span class="comment">// 2th matrix influence.</span>
+01905 pMat= matrixes + srcPal-&gt;MatrixId[2];
+01906 pMat-&gt;mulAddVector(*srcVec, srcWgt[2], *pDst);
+01907 <span class="comment">// 3th matrix influence.</span>
+01908 pMat= matrixes + srcPal-&gt;MatrixId[3];
+01909 pMat-&gt;mulAddVector(*srcVec, srcWgt[3], *pDst);
+01910 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_3" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02100">2100</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, and <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>.
+<p>
+<div class="fragment"><pre>02101 {
+02102 <span class="comment">// MeshVertexProgram ?</span>
+02103 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a> &amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a> )
+02104 {
+02105 <span class="comment">// End Mesh</span>
+02106 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;endMBRMesh( rdrCtx.Driver );
+02107
+02108 <span class="comment">// and remove Current Flag.</span>
+02109 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a>&amp;= ~<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>;
+02110 }
+02111 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomd1" doxytag="NL3D::CMeshGeom::findVBId" ></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::CMeshGeom::findVBId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02878.html#NL3D_1_1CMeshGeomy9">TCornerSet</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>corners</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02882.html">CCornerTmp</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>corn</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> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>currentVBIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>vert</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02864.html">CMesh::CMeshBuild</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mb</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>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00733">733</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00730">ItCornerSet</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="a05990.html#l00180">NL3D::CMesh::CMeshBuild::NumCoords</a>, <a class="el" href="a06711.html#l00568">NL3D::CVertexBuffer::setColor()</a>, <a class="el" href="a06711.html#l00554">NL3D::CVertexBuffer::setNormalCoord()</a>, <a class="el" href="a06710.html#l00409">NL3D::CVertexBuffer::setNumVertices()</a>, <a class="el" href="a06711.html#l00653">NL3D::CVertexBuffer::setPaletteSkin()</a>, <a class="el" href="a06711.html#l00584">NL3D::CVertexBuffer::setSpecular()</a>, <a class="el" href="a06711.html#l00600">NL3D::CVertexBuffer::setTexCoord()</a>, <a class="el" href="a06711.html#l00795">NL3D::CVertexBuffer::setValueFloat3Ex()</a>, <a class="el" href="a06711.html#l00524">NL3D::CVertexBuffer::setVertexCoord()</a>, <a class="el" href="a06711.html#l00637">NL3D::CVertexBuffer::setWeight()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05990.html#l00729">TCornerSet</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>.
+<p>
+<div class="fragment"><pre>00734 {
+00735 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomy1">ItCornerSet</a> it= corners.find(const_cast&lt;CCornerTmp *&gt;(corn));
+00736 <span class="keywordflow">if</span>(it!=corners.end())
+00737 corn-&gt;VBId= (*it)-&gt;VBId;
+00738 <span class="keywordflow">else</span>
+00739 {
+00740 <span class="comment">// Add corner to the set to not insert same corner two times.</span>
+00741 corners.insert (const_cast&lt;CCornerTmp *&gt;(corn));
+00742 <a class="code" href="a04558.html#a14">sint</a> i;
+00743 corn-&gt;VBId= currentVBIndex++;
+00744 <span class="comment">// Fill the VBuffer.</span>
+00745 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setNumVertices(currentVBIndex);
+00746 <a class="code" href="a04558.html#a14">sint</a> <span class="keywordtype">id</span>= currentVBIndex-1;
+00747 <span class="comment">// XYZ.</span>
+00748 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setVertexCoord(<span class="keywordtype">id</span>, vert);
+00749 <span class="comment">// Normal</span>
+00750 <span class="keywordflow">if</span>(CCornerTmp::Flags &amp; CVertexBuffer::NormalFlag)
+00751 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setNormalCoord(<span class="keywordtype">id</span>, corn-&gt;Normal);
+00752 <span class="comment">// Uvws.</span>
+00753 <span class="keywordflow">for</span>(i=0;i&lt;CVertexBuffer::MaxStage;i++)
+00754 {
+00755 <span class="keywordflow">if</span>(CCornerTmp::Flags &amp; (CVertexBuffer::TexCoord0Flag&lt;&lt;i))
+00756 {
+00757 <span class="keywordflow">switch</span>(mb.NumCoords[i])
+00758 {
+00759 <span class="keywordflow">case</span> 2:
+00760 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setTexCoord(<span class="keywordtype">id</span>, i, corn-&gt;Uvws[i].U, corn-&gt;Uvws[i].V);
+00761 <span class="keywordflow">break</span>;
+00762 <span class="keywordflow">case</span> 3:
+00763 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setValueFloat3Ex((CVertexBuffer::TValue) (CVertexBuffer::TexCoord0 + i), <span class="keywordtype">id</span>, corn-&gt;Uvws[i].U, corn-&gt;Uvws[i].V, corn-&gt;Uvws[i].W);
+00764 <span class="keywordflow">break</span>;
+00765 <span class="keywordflow">default</span>: <span class="comment">// not supported</span>
+00766 <a class="code" href="a04199.html#a6">nlassert</a>(0);
+00767 <span class="keywordflow">break</span>;
+00768 }
+00769 }
+00770 }
+00771 <span class="comment">// Color.</span>
+00772 <span class="keywordflow">if</span>(CCornerTmp::Flags &amp; CVertexBuffer::PrimaryColorFlag)
+00773 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setColor(<span class="keywordtype">id</span>, corn-&gt;Color);
+00774 <span class="comment">// Specular.</span>
+00775 <span class="keywordflow">if</span>(CCornerTmp::Flags &amp; CVertexBuffer::SecondaryColorFlag)
+00776 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setSpecular(<span class="keywordtype">id</span>, corn-&gt;Specular);
+00777
+00778 <span class="comment">// setup palette skinning.</span>
+00779 <span class="keywordflow">if</span> ((CCornerTmp::Flags &amp; CVertexBuffer::PaletteSkinFlag)==CVertexBuffer::PaletteSkinFlag)
+00780 {
+00781 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setPaletteSkin(<span class="keywordtype">id</span>, corn-&gt;Palette);
+00782 <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;i++)
+00783 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.setWeight(<span class="keywordtype">id</span>, i, corn-&gt;Weights[i]);
+00784 }
+00785 }
+00786 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_8" doxytag="NL3D::CMeshGeom::flagSkinVerticesForMatrixBlock" ></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::CMeshGeom::flagSkinVerticesForMatrixBlock </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>skinFlags</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02884.html">CMatrixBlock</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mb</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="a05989.html#l01836">1836</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <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="a06197.html#l00149">NL3D::CPrimitiveBlock::getQuadPointer()</a>, <a class="el" href="a06197.html#l00091">NL3D::CPrimitiveBlock::getTriPointer()</a>, <a class="el" href="a05989.html#l01707">NL3D_SOFTSKIN_VMUSTCOMPUTE</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::RdrPass</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="a05989.html#l01715">applySkin()</a>.
+<p>
+<div class="fragment"><pre>01837 {
+01838 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;mb.RdrPass.size(); i++)
+01839 {
+01840 CPrimitiveBlock &amp;PB= mb.RdrPass[i].PBlock;
+01841
+01842 <a class="code" href="a04558.html#a11">uint32</a> *pIndex;
+01843 <a class="code" href="a04558.html#a15">uint</a> nIndex;
+01844
+01845 <span class="comment">// This may be better to flags in 2 pass (first traverse primitives, then test vertices).</span>
+01846 <span class="comment">// Better sol for BTB..., because number of tests are divided by 6 (for triangles).</span>
+01847
+01848 <span class="comment">// for all prims, indicate which vertex we must compute.</span>
+01849 <span class="comment">// nothing if not already computed (ie 0), because 0&amp;1==0.</span>
+01850 <span class="comment">// Lines.</span>
+01851 pIndex= (<a class="code" href="a04558.html#a11">uint32</a>*)PB.getLinePointer();
+01852 nIndex= PB.getNumLine()*2;
+01853 <span class="keywordflow">for</span>(;nIndex&gt;0;nIndex--, pIndex++)
+01854 skinFlags[*pIndex]&amp;= <a class="code" href="a04566.html#a1">NL3D_SOFTSKIN_VMUSTCOMPUTE</a>;
+01855 <span class="comment">// Tris.</span>
+01856 pIndex= (<a class="code" href="a04558.html#a11">uint32</a>*)PB.getTriPointer();
+01857 nIndex= PB.getNumTri()*3;
+01858 <span class="keywordflow">for</span>(;nIndex&gt;0;nIndex--, pIndex++)
+01859 skinFlags[*pIndex]&amp;= <a class="code" href="a04566.html#a1">NL3D_SOFTSKIN_VMUSTCOMPUTE</a>;
+01860 <span class="comment">// Quads.</span>
+01861 pIndex= (<a class="code" href="a04558.html#a11">uint32</a>*)PB.getQuadPointer();
+01862 nIndex= PB.getNumQuad()*4;
+01863 <span class="keywordflow">for</span>(;nIndex&gt;0;nIndex--, pIndex++)
+01864 skinFlags[*pIndex]&amp;= <a class="code" href="a04566.html#a1">NL3D_SOFTSKIN_VMUSTCOMPUTE</a>;
+01865 }
+01866 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz413_0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05990.html#l00384">384</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02427">NL3D::CMesh::getBoundingBox()</a>.
+<p>
+<div class="fragment"><pre>00385 {
+00386 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr0">_BBox</a>;
+00387 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1ITrackKeyFramer_3_01CKeyVector_01_4a6" doxytag="NL3D::CMeshGeom::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_1CMeshGeomz413_1" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05990.html#l00419">419</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <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>00419 { <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>) <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes.size(); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz413_2" doxytag="NL3D::CMeshGeom::getNbMatrixBlock" ></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::CMeshGeom::getNbMatrixBlock </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 matrix block
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00393">393</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01717">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00179">NL3D::CInstanceLighter::addTriangles()</a>, <a class="el" href="a05989.html#l00458">applyMaterialRemap()</a>, <a class="el" href="a05567.html#l00070">NL3D::CCoarseMeshBuild::buildBitmap()</a>, <a class="el" href="a06016.html#l00765">NL3D::CMeshMultiLod::compileCoarseMeshes()</a>, <a class="el" href="a06626.html#l00053">NL3D::UShape::getMeshTriangles()</a>, <a class="el" href="a05989.html#l02437">NL3D::CMesh::getNbMatrixBlock()</a>, and <a class="el" href="a05567.html#l00430">NL3D::CCoarseMeshBuild::remapCoordinates()</a>.
+<p>
+<div class="fragment"><pre>00393 { <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size() ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz413_3" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>matrixBlockIndex</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 for a given matrix block <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>matrixBlockIndex</em>&nbsp;</td><td>the index of the matrix block the rendering passes belong to</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00398">398</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01717">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00179">NL3D::CInstanceLighter::addTriangles()</a>, <a class="el" href="a05989.html#l00458">applyMaterialRemap()</a>, <a class="el" href="a05567.html#l00070">NL3D::CCoarseMeshBuild::buildBitmap()</a>, <a class="el" href="a06016.html#l00765">NL3D::CMeshMultiLod::compileCoarseMeshes()</a>, <a class="el" href="a06626.html#l00053">NL3D::UShape::getMeshTriangles()</a>, <a class="el" href="a05989.html#l02442">NL3D::CMesh::getNbRdrPass()</a>, and <a class="el" href="a05567.html#l00430">NL3D::CCoarseMeshBuild::remapCoordinates()</a>.
+<p>
+<div class="fragment"><pre>00398 { <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlockIndex].RdrPass.size() ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_4" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a02878.html#NL3D_1_1CMeshGeomz417_8">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="a05989.html#l02016">2016</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02017 {
+02018 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[0].RdrPass.size();
+02019 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_5" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a02878.html#NL3D_1_1CMeshGeomz417_8">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="a05989.html#l02011">2011</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02012 {
+02013 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[0].RdrPass.size();
+02014 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_1" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>
+clip this mesh
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz455_1">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a05989.html#l01429">1429</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a06198.html#l00160">NL3D::CPrimitiveBlock::getNumTriangles()</a>, <a class="el" href="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::RdrPass</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>01430 {
+01431 <span class="comment">// Sum of triangles</span>
+01432 <a class="code" href="a04558.html#a11">uint32</a> triCount=0;
+01433
+01434 <span class="comment">// For each matrix block</span>
+01435 <a class="code" href="a04558.html#a15">uint</a> mbCount=<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();
+01436 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> mb=0; mb&lt;mbCount; mb++)
+01437 {
+01438 CMatrixBlock &amp;block=<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb];
+01439
+01440 <span class="comment">// Count of primitive block</span>
+01441 <a class="code" href="a04558.html#a15">uint</a> pCount=block.RdrPass.size();
+01442 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> pb=0; pb&lt;pCount; pb++)
+01443 {
+01444 <span class="comment">// Ref on the primitive block</span>
+01445 CRdrPass &amp;pass=block.RdrPass[pb];
+01446
+01447 <span class="comment">// Sum tri</span>
+01448 triCount+=pass.PBlock.getNumTriangles ();
+01449 }
+01450 }
+01451 <span class="keywordflow">return</span> (<span class="keywordtype">float</span>)triCount;
+01452 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz413_4" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>matrixBlockIndex</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 matrix block <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>matrixBlockIndex</em>&nbsp;</td><td>the index of the matrix block the renderin pass belong to </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="a05990.html#l00413">413</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</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#l01717">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05567.html#l00070">NL3D::CCoarseMeshBuild::buildBitmap()</a>, <a class="el" href="a05989.html#l02452">NL3D::CMesh::getRdrPassMaterial()</a>, and <a class="el" href="a05567.html#l00430">NL3D::CCoarseMeshBuild::remapCoordinates()</a>.
+<p>
+<div class="fragment"><pre>00414 {
+00415 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlockIndex].RdrPass[renderingPassIndex].MaterialId ;
+00416 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz413_5" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>matrixBlockIndex</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 matrix block <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>matrixBlockIndex</em>&nbsp;</td><td>the index of the matrix block the renderin pass belong to </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="a05990.html#l00404">404</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01717">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00179">NL3D::CInstanceLighter::addTriangles()</a>, <a class="el" href="a06016.html#l00765">NL3D::CMeshMultiLod::compileCoarseMeshes()</a>, <a class="el" href="a06626.html#l00053">NL3D::UShape::getMeshTriangles()</a>, <a class="el" href="a05989.html#l02447">NL3D::CMesh::getRdrPassPrimitiveBlock()</a>, and <a class="el" href="a05567.html#l00430">NL3D::CCoarseMeshBuild::remapCoordinates()</a>.
+<p>
+<div class="fragment"><pre>00405 {
+00406 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[matrixBlockIndex].RdrPass[renderingPassIndex].PBlock ;
+00407 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz415_1" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05990.html#l00440">440</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00676">_BonesId</a>.
+<p>
+Referenced by <a class="el" href="a06001.html#l00099">NL3D::CMeshInstance::getSkinBoneUsage()</a>.
+<p>
+<div class="fragment"><pre>00440 {<span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr3">_BonesId</a>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_6" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02114">2114</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00705">_SupportMBRFlags</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>02115 {
+02116 <span class="comment">// CMeshGeom support VBHeap rendering, assuming supportMeshBlockRendering is true.</span>
+02117 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a> )
+02118 <span class="comment">/* Yoyo: If VertexProgram, DON'T SUPPORT!! because VB need to be activated AFTER meshVP activation</span>
+02119 <span class="comment"> NB: still possible with complex code to do it (sort per VP type (with or not)...), but tests in Ryzom</span>
+02120 <span class="comment"> shows that VBHeap is not really important (not so much different shapes...)</span>
+02121 <span class="comment"> */</span>
+02122 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>==NULL )
+02123 {
+02124 vertexFormat= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat();
+02125 numVertices= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices();
+02126 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+02127 }
+02128
+02129 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02130 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz413_6" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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 mesh
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00390">390</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a06768.html#l01717">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00179">NL3D::CInstanceLighter::addTriangles()</a>, <a class="el" href="a06626.html#l00053">NL3D::UShape::getMeshTriangles()</a>, <a class="el" href="a05989.html#l02432">NL3D::CMesh::getVertexBuffer()</a>, <a class="el" href="a06016.html#l00740">NL3D::CMeshMultiLod::instanciateCoarseMeshSpace()</a>, <a class="el" href="a05567.html#l00430">NL3D::CCoarseMeshBuild::remapCoordinates()</a>, <a class="el" href="a06016.html#l00496">NL3D::CMeshMultiLod::renderCoarseMesh()</a>, <a class="el" href="a06018.html#l00280">NL3D::CMeshMultiLodInstance::setPosCoarseMesh()</a>, and <a class="el" href="a06018.html#l00249">NL3D::CMeshMultiLodInstance::setUVCoarseMesh()</a>.
+<p>
+<div class="fragment"><pre>00390 { <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a> ; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeoma4" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05990.html#l00478">478</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>.
+<p>
+Referenced by <a class="el" href="a06001.html#l00144">NL3D::CMeshInstance::initRenderFilterType()</a>.
+<p>
+<div class="fragment"><pre>00478 {<span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>!=NULL;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_2" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l00474">474</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02357">NL3D::CMesh::createInstance()</a>.
+<p>
+<div class="fragment"><pre>00475 {
+00476 <span class="comment">// init the instance with _MeshVertexProgram infos</span>
+00477 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>)
+00478 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;initInstance(mbi);
+00479 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IMeshGeomz457_7" doxytag="NL3D::CMeshGeom::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"> virtual bool NL3D::IMeshGeom::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> [inline, virtual, 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>
+Reimplemented in <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_7">NL3D::CMeshMRMGeom</a>.
+<p>
+Definition at line <a class="el" href="a06000.html#l00212">212</a> of file <a class="el" href="a06000.html">mesh_geom.h</a>.
+<p>
+Referenced by <a class="el" href="a05997.html#l00177">NL3D::CMeshBlockManager::render()</a>.
+<p>
+<div class="fragment"><pre>00212 {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IMeshGeomz457_8" doxytag="NL3D::CMeshGeom::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">NL3D::CMeshMRMGeom::profileSceneRender()</a>, and <a class="el" href="a05989.html#l01932">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_1CMeshGeomz415_2" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05990.html#l00428">428</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+References <a class="el" href="a05990.html#l00664">_Skinned</a>.
+<p>
+Referenced by <a class="el" href="a06001.html#l00113">NL3D::CMeshInstance::isSkinnable()</a>.
+<p>
+<div class="fragment"><pre>00429 {
+00430 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>;
+00431 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_3" doxytag="NL3D::CMeshGeom::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::CMeshGeom::NLMISC_DECLARE_CLASS </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02878.html">CMeshGeom</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
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomd2" doxytag="NL3D::CMeshGeom::optimizeTriangleOrder" ></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::CMeshGeom::optimizeTriangleOrder </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="a05989.html#l00153">153</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a06473.html#l00196">NL3D::CStripifier::optimizeTriangles()</a>, <a class="el" href="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>.
+<p>
+<div class="fragment"><pre>00154 {
+00155 CStripifier stripifier;
+00156
+00157 <span class="comment">// for all rdrpass of all matrix blocks.</span>
+00158 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb= 0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+00159 {
+00160 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> rp=0; rp&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb].RdrPass.size(); rp++ )
+00161 {
+00162 <span class="comment">// stripify list of triangles of this pass.</span>
+00163 CRdrPass &amp;pass= _MatrixBlocks[mb].RdrPass[rp];
+00164 stripifier.optimizeTriangles(pass.PBlock, pass.PBlock);
+00165 }
+00166 }
+00167
+00168 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_4" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>
+clip this mesh
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma5">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a05989.html#l01932">1932</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00684">_VertexBufferHard</a>, <a class="el" href="a06349.html#l00531">NL3D::CScene::BenchRes</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="a05990.html#l00488">NL3D::CMeshGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a06625.html#l00491">NL3D::UScene::CBenchResults::MeshProfileTriVBFormat</a>, <a class="el" href="a06625.html#l00493">NL3D::UScene::CBenchResults::NumMeshRdrBlock</a>, <a class="el" href="a06625.html#l00494">NL3D::UScene::CBenchResults::NumMeshRdrBlockWithVBHeap</a>, <a class="el" href="a06625.html#l00492">NL3D::UScene::CBenchResults::NumMeshRdrNormal</a>, <a class="el" href="a06625.html#l00496">NL3D::UScene::CBenchResults::NumMeshTriRdrBlock</a>, <a class="el" href="a06625.html#l00497">NL3D::UScene::CBenchResults::NumMeshTriRdrBlockWithVBHeap</a>, <a class="el" href="a06625.html#l00495">NL3D::UScene::CBenchResults::NumMeshTriRdrNormal</a>, <a class="el" href="a06625.html#l00505">NL3D::UScene::CBenchResults::NumMeshVBufferHard</a>, <a class="el" href="a06625.html#l00504">NL3D::UScene::CBenchResults::NumMeshVBufferStd</a>, <a class="el" href="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::RdrPass</a>, <a class="el" href="a06583.html#l00055">NL3D::CTraversal::Scene</a>, <a class="el" href="a05989.html#l02000">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="a05989.html#l02497">NL3D::CMesh::profileSceneRender()</a>.
+<p>
+<div class="fragment"><pre>01933 {
+01934 <span class="comment">// get the mesh instance.</span>
+01935 CMeshBaseInstance *mi= safe_cast&lt;CMeshBaseInstance*&gt;(trans);
+01936
+01937 <span class="comment">// For all _MatrixBlocks</span>
+01938 <a class="code" href="a04558.html#a15">uint</a> triCount= 0;
+01939 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb=0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+01940 {
+01941 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb];
+01942
+01943 <span class="comment">// Profile all pass.</span>
+01944 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;mBlock.RdrPass.size();i++)
+01945 {
+01946 CRdrPass &amp;rdrPass= mBlock.RdrPass[i];
+01947 <span class="comment">// Profile with the Materials of the MeshInstance.</span>
+01948 <span class="keywordflow">if</span> ( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderOpaqueMaterial) ) ||
+01949 ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial) ) )
+01950 {
+01951 triCount+= rdrPass.PBlock.getNumTri();
+01952 }
+01953 }
+01954 }
+01955
+01956 <span class="comment">// Profile</span>
+01957 <span class="keywordflow">if</span>(triCount)
+01958 {
+01959 <span class="comment">// tri per VBFormat</span>
+01960 rdrTrav-&gt;Scene-&gt;incrementProfileTriVBFormat(rdrTrav-&gt;Scene-&gt;BenchRes.MeshProfileTriVBFormat,
+01961 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat(), triCount);
+01962
+01963 <span class="comment">// VBHard</span>
+01964 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>)
+01965 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshVBufferHard++;
+01966 <span class="keywordflow">else</span>
+01967 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshVBufferStd++;
+01968
+01969 <span class="comment">// rendered in BlockRendering, only if not transparent pass (known it if RenderTransparentMaterial is set)</span>
+01970 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz417_9">supportMeshBlockRendering</a>() &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial)==0 )
+01971 {
+01972 <span class="keywordflow">if</span>(<a class="code" href="a02879.html#NL3D_1_1IMeshGeomz457_8">isMeshInVBHeap</a>())
+01973 {
+01974 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshRdrBlockWithVBHeap++;
+01975 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshTriRdrBlockWithVBHeap+= triCount;
+01976 }
+01977 <span class="keywordflow">else</span>
+01978 {
+01979 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshRdrBlock++;
+01980 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshTriRdrBlock+= triCount;
+01981 }
+01982 }
+01983 <span class="keywordflow">else</span>
+01984 {
+01985 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshRdrNormal++;
+01986 rdrTrav-&gt;Scene-&gt;BenchRes.NumMeshTriRdrNormal+= triCount;
+01987 }
+01988 }
+01989 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_5" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a02878.html#NL3D_1_1CMeshGeomz411_5">render()</a> this mesh in a driver.
+<p>
+
+<p>
+Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma6">NL3D::IMeshGeom</a>.
+<p>
+Definition at line <a class="el" href="a05989.html#l00598">598</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00652">_OriginalSkinNormals</a>, <a class="el" href="a05990.html#l00666">_OriginalSkinRestored</a>, <a class="el" href="a05990.html#l00651">_OriginalSkinVertices</a>, <a class="el" href="a05990.html#l00653">_OriginalTGSpace</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, <a class="el" href="a05990.html#l00658">_VBufferOri</a>, <a class="el" href="a05990.html#l00684">_VertexBufferHard</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="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06583.html#l00079">NL3D::CTravCameraScene::CamPos</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</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="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a05990.html#l00488">NL3D::CMeshGeom::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="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, <a class="el" href="a05995.html#l00037">NL3D::CMeshBlender::prepareRenderForGlobalAlpha()</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</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#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="a05989.html#l00523">updateVertexBufferHard()</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02386">NL3D::CMesh::render()</a>.
+<p>
+<div class="fragment"><pre>00599 {
+00600 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+00601 <span class="comment">// get the mesh instance.</span>
+00602 CMeshBaseInstance *mi= safe_cast&lt;CMeshBaseInstance*&gt;(trans);
+00603 <span class="comment">// get a ptr on scene</span>
+00604 CScene *ownerScene= mi-&gt;getOwnerScene();
+00605 <span class="comment">// get a ptr on renderTrav</span>
+00606 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+00607
+00608 <span class="comment">// update the VBufferHard (create/delete), to maybe render in AGP memory.</span>
+00609 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_0">updateVertexBufferHard</a> (drv);
+00610 <span class="comment">/* currentVBHard is NULL if must disable it temporarily</span>
+00611 <span class="comment"> For now, never disable it, but switch of VBHard may be VERY EXPENSIVE if NV_vertex_array_range2 is not</span>
+00612 <span class="comment"> supported (old drivers).</span>
+00613 <span class="comment"> */</span>
+00614 IVertexBufferHard *currentVBHard= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>;
+00615
+00616
+00617 <span class="comment">// get the skeleton model to which I am binded (else NULL).</span>
+00618 CSkeletonModel *skeleton;
+00619 skeleton= mi-&gt;getSkeletonModel();
+00620 <span class="comment">// The mesh must not be skinned for render()</span>
+00621 <a class="code" href="a04199.html#a6">nlassert</a>(!(_Skinned &amp;&amp; mi-&gt;isSkinned() &amp;&amp; skeleton));
+00622 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes.size() &gt; 0;
+00623 <span class="keywordtype">bool</span> useTangentSpace = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;needTangentSpace();
+00624
+00625
+00626 <span class="comment">// Profiling</span>
+00627 <span class="comment">//===========</span>
+00628 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshGeom_RenderNormal );
+00629
+00630
+00631 <span class="comment">// Morphing</span>
+00632 <span class="comment">// ========</span>
+00633 <span class="keywordflow">if</span> (bMorphApplied)
+00634 {
+00635 <span class="comment">// If _Skinned (NB: the skin is not applied) and if lod.OriginalSkinRestored, then restoreOriginalSkinPart is</span>
+00636 <span class="comment">// not called but mush morpher write changed vertices into VBHard so its ok. The unchanged vertices</span>
+00637 <span class="comment">// are written in the preceding call to restoreOriginalSkinPart.</span>
+00638 <span class="keywordflow">if</span> (<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+00639 {
+00640 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;initSkinned(&amp;_VBufferOri,
+00641 &amp;_VBuffer,
+00642 currentVBHard,
+00643 useTangentSpace,
+00644 &amp;_OriginalSkinVertices,
+00645 &amp;_OriginalSkinNormals,
+00646 useTangentSpace ? &amp;_OriginalTGSpace : NULL,
+00647 <span class="keyword">false</span> );
+00648 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;updateSkinned (mi-&gt;getBlendShapeFactors());
+00649 }
+00650 <span class="keywordflow">else</span> <span class="comment">// Not even skinned so we have to do all the stuff</span>
+00651 {
+00652 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;init(&amp;_VBufferOri,
+00653 &amp;_VBuffer,
+00654 currentVBHard,
+00655 useTangentSpace);
+00656 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;update (mi-&gt;getBlendShapeFactors());
+00657 }
+00658 }
+00659
+00660
+00661 <span class="comment">// Skinning</span>
+00662 <span class="comment">// ========</span>
+00663
+00664 <span class="comment">// else setup instance matrix</span>
+00665 drv-&gt;setupModelMatrix(trans-&gt;getWorldMatrix());
+00666
+00667
+00668 <span class="comment">// since instance skin is invalid but mesh is skinned , we must copy vertices/normals from original vertices.</span>
+00669 <span class="keywordflow">if</span> (<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a>)
+00670 {
+00671 <span class="comment">// do it for this Lod only, and if cache say it is necessary.</span>
+00672 <span class="keywordflow">if</span> (!<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr10">_OriginalSkinRestored</a>)
+00673 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_9">restoreOriginalSkinVertices</a>();
+00674 }
+00675
+00676
+00677 <span class="comment">// Setup meshVertexProgram</span>
+00678 <span class="comment">//===========</span>
+00679
+00680 <span class="comment">// use MeshVertexProgram effect?</span>
+00681 <span class="keywordtype">bool</span> useMeshVP= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> != NULL;
+00682 <span class="keywordflow">if</span>( useMeshVP )
+00683 {
+00684 CMatrix invertedObjectMatrix;
+00685 invertedObjectMatrix = trans-&gt;getWorldMatrix().inverted();
+00686 <span class="comment">// really ok if success to begin VP</span>
+00687 useMeshVP= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;begin(drv, ownerScene, mi, invertedObjectMatrix, renderTrav-&gt;CamPos);
+00688 }
+00689
+00690
+00691 <span class="comment">// Render the mesh.</span>
+00692 <span class="comment">//===========</span>
+00693 <span class="comment">// active VB.</span>
+00694 <span class="keywordflow">if</span>(currentVBHard != NULL)
+00695 drv-&gt;activeVertexBufferHard(currentVBHard);
+00696 <span class="keywordflow">else</span>
+00697 drv-&gt;activeVertexBuffer(_VBuffer);
+00698
+00699
+00700 <span class="comment">// Global alpha used ?</span>
+00701 <a class="code" href="a04558.html#a11">uint32</a> globalAlphaUsed= rdrFlags &amp; IMeshGeom::RenderGlobalAlpha;
+00702 <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);
+00703
+00704
+00705 <span class="comment">// For all _MatrixBlocks</span>
+00706 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb=0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+00707 {
+00708 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb];
+00709 <span class="keywordflow">if</span>(mBlock.RdrPass.size()==0)
+00710 <span class="keywordflow">continue</span>;
+00711
+00712 <span class="comment">// Global alpha ?</span>
+00713 <span class="keywordflow">if</span> (globalAlphaUsed)
+00714 {
+00715 <span class="keywordtype">bool</span> gaDisableZWrite= (rdrFlags &amp; IMeshGeom::RenderGADisableZWrite)?<span class="keyword">true</span>:<span class="keyword">false</span>;
+00716
+00717 <span class="comment">// Render all pass.</span>
+00718 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;mBlock.RdrPass.size();i++)
+00719 {
+00720 CRdrPass &amp;rdrPass= mBlock.RdrPass[i];
+00721 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+00722 <span class="keywordflow">if</span> ( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderOpaqueMaterial) ) ||
+00723 ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial) ) )
+00724 {
+00725 <span class="comment">// CMaterial Ref</span>
+00726 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+00727
+00728 <span class="comment">// Use a MeshBlender to modify material and driver.</span>
+00729 CMeshBlender blender;
+00730 blender.prepareRenderForGlobalAlpha(material, drv, globalAlpha, globalAlphaInt, gaDisableZWrite);
+00731
+00732 <span class="comment">// Setup VP material</span>
+00733 <span class="keywordflow">if</span> (useMeshVP)
+00734 {
+00735 <span class="keywordflow">if</span>(currentVBHard)
+00736 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, currentVBHard);
+00737 <span class="keywordflow">else</span>
+00738 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, &amp;_VBuffer);
+00739 }
+00740
+00741 <span class="comment">// Render</span>
+00742 drv-&gt;render(rdrPass.PBlock, material);
+00743
+00744 <span class="comment">// Resetup material/driver</span>
+00745 blender.restoreRender(material, drv, gaDisableZWrite);
+00746 }
+00747 }
+00748 }
+00749 <span class="keywordflow">else</span>
+00750 {
+00751 <span class="comment">// Render all pass.</span>
+00752 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;mBlock.RdrPass.size();i++)
+00753 {
+00754 CRdrPass &amp;rdrPass= mBlock.RdrPass[i];
+00755 <span class="comment">// Render with the Materials of the MeshInstance.</span>
+00756 <span class="keywordflow">if</span>( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderOpaqueMaterial) ) ||
+00757 ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) &amp;&amp; (rdrFlags &amp; IMeshGeom::RenderTransparentMaterial) ) )
+00758 {
+00759 <span class="comment">// CMaterial Ref</span>
+00760 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+00761
+00762 <span class="comment">// Setup VP material</span>
+00763 <span class="keywordflow">if</span> (useMeshVP)
+00764 {
+00765 <span class="keywordflow">if</span>(currentVBHard)
+00766 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, currentVBHard);
+00767 <span class="keywordflow">else</span>
+00768 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, &amp;_VBuffer);
+00769 }
+00770
+00771 <span class="comment">// render primitives</span>
+00772 drv-&gt;render(rdrPass.PBlock, material);
+00773 }
+00774 }
+00775 }
+00776 }
+00777
+00778 <span class="comment">// End VertexProgram effect</span>
+00779 <span class="keywordflow">if</span>(useMeshVP)
+00780 {
+00781 <span class="comment">// Apply it.</span>
+00782 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;end(drv);
+00783 }
+00784 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_7" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02075">2075</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>, <a class="el" href="a06329.html#l00653">NL3D::CRenderTrav::changeVPLightSetupMaterial()</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a05990.html#l00488">NL3D::CMeshGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a>, <a class="el" href="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::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="a06000.html#l00064">NL3D::CMeshGeomRenderContext::RenderTrav</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05990.html#l00493">NL3D::CMeshGeom::CRdrPass::VBHeapPBlock</a>.
+<p>
+<div class="fragment"><pre>02076 {
+02077 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[0];
+02078
+02079 CRdrPass &amp;rdrPass= mBlock.RdrPass[rdrPassId];
+02080 <span class="comment">// Render with the Materials of the MeshInstance, only if not blended.</span>
+02081 <span class="keywordflow">if</span>( ( (mi-&gt;Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) ) )
+02082 {
+02083 CMaterial &amp;material= mi-&gt;Materials[rdrPass.MaterialId];
+02084
+02085 <span class="comment">// MeshVertexProgram ?</span>
+02086 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a> &amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy2">MBRCurrentUseVP</a> )
+02087 {
+02088 rdrCtx.RenderTrav-&gt;changeVPLightSetupMaterial(material, <span class="keyword">false</span>);
+02089 }
+02090
+02091 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap)
+02092 <span class="comment">// render shifted primitives</span>
+02093 rdrCtx.Driver-&gt;render(rdrPass.VBHeapPBlock, material);
+02094 <span class="keywordflow">else</span>
+02095 <span class="comment">// render primitives</span>
+02096 rdrCtx.Driver-&gt;render(rdrPass.PBlock, material);
+02097 }
+02098 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeoma5" doxytag="NL3D::CMeshGeom::renderSimpleWithMaterial" ></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::CMeshGeom::renderSimpleWithMaterial </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>const <a class="el" href="a02851.html">CMatrix</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>worldMatrix</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>mat</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>
+render the mesh geometry with a single material. Render is said "Simple" because no special features are used:<ul>
+<li>mesh is rendered without VertexProgram (if it has one).</li><li>mesh is rendered without Skinning.</li><li>mesh is rendered without use of VertexBufferHard.</li><li>mesh is rendered without MeshMorpher.</li><li>.....</li></ul>
+
+<p>
+Definition at line <a class="el" href="a05989.html#l00915">915</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver::setupModelMatrix()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06016.html#l00446">NL3D::CMeshMultiLod::renderMeshGeom()</a>.
+<p>
+<div class="fragment"><pre>00916 {
+00917 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshGeom_RenderSimpleWithMaterial );
+00918
+00919 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+00920
+00921 <span class="comment">// setup matrix</span>
+00922 drv-&gt;setupModelMatrix(worldMatrix);
+00923
+00924 <span class="comment">// Active simple VB.</span>
+00925 drv-&gt;activeVertexBuffer(_VBuffer);
+00926
+00927 <span class="comment">// For all _MatrixBlocks</span>
+00928 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb=0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+00929 {
+00930 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb];
+00931 <span class="keywordflow">if</span>(mBlock.RdrPass.size()==0)
+00932 <span class="keywordflow">continue</span>;
+00933
+00934 <span class="comment">// Render all pass.</span>
+00935 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;mBlock.RdrPass.size();i++)
+00936 {
+00937 CRdrPass &amp;rdrPass= mBlock.RdrPass[i];
+00938
+00939 <span class="comment">// render primitives</span>
+00940 drv-&gt;render(rdrPass.PBlock, mat);
+00941 }
+00942 }
+00943
+00944 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_6" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a02878.html#NL3D_1_1CMeshGeomz411_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="a05989.html#l00788">788</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00660">_MatrixBlocks</a>, <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00652">_OriginalSkinNormals</a>, <a class="el" href="a05990.html#l00651">_OriginalSkinVertices</a>, <a class="el" href="a05990.html#l00653">_OriginalTGSpace</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, <a class="el" href="a05990.html#l00658">_VBufferOri</a>, <a class="el" href="a05990.html#l00684">_VertexBufferHard</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="a05989.html#l01715">applySkin()</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="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="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="a05990.html#l00488">NL3D::CMeshGeom::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="a05990.html#l00490">NL3D::CMeshGeom::CRdrPass::PBlock</a>, <a class="el" href="a05990.html#l00516">NL3D::CMeshGeom::CMatrixBlock::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06003.html#l00236">NL3D::CMeshMorpher::updateSkinned()</a>, and <a class="el" href="a05989.html#l00523">updateVertexBufferHard()</a>.
+<p>
+Referenced by <a class="el" href="a06001.html#l00127">NL3D::CMeshInstance::renderSkin()</a>.
+<p>
+<div class="fragment"><pre>00789 {
+00790 <span class="comment">// get the mesh instance.</span>
+00791 CMeshBaseInstance *mi= safe_cast&lt;CMeshBaseInstance*&gt;(trans);
+00792 <span class="comment">// get a ptr on scene</span>
+00793 CScene *ownerScene= mi-&gt;getOwnerScene();
+00794 <span class="comment">// get a ptr on renderTrav</span>
+00795 CRenderTrav *renderTrav= &amp;ownerScene-&gt;getRenderTrav();
+00796 <span class="comment">// get a ptr on the driver</span>
+00797 IDriver *drv= renderTrav-&gt;getDriver();
+00798 <a class="code" href="a04199.html#a6">nlassert</a>(drv);
+00799
+00800
+00801 <span class="comment">// update the VBufferHard (create/delete), to maybe render in AGP memory.</span>
+00802 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_0">updateVertexBufferHard</a> (drv);
+00803 <span class="comment">/* currentVBHard is NULL if must disable it temporarily</span>
+00804 <span class="comment"> For now, never disable it, but switch of VBHard may be VERY EXPENSIVE if NV_vertex_array_range2 is not</span>
+00805 <span class="comment"> supported (old drivers).</span>
+00806 <span class="comment"> */</span>
+00807 IVertexBufferHard *currentVBHard= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>;
+00808
+00809
+00810 <span class="comment">// get the skeleton model to which I am binded (else NULL).</span>
+00811 CSkeletonModel *skeleton;
+00812 skeleton= mi-&gt;getSkeletonModel();
+00813 <span class="comment">// must be skinned for renderSkin()</span>
+00814 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned &amp;&amp; mi-&gt;isSkinned() &amp;&amp; skeleton);
+00815 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes.size() &gt; 0;
+00816 <span class="keywordtype">bool</span> useTangentSpace = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;needTangentSpace();
+00817
+00818
+00819 <span class="comment">// Profiling</span>
+00820 <span class="comment">//===========</span>
+00821 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshGeom_RenderSkinned );
+00822
+00823
+00824 <span class="comment">// Morphing</span>
+00825 <span class="comment">// ========</span>
+00826 <span class="keywordflow">if</span> (bMorphApplied)
+00827 {
+00828 <span class="comment">// Since Skinned we must update original skin vertices and normals because skinning use it</span>
+00829 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;initSkinned(&amp;_VBufferOri,
+00830 &amp;_VBuffer,
+00831 currentVBHard,
+00832 useTangentSpace,
+00833 &amp;_OriginalSkinVertices,
+00834 &amp;_OriginalSkinNormals,
+00835 useTangentSpace ? &amp;_OriginalTGSpace : NULL,
+00836 <span class="keyword">true</span> );
+00837 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;updateSkinned (mi-&gt;getBlendShapeFactors());
+00838 }
+00839
+00840
+00841 <span class="comment">// Skinning</span>
+00842 <span class="comment">// ========</span>
+00843
+00844 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span>
+00845 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span>
+00846
+00847
+00848 <span class="comment">// apply the skinning: _VBuffer is modified.</span>
+00849 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_1">applySkin</a>(skeleton);
+00850
+00851
+00852 <span class="comment">// Setup meshVertexProgram</span>
+00853 <span class="comment">//===========</span>
+00854
+00855 <span class="comment">// use MeshVertexProgram effect?</span>
+00856 <span class="keywordtype">bool</span> useMeshVP= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> != NULL;
+00857 <span class="keywordflow">if</span>( useMeshVP )
+00858 {
+00859 CMatrix invertedObjectMatrix;
+00860 invertedObjectMatrix = skeleton-&gt;getWorldMatrix().inverted();
+00861 <span class="comment">// really ok if success to begin VP</span>
+00862 useMeshVP= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;begin(drv, ownerScene, mi, invertedObjectMatrix, renderTrav-&gt;CamPos);
+00863 }
+00864
+00865
+00866 <span class="comment">// Render the mesh.</span>
+00867 <span class="comment">//===========</span>
+00868 <span class="comment">// active VB.</span>
+00869 <span class="keywordflow">if</span>(currentVBHard != NULL)
+00870 drv-&gt;activeVertexBufferHard(currentVBHard);
+00871 <span class="keywordflow">else</span>
+00872 drv-&gt;activeVertexBuffer(_VBuffer);
+00873
+00874
+00875 <span class="comment">// For all _MatrixBlocks</span>
+00876 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> mb=0;mb&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>.size();mb++)
+00877 {
+00878 CMatrixBlock &amp;mBlock= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr6">_MatrixBlocks</a>[mb];
+00879 <span class="keywordflow">if</span>(mBlock.RdrPass.size()==0)
+00880 <span class="keywordflow">continue</span>;
+00881
+00882 <span class="comment">// Render all pass.</span>
+00883 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;mBlock.RdrPass.size();i++)
+00884 {
+00885 CRdrPass &amp;rdrPass= mBlock.RdrPass[i];
+00886
+00887 <span class="comment">// CMaterial Ref</span>
+00888 CMaterial &amp;material=mi-&gt;Materials[rdrPass.MaterialId];
+00889
+00890 <span class="comment">// Setup VP material</span>
+00891 <span class="keywordflow">if</span> (useMeshVP)
+00892 {
+00893 <span class="keywordflow">if</span>(currentVBHard)
+00894 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, currentVBHard);
+00895 <span class="keywordflow">else</span>
+00896 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;setupForMaterial(material, drv, ownerScene, &amp;_VBuffer);
+00897 }
+00898
+00899 <span class="comment">// render primitives</span>
+00900 drv-&gt;render(rdrPass.PBlock, material);
+00901 }
+00902 }
+00903
+00904 <span class="comment">// End VertexProgram effect</span>
+00905 <span class="keywordflow">if</span>(useMeshVP)
+00906 {
+00907 <span class="comment">// Apply it.</span>
+00908 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;end(drv);
+00909 }
+00910
+00911 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz423_9" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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>
+
+<p>
+Definition at line <a class="el" href="a05989.html#l01663">1663</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00716">_MeshVertexProgram</a>, <a class="el" href="a05990.html#l00652">_OriginalSkinNormals</a>, <a class="el" href="a05990.html#l00666">_OriginalSkinRestored</a>, <a class="el" href="a05990.html#l00651">_OriginalSkinVertices</a>, <a class="el" href="a05990.html#l00653">_OriginalTGSpace</a>, <a class="el" href="a05990.html#l00664">_Skinned</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="a05989.html#l00598">render()</a>.
+<p>
+<div class="fragment"><pre>01664 {
+01665 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned);
+01666
+01667 <span class="comment">// get num of vertices</span>
+01668 <a class="code" href="a04558.html#a15">uint</a> numVertices= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices();
+01669
+01670 <span class="comment">// Copy VBuffer content into Original vertices normals.</span>
+01671 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat() &amp; CVertexBuffer::PositionFlag)
+01672 {
+01673 <span class="comment">// copy vertices from VBuffer. (NB: unusefull geomorphed vertices are still copied, but doesn't matter).</span>
+01674 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;numVertices;i++)
+01675 {
+01676 *(CVector*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexCoordPointer(i)= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr11">_OriginalSkinVertices</a>[i];
+01677 }
+01678 }
+01679 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat() &amp; CVertexBuffer::NormalFlag)
+01680 {
+01681 <span class="comment">// copy normals from VBuffer. (NB: unusefull geomorphed normals are still copied, but doesn't matter).</span>
+01682 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;numVertices;i++)
+01683 {
+01684 *(CVector*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNormalCoordPointer(i)= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr9">_OriginalSkinNormals</a>[i];
+01685 }
+01686 }
+01687 <span class="keywordflow">if</span> (<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a> &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>-&gt;needTangentSpace())
+01688 {
+01689 <a class="code" href="a04558.html#a15">uint</a> numTexCoords = <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumTexCoordUsed();
+01690 <a class="code" href="a04199.html#a6">nlassert</a>(numTexCoords &gt;= 2);
+01691 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr12">_OriginalTGSpace</a>.size() == numVertices);
+01692 <span class="comment">// copy tangent space vectors</span>
+01693 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i = 0; i &lt; numVertices; ++i)
+01694 {
+01695 *(CVector*)<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getTexCoordPointer(i, numTexCoords - 1)= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr12">_OriginalTGSpace</a>[i];
+01696 }
+01697 }
+01698
+01699 <span class="comment">// cleared</span>
+01700 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr10">_OriginalSkinRestored</a>= <span class="keyword">true</span>;
+01701 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz411_7" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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 mesh.
+<p>
+
+<p>
+Implements <a class="el" href="a02867.html#NL3D_1_1ITrackDefaulta6">NLMISC::IStreamable</a>.
+<p>
+Definition at line <a class="el" href="a05989.html#l00948">948</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+<div class="fragment"><pre>00949 {
+00950 <span class="comment">/*</span>
+00951 <span class="comment"> Version 4:</span>
+00952 <span class="comment"> - BonesName.</span>
+00953 <span class="comment"> Version 3:</span>
+00954 <span class="comment"> - MeshVertexProgram.</span>
+00955 <span class="comment"> Version 2:</span>
+00956 <span class="comment"> - precompute of triangle order. (nothing more to load).</span>
+00957 <span class="comment"> Version 1:</span>
+00958 <span class="comment"> - added blend shapes</span>
+00959 <span class="comment"> Version 0:</span>
+00960 <span class="comment"> - separate serialisation CMesh / CMeshGeom.</span>
+00961 <span class="comment"> */</span>
+00962 <a class="code" href="a04558.html#a14">sint</a> ver = f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a> (4);
+00963
+00964
+00965 <span class="comment">// must have good original Skinned Vertex before writing.</span>
+00966 <span class="keywordflow">if</span>( !f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>() &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a> &amp;&amp; !<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr10">_OriginalSkinRestored</a> )
+00967 {
+00968 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_9">restoreOriginalSkinVertices</a>();
+00969 }
+00970
+00971
+00972 <span class="comment">// Version 4+: Array of bone name</span>
+00973 <span class="keywordflow">if</span> (ver &gt;= 4)
+00974 {
+00975 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_BonesName);
+00976 }
+00977
+00978 <span class="keywordflow">if</span> (f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+00979 {
+00980 <span class="comment">// Version3-: Bones index are in skeleton model id list</span>
+00981 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr1">_BoneIdComputed</a> = (ver &lt; 4);
+00982 <span class="comment">// In all case, must recompute usage of parents.</span>
+00983 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr2">_BoneIdExtended</a>= <span class="keyword">false</span>;
+00984 }
+00985 <span class="keywordflow">else</span>
+00986 {
+00987 <span class="comment">// Warning, if you have skinned this shape, you can't write it anymore because skinning id have been changed! </span>
+00988 <a class="code" href="a04199.html#a6">nlassert</a> (_BoneIdComputed==<span class="keyword">false</span>);
+00989 }
+00990
+00991 <span class="comment">// Version3+: MeshVertexProgram.</span>
+00992 <span class="keywordflow">if</span> (ver &gt;= 3)
+00993 {
+00994 IMeshVertexProgram *mvp= NULL;
+00995 <span class="keywordflow">if</span>(f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+00996 {
+00997 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_6">serialPolyPtr</a>(mvp);
+00998 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>= mvp;
+00999 }
+01000 <span class="keywordflow">else</span>
+01001 {
+01002 mvp= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>;
+01003 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_6">serialPolyPtr</a>(mvp);
+01004 }
+01005 }
+01006 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+01007 {
+01008 <span class="comment">// release vp</span>
+01009 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr8">_MeshVertexProgram</a>= NULL;
+01010 }
+01011
+01012 <span class="comment">// TestYoyo</span>
+01013 <span class="comment">//_MeshVertexProgram= NULL;</span>
+01014
+01015 <span class="comment">// Version1+: _MeshMorpher.</span>
+01016 <span class="keywordflow">if</span> (ver &gt;= 1)
+01017 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (*_MeshMorpher);
+01018
+01019 <span class="comment">// serial geometry.</span>
+01020 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_VBuffer);
+01021 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_MatrixBlocks);
+01022 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_BBox);
+01023 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_Skinned);
+01024
+01025
+01026 <span class="comment">// If _VertexBuffer changed, flag the VertexBufferHard.</span>
+01027 <span class="keywordflow">if</span>(f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+01028 {
+01029 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a> = <span class="keyword">true</span>;
+01030
+01031 <span class="comment">// if &gt;= version 2, reorder of triangles is precomputed, else compute it now.</span>
+01032 <span class="keywordflow">if</span>(ver &lt; 2 )
+01033 {
+01034 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd2">optimizeTriangleOrder</a>();
+01035 }
+01036 }
+01037
+01038 <span class="comment">// Skinning: If Version &lt; 4, _BonesName are not present, must compute _BonesId from localId</span>
+01039 <span class="comment">// Else it is computed at first computeBonesId().</span>
+01040 <span class="keywordflow">if</span>(ver &lt; 4)
+01041 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz423_3">buildBoneUsageVer3</a>();
+01042
+01043 <span class="comment">// TestYoyo</span>
+01044 <span class="comment">//_MeshVertexProgram= NULL;</span>
+01045 <span class="comment">/*{</span>
+01046 <span class="comment"> uint numTris= 0;</span>
+01047 <span class="comment"> for(uint i=0;i&lt;_MatrixBlocks.size();i++)</span>
+01048 <span class="comment"> {</span>
+01049 <span class="comment"> for(uint j=0;j&lt;_MatrixBlocks[i].RdrPass.size();j++)</span>
+01050 <span class="comment"> numTris+= _MatrixBlocks[i].RdrPass[j].PBlock.getNumTri();</span>
+01051 <span class="comment"> }</span>
+01052 <span class="comment"> nlinfo("YOYO: %d Vertices. %d Triangles.", _VBuffer.getNumVertices(), numTris);</span>
+01053 <span class="comment"> }*/</span>
+01054
+01055 <span class="comment">// Some runtime not serialized compilation</span>
+01056 <span class="keywordflow">if</span>(f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>())
+01057 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd0">compileRunTime</a>();
+01058 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeoma6" doxytag="NL3D::CMeshGeom::setBlendShapes" ></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::CMeshGeom::setBlendShapes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="a02273.html">CBlendShape</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>bs</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>
+
+<p>
+Definition at line <a class="el" href="a05989.html#l00449">449</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, and <a class="el" href="a05989.html#l01062">compileRunTime()</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02340">NL3D::CMesh::setBlendShapes()</a>.
+<p>
+<div class="fragment"><pre>00450 {
+00451 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes = bs;
+00452 <span class="comment">// must update some RunTime parameters</span>
+00453 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomd0">compileRunTime</a>();
+00454 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_8" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02006">2006</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>, and <a class="el" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4">MBRSortPerMaterial</a>.
+<p>
+<div class="fragment"><pre>02007 {
+02008 <span class="keywordflow">return</span> (<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a> &amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_0NL3D_1_1CMeshGeomy4">MBRSortPerMaterial</a>)!=0;
+02009 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz417_9" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l02000">2000</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00705">_SupportMBRFlags</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01932">profileSceneRender()</a>, and <a class="el" href="a05989.html#l02483">NL3D::CMesh::supportMeshBlockRendering()</a>.
+<p>
+<div class="fragment"><pre>02001 {
+02002 <span class="keywordflow">return</span> <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz421_1">_SupportMBRFlags</a>!=0;
+02003 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz415_3" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="a05989.html#l01596">1596</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00678">_BonesIdExt</a>, <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="a05989.html#l02476">NL3D::CMesh::updateSkeletonUsage()</a>.
+<p>
+<div class="fragment"><pre>01597 {
+01598 <span class="comment">// For all Bones used by this mesh.</span>
+01599 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr4">_BonesIdExt</a>.size();i++)
+01600 {
+01601 <a class="code" href="a04558.html#a15">uint</a> boneId= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr4">_BonesIdExt</a>[i];
+01602 <span class="comment">// Some explicit Error.</span>
+01603 <span class="keywordflow">if</span>(boneId&gt;=sm-&gt;Bones.size())
+01604 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">" Skin is incompatible with Skeleton: tries to use bone %d"</span>, boneId);
+01605 <span class="comment">// increment or decrement not Forced, because CMeshGeom use getActiveBoneSkinMatrix().</span>
+01606 <span class="keywordflow">if</span>(increment)
+01607 sm-&gt;incBoneUsage(boneId, CSkeletonModel::UsageNormal);
+01608 <span class="keywordflow">else</span>
+01609 sm-&gt;decBoneUsage(boneId, CSkeletonModel::UsageNormal);
+01610 }
+01611 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz419_0" doxytag="NL3D::CMeshGeom::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::CMeshGeom::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="mdname1" valign="top" nowrap> <em>drv</em> </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>
+update the VertexBufferHard if NULL (ie not created or deleted by driver) or if VertexBufferDirty.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05989.html#l00523">523</a> of file <a class="el" href="a05989.html">mesh.cpp</a>.
+<p>
+References <a class="el" href="a05990.html#l00712">_MeshMorpher</a>, <a class="el" href="a05990.html#l00664">_Skinned</a>, <a class="el" href="a05990.html#l00684">_VertexBufferHard</a>, <a class="el" href="a05990.html#l00688">_VertexBufferHardDirty</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>, and <a class="el" href="a02434.html#NL3D_1_1IDrivera78">NL3D::IDriver::supportVertexBufferHard()</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02021">beginMesh()</a>, <a class="el" href="a05989.html#l00598">render()</a>, and <a class="el" href="a05989.html#l00788">renderSkin()</a>.
+<p>
+<div class="fragment"><pre>00524 {
+00525 <span class="keywordflow">if</span>(!drv-&gt;supportVertexBufferHard())
+00526 <span class="keywordflow">return</span>;
+00527
+00528
+00529 <span class="comment">/* If the mesh is skinned, still use normal CVertexBuffer.</span>
+00530 <span class="comment"> * \todo yoyo: optimize. not done now because CMesh Skinned are not so used in game, </span>
+00531 <span class="comment"> * and CMesh skinning is far not optimized (4 matrix mul all the time). Should use later the renderSkinGroupGeom()</span>
+00532 <span class="comment"> * scheme</span>
+00533 <span class="comment"> * Also, if the driver has slow VBhard unlock() (ie ATI gl extension), avoid use of them if MeshMorpher </span>
+00534 <span class="comment"> * is used.</span>
+00535 <span class="comment"> */</span>
+00536 <span class="keywordtype">bool</span> avoidVBHard;
+00537 avoidVBHard= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a> || ( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a> &amp;&amp; <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes.size()&gt;0 &amp;&amp; drv-&gt;slowUnlockVertexBufferHard() );
+00538 <span class="keywordflow">if</span>( <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a> &amp;&amp; avoidVBHard )
+00539 {
+00540 <span class="comment">// delete possible old VBHard.</span>
+00541 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>!=NULL)
+00542 {
+00543 <span class="comment">// VertexBufferHard lifetime &lt; Driver lifetime.</span>
+00544 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL);
+00545 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_1">_Driver</a>-&gt;deleteVertexBufferHard(_VertexBufferHard);
+00546 }
+00547 <span class="keywordflow">return</span>;
+00548 }
+00549
+00550 <span class="comment">// If the vbufferhard is not synced to the vbuffer.</span>
+00551 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a> || <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>==NULL)
+00552 {
+00553 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_3">_VertexBufferHardDirty</a>= <span class="keyword">false</span>;
+00554
+00555 <span class="comment">// delete possible old VBHard.</span>
+00556 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>!=NULL)
+00557 {
+00558 <span class="comment">// VertexBufferHard lifetime &lt; Driver lifetime.</span>
+00559 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL);
+00560 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_1">_Driver</a>-&gt;deleteVertexBufferHard(_VertexBufferHard);
+00561 }
+00562
+00563 <span class="comment">// bkup drv in a refptr. (so we know if the vbuffer hard has to be deleted).</span>
+00564 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_1">_Driver</a>= drv;
+00565 <span class="comment">// try to create new one, in AGP Ram</span>
+00566 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_1">_Driver</a>-&gt;createVertexBufferHard(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat(), <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getValueTypePointer (), <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices(), IDriver::VBHardAGP, <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getUVRouting());
+00567
+00568 <span class="comment">// If KO, use normal VertexBuffer.</span>
+00569 <span class="keywordflow">if</span>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>==NULL)
+00570 <span class="keywordflow">return</span>;
+00571 <span class="comment">// else, setup and Fill it with VertexBuffer.</span>
+00572 <span class="keywordflow">else</span>
+00573 {
+00574 <span class="comment">// If the mesh is static: not skinned/no meshMorpher, then setup a static VBHard -&gt; runs faster under NVidia</span>
+00575 <span class="keywordflow">if</span>( !<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr14">_Skinned</a> &amp;&amp; ( !<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a> || <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr7">_MeshMorpher</a>-&gt;BlendShapes.size()==0) )
+00576 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>-&gt;lockHintStatic(<span class="keyword">true</span>);
+00577
+00578
+00579 <span class="comment">// Fill VB</span>
+00580 <span class="keywordtype">void</span> *vertexPtr= <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>-&gt;lock();
+00581
+00582 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexFormat() == <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>-&gt;getVertexFormat());
+00583 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices() == <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>-&gt;getNumVertices());
+00584 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexSize() == <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>-&gt;getVertexSize());
+00585
+00586 <span class="comment">// \todo yoyo: TODO_DX8 and DX8 ???</span>
+00587 <span class="comment">// Because same internal format, just copy all block.</span>
+00588 memcpy(vertexPtr, <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexCoordPointer(), <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getNumVertices() * <a class="code" href="a02878.html#NL3D_1_1CMeshGeomr15">_VBuffer</a>.getVertexSize() );
+00589
+00590 <a class="code" href="a02878.html#NL3D_1_1CMeshGeomz419_2">_VertexBufferHard</a>-&gt;unlock();
+00591 }
+00592
+00593 }
+00594 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NL3D_1_1CMeshGeomr0" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr0">NL3D::CMeshGeom::_BBox</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+For clipping.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00662">662</a> of file <a class="el" href="a05990.html">mesh.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr1" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr1">NL3D::CMeshGeom::_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="a05990.html#l00669">669</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, and <a class="el" href="a05989.html#l01456">computeBonesId()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr2" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr2">NL3D::CMeshGeom::_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="a05990.html#l00671">671</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, and <a class="el" href="a05989.html#l01456">computeBonesId()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr3" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr3">NL3D::CMeshGeom::_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="a05990.html#l00676">676</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01549">buildBoneUsageVer3()</a>, <a class="el" href="a05989.html#l01456">computeBonesId()</a>, and <a class="el" href="a05990.html#l00440">getSkinBoneUsage()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr4" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr4">NL3D::CMeshGeom::_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="a05990.html#l00678">678</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01456">computeBonesId()</a>, and <a class="el" href="a05989.html#l01596">updateSkeletonUsage()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr5" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr5">NL3D::CMeshGeom::_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 used.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00674">674</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, and <a class="el" href="a05989.html#l01456">computeBonesId()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz419_1" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomz419_1">NL3D::CMeshGeom::_Driver</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This is the driver used to setup the vbuffer hard. error if a mesh has not the same driver in his life.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00686">686</a> of file <a class="el" href="a05990.html">mesh.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr6" doxytag="NL3D::CMeshGeom::_MatrixBlocks" ></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="a02884.html">CMatrixBlock</a>&gt; <a class="el" href="a02878.html#NL3D_1_1CMeshGeomr6">NL3D::CMeshGeom::_MatrixBlocks</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The matrix blocks.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00660">660</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00458">applyMaterialRemap()</a>, <a class="el" href="a05989.html#l01715">applySkin()</a>, <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l01549">buildBoneUsageVer3()</a>, <a class="el" href="a05989.html#l01105">buildSkin()</a>, <a class="el" href="a05989.html#l01062">compileRunTime()</a>, <a class="el" href="a05989.html#l01456">computeBonesId()</a>, <a class="el" href="a05989.html#l02133">computeMeshVBHeap()</a>, <a class="el" href="a05990.html#l00393">getNbMatrixBlock()</a>, <a class="el" href="a05990.html#l00398">getNbRdrPass()</a>, <a class="el" href="a05989.html#l02016">getNumRdrPassesForInstance()</a>, <a class="el" href="a05989.html#l02011">getNumRdrPassesForMesh()</a>, <a class="el" href="a05989.html#l01429">getNumTriangles()</a>, <a class="el" href="a05990.html#l00413">getRdrPassMaterial()</a>, <a class="el" href="a05990.html#l00404">getRdrPassPrimitiveBlock()</a>, <a class="el" href="a05989.html#l00153">optimizeTriangleOrder()</a>, <a class="el" href="a05989.html#l01932">profileSceneRender()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l02075">renderPass()</a>, <a class="el" href="a05989.html#l00915">renderSimpleWithMaterial()</a>, and <a class="el" href="a05989.html#l00788">renderSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr7" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr7">NL3D::CMeshGeom::_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="a05990.html#l00712">712</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, <a class="el" href="a05989.html#l01062">compileRunTime()</a>, <a class="el" href="a05990.html#l00419">getNbBlendShapes()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, <a class="el" href="a05989.html#l00449">setBlendShapes()</a>, <a class="el" href="a05989.html#l00523">updateVertexBufferHard()</a>, and <a class="el" href="a05989.html#l00136">~CMeshGeom()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr8" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr8">NL3D::CMeshGeom::_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="a05990.html#l00716">716</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02058">activeInstance()</a>, <a class="el" href="a05989.html#l02021">beginMesh()</a>, <a class="el" href="a05989.html#l01615">bkupOriginalSkinVertices()</a>, <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l01062">compileRunTime()</a>, <a class="el" href="a05989.html#l02100">endMesh()</a>, <a class="el" href="a05989.html#l02114">getVBHeapInfo()</a>, <a class="el" href="a05990.html#l00478">hasMeshVertexProgram()</a>, <a class="el" href="a05989.html#l00474">initInstance()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, and <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr9" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr9">NL3D::CMeshGeom::_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="a05990.html#l00652">652</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>, <a class="el" href="a05989.html#l01615">bkupOriginalSkinVertices()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, and <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr10" doxytag="NL3D::CMeshGeom::_OriginalSkinRestored" ></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="a02878.html#NL3D_1_1CMeshGeomr10">NL3D::CMeshGeom::_OriginalSkinRestored</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This tells if the mesh VBuffer has coorect BindPos vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00666">666</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, <a class="el" href="a05989.html#l00598">render()</a>, and <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr11" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr11">NL3D::CMeshGeom::_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. Potentially modified by the mesh morpher
+<p>
+Definition at line <a class="el" href="a05990.html#l00651">651</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>, <a class="el" href="a05989.html#l01615">bkupOriginalSkinVertices()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, and <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr12" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr12">NL3D::CMeshGeom::_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="a05990.html#l00653">653</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01715">applySkin()</a>, <a class="el" href="a05989.html#l01615">bkupOriginalSkinVertices()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, and <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr13" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr13">NL3D::CMeshGeom::_PreciseClipping</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Estimate if we must do a Precise clipping (ie with bboxes).
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00709">709</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00482">clip()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, and <a class="el" href="a05989.html#l01062">compileRunTime()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr14" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomr14">NL3D::CMeshGeom::_Skinned</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This tells if the mesh is correctly skinned.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00664">664</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l01615">bkupOriginalSkinVertices()</a>, <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l01549">buildBoneUsageVer3()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, <a class="el" href="a05989.html#l01062">compileRunTime()</a>, <a class="el" href="a05990.html#l00428">isSkinned()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, <a class="el" href="a05989.html#l01663">restoreOriginalSkinVertices()</a>, and <a class="el" href="a05989.html#l00523">updateVertexBufferHard()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz421_1" doxytag="NL3D::CMeshGeom::_SupportMBRFlags" ></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="a02878.html#NL3D_1_1CMeshGeomz421_1">NL3D::CMeshGeom::_SupportMBRFlags</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="a05990.html#l00705">705</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02058">activeInstance()</a>, <a class="el" href="a05989.html#l02021">beginMesh()</a>, <a class="el" href="a05989.html#l01062">compileRunTime()</a>, <a class="el" href="a05989.html#l02100">endMesh()</a>, <a class="el" href="a05989.html#l02114">getVBHeapInfo()</a>, <a class="el" href="a05989.html#l02075">renderPass()</a>, <a class="el" href="a05989.html#l02006">sortPerMaterial()</a>, and <a class="el" href="a05989.html#l02000">supportMeshBlockRendering()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr15" doxytag="NL3D::CMeshGeom::_VBuffer" ></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="a02878.html#NL3D_1_1CMeshGeomr15">NL3D::CMeshGeom::_VBuffer</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+VBuffer of the mesh (potentially modified by the mesh morpher and skinning).
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00656">656</a> of file <a class="el" href="a05990.html">mesh.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomr16" doxytag="NL3D::CMeshGeom::_VBufferOri" ></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="a02878.html#NL3D_1_1CMeshGeomr16">NL3D::CMeshGeom::_VBufferOri</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The original VBuffer of the mesh used only if there are blend shapes.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00658">658</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00598">render()</a>, and <a class="el" href="a05989.html#l00788">renderSkin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz419_2" doxytag="NL3D::CMeshGeom::_VertexBufferHard" ></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="a02878.html#NL3D_1_1CMeshGeomz419_2">NL3D::CMeshGeom::_VertexBufferHard</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The only one VBufferHard of the mesh. NULL by default.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00684">684</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l02021">beginMesh()</a>, <a class="el" href="a05989.html#l01932">profileSceneRender()</a>, <a class="el" href="a05989.html#l00598">render()</a>, <a class="el" href="a05989.html#l00788">renderSkin()</a>, <a class="el" href="a05989.html#l00523">updateVertexBufferHard()</a>, and <a class="el" href="a05989.html#l00136">~CMeshGeom()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CMeshGeomz419_3" doxytag="NL3D::CMeshGeom::_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="a02878.html#NL3D_1_1CMeshGeomz419_3">NL3D::CMeshGeom::_VertexBufferHardDirty</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This tells if the VBuffer has changed since the last time or not.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05990.html#l00688">688</a> of file <a class="el" href="a05990.html">mesh.h</a>.
+<p>
+Referenced by <a class="el" href="a05989.html#l00172">build()</a>, <a class="el" href="a05989.html#l00123">CMeshGeom()</a>, and <a class="el" href="a05989.html#l00523">updateVertexBufferHard()</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a05990.html">mesh.h</a><li><a class="el" href="a05989.html">mesh.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 06:52:03 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>