diff options
author | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
---|---|---|
committer | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
commit | 0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch) | |
tree | 2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/a02892.html | |
download | nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip |
Initial commit
Diffstat (limited to 'docs/doxygen/nel/a02892.html')
-rw-r--r-- | docs/doxygen/nel/a02892.html | 8248 |
1 files changed, 8248 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02892.html b/docs/doxygen/nel/a02892.html new file mode 100644 index 00000000..a4816f08 --- /dev/null +++ b/docs/doxygen/nel/a02892.html @@ -0,0 +1,8248 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>NeL: NL3D::CMeshMRMGeom class Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.3.6 --> +<div class="qindex"> <form class="search" action="search.php" method="get"> +<a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related Pages</a> | <span class="search"><u>S</u>earch for <input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div> +<h1>NL3D::CMeshMRMGeom Class Reference</h1><code>#include <<a class="el" href="a06006.html">mesh_mrm.h</a>></code> +<p> +<p>Inheritance diagram for NL3D::CMeshMRMGeom: +<p><center><img src="a02892.png" usemap="#NL3D::CMeshMRMGeom_map" border="0" alt=""></center> +<map name="NL3D::CMeshMRMGeom_map"> +<area href="a02879.html" alt="NL3D::IMeshGeom" shape="rect" coords="0,112,152,136"> +<area href="a02867.html" alt="NLMISC::IStreamable" shape="rect" coords="0,56,152,80"> +<area href="a02540.html" alt="NLMISC::IClassable" shape="rect" coords="0,0,152,24"> +</map> +<hr><a name="_details"></a><h2>Detailed Description</h2> +An MRM mesh geometry, with no materials information.<p> +To build a <a class="el" href="a02892.html">CMeshMRMGeom</a>, you should:<ul> +<li>build a <a class="el" href="a02864.html">CMesh::CMeshBuild</a> meshBuild (see <a class="el" href="a02857.html">CMesh</a>)</li><li>call MeshMRMGeom.build(MeshBuild);</li></ul> +<p> +NB: internally, <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma1">build()</a> use <a class="el" href="a02951.html">CMRMBuilder</a>, a builder of MRM.<p> +<dl compact><dt><b>Author:</b></dt><dd>Lionel Berenguier <p> +Nevrax France </dd></dl> +<dl compact><dt><b>Date:</b></dt><dd>2001 </dd></dl> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00081">81</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>.<table border=0 cellpadding=0 cellspacing=0> +<tr><td></td></tr> +<tr><td colspan=2><br><h2>RawSkin optimisation.</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_0">NumCacheVertexNormal1</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03309.html">CRawVertexNormalSkin1</a>)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_1">NumCacheVertexNormal2</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03310.html">CRawVertexNormalSkin2</a>)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_2">NumCacheVertexNormal3</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03311.html">CRawVertexNormalSkin3</a>)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_3">NumCacheVertexNormal4</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03312.html">CRawVertexNormalSkin4</a>)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_4">NumCacheVertexShadow</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a02897.html">CMeshMRMGeom::CShadowVertex</a>)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_5">applyArrayRawSkinNormal1</a> (<a class="el" href="a03309.html">CRawVertexNormalSkin1</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_6">applyArrayRawSkinNormal2</a> (<a class="el" href="a03310.html">CRawVertexNormalSkin2</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_7">applyArrayRawSkinNormal3</a> (<a class="el" href="a03311.html">CRawVertexNormalSkin3</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_8">applyArrayRawSkinNormal4</a> (<a class="el" href="a03312.html">CRawVertexNormalSkin4</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a04558.html#a7">uint8</a> *destVertexPtr, <a class="el" href="a02852.html">CMatrix3x4</a> *boneMat3x4, <a class="el" href="a04558.html#a15">uint</a> nInf)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_9">dirtMeshDataId</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Increment the refCount, so instances RawSkins are no longer valid. <a href="#NL3D_1_1CMeshMRMGeomz490_9"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_10">updateRawSkinNormal</a> (bool enabled, <a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a14">sint</a> curLodId)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">compute RawSkin info in the MRMInstance according to current skin setup. <a href="#NL3D_1_1CMeshMRMGeomz490_10"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Each time the mesh is loaded/built, this increment. <a href="#NL3D_1_1CMeshMRMGeomz490_11"></a><br><br></td></tr> +<tr><td colspan=2><br><h2>ShadowMap Skin rendering</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_0">applyArrayShadowSkin</a> (<a class="el" href="a02897.html">CShadowVertex</a> *<a class="el" href="a04223.html#a652">src</a>, <a class="el" href="a03128.html">CVector</a> *dst, <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a04558.html#a15">uint</a> numVerts)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a04558.html#a11">uint32</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a02897.html">CShadowVertex</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a></td></tr> + +<tr><td colspan=2><br><h2>Hard VB</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_0">deleteVertexBufferHard</a> ()</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_1">fillAGPSkinPartWithVBHardPtr</a> (<a class="el" href="a02893.html">CLod</a> &lod, <a class="el" href="a04558.html#a7">uint8</a> *vertexDst)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_2">updateVertexBufferHard</a> (<a class="el" href="a02434.html">IDriver</a> *drv, <a class="el" href="a04558.html#a11">uint32</a> numVertices)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">CRefPtr</a>< <a class="el" href="a02434.html">IDriver</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">NB: HERE FOR PACKING ONLY. For clipping. Estimate if we must do a Precise clipping (ie with bboxes). <a href="#NL3D_1_1CMeshMRMGeomz484_4"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">CRefPtr</a>< <a class="el" href="a03694.html">IVertexBufferHard</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a></td></tr> + +<tr><td colspan=2><br><h2>Public Types</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>enum </td><td class="memItemRight" valign=bottom><a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5">TRenderFlag</a> { <br> + <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> + <a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw0">RenderGADisableZWrite</a> = 16 +<br> + }</td></tr> + +<tr><td class="mdescLeft"> </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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma0">applyMaterialRemap</a> (const std::vector< <a class="el" href="a04558.html#a14">sint</a> > &remap)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">change materials Ids (called from <a class="el" href="a02857.html#NL3D_1_1CMesha11">CMesh::optimizeMaterialUsage()</a>) <a href="#NL3D_1_1CMeshMRMGeoma0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma1">build</a> (<a class="el" href="a02864.html">CMesh::CMeshBuild</a> &m, std::vector< <a class="el" href="a02864.html">CMesh::CMeshBuild</a> * > &bsList, <a class="el" href="a04558.html#a15">uint</a> numMaxMaterial, const <a class="el" href="a02967.html">CMRMParameters</a> &<a class="el" href="a04223.html#a565">params</a>=<a class="el" href="a02967.html">CMRMParameters</a>())</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma2">changeMRMDistanceSetup</a> (float distanceFinest, float distanceMiddle, float distanceCoarsest)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma3">CMeshMRMGeom</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <a href="#NL3D_1_1CMeshMRMGeoma3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual std::string </td><td class="memItemRight" valign=bottom><a class="el" href="a02540.html#NL3D_1_1ITrackKeyFramer_3_01CKeyVector_01_4a6">getClassName</a> ()=0</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02959.html">CMRMLevelDetail</a> & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma5">getLevelDetail</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get the MRM level detail information <a href="#NL3D_1_1CMeshMRMGeoma5"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma6">hasMeshVertexProgram</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">True if this mesh has a vertexProgram. <a href="#NL3D_1_1CMeshMRMGeoma6"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeoma7">~CMeshMRMGeom</a> ()</td></tr> + +<tr><td colspan="2"><div class="groupHeader">Mesh Block Render Implementation</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_0">activeInstance</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_1">beginMesh</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &rdrCtx)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_2">computeMeshVBHeap</a> (void *dst, <a class="el" href="a04558.html#a15">uint</a> indexStart)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_3">endMesh</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &rdrCtx)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_4">getNumRdrPassesForInstance</a> (<a class="el" href="a02873.html">CMeshBaseInstance</a> *inst) const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_5">getNumRdrPassesForMesh</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_6">getVBHeapInfo</a> (<a class="el" href="a04558.html#a15">uint</a> &vertexFormat, <a class="el" href="a04558.html#a15">uint</a> &numVertices)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_7">isActiveInstanceNeedVBFill</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_8">renderPass</a> (<a class="el" href="a02887.html">CMeshGeomRenderContext</a> &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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_9">sortPerMaterial</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_10">supportMeshBlockRendering</a> () const </td></tr> + +<tr><td colspan="2"><div class="groupHeader">From IMeshGeom</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_0">clip</a> (const std::vector< <a class="el" href="a03082.html">CPlane</a> > &pyramid, const <a class="el" href="a02851.html">CMatrix</a> &worldMatrix)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">clip this mesh in a driver. true if visible. <a href="#NL3D_1_1CMeshMRMGeomz467_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual float </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_1">getNumTriangles</a> (float distance)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get an approximation of the number of triangles this instance will render for a fixed distance. <a href="#NL3D_1_1CMeshMRMGeomz467_1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_2">initInstance</a> (<a class="el" href="a02873.html">CMeshBaseInstance</a> *mbi)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Init instance info. <a href="#NL3D_1_1CMeshMRMGeomz467_2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_3">NLMISC_DECLARE_CLASS</a> (<a class="el" href="a02892.html">CMeshMRMGeom</a>)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">clip this mesh in a driver. true if visible. <a href="#NL3D_1_1CMeshMRMGeomz467_3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_4">profileSceneRender</a> (<a class="el" href="a03325.html">CRenderTrav</a> *rdrTrav, <a class="el" href="a02537.html">CTransformShape</a> *trans, float polygonCount, <a class="el" href="a04558.html#a11">uint32</a> rdrFlags)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Scene profile. <a href="#NL3D_1_1CMeshMRMGeomz467_4"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render</a> (<a class="el" href="a02434.html">IDriver</a> *drv, <a class="el" href="a02537.html">CTransformShape</a> *trans, float polygonCount, <a class="el" href="a04558.html#a11">uint32</a> rdrFlags, float globalAlpha)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh in a driver, given an instance and his materials. <a href="#NL3D_1_1CMeshMRMGeomz467_5"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_6">renderSkin</a> (<a class="el" href="a02537.html">CTransformShape</a> *trans, float alphaMRM)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh as a skin <a href="#NL3D_1_1CMeshMRMGeomz467_6"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_7">serial</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f) throw (NLMISC::EStream)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">serial this meshGeom. <a href="#NL3D_1_1CMeshMRMGeomz467_7"></a><br><br></td></tr> +<tr><td colspan="2"><div class="groupHeader">Skinning Behavior</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_0">computeBonesId</a> (<a class="el" href="a03399.html">CSkeletonModel</a> *skeleton)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute skinning id. <a href="#NL3D_1_1CMeshMRMGeomz473_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector< <a class="el" href="a02291.html">NLMISC::CBSphere</a> > & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_1">getSkinBoneSphere</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value. computeBonesId must has been called before. <a href="#NL3D_1_1CMeshMRMGeomz473_1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector< <a class="el" href="a04558.html#a10">sint32</a> > & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_2">getSkinBoneUsage</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">return array of bones used by the skin. computeBonesId must has been called before. <a href="#NL3D_1_1CMeshMRMGeomz473_2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_3">isSkinned</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Return true if the mesh is skinned, else return false. <a href="#NL3D_1_1CMeshMRMGeomz473_3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz473_4">updateSkeletonUsage</a> (<a class="el" href="a03399.html">CSkeletonModel</a> *sm, bool increment)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">update Skeleton Usage. increment or decrement. computeBonesId must has been called before. <a href="#NL3D_1_1CMeshMRMGeomz473_4"></a><br><br></td></tr> +<tr><td colspan="2"><div class="groupHeader">Geometry accessors</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector< std::string > & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_0">getBonesName</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get the bone names of the meshMRM. <a href="#NL3D_1_1CMeshMRMGeomz471_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a> & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_1">getBoundingBox</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get the extended axis aligned bounding box of the mesh <a href="#NL3D_1_1CMeshMRMGeomz471_1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_2">getGeomorphs</a> (<a class="el" href="a04558.html#a15">uint</a> lodId) const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Advanced. get the geomorphs for a special lod. <a href="#NL3D_1_1CMeshMRMGeomz471_2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_3">getNbBlendShapes</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get the number of BlendShapes <a href="#NL3D_1_1CMeshMRMGeomz471_3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_5">getNbRdrPass</a> (<a class="el" href="a04558.html#a15">uint</a> lodId) const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_6">getRdrPassMaterial</a> (<a class="el" href="a04558.html#a15">uint</a> lodId, <a class="el" href="a04558.html#a15">uint</a> renderingPassIndex) const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03105.html">CPrimitiveBlock</a> & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_7">getRdrPassPrimitiveBlock</a> (<a class="el" href="a04558.html#a15">uint</a> lodId, <a class="el" href="a04558.html#a15">uint</a> renderingPassIndex) const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector< <a class="el" href="a02865.html">CMesh::CSkinWeight</a> > & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_8">getSkinWeights</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get the skinWeights used by the mrm mesh. NB: same size of the vertexBuffer. empty if !isSkinned() <a href="#NL3D_1_1CMeshMRMGeomz471_8"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03692.html">CVertexBuffer</a> & </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_9">getVertexBuffer</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">get the vertex buffer used by the mrm mesh. NB: this VB store all Vertices used by All LODs. <a href="#NL3D_1_1CMeshMRMGeomz471_9"></a><br><br></td></tr> +<tr><td colspan="2"><div class="groupHeader">Lod management.</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_1">loadFirstLod</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_2">loadNextLod</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_3">unloadNextLod</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f)</td></tr> + +<tr><td colspan="2"><div class="groupHeader">ShadowMap Skin rendering</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_0">getNumShadowSkinVertices</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the num of shadow skin vertices. <a href="#NL3D_1_1CMeshMRMGeomz479_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_1">renderShadowSkinGeom</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a15">uint</a> remainingVertices, <a class="el" href="a04558.html#a7">uint8</a> *vbDest)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the num of shadow skin vertices. <a href="#NL3D_1_1CMeshMRMGeomz479_1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_2">renderShadowSkinPrimitives</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a02839.html">CMaterial</a> &castMat, <a class="el" href="a02434.html">IDriver</a> *drv, <a class="el" href="a04558.html#a15">uint</a> baseVertex)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the num of shadow skin vertices. <a href="#NL3D_1_1CMeshMRMGeomz479_2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_3">setShadowMesh</a> (const std::vector< <a class="el" href="a02897.html">CShadowVertex</a> > &shadowVertices, const std::vector< <a class="el" href="a04558.html#a11">uint32</a> > &triangles)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Setup the ShadowMesh. <a href="#NL3D_1_1CMeshMRMGeomz479_3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz479_4">supportShadowSkinGrouping</a> () const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Render the ShadowSkin (SkinGroup like). <a href="#NL3D_1_1CMeshMRMGeomz479_4"></a><br><br></td></tr> +<tr><td colspan="2"><div class="groupHeader">Special SkinGrouping Rendering</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_0">renderSkinGroupGeom</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, float alphaMRM, <a class="el" href="a04558.html#a15">uint</a> remainingVertices, <a class="el" href="a04558.html#a7">uint8</a> *vbDest)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_1">renderSkinGroupPrimitives</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a15">uint</a> baseVertex, std::vector< <a class="el" href="a03407.html">CSkinSpecularRdrPass</a> > &specularRdrPasses, <a class="el" href="a04558.html#a15">uint</a> skinIndex)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_2">renderSkinGroupSpecularRdrPass</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a15">uint</a> rdrPassId)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz477_3">supportSkinGrouping</a> () const </td></tr> + +<tr><td colspan=2><br><h2>Private Member Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a> (std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > &geoms, float alphaLod, <a class="el" href="a03694.html">IVertexBufferHard</a> *currentVBHard)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply the geomorph to the _VBuffer, or the VBhard, if exist/used. <a href="#NL3D_1_1CMeshMRMGeomd0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd1">applyGeomorphPosNormalUV0</a> (std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > &geoms, <a class="el" href="a04558.html#a7">uint8</a> *vertexPtr, <a class="el" href="a04558.html#a7">uint8</a> *vertexDestPtr, <a class="el" href="a04558.html#a10">sint32</a> vertexSize, float a, float a1)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Faster, but common geomorph apply. <a href="#NL3D_1_1CMeshMRMGeomd1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a> (std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > &geoms, float alphaLod, <a class="el" href="a04558.html#a7">uint8</a> *vertexDestPtr)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply the geomorph to the VBhard ptr, if not NULL. <a href="#NL3D_1_1CMeshMRMGeomd2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd3">applyRawSkinWithNormal</a> (<a class="el" href="a02893.html">CLod</a> &lod, <a class="el" href="a03307.html">CRawSkinNormalCache</a> &rawSkinLod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a04558.html#a7">uint8</a> *vbHard, float alphaLod)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd4">applySkin</a> (<a class="el" href="a02893.html">CLod</a> &lod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Skinning: Apply skinning to the _VBuffer (before geomorph). <a href="#NL3D_1_1CMeshMRMGeomd4"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd5">applySkinWithNormal</a> (<a class="el" href="a02893.html">CLod</a> &lod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd6">applySkinWithTangentSpace</a> (<a class="el" href="a02893.html">CLod</a> &lod, const <a class="el" href="a03399.html">CSkeletonModel</a> *skeleton, <a class="el" href="a04558.html#a15">uint</a> tangentSpaceTexCoord)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd7">bkupOriginalSkinVertices</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Skinning: bkup Vertex/Normal into _OriginalSkin* from VBuffer. <a href="#NL3D_1_1CMeshMRMGeomd7"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd8">bkupOriginalSkinVerticesSubset</a> (<a class="el" href="a04558.html#a15">uint</a> wedgeStart, <a class="el" href="a04558.html#a15">uint</a> wedgeEnd)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd9">buildBoneUsageVer2</a> ()</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a> (float alphaMRM, float &alphaLod)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">choose the lod according to the alphaMRM [0,1] given. <a href="#NL3D_1_1CMeshMRMGeomd10"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd11">compileRunTime</a> ()</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd12">load</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f) throw (NLMISC::EStream)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">load this mesh. <a href="#NL3D_1_1CMeshMRMGeomd12"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd13">loadHeader</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f) throw (NLMISC::EStream)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">load the header of this mesh. return the version of the header. <a href="#NL3D_1_1CMeshMRMGeomd13"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd14">restoreOriginalSkinPart</a> (<a class="el" href="a02893.html">CLod</a> &lod, <a class="el" href="a03694.html">IVertexBufferHard</a> *currentVBHard)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Skinning: same as <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices()</a>, but for one Lod only. <a href="#NL3D_1_1CMeshMRMGeomd14"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Skinning: restore Vertex/Normal from _OriginalSkin* to VBuffer. <a href="#NL3D_1_1CMeshMRMGeomd15"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd16">save</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f) throw (NLMISC::EStream)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">save the entire mesh. <a href="#NL3D_1_1CMeshMRMGeomd16"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &f, <a class="el" href="a04558.html#a15">uint</a> startWedge, <a class="el" href="a04558.html#a15">uint</a> endWedge)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">serial a subset of the vertices. <a href="#NL3D_1_1CMeshMRMGeomd17"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd18">updateShiftedTriangleCache</a> (<a class="el" href="a02899.html">CMeshMRMInstance</a> *mi, <a class="el" href="a04558.html#a14">sint</a> curLodId, <a class="el" href="a04558.html#a15">uint</a> baseVertex)</td></tr> + +<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02157.html">NLMISC::CAABBoxExt</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">For clipping. this is the BB of all vertices of all Lods. <a href="#NL3D_1_1CMeshMRMGeomr0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This boolean is true if the bones id have been passed in the skeleton. <a href="#NL3D_1_1CMeshMRMGeomr1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">true if the _BonesIdExt have been computed (for bone Usage). <a href="#NL3D_1_1CMeshMRMGeomr2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a04558.html#a10">sint32</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This array give the index in the skeleton of the local bones used. computed at first computeBoneId(). <a href="#NL3D_1_1CMeshMRMGeomr3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a04558.html#a10">sint32</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Same as _BonesId but with parent of bones added. (used for bone usage). <a href="#NL3D_1_1CMeshMRMGeomr4"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< std::string > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This array give the name of the local bones. <a href="#NL3D_1_1CMeshMRMGeomr5"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a02291.html">NLMISC::CBSphere</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value <a href="#NL3D_1_1CMeshMRMGeomr6"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a7">uint8</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Last lod rendered. used with renderSkinGroup*() only. <a href="#NL3D_1_1CMeshMRMGeomr7"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a02894.html">CLodInfo</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Info for pre-loading Lods. <a href="#NL3D_1_1CMeshMRMGeomr8"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a02893.html">CLod</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">List of Lods. <a href="#NL3D_1_1CMeshMRMGeomr9"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02890.html">CMeshMorpher</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03408.html">NLMISC::CSmartPtr</a>< <a class="el" href="a02916.html">IMeshVertexProgram</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a03128.html">CVector</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a03128.html">CVector</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Skinning: this is the list of vertices (mirror of VBuffer), at the bind Pos. <a href="#NL3D_1_1CMeshMRMGeomr14"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a03128.html">CVector</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Skinning: This tells if the mesh is correctly skinned (suuport skinning). <a href="#NL3D_1_1CMeshMRMGeomr16"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a02865.html">CMesh::CSkinWeight</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This is the array of SkinWeights, same size as the VB. <a href="#NL3D_1_1CMeshMRMGeomr17"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">if true, then maybe use faster render <a href="#NL3D_1_1CMeshMRMGeomr18"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03692.html">CVertexBuffer</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">The Final VBuffer. <a href="#NL3D_1_1CMeshMRMGeomr19"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03692.html">CVertexBuffer</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr20">_VBufferOriginal</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">The Original VBuffer. <a href="#NL3D_1_1CMeshMRMGeomr20"></a><br><br></td></tr> +<tr><td colspan="2"><div class="groupHeader"></div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02959.html">CMRMLevelDetail</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a></td></tr> + +<tr><td colspan="2"><div class="groupHeader">Mesh Block Render Implementation</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_0">_MBRBkupNormalize</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">BeginMesh setup. <a href="#NL3D_1_1CMeshMRMGeomz486_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">global setup at activateInstance() <a href="#NL3D_1_1CMeshMRMGeomz486_1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">setuped at compileRunTime. <a href="#NL3D_1_1CMeshMRMGeomz486_2"></a><br><br></td></tr> +<tr><td colspan=2><br><h2>Friends</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>class </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomn0">CMRMBuilder</a></td></tr> + +<tr><td colspan="2"><div class="groupHeader">Structures for building a MRM mesh.</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>class </td><td class="memItemRight" valign=bottom><a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a></td></tr> + +</table> +<hr><h2>Member Enumeration Documentation</h2> +<a class="anchor" name="NL3D_1_1IMeshGeomw5" doxytag="NL3D::CMeshMRMGeom::TRenderFlag" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> enum <a class="el" href="a02879.html#NL3D_1_1IMeshGeomw5">NL3D::IMeshGeom::TRenderFlag</a><code> [inherited]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw4" doxytag="RenderTransparentMaterial" ></a>RenderTransparentMaterial</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw3" doxytag="RenderPassOpaque" ></a>RenderPassOpaque</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw1" doxytag="RenderGlobalAlpha" ></a>RenderGlobalAlpha</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw0" doxytag="RenderGADisableZWrite" ></a>RenderGADisableZWrite</em> </td><td> +</td></tr> +</table> +</dl> + +<p> +Definition at line <a class="el" href="a06000.html#l00082">82</a> of file <a class="el" href="a06000.html">mesh_geom.h</a>. +<p> +<div class="fragment"><pre>00083 { +00084 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw2">RenderOpaqueMaterial</a>= 1, <span class="comment">// set when the mesh geom must render opaque material</span> +00085 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw4">RenderTransparentMaterial</a>= 2, <span class="comment">// set when the mesh geom must render transparent material</span> +00086 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw3">RenderPassOpaque</a>=4, <span class="comment">// set when the current traversal rdrPass is the opaque pass</span> +00087 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw1">RenderGlobalAlpha</a>= 8, <span class="comment">// set when the caller wants to draw material with global alpha</span> +00088 <a class="code" href="a02879.html#NL3D_1_1IMeshGeomw5NL3D_1_1IMeshGeomw0">RenderGADisableZWrite</a>= 16, <span class="comment">// only when globalAlpha is used. set if must disable ZWrite</span> +00089 }; +</pre></div> </td> + </tr> +</table> +<hr><h2>Constructor & Destructor Documentation</h2> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma3" doxytag="NL3D::CMeshMRMGeom::CMeshMRMGeom" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NL3D::CMeshMRMGeom::CMeshMRMGeom </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Constructor. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00204">204</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, <a class="el" href="a06006.html#l00639">_MeshDataId</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06006.html#l00560">_SupportMeshBlockRendering</a>, <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>, and <a class="el" href="a06006.html#l00498">_SupportSkinGrouping</a>. +<p> +<div class="fragment"><pre>00205 { +00206 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>; +00207 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>= <span class="keyword">false</span>; +00208 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= 0; +00209 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a> = <span class="keyword">false</span>; +00210 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a> = <span class="keyword">false</span>; +00211 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a>= <span class="keyword">false</span>; +00212 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= <span class="keyword">false</span>; +00213 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>= 0; +00214 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>= <span class="keyword">false</span>; +00215 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>= 0; +00216 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= <span class="keyword">false</span>; +00217 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma7" doxytag="NL3D::CMeshMRMGeom::~CMeshMRMGeom" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NL3D::CMeshMRMGeom::~<a class="el" href="a02892.html">CMeshMRMGeom</a> </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00221">221</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06005.html#l02209">deleteVertexBufferHard()</a>. +<p> +<div class="fragment"><pre>00222 { +00223 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_0">deleteVertexBufferHard</a>(); +00224 } +</pre></div> </td> + </tr> +</table> +<hr><h2>Member Function Documentation</h2> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_0" doxytag="NL3D::CMeshMRMGeom::activeInstance" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::activeInstance </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> & </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> * </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 </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 * </td> + <td class="mdname" nowrap> <em>vbDst</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The framework call this method any time a change of instance occurs. +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_0">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02738">2738</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>, <a class="el" href="a06570.html#l00105">NL3D::CTransformShape::changeLightSetup()</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a06060.html#l00101">NL3D::CMRMLevelDetail::getLevelDetailFromPolyCount()</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, <a class="el" href="a06000.html#l00064">NL3D::CMeshGeomRenderContext::RenderTrav</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver::setupModelMatrix()</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +<div class="fragment"><pre>02739 { +02740 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_RenderNormal ); +02741 +02742 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty()) +02743 <span class="keywordflow">return</span>; +02744 +02745 <span class="comment">// get the result of the Load Balancing.</span> +02746 <span class="keywordtype">float</span> alphaMRM= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getLevelDetailFromPolyCount(polygonCount); +02747 +02748 <span class="comment">// choose the lod.</span> +02749 <span class="keywordtype">float</span> alphaLod; +02750 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod); +02751 +02752 <span class="comment">// Geomorph the choosen Lod (if not the coarser mesh).</span> +02753 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>>0) +02754 { +02755 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap) +02756 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a>(_Lods[_MBRCurrentLodId].Geomorphs, alphaLod, (<a class="code" href="a04558.html#a7">uint8</a>*)vbDst); +02757 <span class="keywordflow">else</span> +02758 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a>(_Lods[_MBRCurrentLodId].Geomorphs, alphaLod, _VBHard); +02759 } +02760 +02761 <span class="comment">// set the instance worldmatrix.</span> +02762 rdrCtx.Driver->setupModelMatrix(inst->getWorldMatrix()); +02763 +02764 <span class="comment">// setupLighting.</span> +02765 inst->changeLightSetup(rdrCtx.RenderTrav); +02766 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_5" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal1" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal1 </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03309.html">CRawVertexNormalSkin1</a> * </td> + <td class="mdname" nowrap> <em>src</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>destVertexPtr</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> * </td> + <td class="mdname" nowrap> <em>boneMat3x4</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>nInf</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00895">895</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_6" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal2" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal2 </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03310.html">CRawVertexNormalSkin2</a> * </td> + <td class="mdname" nowrap> <em>src</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>destVertexPtr</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> * </td> + <td class="mdname" nowrap> <em>boneMat3x4</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>nInf</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l01074">1074</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_7" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal3" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal3 </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03311.html">CRawVertexNormalSkin3</a> * </td> + <td class="mdname" nowrap> <em>src</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>destVertexPtr</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> * </td> + <td class="mdname" nowrap> <em>boneMat3x4</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>nInf</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l01377">1377</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_8" doxytag="NL3D::CMeshMRMGeom::applyArrayRawSkinNormal4" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayRawSkinNormal4 </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03312.html">CRawVertexNormalSkin4</a> * </td> + <td class="mdname" nowrap> <em>src</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>destVertexPtr</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02852.html">CMatrix3x4</a> * </td> + <td class="mdname" nowrap> <em>boneMat3x4</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>nInf</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l01771">1771</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_0" doxytag="NL3D::CMeshMRMGeom::applyArrayShadowSkin" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyArrayShadowSkin </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02897.html">CShadowVertex</a> * </td> + <td class="mdname" nowrap> <em>src</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03128.html">CVector</a> * </td> + <td class="mdname" nowrap> <em>dst</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03399.html">CSkeletonModel</a> * </td> + <td class="mdname" nowrap> <em>skeleton</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>numVerts</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00339">339</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06009.html#l00179">NL3D::computeBoneMatrixes3x4()</a>, <a class="el" href="a06006.html#l00392">NL3D::CMeshMRMGeom::CLod::MatrixInfluences</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a06009.html#l00389">NumCacheVertexShadow</a>, <a class="el" href="a05646.html#l01124">src</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l03376">renderShadowSkinGeom()</a>. +<p> +<div class="fragment"><pre>00340 { +00341 <span class="comment">// For all matrix this Mesh use. (the shadow geometry cannot use other Matrix than the mesh use).</span> +00342 <span class="comment">// NB: take the best lod since the lower lods cannot use other Matrix than the higher one.</span> +00343 <span class="keyword">static</span> vector<CMatrix3x4> boneMat3x4; +00344 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[_Lods.size()-1]; +00345 <a class="code" href="a05363.html#a433">computeBoneMatrixes3x4</a>(boneMat3x4, lod.MatrixInfluences, skeleton); +00346 +00347 <span class="comment">// Then do the skin</span> +00348 <span class="keywordflow">for</span>(;numVerts>0;) +00349 { +00350 <span class="comment">// number of vertices to process for this block.</span> +00351 <a class="code" href="a04558.html#a15">uint</a> nBlockInf= <a class="code" href="a04061.html#a0">min</a>(NumCacheVertexShadow, numVerts); +00352 <span class="comment">// next block.</span> +00353 numVerts-= nBlockInf; +00354 +00355 <span class="comment">// cache the data in L1 cache.</span> +00356 CFastMem::precache(src, nBlockInf * <span class="keyword">sizeof</span>(CShadowVertex)); +00357 +00358 <span class="comment">// for all InfluencedVertices only.</span> +00359 <span class="keywordflow">for</span>(;nBlockInf>0;nBlockInf--, <a class="code" href="a04223.html#a652">src</a>++, dst++) +00360 { +00361 boneMat3x4[ <a class="code" href="a04223.html#a652">src</a>->MatrixId ].mulSetPoint( <a class="code" href="a04223.html#a652">src</a>->Vertex, *dst ); +00362 } +00363 } +00364 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd0" doxytag="NL3D::CMeshMRMGeom::applyGeomorph" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyGeomorph </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > & </td> + <td class="mdname" nowrap> <em>geoms</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>alphaLod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03694.html">IVertexBufferHard</a> * </td> + <td class="mdname" nowrap> <em>currentVBHard</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Apply the geomorph to the _VBuffer, or the VBhard, if exist/used. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00477">477</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>, <a class="el" href="a06713.html#l00053">NL3D::IVertexBufferHard::getVertexSize()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_0">NL3D::IVertexBufferHard::lock()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00096">uint8</a>, and <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_3">NL3D::IVertexBufferHard::unlock()</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l00927">render()</a>, and <a class="el" href="a06005.html#l01146">renderSkin()</a>. +<p> +<div class="fragment"><pre>00478 { +00479 <span class="keywordflow">if</span>(currentVBHard!=NULL) +00480 { +00481 <span class="comment">// must write into it</span> +00482 <a class="code" href="a04558.html#a7">uint8</a> *vertexDestPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)currentVBHard->lock(); +00483 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() == currentVBHard->getVertexSize()); +00484 +00485 <span class="comment">// apply the geomorph</span> +00486 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a>(geoms, alphaLod, vertexDestPtr); +00487 +00488 <span class="comment">// unlock. ATI: copy only geomorphed vertices.</span> +00489 currentVBHard->unlock(0, geoms.size()); +00490 } +00491 <span class="keywordflow">else</span> +00492 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd2">applyGeomorphWithVBHardPtr</a>(geoms, alphaLod, NULL); +00493 +00494 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd1" doxytag="NL3D::CMeshMRMGeom::applyGeomorphPosNormalUV0" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyGeomorphPosNormalUV0 </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > & </td> + <td class="mdname" nowrap> <em>geoms</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vertexPtr</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vertexDestPtr</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a> </td> + <td class="mdname" nowrap> <em>vertexSize</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>a</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>a1</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Faster, but common geomorph apply. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00817">817</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06062.html#l00185">NL3D::CMRMWedgeGeom::End</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06062.html#l00183">NL3D::CMRMWedgeGeom::Start</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>. +<p> +<div class="fragment"><pre>00818 { +00819 <a class="code" href="a04199.html#a6">nlassert</a>(vertexSize==32); +00820 +00821 +00822 <span class="comment">// For all geomorphs.</span> +00823 <a class="code" href="a04558.html#a15">uint</a> nGeoms= geoms.size(); +00824 CMRMWedgeGeom *ptrGeom= &(geoms[0]); +00825 <a class="code" href="a04558.html#a7">uint8</a> *destPtr= vertexDestPtr; +00826 <span class="keywordflow">for</span>(; nGeoms>0; nGeoms--, ptrGeom++, destPtr+= vertexSize ) +00827 { +00828 <span class="comment">// Consider the Pos/Normal/UV as an array of 8 float to interpolate.</span> +00829 <span class="keywordtype">float</span> *start= (<span class="keywordtype">float</span>*)(vertexPtr + (ptrGeom->Start<<5)); +00830 <span class="keywordtype">float</span> *end= (<span class="keywordtype">float</span>*)(vertexPtr + (ptrGeom->End<<5)); +00831 <span class="keywordtype">float</span> *dst= (<span class="keywordtype">float</span>*)(destPtr); +00832 +00833 <span class="comment">// unrolled</span> +00834 dst[0]= start[0] * a + end[0]* a1; +00835 dst[1]= start[1] * a + end[1]* a1; +00836 dst[2]= start[2] * a + end[2]* a1; +00837 dst[3]= start[3] * a + end[3]* a1; +00838 dst[4]= start[4] * a + end[4]* a1; +00839 dst[5]= start[5] * a + end[5]* a1; +00840 dst[6]= start[6] * a + end[6]* a1; +00841 dst[7]= start[7] * a + end[7]* a1; +00842 } +00843 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd2" doxytag="NL3D::CMeshMRMGeom::applyGeomorphWithVBHardPtr" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyGeomorphWithVBHardPtr </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">std::vector< <a class="el" href="a02971.html">CMRMWedgeGeom</a> > & </td> + <td class="mdname" nowrap> <em>geoms</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>alphaLod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vertexDestPtr</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Apply the geomorph to the VBhard ptr, if not NULL. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00498">498</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l00817">applyGeomorphPosNormalUV0()</a>, <a class="el" href="a06340.html#l00104">NLMISC::CRGBA::blendFromui()</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a06062.html#l00185">NL3D::CMRMWedgeGeom::End</a>, <a class="el" href="a06711.html#l00340">NL3D::CVertexBuffer::getColorOff()</a>, <a class="el" href="a06711.html#l00338">NL3D::CVertexBuffer::getNormalOff()</a>, <a class="el" href="a06711.html#l00341">NL3D::CVertexBuffer::getSpecularOff()</a>, <a class="el" href="a06711.html#l00339">NL3D::CVertexBuffer::getTexCoordOff()</a>, <a class="el" href="a06711.html#l00478">NL3D::CVertexBuffer::getValueType()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06062.html#l00183">NL3D::CMRMWedgeGeom::Start</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, and <a class="el" href="a06005.html#l00477">applyGeomorph()</a>. +<p> +<div class="fragment"><pre>00499 { +00500 <span class="comment">// no geomorphs? quit.</span> +00501 <span class="keywordflow">if</span>(geoms.size()==0) +00502 <span class="keywordflow">return</span>; +00503 +00504 <a class="code" href="a05378.html#a374">clamp</a>(alphaLod, 0.f, 1.f); +00505 <span class="keywordtype">float</span> a= alphaLod; +00506 <span class="keywordtype">float</span> a1= 1 - alphaLod; +00507 +00508 +00509 <span class="comment">// info from VBuffer.</span> +00510 <a class="code" href="a04558.html#a7">uint8</a> *vertexPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(); +00511 <a class="code" href="a04558.html#a15">uint</a> flags= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(); +00512 <a class="code" href="a04558.html#a10">sint32</a> vertexSize= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize(); +00513 <span class="comment">// because of the unrolled code for 4 first UV, must assert this.</span> +00514 <a class="code" href="a04199.html#a6">nlassert</a>(CVertexBuffer::MaxStage>=4); +00515 <span class="comment">// must have XYZ.</span> +00516 <a class="code" href="a04199.html#a6">nlassert</a>(flags & CVertexBuffer::PositionFlag); +00517 +00518 +00519 <span class="comment">// If VBuffer Hard disabled</span> +00520 <span class="keywordflow">if</span>(vertexDestPtr==NULL) +00521 { +00522 <span class="comment">// write into vertexPtr.</span> +00523 vertexDestPtr= vertexPtr; +00524 } +00525 +00526 +00527 <span class="comment">// if it is a common format</span> +00528 <span class="keywordflow">if</span>( flags== (CVertexBuffer::PositionFlag | CVertexBuffer::NormalFlag | CVertexBuffer::TexCoord0Flag) && +00529 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getValueType(CVertexBuffer::TexCoord0) == CVertexBuffer::Float2 ) +00530 { +00531 <span class="comment">// use a faster method</span> +00532 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd1">applyGeomorphPosNormalUV0</a>(geoms, vertexPtr, vertexDestPtr, vertexSize, a, a1); +00533 } +00534 <span class="keywordflow">else</span> +00535 { +00536 <span class="comment">// for color interp</span> +00537 <a class="code" href="a04558.html#a15">uint</a> i; +00538 <a class="code" href="a04558.html#a15">uint</a> ua= (<a class="code" href="a04558.html#a15">uint</a>)(a*256); +00539 <a class="code" href="a05378.html#a374">clamp</a>(ua, (<a class="code" href="a04558.html#a15">uint</a>)0, (<a class="code" href="a04558.html#a15">uint</a>)256); +00540 <a class="code" href="a04558.html#a15">uint</a> ua1= 256 - ua; +00541 +00542 <span class="comment">// if an offset is 0, it means that the component is not in the VBuffer.</span> +00543 <a class="code" href="a04558.html#a10">sint32</a> normalOff; +00544 <a class="code" href="a04558.html#a10">sint32</a> colorOff; +00545 <a class="code" href="a04558.html#a10">sint32</a> specularOff; +00546 <a class="code" href="a04558.html#a10">sint32</a> uvOff[CVertexBuffer::MaxStage]; +00547 <span class="keywordtype">bool</span> has3Coords[CVertexBuffer::MaxStage]; +00548 +00549 +00550 <span class="comment">// Compute offset of each component of the VB.</span> +00551 <span class="keywordflow">if</span>(flags & CVertexBuffer::NormalFlag) +00552 normalOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalOff(); +00553 <span class="keywordflow">else</span> +00554 normalOff= 0; +00555 <span class="keywordflow">if</span>(flags & CVertexBuffer::PrimaryColorFlag) +00556 colorOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getColorOff(); +00557 <span class="keywordflow">else</span> +00558 colorOff= 0; +00559 <span class="keywordflow">if</span>(flags & CVertexBuffer::SecondaryColorFlag) +00560 specularOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getSpecularOff(); +00561 <span class="keywordflow">else</span> +00562 specularOff= 0; +00563 +00564 <span class="keywordflow">for</span>(i= 0; i<CVertexBuffer::MaxStage;i++) +00565 { +00566 <span class="keywordflow">if</span>(flags & (CVertexBuffer::TexCoord0Flag<<i)) +00567 { +00568 uvOff[i]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordOff(i); +00569 has3Coords[i] = (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getValueType(i + CVertexBuffer::TexCoord0) == CVertexBuffer::Float3); +00570 } +00571 <span class="keywordflow">else</span> +00572 { +00573 uvOff[i]= 0; +00574 } +00575 } +00576 +00577 +00578 <span class="comment">// For all geomorphs.</span> +00579 <a class="code" href="a04558.html#a15">uint</a> nGeoms= geoms.size(); +00580 CMRMWedgeGeom *ptrGeom= &(geoms[0]); +00581 <a class="code" href="a04558.html#a7">uint8</a> *destPtr= vertexDestPtr; +00582 <span class="comment">/* NB: optimisation: lot of "if" in this Loop, but because of BTB, they always cost nothing (prediction is good).</span> +00583 <span class="comment"> NB: this also is why we unroll the 4 1st Uv. The other (if any), are done in the other loop.</span> +00584 <span class="comment"> NB: optimisation for AGP write cominers: the order of write (vertex, normal, uvs...) is important for good</span> +00585 <span class="comment"> use of AGP write combiners.</span> +00586 <span class="comment"> We have 2 version : one that tests for 3 coordinates texture coords, and one that doesn't</span> +00587 <span class="comment"> */</span> +00588 +00589 <span class="keywordflow">if</span> (!has3Coords[0] && !has3Coords[1] && !has3Coords[2] && !has3Coords[3]) +00590 { +00591 <span class="comment">// there are no texture coordinate of dimension 3</span> +00592 <span class="keywordflow">for</span>(; nGeoms>0; nGeoms--, ptrGeom++, destPtr+= vertexSize ) +00593 { +00594 <a class="code" href="a04558.html#a7">uint8</a> *startPtr= vertexPtr + ptrGeom->Start*vertexSize; +00595 <a class="code" href="a04558.html#a7">uint8</a> *endPtr= vertexPtr + ptrGeom->End*vertexSize; +00596 +00597 <span class="comment">// Vertex.</span> +00598 { +00599 CVector *start= (CVector*)startPtr; +00600 CVector *end= (CVector*)endPtr; +00601 CVector *dst= (CVector*)destPtr; +00602 *dst= *start * a + *end * a1; +00603 } +00604 +00605 <span class="comment">// Normal.</span> +00606 <span class="keywordflow">if</span>(normalOff) +00607 { +00608 CVector *start= (CVector*)(startPtr + normalOff); +00609 CVector *end= (CVector*)(endPtr + normalOff); +00610 CVector *dst= (CVector*)(destPtr + normalOff); +00611 *dst= *start * a + *end * a1; +00612 } +00613 +00614 +00615 <span class="comment">// Uvs.</span> +00616 <span class="comment">// uv[0].</span> +00617 <span class="keywordflow">if</span>(uvOff[0]) +00618 { +00619 <span class="comment">// Uv.</span> +00620 CUV *start= (CUV*)(startPtr + uvOff[0]); +00621 CUV *end= (CUV*)(endPtr + uvOff[0]); +00622 CUV *dst= (CUV*)(destPtr + uvOff[0]); +00623 *dst= *start * a + *end * a1; +00624 } +00625 <span class="comment">// uv[1].</span> +00626 <span class="keywordflow">if</span>(uvOff[1]) +00627 { +00628 <span class="comment">// Uv.</span> +00629 CUV *start= (CUV*)(startPtr + uvOff[1]); +00630 CUV *end= (CUV*)(endPtr + uvOff[1]); +00631 CUV *dst= (CUV*)(destPtr + uvOff[1]); +00632 *dst= *start * a + *end * a1; +00633 } +00634 <span class="comment">// uv[2].</span> +00635 <span class="keywordflow">if</span>(uvOff[2]) +00636 { +00637 CUV *start= (CUV*)(startPtr + uvOff[2]); +00638 CUV *end= (CUV*)(endPtr + uvOff[2]); +00639 CUV *dst= (CUV*)(destPtr + uvOff[2]); +00640 *dst= *start * a + *end * a1; +00641 } +00642 <span class="comment">// uv[3].</span> +00643 <span class="keywordflow">if</span>(uvOff[3]) +00644 { +00645 <span class="comment">// Uv.</span> +00646 CUV *start= (CUV*)(startPtr + uvOff[3]); +00647 CUV *end= (CUV*)(endPtr + uvOff[3]); +00648 CUV *dst= (CUV*)(destPtr + uvOff[3]); +00649 *dst= *start * a + *end * a1; +00650 } +00651 } +00652 } +00653 <span class="keywordflow">else</span> <span class="comment">// THERE ARE TEXTURE COORDINATES OF DIMENSION 3</span> +00654 { +00655 <span class="keywordflow">for</span>(; nGeoms>0; nGeoms--, ptrGeom++, destPtr+= vertexSize ) +00656 { +00657 <a class="code" href="a04558.html#a7">uint8</a> *startPtr= vertexPtr + ptrGeom->Start*vertexSize; +00658 <a class="code" href="a04558.html#a7">uint8</a> *endPtr= vertexPtr + ptrGeom->End*vertexSize; +00659 +00660 <span class="comment">// Vertex.</span> +00661 { +00662 CVector *start= (CVector*)startPtr; +00663 CVector *end= (CVector*)endPtr; +00664 CVector *dst= (CVector*)destPtr; +00665 *dst= *start * a + *end * a1; +00666 } +00667 +00668 <span class="comment">// Normal.</span> +00669 <span class="keywordflow">if</span>(normalOff) +00670 { +00671 CVector *start= (CVector*)(startPtr + normalOff); +00672 CVector *end= (CVector*)(endPtr + normalOff); +00673 CVector *dst= (CVector*)(destPtr + normalOff); +00674 *dst= *start * a + *end * a1; +00675 } +00676 <span class="comment">// Uvs.</span> +00677 <span class="comment">// uv[0].</span> +00678 <span class="keywordflow">if</span>(uvOff[0]) +00679 { +00680 <span class="keywordflow">if</span> (!has3Coords[0]) +00681 { +00682 <span class="comment">// Uv.</span> +00683 CUV *start= (CUV*)(startPtr + uvOff[0]); +00684 CUV *end= (CUV*)(endPtr + uvOff[0]); +00685 CUV *dst= (CUV*)(destPtr + uvOff[0]); +00686 *dst= *start * a + *end * a1; +00687 } +00688 <span class="keywordflow">else</span> +00689 { +00690 <span class="comment">// Uv.</span> +00691 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[0]); +00692 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[0]); +00693 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[0]); +00694 *dst= *start * a + *end * a1; +00695 } +00696 } +00697 <span class="comment">// uv[1].</span> +00698 <span class="keywordflow">if</span>(uvOff[1]) +00699 { +00700 <span class="keywordflow">if</span> (!has3Coords[1]) +00701 { +00702 <span class="comment">// Uv.</span> +00703 CUV *start= (CUV*)(startPtr + uvOff[1]); +00704 CUV *end= (CUV*)(endPtr + uvOff[1]); +00705 CUV *dst= (CUV*)(destPtr + uvOff[1]); +00706 *dst= *start * a + *end * a1; +00707 } +00708 <span class="keywordflow">else</span> +00709 { +00710 <span class="comment">// Uv.</span> +00711 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[1]); +00712 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[1]); +00713 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[1]); +00714 *dst= *start * a + *end * a1; +00715 } +00716 } +00717 <span class="comment">// uv[2].</span> +00718 <span class="keywordflow">if</span>(uvOff[2]) +00719 { +00720 <span class="keywordflow">if</span> (!has3Coords[2]) +00721 { +00722 <span class="comment">// Uv.</span> +00723 CUV *start= (CUV*)(startPtr + uvOff[2]); +00724 CUV *end= (CUV*)(endPtr + uvOff[2]); +00725 CUV *dst= (CUV*)(destPtr + uvOff[2]); +00726 *dst= *start * a + *end * a1; +00727 } +00728 <span class="keywordflow">else</span> +00729 { +00730 <span class="comment">// Uv.</span> +00731 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[2]); +00732 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[2]); +00733 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[2]); +00734 *dst= *start * a + *end * a1; +00735 } +00736 } +00737 <span class="comment">// uv[3].</span> +00738 <span class="keywordflow">if</span>(uvOff[3]) +00739 { +00740 <span class="keywordflow">if</span> (!has3Coords[3]) +00741 { +00742 <span class="comment">// Uv.</span> +00743 CUV *start= (CUV*)(startPtr + uvOff[3]); +00744 CUV *end= (CUV*)(endPtr + uvOff[3]); +00745 CUV *dst= (CUV*)(destPtr + uvOff[3]); +00746 *dst= *start * a + *end * a1; +00747 } +00748 <span class="keywordflow">else</span> +00749 { +00750 <span class="comment">// Uv.</span> +00751 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[3]); +00752 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[3]); +00753 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[3]); +00754 *dst= *start * a + *end * a1; +00755 } +00756 } +00757 <span class="comment">// color.</span> +00758 <span class="keywordflow">if</span>(colorOff) +00759 { +00760 <a class="code" href="a03337.html">CRGBA</a> *start= (<a class="code" href="a03337.html">CRGBA</a>*)(startPtr + colorOff); +00761 <a class="code" href="a03337.html">CRGBA</a> *end= (<a class="code" href="a03337.html">CRGBA</a>*)(endPtr + colorOff); +00762 <a class="code" href="a03337.html">CRGBA</a> *dst= (<a class="code" href="a03337.html">CRGBA</a>*)(destPtr + colorOff); +00763 dst-><a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(*start, *end, ua1); +00764 } +00765 <span class="comment">// specular.</span> +00766 <span class="keywordflow">if</span>(specularOff) +00767 { +00768 <a class="code" href="a03337.html">CRGBA</a> *start= (<a class="code" href="a03337.html">CRGBA</a>*)(startPtr + specularOff); +00769 <a class="code" href="a03337.html">CRGBA</a> *end= (<a class="code" href="a03337.html">CRGBA</a>*)(endPtr + specularOff); +00770 <a class="code" href="a03337.html">CRGBA</a> *dst= (<a class="code" href="a03337.html">CRGBA</a>*)(destPtr + specularOff); +00771 dst-><a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(*start, *end, ua1); +00772 } +00773 } +00774 } +00775 +00776 +00777 <span class="comment">// Process extra UVs (maybe never, so don't bother optims :)).</span> +00778 <span class="comment">// For all stages after 4.</span> +00779 <span class="keywordflow">for</span>(i=4;i<CVertexBuffer::MaxStage;i++) +00780 { +00781 <a class="code" href="a04558.html#a15">uint</a> nGeoms= geoms.size(); +00782 CMRMWedgeGeom *ptrGeom= &(geoms[0]); +00783 <a class="code" href="a04558.html#a7">uint8</a> *destPtr= vertexDestPtr; +00784 +00785 <span class="keywordflow">if</span>(uvOff[i]==0) +00786 <span class="keywordflow">continue</span>; +00787 +00788 <span class="comment">// For all geomorphs.</span> +00789 <span class="keywordflow">for</span>(; nGeoms>0; nGeoms--, ptrGeom++, destPtr+= vertexSize ) +00790 { +00791 <a class="code" href="a04558.html#a7">uint8</a> *startPtr= vertexPtr + ptrGeom->Start*vertexSize; +00792 <a class="code" href="a04558.html#a7">uint8</a> *endPtr= vertexPtr + ptrGeom->End*vertexSize; +00793 +00794 <span class="comment">// uv[i].</span> +00795 <span class="comment">// Uv.</span> +00796 <span class="keywordflow">if</span> (!has3Coords[i]) +00797 { +00798 CUV *start= (CUV*)(startPtr + uvOff[i]); +00799 CUV *end= (CUV*)(endPtr + uvOff[i]); +00800 CUV *dst= (CUV*)(destPtr + uvOff[i]); +00801 *dst= *start * a + *end * a1; +00802 } +00803 <span class="keywordflow">else</span> +00804 { +00805 <a class="code" href="a03641.html">CUVW</a> *start= (<a class="code" href="a03641.html">CUVW</a>*)(startPtr + uvOff[i]); +00806 <a class="code" href="a03641.html">CUVW</a> *end= (<a class="code" href="a03641.html">CUVW</a>*)(endPtr + uvOff[i]); +00807 <a class="code" href="a03641.html">CUVW</a> *dst= (<a class="code" href="a03641.html">CUVW</a>*)(destPtr + uvOff[i]); +00808 *dst= *start * a + *end * a1; +00809 } +00810 } +00811 } +00812 } +00813 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma0" doxytag="NL3D::CMeshMRMGeom::applyMaterialRemap" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyMaterialRemap </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const std::vector< <a class="el" href="a04558.html#a14">sint</a> > & </td> + <td class="mdname1" valign="top" nowrap> <em>remap</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +change materials Ids (called from <a class="el" href="a02857.html#NL3D_1_1CMesha11">CMesh::optimizeMaterialUsage()</a>) +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00462">462</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00186">getNbLod()</a>, <a class="el" href="a06006.html#l00192">getNbRdrPass()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02900">NL3D::CMeshMRM::optimizeMaterialUsage()</a>. +<p> +<div class="fragment"><pre>00463 { +00464 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> lod=0;lod<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod</a>();lod++) +00465 { +00466 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> rp=0;rp<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_5">getNbRdrPass</a>(lod);rp++) +00467 { +00468 <span class="comment">// remap</span> +00469 <a class="code" href="a04558.html#a11">uint32</a> &matId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lod].RdrPass[rp].MaterialId; +00470 <a class="code" href="a04199.html#a6">nlassert</a>(remap[matId]>=0); +00471 matId= remap[matId]; +00472 } +00473 } +00474 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd3" doxytag="NL3D::CMeshMRMGeom::applyRawSkinWithNormal" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applyRawSkinWithNormal </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> & </td> + <td class="mdname" nowrap> <em>lod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03307.html">CRawSkinNormalCache</a> & </td> + <td class="mdname" nowrap> <em>rawSkinLod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> * </td> + <td class="mdname" nowrap> <em>skeleton</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vbHard</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>alphaLod</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l01825">1825</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd4" doxytag="NL3D::CMeshMRMGeom::applySkin" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applySkin </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> & </td> + <td class="mdname" nowrap> <em>lod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> * </td> + <td class="mdname" nowrap> <em>skeleton</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Skinning: Apply skinning to the _VBuffer (before geomorph). +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00207">207</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06009.html#l00179">NL3D::computeBoneMatrixes3x4()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a06006.html#l00390">NL3D::CMeshMRMGeom::CLod::InfluencedVertices</a>, <a class="el" href="a05990.html#l00116">NL3D::CMesh::CSkinWeight::MatrixId</a>, <a class="el" href="a06006.html#l00392">NL3D::CMeshMRMGeom::CLod::MatrixInfluences</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00096">uint8</a>, and <a class="el" href="a05990.html#l00118">NL3D::CMesh::CSkinWeight::Weights</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>. +<p> +<div class="fragment"><pre>00208 { +00209 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned); +00210 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size()==0) +00211 <span class="keywordflow">return</span>; +00212 +00213 <span class="comment">// get vertexPtr.</span> +00214 <span class="comment">//===========================</span> +00215 <a class="code" href="a04558.html#a7">uint8</a> *destVertexPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(); +00216 <a class="code" href="a04558.html#a15">uint</a> flags= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(); +00217 <a class="code" href="a04558.html#a10">sint32</a> vertexSize= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize(); +00218 <span class="comment">// must have XYZ.</span> +00219 <a class="code" href="a04199.html#a6">nlassert</a>(flags & CVertexBuffer::PositionFlag); +00220 +00221 +00222 <span class="comment">// compute src array.</span> +00223 CMesh::CSkinWeight *srcSkinPtr; +00224 CVector *srcVertexPtr; +00225 srcSkinPtr= &<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[0]; +00226 srcVertexPtr= &<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[0]; +00227 +00228 +00229 +00230 <span class="comment">// Compute usefull Matrix for this lod.</span> +00231 <span class="comment">//===========================</span> +00232 <span class="comment">// Those arrays map the array of bones in skeleton.</span> +00233 <span class="keyword">static</span> vector<CMatrix3x4> boneMat3x4; +00234 <a class="code" href="a05363.html#a433">computeBoneMatrixes3x4</a>(boneMat3x4, lod.MatrixInfluences, skeleton); +00235 +00236 +00237 <span class="comment">// apply skinning.</span> +00238 <span class="comment">//===========================</span> +00239 <span class="comment">// assert, code below is written especially for 4 per vertex.</span> +00240 <a class="code" href="a04199.html#a6">nlassert</a>(NL3D_MESH_SKINNING_MAX_MATRIX==4); +00241 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;i++) +00242 { +00243 <a class="code" href="a04558.html#a15">uint</a> nInf= lod.InfluencedVertices[i].size(); +00244 <span class="keywordflow">if</span>( nInf==0 ) +00245 <span class="keywordflow">continue</span>; +00246 <a class="code" href="a04558.html#a11">uint32</a> *infPtr= &(lod.InfluencedVertices[i][0]); +00247 +00248 <span class="comment">// apply the skin to the vertices</span> +00249 <span class="keywordflow">switch</span>(i) +00250 { +00251 <span class="comment">//=========</span> +00252 <span class="keywordflow">case</span> 0: +00253 <span class="comment">// Special case for Vertices influenced by one matrix. Just copy result of mul.</span> +00254 <span class="comment">// for all InfluencedVertices only.</span> +00255 <span class="keywordflow">for</span>(;nInf>0;nInf--, infPtr++) +00256 { +00257 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr; +00258 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>; +00259 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>; +00260 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize; +00261 CVector *dstVertex= (CVector*)(dstVertexVB); +00262 +00263 +00264 <span class="comment">// Vertex.</span> +00265 boneMat3x4[ srcSkin->MatrixId[0] ].mulSetPoint( *srcVertex, *dstVertex); +00266 } +00267 <span class="keywordflow">break</span>; +00268 +00269 <span class="comment">//=========</span> +00270 <span class="keywordflow">case</span> 1: +00271 <span class="comment">// for all InfluencedVertices only.</span> +00272 <span class="keywordflow">for</span>(;nInf>0;nInf--, infPtr++) +00273 { +00274 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr; +00275 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>; +00276 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>; +00277 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize; +00278 CVector *dstVertex= (CVector*)(dstVertexVB); +00279 +00280 +00281 <span class="comment">// Vertex.</span> +00282 boneMat3x4[ srcSkin->MatrixId[0] ].mulSetPoint( *srcVertex, srcSkin->Weights[0], *dstVertex); +00283 boneMat3x4[ srcSkin->MatrixId[1] ].mulAddPoint( *srcVertex, srcSkin->Weights[1], *dstVertex); +00284 } +00285 <span class="keywordflow">break</span>; +00286 +00287 <span class="comment">//=========</span> +00288 <span class="keywordflow">case</span> 2: +00289 <span class="comment">// for all InfluencedVertices only.</span> +00290 <span class="keywordflow">for</span>(;nInf>0;nInf--, infPtr++) +00291 { +00292 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr; +00293 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>; +00294 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>; +00295 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize; +00296 CVector *dstVertex= (CVector*)(dstVertexVB); +00297 +00298 +00299 <span class="comment">// Vertex.</span> +00300 boneMat3x4[ srcSkin->MatrixId[0] ].mulSetPoint( *srcVertex, srcSkin->Weights[0], *dstVertex); +00301 boneMat3x4[ srcSkin->MatrixId[1] ].mulAddPoint( *srcVertex, srcSkin->Weights[1], *dstVertex); +00302 boneMat3x4[ srcSkin->MatrixId[2] ].mulAddPoint( *srcVertex, srcSkin->Weights[2], *dstVertex); +00303 } +00304 <span class="keywordflow">break</span>; +00305 +00306 <span class="comment">//=========</span> +00307 <span class="keywordflow">case</span> 3: +00308 <span class="comment">// for all InfluencedVertices only.</span> +00309 <span class="keywordflow">for</span>(;nInf>0;nInf--, infPtr++) +00310 { +00311 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr; +00312 CMesh::CSkinWeight *srcSkin= srcSkinPtr + <a class="code" href="a04223.html#a566">index</a>; +00313 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>; +00314 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize; +00315 CVector *dstVertex= (CVector*)(dstVertexVB); +00316 +00317 +00318 <span class="comment">// Vertex.</span> +00319 boneMat3x4[ srcSkin->MatrixId[0] ].mulSetPoint( *srcVertex, srcSkin->Weights[0], *dstVertex); +00320 boneMat3x4[ srcSkin->MatrixId[1] ].mulAddPoint( *srcVertex, srcSkin->Weights[1], *dstVertex); +00321 boneMat3x4[ srcSkin->MatrixId[2] ].mulAddPoint( *srcVertex, srcSkin->Weights[2], *dstVertex); +00322 boneMat3x4[ srcSkin->MatrixId[3] ].mulAddPoint( *srcVertex, srcSkin->Weights[3], *dstVertex); +00323 } +00324 <span class="keywordflow">break</span>; +00325 +00326 } +00327 } +00328 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd5" doxytag="NL3D::CMeshMRMGeom::applySkinWithNormal" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applySkinWithNormal </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> & </td> + <td class="mdname" nowrap> <em>lod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> * </td> + <td class="mdname" nowrap> <em>skeleton</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The same as apply skin, but with normal modified. Normal is not normalized. 4 versions from slower to faster. +<p> +Definition at line <a class="el" href="a06009.html#l00741">741</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd6" doxytag="NL3D::CMeshMRMGeom::applySkinWithTangentSpace" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::applySkinWithTangentSpace </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> & </td> + <td class="mdname" nowrap> <em>lod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03399.html">CSkeletonModel</a> * </td> + <td class="mdname" nowrap> <em>skeleton</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>tangentSpaceTexCoord</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The same as apply skin with normal, but with a tangent space added (encoded in a texture coordinate). The tangent space is modified, but not normalized (must be done in a vertex program). 4 versions from slower to faster. +<p> +Definition at line <a class="el" href="a06009.html#l00804">804</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_1" doxytag="NL3D::CMeshMRMGeom::beginMesh" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::beginMesh </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>rdrCtx</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The framework call this method when he will render instances of this meshGeom soon. +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_1">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02705">2705</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00562">_MBRBkupNormalize</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera3">NL3D::IDriver::activeVertexBufferHard()</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver::forceNormalize()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera46">NL3D::IDriver::isForceNormalize()</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, and <a class="el" href="a06005.html#l02224">updateVertexBufferHard()</a>. +<p> +<div class="fragment"><pre>02706 { +02707 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty()) +02708 <span class="keywordflow">return</span>; +02709 +02710 IDriver *drv= rdrCtx.Driver; +02711 +02712 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap) +02713 { +02714 <span class="comment">// Don't setup VB in this case, since use the VBHeap setuped one.</span> +02715 } +02716 <span class="keywordflow">else</span> +02717 { +02718 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_2">updateVertexBufferHard</a>(drv, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +02719 +02720 <span class="comment">// active VB.</span> +02721 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>) +02722 { +02723 drv->activeVertexBufferHard(_VBHard); +02724 } +02725 <span class="keywordflow">else</span> +02726 { +02727 drv->activeVertexBuffer(_VBufferFinal); +02728 } +02729 } +02730 +02731 +02732 <span class="comment">// force normalisation of normals..</span> +02733 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_0">_MBRBkupNormalize</a>= drv->isForceNormalize(); +02734 drv->forceNormalize(<span class="keyword">true</span>); +02735 +02736 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd7" doxytag="NL3D::CMeshMRMGeom::bkupOriginalSkinVertices" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::bkupOriginalSkinVertices </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Skinning: bkup Vertex/Normal into _OriginalSkin* from VBuffer. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02045">2045</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l02055">bkupOriginalSkinVerticesSubset()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, and <a class="el" href="a05622.html#l00290">nlassert</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00246">build()</a>. +<p> +<div class="fragment"><pre>02046 { +02047 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned); +02048 +02049 <span class="comment">// bkup the entire array.</span> +02050 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd8">bkupOriginalSkinVerticesSubset</a>(0, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +02051 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd8" doxytag="NL3D::CMeshMRMGeom::bkupOriginalSkinVerticesSubset" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::bkupOriginalSkinVerticesSubset </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>wedgeStart</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>wedgeEnd</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02055">2055</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06710.html#l00449">NL3D::CVertexBuffer::getNormalCoordPointer()</a>, <a class="el" href="a06710.html#l00976">NL3D::CVertexBuffer::getNumTexCoordUsed()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06710.html#l00497">NL3D::CVertexBuffer::getTexCoordPointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02045">bkupOriginalSkinVertices()</a>, and <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>. +<p> +<div class="fragment"><pre>02056 { +02057 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned); +02058 +02059 <span class="comment">// Copy VBuffer content into Original vertices normals.</span> +02060 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() & CVertexBuffer::PositionFlag) +02061 { +02062 <span class="comment">// copy vertices from VBuffer. (NB: unusefull geomorphed vertices are still copied, but doesn't matter).</span> +02063 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +02064 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=wedgeStart; i<wedgeEnd;i++) +02065 { +02066 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[i]= *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(i); +02067 } +02068 } +02069 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() & CVertexBuffer::NormalFlag) +02070 { +02071 <span class="comment">// copy normals from VBuffer. (NB: unusefull geomorphed normals are still copied, but doesn't matter).</span> +02072 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +02073 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=wedgeStart; i<wedgeEnd;i++) +02074 { +02075 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[i]= *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalCoordPointer(i); +02076 } +02077 } +02078 +02079 <span class="comment">// is there tangent space added ?</span> +02080 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> && <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->needTangentSpace()) +02081 { +02082 <span class="comment">// yes, backup it</span> +02083 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed() > 0); +02084 <a class="code" href="a04558.html#a15">uint</a> tgSpaceStage = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed() - 1; +02085 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +02086 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=wedgeStart; i<wedgeEnd;i++) +02087 { +02088 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>[i]= *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(i, tgSpaceStage); +02089 } +02090 } +02091 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma1" doxytag="NL3D::CMeshMRMGeom::build" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::build </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02864.html">CMesh::CMeshBuild</a> & </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< <a class="el" href="a02864.html">CMesh::CMeshBuild</a> * > & </td> + <td class="mdname" nowrap> <em>bsList</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>numMaxMaterial</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a02967.html">CMRMParameters</a> & </td> + <td class="mdname" nowrap> <em>params</em> = <a class="el" href="a02967.html">CMRMParameters</a>()</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Build a mesh, replacing old. this is much slower than <a class="el" href="a02878.html#NL3D_1_1CMeshGeoma1">CMeshGeom::build()</a>, because it computes the MRM. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>params</em> </td><td>parameters of the MRM build process.</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06005.html#l00246">246</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00519">_LodInfos</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l02045">bkupOriginalSkinVertices()</a>, <a class="el" href="a06006.html#l00436">NL3D::CMeshMRMGeom::CMeshBuildMRM::BlendShapes</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a05990.html#l00190">NL3D::CMesh::CMeshBuild::BonesNames</a>, <a class="el" href="a06059.html#l00037">NL3D::CMRMLevelDetail::compileDistanceSetup()</a>, <a class="el" href="a06055.html#l02991">NL3D::CMRMBuilder::compileMRM()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l03052">dirtMeshDataId()</a>, <a class="el" href="a06006.html#l00445">NL3D::CMeshMRMGeom::CMeshBuildMRM::DistanceCoarsest</a>, <a class="el" href="a06060.html#l00065">NL3D::CMRMLevelDetail::DistanceCoarsest</a>, <a class="el" href="a06006.html#l00441">NL3D::CMeshMRMGeom::CMeshBuildMRM::DistanceFinest</a>, <a class="el" href="a06060.html#l00061">NL3D::CMRMLevelDetail::DistanceFinest</a>, <a class="el" href="a06006.html#l00443">NL3D::CMeshMRMGeom::CMeshBuildMRM::DistanceMiddle</a>, <a class="el" href="a06060.html#l00063">NL3D::CMRMLevelDetail::DistanceMiddle</a>, <a class="el" href="a05990.html#l00193">NL3D::CMesh::CMeshBuild::Faces</a>, <a class="el" href="a06198.html#l00160">NL3D::CPrimitiveBlock::getNumTriangles()</a>, <a class="el" href="a06006.html#l00433">NL3D::CMeshMRMGeom::CMeshBuildMRM::Lods</a>, <a class="el" href="a05989.html#l00058">NL3D::makeBBox()</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a06060.html#l00058">NL3D::CMRMLevelDetail::MaxFaceUsed</a>, <a class="el" href="a05990.html#l00202">NL3D::CMesh::CMeshBuild::MeshVertexProgram</a>, <a class="el" href="a06060.html#l00056">NL3D::CMRMLevelDetail::MinFaceUsed</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05646.html#l00223">params</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06710.html#l00401">NL3D::CVertexBuffer::reserve()</a>, <a class="el" href="a05385.html#l00181">NLMISC::CAABBoxExt::setCenter()</a>, <a class="el" href="a06710.html#l00409">NL3D::CVertexBuffer::setNumVertices()</a>, <a class="el" href="a05385.html#l00183">NLMISC::CAABBoxExt::setSize()</a>, <a class="el" href="a06006.html#l00424">NL3D::CMeshMRMGeom::CMeshBuildMRM::Skinned</a>, <a class="el" href="a06006.html#l00427">NL3D::CMeshMRMGeom::CMeshBuildMRM::SkinWeights</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a06006.html#l00430">NL3D::CMeshMRMGeom::CMeshBuildMRM::VBuffer</a>, and <a class="el" href="a05990.html#l00184">NL3D::CMesh::CMeshBuild::Vertices</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02878">NL3D::CMeshMRM::build()</a>. +<p> +<div class="fragment"><pre>00248 { +00249 +00250 <span class="comment">// Dirt the VBuffer.</span> +00251 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>; +00252 +00253 <span class="comment">// Empty geometry?</span> +00254 <span class="keywordflow">if</span>(m.Vertices.size()==0 || m.Faces.size()==0) +00255 { +00256 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.setNumVertices(0); +00257 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.reserve(0); +00258 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.clear(); +00259 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1910_1">setCenter</a>(CVector::Null); +00260 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1910_4">setSize</a>(CVector::Null); +00261 <span class="keywordflow">return</span>; +00262 } +00263 <a class="code" href="a04199.html#a6">nlassert</a>(numMaxMaterial>0); +00264 +00265 +00266 <span class="comment">// SmartPtr Copy VertexProgram effect.</span> +00267 <span class="comment">//================================================ </span> +00268 this-><a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>= m.MeshVertexProgram; +00269 +00270 +00272 <span class="comment">//======================</span> +00273 <span class="comment">// NB: this is equivalent as building BBox from MRM VBuffer, because CMRMBuilder create new vertices </span> +00274 <span class="comment">// which are just interpolation of original vertices.</span> +00275 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>= <a class="code" href="a05363.html#a431">makeBBox</a>(m.Vertices); +00276 +00277 +00279 <span class="comment">//================================================</span> +00280 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomn0">CMRMBuilder</a> mrmBuilder; +00281 CMeshBuildMRM meshBuildMRM; +00282 +00283 mrmBuilder.compileMRM(m, bsList, params, meshBuildMRM, numMaxMaterial); +00284 +00285 <span class="comment">// Then just copy result!</span> +00286 <span class="comment">//================================================</span> +00287 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>= meshBuildMRM.VBuffer; +00288 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>= meshBuildMRM.Lods; +00289 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>= meshBuildMRM.Skinned; +00290 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>= meshBuildMRM.SkinWeights; +00291 +00292 <span class="comment">// Compute degradation control.</span> +00293 <span class="comment">//================================================</span> +00294 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest= meshBuildMRM.DistanceFinest; +00295 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle= meshBuildMRM.DistanceMiddle; +00296 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest= meshBuildMRM.DistanceCoarsest; +00297 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest>=0); +00298 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle > <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest); +00299 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest > <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle); +00300 <span class="comment">// Compute OODistDelta and DistancePow</span> +00301 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.compileDistanceSetup(); +00302 +00303 +00304 <span class="comment">// Build the _LodInfos.</span> +00305 <span class="comment">//================================================</span> +00306 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()); +00307 <a class="code" href="a04558.html#a11">uint32</a> precNWedges= 0; +00308 <a class="code" href="a04558.html#a15">uint</a> i; +00309 <span class="keywordflow">for</span>(i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();i++) +00310 { +00311 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>[i].StartAddWedge= precNWedges; +00312 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>[i].EndAddWedges= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].NWedges; +00313 precNWedges= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].NWedges; +00314 <span class="comment">// LodOffset is filled in serial() when stream is input.</span> +00315 } +00316 <span class="comment">// After build, all lods are present in memory. </span> +00317 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); +00318 +00319 +00320 <span class="comment">// For load balancing.</span> +00321 <span class="comment">//================================================</span> +00322 <span class="comment">// compute Max Face Used</span> +00323 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed= 0; +00324 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed= 0; +00325 <span class="comment">// Count of primitive block</span> +00326 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()>0) +00327 { +00328 <a class="code" href="a04558.html#a15">uint</a> pb; +00329 <span class="comment">// Compute MinFaces.</span> +00330 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &firstLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[0]; +00331 <span class="keywordflow">for</span> (pb=0; pb<firstLod.RdrPass.size(); pb++) +00332 { +00333 CRdrPass &pass= firstLod.RdrPass[pb]; +00334 <span class="comment">// Sum tri</span> +00335 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed+= pass.PBlock.getNumTriangles (); +00336 } +00337 <span class="comment">// Compute MaxFaces.</span> +00338 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lastLod= _Lods[_Lods.size()-1]; +00339 <span class="keywordflow">for</span> (pb=0; pb<lastLod.RdrPass.size(); pb++) +00340 { +00341 CRdrPass &pass= lastLod.RdrPass[pb]; +00342 <span class="comment">// Sum tri</span> +00343 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed+= pass.PBlock.getNumTriangles (); +00344 } +00345 } +00346 +00347 +00348 <span class="comment">// For skinning.</span> +00349 <span class="comment">//================================================</span> +00350 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> ) +00351 { +00352 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd7">bkupOriginalSkinVertices</a>(); +00353 } +00354 <span class="comment">// Inform that the mesh data has changed</span> +00355 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_9">dirtMeshDataId</a>(); +00356 +00357 +00358 <span class="comment">// For AGP SKinning optim, and for Render optim</span> +00359 <span class="comment">//================================================</span> +00360 <span class="keywordflow">for</span>(i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();i++) +00361 { +00362 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].buildSkinVertexBlocks(); +00363 <span class="comment">// sort triangles for better cache use.</span> +00364 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].optimizeTriangleOrder(); +00365 } +00366 +00367 <span class="comment">// Copy Blend Shapes</span> +00368 <span class="comment">//================================================ </span> +00369 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes = meshBuildMRM.BlendShapes; +00370 +00371 +00372 <span class="comment">// Compact bone id and build a bone id names</span> +00373 <span class="comment">//================================================ </span> +00374 +00375 <span class="comment">// Skinned ?</span> +00376 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +00377 { +00378 <span class="comment">// Remap</span> +00379 std::map<uint, uint> remap; +00380 +00381 <span class="comment">// Current bone</span> +00382 <a class="code" href="a04558.html#a15">uint</a> currentBone = 0; +00383 +00384 <span class="comment">// Reserve memory</span> +00385 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.reserve (m.BonesNames.size()); +00386 +00387 <span class="comment">// For each vertices</span> +00388 <a class="code" href="a04558.html#a15">uint</a> vert; +00389 <span class="keywordflow">for</span> (vert=0; vert<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++) +00390 { +00391 <span class="comment">// Found one ?</span> +00392 <span class="keywordtype">bool</span> found=<span class="keyword">false</span>; +00393 +00394 <span class="comment">// For each weight</span> +00395 <a class="code" href="a04558.html#a15">uint</a> weight; +00396 <span class="keywordflow">for</span> (weight=0; weight<<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++) +00397 { +00398 <span class="comment">// Active ?</span> +00399 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]>0)||(weight==0)) +00400 { +00401 <span class="comment">// Look for it</span> +00402 std::map<uint, uint>::iterator ite = remap.find (_SkinWeights[vert].MatrixId[weight]); +00403 +00404 <span class="comment">// Find ?</span> +00405 <span class="keywordflow">if</span> (ite == remap.end()) +00406 { +00407 <span class="comment">// Insert it</span> +00408 remap.insert (std::map<uint, uint>::value_type (_SkinWeights[vert].MatrixId[weight], currentBone)); +00409 +00410 <span class="comment">// Check the id</span> +00411 <a class="code" href="a04199.html#a6">nlassert</a> (_SkinWeights[vert].MatrixId[weight]<m.BonesNames.size()); +00412 +00413 <span class="comment">// Set the bone name</span> +00414 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.push_back (m.BonesNames[_SkinWeights[vert].MatrixId[weight]]); +00415 +00416 <span class="comment">// Set the local bone id</span> +00417 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight] = currentBone++; +00418 } +00419 <span class="keywordflow">else</span> +00420 { +00421 <span class="comment">// Set the local bone id</span> +00422 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight] = ite->second; +00423 } +00424 +00425 <span class="comment">// Found one</span> +00426 found = <span class="keyword">true</span>; +00427 } +00428 } +00429 +00430 <span class="comment">// Found one ?</span> +00431 <a class="code" href="a04199.html#a6">nlassert</a> (found); +00432 } +00433 +00434 <span class="comment">// Remap the vertex influence by lods</span> +00435 <a class="code" href="a04558.html#a15">uint</a> lod; +00436 <span class="keywordflow">for</span> (lod=0; lod<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); lod++) +00437 { +00438 <span class="comment">// For each matrix used</span> +00439 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>; +00440 <span class="keywordflow">for</span> (<a class="code" href="a04223.html#a578">matrix</a>=0; <a class="code" href="a04223.html#a578">matrix</a><<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lod].MatrixInfluences.size(); <a class="code" href="a04223.html#a578">matrix</a>++) +00441 { +00442 <span class="comment">// Remap</span> +00443 std::map<uint, uint>::iterator ite = remap.find (_Lods[lod].MatrixInfluences[matrix]); +00444 +00445 <span class="comment">// Find ?</span> +00446 <a class="code" href="a04199.html#a6">nlassert</a> (ite != remap.end()); +00447 +00448 <span class="comment">// Remap</span> +00449 _Lods[lod].MatrixInfluences[<a class="code" href="a04223.html#a578">matrix</a>] = ite->second; +00450 } +00451 } +00452 } +00453 +00454 <span class="comment">// Misc.</span> +00455 <span class="comment">//===================</span> +00456 <span class="comment">// Some runtime not serialized compilation</span> +00457 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd11">compileRunTime</a>(); +00458 +00459 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd9" doxytag="NL3D::CMeshMRMGeom::buildBoneUsageVer2" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::buildBoneUsageVer2 </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02482">2482</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01951">loadFirstLod()</a>. +<p> +<div class="fragment"><pre>02483 { +02484 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +02485 { +02486 <span class="comment">// parse all vertices, couting MaxBoneId used.</span> +02487 <a class="code" href="a04558.html#a11">uint32</a> maxBoneId= 0; +02488 <span class="comment">// for each vertex</span> +02489 <a class="code" href="a04558.html#a15">uint</a> vert; +02490 <span class="keywordflow">for</span> (vert=0; vert<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++) +02491 { +02492 <span class="comment">// For each weight</span> +02493 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> weight=0; weight<<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++) +02494 { +02495 <span class="comment">// Active ?</span> +02496 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]>0)||(weight==0)) +02497 { +02498 maxBoneId= max(_SkinWeights[vert].MatrixId[weight], maxBoneId); +02499 } +02500 } +02501 } +02502 +02503 <span class="comment">// alloc an array of maxBoneId+1, reset to 0.</span> +02504 std::vector<uint8> boneUsage; +02505 boneUsage.resize(maxBoneId+1, 0); +02506 +02507 <span class="comment">// reparse all vertices, counting usage for each bone.</span> +02508 <span class="keywordflow">for</span> (vert=0; vert<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++) +02509 { +02510 <span class="comment">// For each weight</span> +02511 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> weight=0; weight<<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++) +02512 { +02513 <span class="comment">// Active ?</span> +02514 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]>0)||(weight==0)) +02515 { +02516 <span class="comment">// mark this bone as used.</span> +02517 boneUsage[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight]]= 1; +02518 } +02519 } +02520 } +02521 +02522 <span class="comment">// For each bone used</span> +02523 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.clear(); +02524 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i<boneUsage.size();i++) +02525 { +02526 <span class="comment">// if the bone is used by the mesh, add it to BoneId.</span> +02527 <span class="keywordflow">if</span>(boneUsage[i]) +02528 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.push_back(i); +02529 } +02530 } +02531 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma2" doxytag="NL3D::CMeshMRMGeom::changeMRMDistanceSetup" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::changeMRMDistanceSetup </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">float </td> + <td class="mdname" nowrap> <em>distanceFinest</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>distanceMiddle</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>distanceCoarsest</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Change MRM Distance setup. NB: no-op if distanceFinest<0, distanceMiddle<=distanceFinest or if distanceCoarsest<=distanceMiddle. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>distanceFinest</em> </td><td>The MRM has its max faces when dist<=distanceFinest. </td></tr> + <tr><td valign=top><em>distanceMiddle</em> </td><td>The MRM has 50% of its faces at dist==distanceMiddle. </td></tr> + <tr><td valign=top><em>distanceCoarsest</em> </td><td>The MRM has faces/Divisor (ie near 0) when dist>=distanceCoarsest.</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06005.html#l00228">228</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06059.html#l00037">NL3D::CMRMLevelDetail::compileDistanceSetup()</a>, <a class="el" href="a06060.html#l00065">NL3D::CMRMLevelDetail::DistanceCoarsest</a>, <a class="el" href="a06060.html#l00061">NL3D::CMRMLevelDetail::DistanceFinest</a>, and <a class="el" href="a06060.html#l00063">NL3D::CMRMLevelDetail::DistanceMiddle</a>. +<p> +Referenced by <a class="el" href="a06016.html#l00609">NL3D::CMeshMultiLod::changeMRMDistanceSetup()</a>, and <a class="el" href="a06005.html#l03011">NL3D::CMeshMRM::changeMRMDistanceSetup()</a>. +<p> +<div class="fragment"><pre>00229 { +00230 <span class="comment">// check input.</span> +00231 <span class="keywordflow">if</span>(distanceFinest<0) <span class="keywordflow">return</span>; +00232 <span class="keywordflow">if</span>(distanceMiddle<=distanceFinest) <span class="keywordflow">return</span>; +00233 <span class="keywordflow">if</span>(distanceCoarsest<=distanceMiddle) <span class="keywordflow">return</span>; +00234 +00235 <span class="comment">// Change.</span> +00236 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest= distanceFinest; +00237 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle= distanceMiddle; +00238 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest= distanceCoarsest; +00239 +00240 <span class="comment">// compile </span> +00241 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.compileDistanceSetup(); +00242 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd10" doxytag="NL3D::CMeshMRMGeom::chooseLod" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::chooseLod </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">float </td> + <td class="mdname" nowrap> <em>alphaMRM</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float & </td> + <td class="mdname" nowrap> <em>alphaLod</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </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> + + </td> + <td> + +<p> +choose the lod according to the alphaMRM [0,1] given. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l00898">898</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, and <a class="el" href="a05981.html#l00104">sint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, <a class="el" href="a06005.html#l00927">render()</a>, <a class="el" href="a06005.html#l01146">renderSkin()</a>, and <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>. +<p> +<div class="fragment"><pre>00899 { +00900 <span class="comment">// Choose what Lod to draw.</span> +00901 alphaMRM*= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()-1; +00902 <a class="code" href="a04558.html#a14">sint</a> numLod= (<a class="code" href="a04558.html#a14">sint</a>)ceil(alphaMRM); +00903 <span class="keywordflow">if</span>(numLod==0) +00904 { +00905 numLod= 0; +00906 alphaLod= 0; +00907 } +00908 <span class="keywordflow">else</span> +00909 { +00910 <span class="comment">// Lerp beetween lod i-1 and lod i.</span> +00911 alphaLod= alphaMRM-(numLod-1); +00912 } +00913 +00914 +00915 <span class="comment">// If lod chosen is not loaded, take the best loaded.</span> +00916 <span class="keywordflow">if</span>(numLod>=(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>) +00917 { +00918 numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>-1; +00919 alphaLod= 1; +00920 } +00921 +00922 <span class="keywordflow">return</span> numLod; +00923 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_0" doxytag="NL3D::CMeshMRMGeom::clip" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::clip </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const std::vector< <a class="el" href="a03082.html">CPlane</a> > & </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> & </td> + <td class="mdname" nowrap> <em>worldMatrix</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +clip this mesh in a driver. true if visible. +<p> + +<p> +Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma0">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l00856">856</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a05504.html#l00088">NLMISC::CBSphere::applyTransform()</a>, <a class="el" href="a05505.html#l00048">NLMISC::CBSphere::Center</a>, <a class="el" href="a05384.html#l00319">NLMISC::CAABBoxExt::clipBack()</a>, <a class="el" href="a05385.html#l00199">NLMISC::CAABBoxExt::getCenter()</a>, <a class="el" href="a05385.html#l00204">NLMISC::CAABBoxExt::getRadius()</a>, <a class="el" href="a06172.html#l00068">NLMISC::CPlane::normalize()</a>, <a class="el" href="a05505.html#l00049">NLMISC::CBSphere::Radius</a>, and <a class="el" href="a05981.html#l00104">sint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02946">NL3D::CMeshMRM::clip()</a>. +<p> +<div class="fragment"><pre>00857 { +00858 <span class="comment">// Speed Clip: clip just the sphere.</span> +00859 <a class="code" href="a02291.html">CBSphere</a> localSphere(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_1">getCenter</a>(), <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_5">getRadius</a>()); +00860 <a class="code" href="a02291.html">CBSphere</a> worldSphere; +00861 +00862 <span class="comment">// transform the sphere in WorldMatrix (with nearly good scale info).</span> +00863 localSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSpherez1929_0">applyTransform</a>(worldMatrix, worldSphere); +00864 +00865 <span class="comment">// if out of only plane, entirely out.</span> +00866 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i<(<a class="code" href="a04558.html#a14">sint</a>)pyramid.size();i++) +00867 { +00868 <span class="comment">// We are sure that pyramid has normalized plane normals.</span> +00869 <span class="comment">// if SpherMax OUT return false.</span> +00870 <span class="keywordtype">float</span> d= pyramid[i]*worldSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSphereo0">Center</a>; +00871 <span class="keywordflow">if</span>(d>worldSphere.<a class="code" href="a02291.html#NLMISC_1_1CBSphereo1">Radius</a>) +00872 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00873 } +00874 +00875 <span class="comment">// test if must do a precise clip, according to mesh size.</span> +00876 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a> ) +00877 { +00878 CPlane localPlane; +00879 +00880 <span class="comment">// if out of only plane, entirely out.</span> +00881 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i<(<a class="code" href="a04558.html#a14">sint</a>)pyramid.size();i++) +00882 { +00883 <span class="comment">// Transform the pyramid in Object space.</span> +00884 localPlane= pyramid[i]*worldMatrix; +00885 <span class="comment">// localPlane must be normalized, because worldMatrix mya have a scale.</span> +00886 localPlane.normalize(); +00887 <span class="comment">// if the box is not partially inside the plane, quit</span> +00888 <span class="keywordflow">if</span>( !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1914_0">clipBack</a>(localPlane) ) +00889 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00890 } +00891 } +00892 +00893 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00894 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd11" doxytag="NL3D::CMeshMRMGeom::compileRunTime" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::compileRunTime </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02554">2554</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06006.html#l00560">_SupportMeshBlockRendering</a>, <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>, <a class="el" href="a06006.html#l00498">_SupportSkinGrouping</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06198.html#l00087">NL3D::CPrimitiveBlock::getNumLine()</a>, <a class="el" href="a06198.html#l00141">NL3D::CPrimitiveBlock::getNumQuad()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a05385.html#l00204">NLMISC::CAABBoxExt::getRadius()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05990.html#l00066">NL3D_MESH_PRECISE_CLIP_THRESHOLD</a>, <a class="el" href="a06330.html#l00066">NL3D_MESH_SKIN_MANAGER_MAXVERTICES</a>, <a class="el" href="a06330.html#l00065">NL3D_MESH_SKIN_MANAGER_VERTEXFORMAT</a>, <a class="el" href="a06330.html#l00076">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>, <a class="el" href="a06330.html#l00075">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00246">build()</a>. +<p> +<div class="fragment"><pre>02555 { +02556 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">_PreciseClipping</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>.<a class="code" href="a02157.html#NLMISC_1_1CAABBoxExtz1912_5">getRadius</a>() >= <a class="code" href="a04567.html#a1">NL3D_MESH_PRECISE_CLIP_THRESHOLD</a>; +02557 +02558 <span class="comment">// Compute if can support SkinGrouping rendering</span> +02559 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()==0 || !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +02560 { +02561 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= <span class="keyword">false</span>; +02562 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= <span class="keyword">false</span>; +02563 } +02564 <span class="keywordflow">else</span> +02565 { +02566 <span class="comment">// The Mesh must follow those restrictions, to support group skinning</span> +02567 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= +02568 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() == <a class="code" href="a04907.html#a0">NL3D_MESH_SKIN_MANAGER_VERTEXFORMAT</a> && +02569 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices() < <a class="code" href="a04907.html#a1">NL3D_MESH_SKIN_MANAGER_MAXVERTICES</a> && +02570 !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>; +02571 <span class="comment">// Additionally, NONE of the RdrPass should have Quads or lines...</span> +02572 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();i++) +02573 { +02574 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[i].RdrPass.size();j++) +02575 { +02576 CPrimitiveBlock &pb= _Lods[i].RdrPass[j].PBlock; +02577 <span class="keywordflow">if</span>( pb.getNumQuad() || pb.getNumLine() ) +02578 { +02579 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>= <span class="keyword">false</span>; +02580 <span class="keywordflow">break</span>; +02581 } +02582 } +02583 } +02584 +02585 <span class="comment">// Support Shadow SkinGrouping if Shadow setuped, and if not too many vertices.</span> +02586 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.empty() && +02587 <a class="code" href="a04907.html#a3">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>==CVertexBuffer::PositionFlag && +02588 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size() <= <a class="code" href="a04907.html#a4">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>; +02589 } +02590 +02591 <span class="comment">// Support MeshBlockRendering only if not skinned/meshMorphed.</span> +02592 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>= !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> && <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size()==0; +02593 +02594 <span class="comment">// \todo yoyo: support later MeshVertexProgram </span> +02595 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a> && <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>==NULL; +02596 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_0" doxytag="NL3D::CMeshMRMGeom::computeBonesId" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::computeBonesId </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03399.html">CSkeletonModel</a> * </td> + <td class="mdname1" valign="top" nowrap> <em>skeleton</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Compute skinning id. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02293">2293</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00510">_BonesSphere</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06394.html#l00098">NL3D::CSkeletonModel::Bones</a>, <a class="el" href="a06393.html#l00237">NL3D::CSkeletonModel::flagBoneAndParents()</a>, <a class="el" href="a06393.html#l00629">NL3D::CSkeletonModel::getBoneIdByName()</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05646.html#l00237">v</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02999">NL3D::CMeshMRM::computeBonesId()</a>. +<p> +<div class="fragment"><pre>02294 { +02295 <span class="comment">// Already computed ?</span> +02296 <span class="keywordflow">if</span> (!<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a>) +02297 { +02298 <span class="comment">// Get a pointer on the skeleton</span> +02299 <a class="code" href="a04199.html#a6">nlassert</a> (skeleton); +02300 <span class="keywordflow">if</span> (skeleton) +02301 { +02302 <span class="comment">// Resize boneId to the good size.</span> +02303 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.size()); +02304 +02305 <span class="comment">// Remap bones id table</span> +02306 std::vector<uint> remap (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>.size()); +02307 +02308 <span class="comment">// **** For each bones, compute remap</span> +02309 <a class="code" href="a04558.html#a15">uint</a> bone; +02310 <span class="keywordflow">for</span> (bone=0; bone<remap.size(); bone++) +02311 { +02312 <span class="comment">// Look for the bone</span> +02313 <a class="code" href="a04558.html#a10">sint32</a> boneId = skeleton->getBoneIdByName (_BonesName[bone]); +02314 +02315 <span class="comment">// Setup the _BoneId.</span> +02316 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[bone]= boneId; +02317 +02318 <span class="comment">// Bones found ?</span> +02319 <span class="keywordflow">if</span> (boneId != -1) +02320 { +02321 <span class="comment">// Set the bone id</span> +02322 remap[bone] = (<a class="code" href="a04558.html#a11">uint32</a>)boneId; +02323 } +02324 <span class="keywordflow">else</span> +02325 { +02326 <span class="comment">// Put id 0</span> +02327 remap[bone] = 0; +02328 +02329 <span class="comment">// Error</span> +02330 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"Bone %s not found in the skeleton."</span>, _BonesName[bone].c_str()); +02331 } +02332 } +02333 +02334 <span class="comment">// **** Remap the vertices, and compute Bone Spheres.</span> +02335 +02336 <span class="comment">// Find the Geomorph space: to process only real vertices, not geomorphed ones.</span> +02337 <a class="code" href="a04558.html#a15">uint</a> nGeomSpace= 0; +02338 <a class="code" href="a04558.html#a15">uint</a> lod; +02339 <span class="keywordflow">for</span> (lod=0; lod<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); lod++) +02340 { +02341 nGeomSpace= max(nGeomSpace, (<a class="code" href="a04558.html#a15">uint</a>)_Lods[lod].Geomorphs.size()); +02342 } +02343 +02344 <span class="comment">// Prepare Sphere compute</span> +02345 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>.size() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size()); +02346 <span class="keyword">static</span> std::vector<CAABBox> boneBBoxes; +02347 <span class="keyword">static</span> std::vector<bool> boneBBEmpty; +02348 boneBBoxes.clear(); +02349 boneBBEmpty.clear(); +02350 boneBBoxes.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size()); +02351 boneBBEmpty.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size(), <span class="keyword">true</span>); +02352 +02353 <span class="comment">// Remap the vertex, and compute the bone spheres. see CTransform::getSkinBoneSphere() doc.</span> +02354 <span class="comment">// for true vertices</span> +02355 <a class="code" href="a04558.html#a15">uint</a> vert; +02356 <span class="keywordflow">for</span> (vert=nGeomSpace; vert<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.size(); vert++) +02357 { +02358 <span class="comment">// get the vertex position.</span> +02359 CVector vertex= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vert]; +02360 +02361 <span class="comment">// For each weight</span> +02362 <a class="code" href="a04558.html#a15">uint</a> weight; +02363 <span class="keywordflow">for</span> (weight=0; weight<<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; weight++) +02364 { +02365 <span class="comment">// Active ?</span> +02366 <span class="keywordflow">if</span> ((<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].Weights[weight]>0)||(weight==0)) +02367 { +02368 <span class="comment">// Check id</span> +02369 <a class="code" href="a04558.html#a15">uint</a> srcId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vert].MatrixId[weight]; +02370 <a class="code" href="a04199.html#a6">nlassert</a> (srcId < remap.size()); +02371 <span class="comment">// remap</span> +02372 _SkinWeights[vert].MatrixId[weight] = remap[srcId]; +02373 +02374 <span class="comment">// if the boneId is valid (ie found)</span> +02375 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[srcId]>=0) +02376 { +02377 <span class="comment">// transform the vertex pos in BoneSpace</span> +02378 CVector p= skeleton->Bones[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[srcId]].getBoneBase().InvBindPos * vertex; +02379 <span class="comment">// extend the bone bbox.</span> +02380 <span class="keywordflow">if</span>(boneBBEmpty[srcId]) +02381 { +02382 boneBBoxes[srcId].setCenter(p); +02383 boneBBEmpty[srcId]= <span class="keyword">false</span>; +02384 } +02385 <span class="keywordflow">else</span> +02386 { +02387 boneBBoxes[srcId].extend(p); +02388 } +02389 } +02390 } +02391 <span class="keywordflow">else</span> +02392 <span class="keywordflow">break</span>; +02393 } +02394 } +02395 +02396 <span class="comment">// Compile spheres</span> +02397 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size()); +02398 <span class="keywordflow">for</span>(bone=0;bone<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>.size();bone++) +02399 { +02400 <span class="comment">// If the bone is empty, mark with -1 in the radius.</span> +02401 <span class="keywordflow">if</span>(boneBBEmpty[bone]) +02402 { +02403 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>[bone].Radius= -1; +02404 } +02405 <span class="keywordflow">else</span> +02406 { +02407 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>[bone].Center= boneBBoxes[bone].getCenter(); +02408 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>[bone].Radius= boneBBoxes[bone].getRadius(); +02409 } +02410 } +02411 +02412 <span class="comment">// **** Remap the vertex influence by lods</span> +02413 <span class="keywordflow">for</span> (lod=0; lod<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); lod++) +02414 { +02415 <span class="comment">// For each matrix used</span> +02416 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a578">matrix</a>; +02417 <span class="keywordflow">for</span> (<a class="code" href="a04223.html#a578">matrix</a>=0; <a class="code" href="a04223.html#a578">matrix</a><<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lod].MatrixInfluences.size(); <a class="code" href="a04223.html#a578">matrix</a>++) +02418 { +02419 <span class="comment">// Check</span> +02420 <a class="code" href="a04199.html#a6">nlassert</a> (_Lods[lod].MatrixInfluences[matrix]<remap.size()); +02421 +02422 <span class="comment">// Remap</span> +02423 _Lods[lod].MatrixInfluences[<a class="code" href="a04223.html#a578">matrix</a>] = remap[_Lods[lod].MatrixInfluences[<a class="code" href="a04223.html#a578">matrix</a>]]; +02424 } +02425 } +02426 +02427 <span class="comment">// **** Remap Shadow Vertices.</span> +02428 <span class="keywordflow">for</span>(vert=0;vert<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size();vert++) +02429 { +02430 CShadowVertex &<a class="code" href="a04223.html#a576">v</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>[vert]; +02431 <span class="comment">// Check id</span> +02432 <a class="code" href="a04199.html#a6">nlassert</a> (<a class="code" href="a04223.html#a576">v</a>.MatrixId < remap.size()); +02433 <a class="code" href="a04223.html#a576">v</a>.MatrixId= remap[<a class="code" href="a04223.html#a576">v</a>.MatrixId]; +02434 } +02435 +02436 <span class="comment">// Computed</span> +02437 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a> = <span class="keyword">true</span>; +02438 } +02439 } +02440 +02441 <span class="comment">// Already extended ?</span> +02442 <span class="keywordflow">if</span> (!<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a>) +02443 { +02444 <a class="code" href="a04199.html#a6">nlassert</a> (skeleton); +02445 <span class="keywordflow">if</span> (skeleton) +02446 { +02447 <span class="comment">// the total bone Usage of the mesh.</span> +02448 vector<bool> boneUsage; +02449 boneUsage.resize(skeleton->Bones.size(), <span class="keyword">false</span>); +02450 +02451 <span class="comment">// for all Bones marked as valid.</span> +02452 <a class="code" href="a04558.html#a15">uint</a> i; +02453 <span class="keywordflow">for</span>(i=0; i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>.size(); i++) +02454 { +02455 <span class="comment">// if not a valid boneId, skip it.</span> +02456 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>[i]<0) +02457 <span class="keywordflow">continue</span>; +02458 +02459 <span class="comment">// mark him and his father in boneUsage.</span> +02460 skeleton->flagBoneAndParents(_BonesId[i], boneUsage); +02461 } +02462 +02463 <span class="comment">// fill _BonesIdExt with bones of _BonesId and their parents.</span> +02464 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>.clear(); +02465 <span class="keywordflow">for</span>(i=0; i<boneUsage.size();i++) +02466 { +02467 <span class="comment">// if the bone is used by the mesh, add it to BoneIdExt.</span> +02468 <span class="keywordflow">if</span>(boneUsage[i]) +02469 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>.push_back(i); +02470 } +02471 +02472 } +02473 +02474 <span class="comment">// Extended</span> +02475 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a>= <span class="keyword">true</span>; +02476 } +02477 +02478 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_2" doxytag="NL3D::CMeshMRMGeom::computeMeshVBHeap" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::computeMeshVBHeap </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">void * </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> </td> + <td class="mdname" nowrap> <em>indexStart</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td>dest VertexBuffer. NB: start to fill at dst[0] </td></tr> + <tr><td valign=top><em>indexStart</em> </td><td>used to shift primitive block.</td></tr> + </table> +</dl> + +<p> +Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_2">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02811">2811</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06197.html#l00038">NL3D::CPrimitiveBlock::getLinePointer()</a>, <a class="el" href="a06198.html#l00087">NL3D::CPrimitiveBlock::getNumLine()</a>, <a class="el" href="a06198.html#l00141">NL3D::CPrimitiveBlock::getNumQuad()</a>, <a class="el" href="a06198.html#l00108">NL3D::CPrimitiveBlock::getNumTri()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06197.html#l00149">NL3D::CPrimitiveBlock::getQuadPointer()</a>, <a class="el" href="a06197.html#l00091">NL3D::CPrimitiveBlock::getTriPointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06197.html#l00061">NL3D::CPrimitiveBlock::setNumLine()</a>, <a class="el" href="a06197.html#l00180">NL3D::CPrimitiveBlock::setNumQuad()</a>, <a class="el" href="a06197.html#l00114">NL3D::CPrimitiveBlock::setNumTri()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +<div class="fragment"><pre>02812 { +02813 <span class="comment">// Fill dst with Buffer content.</span> +02814 memcpy(dst, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(), <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()*<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() ); +02815 +02816 <span class="comment">// For All Lods</span> +02817 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> lodId=0; lodId<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size();lodId++) +02818 { +02819 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId]; +02820 +02821 <span class="comment">// For all rdrPass.</span> +02822 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<lod.RdrPass.size();i++) +02823 { +02824 <span class="comment">// shift the PB</span> +02825 CPrimitiveBlock &srcPb= lod.RdrPass[i].PBlock; +02826 CPrimitiveBlock &dstPb= lod.RdrPass[i].VBHeapPBlock; +02827 <a class="code" href="a04558.html#a15">uint</a> j; +02828 +02829 <span class="comment">// Lines.</span> +02830 dstPb.setNumLine(srcPb.getNumLine()); +02831 <a class="code" href="a04558.html#a11">uint32</a> *srcLinePtr= srcPb.getLinePointer(); +02832 <a class="code" href="a04558.html#a11">uint32</a> *dstLinePtr= dstPb.getLinePointer(); +02833 <span class="keywordflow">for</span>(j=0; j<dstPb.getNumLine()*2;j++) +02834 { +02835 dstLinePtr[j]= srcLinePtr[j]+indexStart; +02836 } +02837 <span class="comment">// Tris.</span> +02838 dstPb.setNumTri(srcPb.getNumTri()); +02839 <a class="code" href="a04558.html#a11">uint32</a> *srcTriPtr= srcPb.getTriPointer(); +02840 <a class="code" href="a04558.html#a11">uint32</a> *dstTriPtr= dstPb.getTriPointer(); +02841 <span class="keywordflow">for</span>(j=0; j<dstPb.getNumTri()*3;j++) +02842 { +02843 dstTriPtr[j]= srcTriPtr[j]+indexStart; +02844 } +02845 <span class="comment">// Quads.</span> +02846 dstPb.setNumQuad(srcPb.getNumQuad()); +02847 <a class="code" href="a04558.html#a11">uint32</a> *srcQuadPtr= srcPb.getQuadPointer(); +02848 <a class="code" href="a04558.html#a11">uint32</a> *dstQuadPtr= dstPb.getQuadPointer(); +02849 <span class="keywordflow">for</span>(j=0; j<dstPb.getNumQuad()*4;j++) +02850 { +02851 dstQuadPtr[j]= srcQuadPtr[j]+indexStart; +02852 } +02853 } +02854 } +02855 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_0" doxytag="NL3D::CMeshMRMGeom::deleteVertexBufferHard" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::deleteVertexBufferHard </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02209">2209</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a05622.html#l00290">nlassert</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00221">~CMeshMRMGeom()</a>. +<p> +<div class="fragment"><pre>02210 { +02211 <span class="comment">// test (refptr) if the object still exist in memory.</span> +02212 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL) +02213 { +02214 <span class="comment">// A vbufferhard should still exist only if driver still exist.</span> +02215 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL); +02216 +02217 <span class="comment">// delete it from driver.</span> +02218 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>->deleteVertexBufferHard(_VBHard); +02219 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>= NULL; +02220 } +02221 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_9" doxytag="NL3D::CMeshMRMGeom::dirtMeshDataId" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::dirtMeshDataId </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Increment the refCount, so instances RawSkins are no longer valid. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l03052">3052</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00639">_MeshDataId</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00246">build()</a>. +<p> +<div class="fragment"><pre>03053 { +03054 <span class="comment">// see updateRawSkinNormal()</span> +03055 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>++; +03056 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_3" doxytag="NL3D::CMeshMRMGeom::endMesh" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::endMesh </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>rdrCtx</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The framework call this method when it has done with this meshGeom +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_3">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02791">2791</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00562">_MBRBkupNormalize</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, and <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver::forceNormalize()</a>. +<p> +<div class="fragment"><pre>02792 { +02793 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty()) +02794 <span class="keywordflow">return</span>; +02795 +02796 <span class="comment">// bkup force normalisation.</span> +02797 rdrCtx.Driver->forceNormalize(_MBRBkupNormalize); +02798 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_1" doxytag="NL3D::CMeshMRMGeom::fillAGPSkinPartWithVBHardPtr" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::fillAGPSkinPartWithVBHardPtr </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> & </td> + <td class="mdname" nowrap> <em>lod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vertexDst</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l01978">1978</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_0" doxytag="NL3D::CMeshMRMGeom::getBonesName" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const std::vector<std::string>& NL3D::CMeshMRMGeom::getBonesName </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the bone names of the meshMRM. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00182">182</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +<div class="fragment"><pre>00182 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">_BonesName</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_1" doxytag="NL3D::CMeshMRMGeom::getBoundingBox" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a>& NL3D::CMeshMRMGeom::getBoundingBox </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </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> + + </td> + <td> + +<p> +get the extended axis aligned bounding box of the mesh +<p> + +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz455_0">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06006.html#l00170">170</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06006.html#l00758">NL3D::CMeshMRM::getBoundingBox()</a>. +<p> +<div class="fragment"><pre>00171 { +00172 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">_BBox</a>; +00173 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1ITrackKeyFramer_3_01CKeyVector_01_4a6" doxytag="NL3D::CMeshMRMGeom::getClassName" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> virtual std::string NLMISC::IClassable::getClassName </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </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> + + </td> + <td> + +<p> + +<p> +Implemented in <a class="el" href="a02995.html#NLAIAGENT_1_1CNumericIndexz1699_0">NLAIAGENT::CNumericIndex</a>, <a class="el" href="a02145.html#NLAIAGENT_1_1VectorTypez1764_0">NLAIC::IPointerGestion</a>, <a class="el" href="a02650.html#NLAIC_1_1CIdentTypez1766_0">NLAIC::CIdentType</a>, and <a class="el" href="a02241.html#CAutomataDescz1896_0">CAutomataDesc</a>. +<p> +Referenced by <a class="el" href="a05549.html#l00091">NLMISC::CClassRegistry::checkObject()</a>, and <a class="el" href="a06525.html#l00039">NL3D::GetTextureSize()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_2" doxytag="NL3D::CMeshMRMGeom::getGeomorphs" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const std::vector<<a class="el" href="a02971.html">CMRMWedgeGeom</a>>& NL3D::CMeshMRMGeom::getGeomorphs </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname1" valign="top" nowrap> <em>lodId</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Advanced. get the geomorphs for a special lod. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00216">216</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>00217 { +00218 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].Geomorphs; +00219 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma5" doxytag="NL3D::CMeshMRMGeom::getLevelDetail" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const <a class="el" href="a02959.html">CMRMLevelDetail</a>& NL3D::CMeshMRMGeom::getLevelDetail </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the MRM level detail information +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00275">275</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00181">NL3D::CMeshMRMInstance::getMRMLevelDetail()</a>. +<p> +<div class="fragment"><pre>00275 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_3" doxytag="NL3D::CMeshMRMGeom::getNbBlendShapes" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbBlendShapes </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the number of BlendShapes +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00222">222</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>00222 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size(); } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_4" doxytag="NL3D::CMeshMRMGeom::getNbLod" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbLod </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the number of LOD. +<p> +Definition at line <a class="el" href="a06006.html#l00186">186</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00462">applyMaterialRemap()</a>, <a class="el" href="a06006.html#l00769">NL3D::CMeshMRM::getNbLod()</a>, and <a class="el" href="a06005.html#l02001">loadNextLod()</a>. +<p> +<div class="fragment"><pre>00186 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size() ; } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_0" doxytag="NL3D::CMeshMRMGeom::getNbLodLoaded" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbLodLoaded </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the number of LOD currently loaded. +<p> +Definition at line <a class="el" href="a06006.html#l00140">140</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02001">loadNextLod()</a>, and <a class="el" href="a06005.html#l02029">unloadNextLod()</a>. +<p> +<div class="fragment"><pre>00140 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a> ; } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_5" doxytag="NL3D::CMeshMRMGeom::getNbRdrPass" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNbRdrPass </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname1" valign="top" nowrap> <em>lodId</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the number of rendering pass of a LOD. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>lodId</em> </td><td>the id of the LOD.</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06006.html#l00192">192</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00231">NL3D::CInstanceLighter::addTriangles()</a>, <a class="el" href="a06005.html#l00462">applyMaterialRemap()</a>, and <a class="el" href="a06006.html#l00775">NL3D::CMeshMRM::getNbRdrPass()</a>. +<p> +<div class="fragment"><pre>00192 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].RdrPass.size() ; } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_4" doxytag="NL3D::CMeshMRMGeom::getNumRdrPassesForInstance" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNumRdrPassesForInstance </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02873.html">CMeshBaseInstance</a> * </td> + <td class="mdname1" valign="top" nowrap> <em>inst</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +return the number of renderPasses for this instance. Called after activateInstance() Used only if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_9">sortPerMaterial()</a>) is false +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_4">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02700">2700</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>02701 { +02702 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>].RdrPass.size(); +02703 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_5" doxytag="NL3D::CMeshMRMGeom::getNumRdrPassesForMesh" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNumRdrPassesForMesh </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +return the number of renderPasses for this mesh. Used only if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_9">sortPerMaterial()</a>) is true +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_5">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02693">2693</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>02694 { +02695 <span class="comment">// not used...</span> +02696 <span class="keywordflow">return</span> 0; +02697 +02698 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_0" doxytag="NL3D::CMeshMRMGeom::getNumShadowSkinVertices" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CMeshMRMGeom::getNumShadowSkinVertices </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const</td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get the num of shadow skin vertices. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l03370">3370</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>03371 { +03372 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size(); +03373 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_1" doxytag="NL3D::CMeshMRMGeom::getNumTriangles" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> float NL3D::CMeshMRMGeom::getNumTriangles </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">float </td> + <td class="mdname1" valign="top" nowrap> <em>distance</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get an approximation of the number of triangles this instance will render for a fixed distance. +<p> + +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz455_1">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02200">2200</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, and <a class="el" href="a06060.html#l00082">NL3D::CMRMLevelDetail::getNumTriangles()</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02985">NL3D::CMeshMRM::getNumTriangles()</a>. +<p> +<div class="fragment"><pre>02201 { +02202 <span class="comment">// NB: this is an approximation, but this is continious.</span> +02203 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getNumTriangles(distance); +02204 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_6" doxytag="NL3D::CMeshMRMGeom::getRdrPassMaterial" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> NL3D::CMeshMRMGeom::getRdrPassMaterial </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>lodId</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>renderingPassIndex</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </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> + + </td> + <td> + +<p> +get the material ID associated with a rendering pass of a LOD. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>lodId</em> </td><td>the id of the LOD. </td></tr> + <tr><td valign=top><em>renderingPassIndex</em> </td><td>the index of the rendering pass in the matrix block</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06006.html#l00209">209</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, and <a class="el" href="a06006.html#l00792">NL3D::CMeshMRM::getRdrPassMaterial()</a>. +<p> +<div class="fragment"><pre>00210 { +00211 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].RdrPass[renderingPassIndex].MaterialId ; +00212 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_7" doxytag="NL3D::CMeshMRMGeom::getRdrPassPrimitiveBlock" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const <a class="el" href="a03105.html">CPrimitiveBlock</a>& NL3D::CMeshMRMGeom::getRdrPassPrimitiveBlock </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>lodId</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>renderingPassIndex</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </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> + + </td> + <td> + +<p> +get the primitive block associated with a rendering pass of a LOD. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>lodId</em> </td><td>the id of the LOD. </td></tr> + <tr><td valign=top><em>renderingPassIndex</em> </td><td>the index of the rendering pass</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06006.html#l00199">199</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00231">NL3D::CInstanceLighter::addTriangles()</a>, and <a class="el" href="a06006.html#l00782">NL3D::CMeshMRM::getRdrPassPrimitiveBlock()</a>. +<p> +<div class="fragment"><pre>00200 { +00201 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[lodId].RdrPass[renderingPassIndex].PBlock ; +00202 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_1" doxytag="NL3D::CMeshMRMGeom::getSkinBoneSphere" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const std::vector<<a class="el" href="a02291.html">NLMISC::CBSphere</a>>& NL3D::CMeshMRMGeom::getSkinBoneSphere </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value. computeBonesId must has been called before. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00246">246</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00510">_BonesSphere</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00136">NL3D::CMeshMRMInstance::getSkinBoneSphere()</a>. +<p> +<div class="fragment"><pre>00246 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">_BonesSphere</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_2" doxytag="NL3D::CMeshMRMGeom::getSkinBoneUsage" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const std::vector<<a class="el" href="a04558.html#a10">sint32</a>>& NL3D::CMeshMRMGeom::getSkinBoneUsage </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +return array of bones used by the skin. computeBonesId must has been called before. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00243">243</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00122">NL3D::CMeshMRMInstance::getSkinBoneUsage()</a>. +<p> +<div class="fragment"><pre>00243 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">_BonesId</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_8" doxytag="NL3D::CMeshMRMGeom::getSkinWeights" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const std::vector<<a class="el" href="a02865.html">CMesh::CSkinWeight</a>>& NL3D::CMeshMRMGeom::getSkinWeights </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the skinWeights used by the mrm mesh. NB: same size of the vertexBuffer. empty if !isSkinned() +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00179">179</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00490">_SkinWeights</a>. +<p> +<div class="fragment"><pre>00179 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_6" doxytag="NL3D::CMeshMRMGeom::getVBHeapInfo" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::getVBHeapInfo </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a> & </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> & </td> + <td class="mdname" nowrap> <em>numVertices</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The framework call this method to know if the mesh can fit in VBHeap. if yes, deriver must return mesh vertexFormat and num of vertices. +<p> +Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_6">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02802">2802</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00560">_SupportMeshBlockRendering</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>02803 { +02804 <span class="comment">// CMeshMRMGeom support VBHeap rendering, assuming _SupportMeshBlockRendering is true</span> +02805 vertexFormat= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(); +02806 numVertices= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices(); +02807 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">_SupportMeshBlockRendering</a>; +02808 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz471_9" doxytag="NL3D::CMeshMRMGeom::getVertexBuffer" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const <a class="el" href="a03692.html">CVertexBuffer</a>& NL3D::CMeshMRMGeom::getVertexBuffer </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +get the vertex buffer used by the mrm mesh. NB: this VB store all Vertices used by All LODs. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00176">176</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>. +<p> +Referenced by <a class="el" href="a06768.html#l01887">NL3D::CZoneLighter::addTriangles()</a>, <a class="el" href="a05824.html#l00231">NL3D::CInstanceLighter::addTriangles()</a>, and <a class="el" href="a06006.html#l00764">NL3D::CMeshMRM::getVertexBuffer()</a>. +<p> +<div class="fragment"><pre>00176 { <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a> ; } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeoma6" doxytag="NL3D::CMeshMRMGeom::hasMeshVertexProgram" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> virtual bool NL3D::CMeshMRMGeom::hasMeshVertexProgram </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </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> + + </td> + <td> + +<p> +True if this mesh has a vertexProgram. +<p> + +<p> +Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma2">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06006.html#l00287">287</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00232">NL3D::CMeshMRMInstance::initRenderFilterType()</a>. +<p> +<div class="fragment"><pre>00287 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>!=NULL;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_2" doxytag="NL3D::CMeshMRMGeom::initInstance" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::initInstance </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02873.html">CMeshBaseInstance</a> * </td> + <td class="mdname1" valign="top" nowrap> <em>mbi</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Init instance info. +<p> + +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma4">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l00847">847</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02924">NL3D::CMeshMRM::createInstance()</a>. +<p> +<div class="fragment"><pre>00848 { +00849 <span class="comment">// init the instance with _MeshVertexProgram infos</span> +00850 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>) +00851 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->initInstance(mbi); +00852 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_7" doxytag="NL3D::CMeshMRMGeom::isActiveInstanceNeedVBFill" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::isActiveInstanceNeedVBFill </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Return true if the meshGeom has to Fill some Vertices at <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_0">activeInstance()</a> time if VBHeap enabled at this time, then vbDst in activeInstance(,,,vbDst) will contains the vb to write to. +<p> +Reimplemented from <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_7">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02858">2858</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +<div class="fragment"><pre>02859 { +02860 <span class="comment">// Yes, need it for geomorph</span> +02861 <span class="keywordflow">return</span> <span class="keyword">true</span>; +02862 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1IMeshGeomz457_8" doxytag="NL3D::CMeshMRMGeom::isMeshInVBHeap" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::IMeshGeom::isMeshInVBHeap </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </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> + + </td> + <td> + +<p> +Return true if the meshGeom has to Fill some Vertices at <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_0">activeInstance()</a> time if VBHeap enabled at this time, then vbDst in activeInstance(,,,vbDst) will contains the vb to write to. +<p> +Definition at line <a class="el" href="a06000.html#l00215">215</a> of file <a class="el" href="a06000.html">mesh_geom.h</a>. +<p> +References <a class="el" href="a06000.html#l00233">NL3D::IMeshGeom::_MeshVBHeapId</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, and <a class="el" href="a05989.html#l01932">NL3D::CMeshGeom::profileSceneRender()</a>. +<p> +<div class="fragment"><pre>00215 {<span class="keywordflow">return</span> _MeshVBHeapId!=0;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_3" doxytag="NL3D::CMeshMRMGeom::isSkinned" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::isSkinned </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Return true if the mesh is skinned, else return false. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00231">231</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00150">NL3D::CMeshMRMInstance::isSkinnable()</a>. +<p> +<div class="fragment"><pre>00232 { +00233 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>; +00234 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd12" doxytag="NL3D::CMeshMRMGeom::load" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::load </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +load this mesh. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01757">1757</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>01758 { +01759 +01760 <span class="comment">// because loading, flag the VertexBufferHard.</span> +01761 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>; +01762 +01763 +01764 <span class="comment">// Load the header of the stream.</span> +01765 <span class="comment">// ==================</span> +01766 <a class="code" href="a04558.html#a14">sint</a> verHeader= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd13">loadHeader</a>(f); +01767 +01768 <span class="comment">// Read All lod subsets.</span> +01769 <span class="comment">// ==================</span> +01770 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++) +01771 { +01772 <span class="comment">// read the lod face data.</span> +01773 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[i]); +01774 <span class="comment">// read the lod vertex data.</span> +01775 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[i].StartAddWedge, _LodInfos[i].EndAddWedges); +01776 <span class="comment">// if reading, must bkup all original vertices from VB.</span> +01777 <span class="comment">// this is done in serialLodVertexData(). by subset</span> +01778 } +01779 +01780 <span class="comment">// Now, all lods are loaded.</span> +01781 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size(); +01782 +01783 <span class="comment">// If version doen't have boneNames, must build BoneId now.</span> +01784 <span class="keywordflow">if</span>(verHeader <= 2) +01785 { +01786 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd9">buildBoneUsageVer2</a> (); +01787 } +01788 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_1" doxytag="NL3D::CMeshMRMGeom::loadFirstLod" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::loadFirstLod </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Load the header and the first lod of a MRM in a stream. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>f</em> </td><td>the input stream to read. NB: after load, f.getPos() return the position of the second lod in the stream.</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06005.html#l01951">1951</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00519">_LodInfos</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06005.html#l02482">buildBoneUsageVer2()</a>, <a class="el" href="a06005.html#l01627">loadHeader()</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>01952 { +01953 +01954 <span class="comment">// because loading, flag the VertexBufferHard.</span> +01955 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>; +01956 +01957 <span class="comment">// Load the header of the stream.</span> +01958 <span class="comment">// ==================</span> +01959 <a class="code" href="a04558.html#a14">sint</a> verHeader= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd13">loadHeader</a>(f); +01960 +01961 +01962 <span class="comment">// If empty MRM, quit.</span> +01963 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size()==0) +01964 <span class="keywordflow">return</span>; +01965 +01966 <span class="comment">/* If the version is <4, then SkinWeights are serialised per Lod.</span> +01967 <span class="comment"> But for computebonesId(), we must have all SkinWeights RIGHT NOW.</span> +01968 <span class="comment"> Hence, if too old version (<4), serialize all the MRM....</span> +01969 <span class="comment"> */</span> +01970 <a class="code" href="a04558.html#a15">uint</a> numLodToLoad; +01971 <span class="keywordflow">if</span>(verHeader<4) +01972 numLodToLoad= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); +01973 <span class="keywordflow">else</span> +01974 numLodToLoad= 1; +01975 +01976 +01977 <span class="comment">// Read lod subset(s).</span> +01978 <span class="comment">// ==================</span> +01979 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<numLodToLoad; i++) +01980 { +01981 <span class="comment">// read the lod face data.</span> +01982 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[i]); +01983 <span class="comment">// read the lod vertex data.</span> +01984 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[i].StartAddWedge, _LodInfos[i].EndAddWedges); +01985 <span class="comment">// if reading, must bkup all original vertices from VB.</span> +01986 <span class="comment">// this is done in serialLodVertexData(). by subset</span> +01987 } +01988 +01989 <span class="comment">// Now, just first lod is loaded (but if too old file)</span> +01990 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= numLodToLoad; +01991 +01992 <span class="comment">// If version doen't have boneNames, must build BoneId now.</span> +01993 <span class="keywordflow">if</span>(verHeader <= 2) +01994 { +01995 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd9">buildBoneUsageVer2</a> (); +01996 } +01997 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd13" doxytag="NL3D::CMeshMRMGeom::loadHeader" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::loadHeader </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +load the header of this mesh. return the version of the header. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01627">1627</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a02867.html#NL3D_1_1ITrackDefaulta6">NLMISC::IStreamable::serial()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01951">loadFirstLod()</a>. +<p> +<div class="fragment"><pre>01628 { +01629 <span class="comment">/*</span> +01630 <span class="comment"> Version 5:</span> +01631 <span class="comment"> - Shadow Skinning</span> +01632 <span class="comment"> Version 4:</span> +01633 <span class="comment"> - serial SkinWeights per MRM, not per Lod</span> +01634 <span class="comment"> Version 3:</span> +01635 <span class="comment"> - Bones names.</span> +01636 <span class="comment"> Version 2:</span> +01637 <span class="comment"> - Mesh Vertex Program.</span> +01638 <span class="comment"> Version 1:</span> +01639 <span class="comment"> - added blend shapes</span> +01640 <span class="comment"> Version 0:</span> +01641 <span class="comment"> - base version.</span> +01642 <span class="comment"> */</span> +01643 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(5); +01644 +01645 +01646 <span class="comment">// if >= version 3, serial boens names</span> +01647 <span class="keywordflow">if</span>(ver>=3) +01648 { +01649 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_BonesName); +01650 } +01651 +01652 <span class="comment">// Version3-: Bones index are in skeleton model id list</span> +01653 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">_BoneIdComputed</a> = (ver < 3); +01654 <span class="comment">// Must always recompute usage of parents of bones used.</span> +01655 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">_BoneIdExtended</a> = <span class="keyword">false</span>; +01656 +01657 <span class="comment">// Mesh Vertex Program.</span> +01658 <span class="keywordflow">if</span> (ver >= 2) +01659 { +01660 IMeshVertexProgram *mvp= NULL; +01661 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_6">serialPolyPtr</a>(mvp); +01662 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>= mvp; +01663 } +01664 <span class="keywordflow">else</span> +01665 { +01666 <span class="comment">// release vp</span> +01667 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>= NULL; +01668 } +01669 +01670 <span class="comment">// blend shapes</span> +01671 <span class="keywordflow">if</span> (ver >= 1) +01672 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_MeshMorpher); +01673 +01674 <span class="comment">// serial Basic info.</span> +01675 <span class="comment">// ==================</span> +01676 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Skinned); +01677 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_BBox); +01678 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed); +01679 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed); +01680 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest); +01681 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle); +01682 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest); +01683 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.OODistanceDelta); +01684 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistancePow); +01685 <span class="comment">// preload the Lods.</span> +01686 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_LodInfos); +01687 +01688 <span class="comment">// read/save number of wedges.</span> +01689 <span class="comment">/* NB: prepare memory space too for vertices.</span> +01690 <span class="comment"> \todo yoyo: TODO_OPTIMIZE. for now there is no Lod memory profit with vertices / skinWeights.</span> +01691 <span class="comment"> But resizing arrays is a problem because of reallocation...</span> +01692 <span class="comment"> */</span> +01693 <a class="code" href="a04558.html#a11">uint32</a> nWedges; +01694 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(nWedges); +01695 <span class="comment">// Prepare the VBuffer.</span> +01696 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.serialHeader(f); +01697 <span class="comment">// If skinned, must allocate skinWeights.</span> +01698 <a class="code" href="a05378.html#a381">contReset</a>(_SkinWeights); +01699 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +01700 { +01701 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>.resize(nWedges); +01702 } +01703 +01704 +01705 <span class="comment">// If new version, serial SkinWeights in header, not in lods.</span> +01706 <span class="keywordflow">if</span>(ver >= 4) +01707 { +01708 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_SkinWeights); +01709 } +01710 +01711 +01712 <span class="comment">// if >= version 5, serial Shadow Skin Information</span> +01713 <span class="keywordflow">if</span>(ver>=5) +01714 { +01715 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinVertices); +01716 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinTriangles); +01717 } +01718 +01719 +01720 <span class="comment">// Serial lod offsets.</span> +01721 <span class="comment">// ==================</span> +01722 <span class="comment">// This is the reference pos, to load / save relative offsets.</span> +01723 <a class="code" href="a04558.html#a10">sint32</a> startPos = f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>(); +01724 <span class="comment">// Those are the lodOffsets, relative to startPos.</span> +01725 vector<sint32> lodOffsets; +01726 lodOffsets.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(), 0); +01727 +01728 <span class="comment">// read all relative offsets, and build the absolute offset of LodInfos.</span> +01729 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++) +01730 { +01731 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(lodOffsets[i]); +01732 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>[i].LodOffset= startPos + lodOffsets[i]; +01733 } +01734 +01735 +01736 <span class="comment">// resest the Lod arrays. NB: each Lod is empty, and ready to receive Lod data.</span> +01737 <span class="comment">// ==================</span> +01738 <a class="code" href="a05378.html#a381">contReset</a>(_Lods); +01739 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size()); +01740 +01741 <span class="comment">// Flag the fact that no lod is loaded for now.</span> +01742 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>= 0; +01743 +01744 <span class="comment">// Inform that the mesh data has changed</span> +01745 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_9">dirtMeshDataId</a>(); +01746 +01747 +01748 <span class="comment">// Some runtime not serialized compilation</span> +01749 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd11">compileRunTime</a>(); +01750 +01751 <span class="comment">// return version of the header</span> +01752 <span class="keywordflow">return</span> ver; +01753 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_2" doxytag="NL3D::CMeshMRMGeom::loadNextLod" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::loadNextLod </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Load next lod of a stream. use <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a> to know what Lod will be loaded. NB: if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a> == <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod()</a>, no op. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>f</em> </td><td>the same input stream passed to <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_1">loadFirstLod()</a>. NB: after load, f.getPos() is "unedfined" (actually return the position of the next lod in the stream).</td></tr> + </table> +</dl> + +<p> +Definition at line <a class="el" href="a06005.html#l02001">2001</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00519">_LodInfos</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, <a class="el" href="a06006.html#l00186">getNbLod()</a>, <a class="el" href="a06006.html#l00140">getNbLodLoaded()</a>, <a class="el" href="a06461.html#l00401">NLMISC::IStream::seek()</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, and <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>. +<p> +<div class="fragment"><pre>02002 { +02003 +02004 <span class="comment">// because loading, flag the VertexBufferHard.</span> +02005 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">true</span>; +02006 +02007 <span class="comment">// If all is loaded, quit.</span> +02008 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded</a>() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz471_4">getNbLod</a>()) +02009 <span class="keywordflow">return</span>; +02010 +02011 <span class="comment">// Set pos to good lod.</span> +02012 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_3">seek</a>(_LodInfos[_NbLodLoaded].LodOffset, IStream::begin); +02013 +02014 <span class="comment">// Serial this lod data.</span> +02015 <span class="comment">// read the lod face data.</span> +02016 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[_NbLodLoaded]); +02017 <span class="comment">// read the lod vertex data.</span> +02018 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[_NbLodLoaded].StartAddWedge, _LodInfos[_NbLodLoaded].EndAddWedges); +02019 <span class="comment">// if reading, must bkup all original vertices from VB.</span> +02020 <span class="comment">// this is done in serialLodVertexData(). by subset</span> +02021 +02022 +02023 <span class="comment">// Inc LodLoaded count.</span> +02024 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>++; +02025 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_3" doxytag="NL3D::CMeshMRMGeom::NLMISC_DECLARE_CLASS" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NL3D::CMeshMRMGeom::NLMISC_DECLARE_CLASS </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02892.html">CMeshMRMGeom</a> </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +clip this mesh in a driver. true if visible. +<p> + </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_4" doxytag="NL3D::CMeshMRMGeom::profileSceneRender" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::profileSceneRender </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03325.html">CRenderTrav</a> * </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> * </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 </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> </td> + <td class="mdname" nowrap> <em>rdrFlags</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Scene profile. +<p> + +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma5">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02600">2600</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06349.html#l00531">NL3D::CScene::BenchRes</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06060.html#l00101">NL3D::CMRMLevelDetail::getLevelDetailFromPolyCount()</a>, <a class="el" href="a06198.html#l00108">NL3D::CPrimitiveBlock::getNumTri()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06349.html#l00533">NL3D::CScene::incrementProfileTriVBFormat()</a>, <a class="el" href="a06000.html#l00215">NL3D::IMeshGeom::isMeshInVBHeap()</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a06625.html#l00490">NL3D::UScene::CBenchResults::MeshMRMProfileTriVBFormat</a>, <a class="el" href="a06625.html#l00499">NL3D::UScene::CBenchResults::NumMeshMRMRdrBlock</a>, <a class="el" href="a06625.html#l00500">NL3D::UScene::CBenchResults::NumMeshMRMRdrBlockWithVBHeap</a>, <a class="el" href="a06625.html#l00498">NL3D::UScene::CBenchResults::NumMeshMRMRdrNormal</a>, <a class="el" href="a06625.html#l00502">NL3D::UScene::CBenchResults::NumMeshMRMTriRdrBlock</a>, <a class="el" href="a06625.html#l00503">NL3D::UScene::CBenchResults::NumMeshMRMTriRdrBlockWithVBHeap</a>, <a class="el" href="a06625.html#l00501">NL3D::UScene::CBenchResults::NumMeshMRMTriRdrNormal</a>, <a class="el" href="a06625.html#l00507">NL3D::UScene::CBenchResults::NumMeshMRMVBufferHard</a>, <a class="el" href="a06625.html#l00506">NL3D::UScene::CBenchResults::NumMeshMRMVBufferStd</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06583.html#l00055">NL3D::CTraversal::Scene</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06005.html#l02673">supportMeshBlockRendering()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06005.html#l03030">NL3D::CMeshMRM::profileSceneRender()</a>. +<p> +<div class="fragment"><pre>02601 { +02602 <span class="comment">// get the result of the Load Balancing.</span> +02603 <span class="keywordtype">float</span> alphaMRM= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getLevelDetailFromPolyCount(polygonCount); +02604 +02605 <span class="comment">// choose the lod.</span> +02606 <span class="keywordtype">float</span> alphaLod; +02607 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod); +02608 +02609 <span class="comment">// Render the choosen Lod.</span> +02610 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod]; +02611 +02612 <span class="comment">// get the mesh instance.</span> +02613 CMeshBaseInstance *mi= safe_cast<CMeshBaseInstance*>(trans); +02614 +02615 <span class="comment">// Profile all pass.</span> +02616 <a class="code" href="a04558.html#a15">uint</a> triCount= 0; +02617 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i=0;i<lod.RdrPass.size();i++) +02618 { +02619 CRdrPass &rdrPass= lod.RdrPass[i]; +02620 <span class="comment">// Profile with the Materials of the MeshInstance.</span> +02621 <span class="keywordflow">if</span> ( ( (mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) && (rdrFlags & IMeshGeom::RenderOpaqueMaterial) ) || +02622 ( (mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) && (rdrFlags & IMeshGeom::RenderTransparentMaterial) ) ) +02623 { +02624 triCount+= rdrPass.PBlock.getNumTri(); +02625 } +02626 } +02627 +02628 <span class="comment">// Profile</span> +02629 <span class="keywordflow">if</span>(triCount) +02630 { +02631 <span class="comment">// tri per VBFormat</span> +02632 rdrTrav->Scene->incrementProfileTriVBFormat(rdrTrav->Scene->BenchRes.MeshMRMProfileTriVBFormat, +02633 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(), triCount); +02634 +02635 <span class="comment">// VBHard</span> +02636 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>) +02637 rdrTrav->Scene->BenchRes.NumMeshMRMVBufferHard++; +02638 <span class="keywordflow">else</span> +02639 rdrTrav->Scene->BenchRes.NumMeshMRMVBufferStd++; +02640 +02641 <span class="comment">// rendered in BlockRendering, only if not transparent pass (known it if RenderTransparentMaterial is set)</span> +02642 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz475_10">supportMeshBlockRendering</a>() && (rdrFlags & IMeshGeom::RenderTransparentMaterial)==0 ) +02643 { +02644 <span class="keywordflow">if</span>(<a class="code" href="a02879.html#NL3D_1_1IMeshGeomz457_8">isMeshInVBHeap</a>()) +02645 { +02646 rdrTrav->Scene->BenchRes.NumMeshMRMRdrBlockWithVBHeap++; +02647 rdrTrav->Scene->BenchRes.NumMeshMRMTriRdrBlockWithVBHeap+= triCount; +02648 } +02649 <span class="keywordflow">else</span> +02650 { +02651 rdrTrav->Scene->BenchRes.NumMeshMRMRdrBlock++; +02652 rdrTrav->Scene->BenchRes.NumMeshMRMTriRdrBlock+= triCount; +02653 } +02654 } +02655 <span class="keywordflow">else</span> +02656 { +02657 rdrTrav->Scene->BenchRes.NumMeshMRMRdrNormal++; +02658 rdrTrav->Scene->BenchRes.NumMeshMRMTriRdrNormal+= triCount; +02659 } +02660 } +02661 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_5" doxytag="NL3D::CMeshMRMGeom::render" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::render </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02434.html">IDriver</a> * </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> * </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 </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> </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 </td> + <td class="mdname" nowrap> <em>globalAlpha</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +<a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh in a driver, given an instance and his materials. +<p> + +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma6">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l00927">927</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00525">_LevelDetail</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06006.html#l00485">_VBufferOriginal</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera3">NL3D::IDriver::activeVertexBufferHard()</a>, <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06583.html#l00079">NL3D::CTravCameraScene::CamPos</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver::forceNormalize()</a>, <a class="el" href="a06006.html#l00383">NL3D::CMeshMRMGeom::CLod::Geomorphs</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</a>, <a class="el" href="a06060.html#l00101">NL3D::CMRMLevelDetail::getLevelDetailFromPolyCount()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06003.html#l00073">NL3D::CMeshMorpher::init()</a>, <a class="el" href="a06003.html#l00082">NL3D::CMeshMorpher::initSkinned()</a>, <a class="el" href="a05972.html#l01090">NLMISC::CMatrix::inverted()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera46">NL3D::IDriver::isForceNormalize()</a>, <a class="el" href="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05701.html#l00125">NLMISC::OptFastFloor()</a>, <a class="el" href="a06006.html#l00394">NL3D::CMeshMRMGeom::CLod::OriginalSkinRestored</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a05995.html#l00037">NL3D::CMeshBlender::prepareRenderForGlobalAlpha()</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a06005.html#l02131">restoreOriginalSkinPart()</a>, <a class="el" href="a05995.html#l00099">NL3D::CMeshBlender::restoreRender()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver::setupModelMatrix()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a06003.html#l00103">NL3D::CMeshMorpher::update()</a>, <a class="el" href="a06003.html#l00236">NL3D::CMeshMorpher::updateSkinned()</a>, and <a class="el" href="a06005.html#l02224">updateVertexBufferHard()</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02953">NL3D::CMeshMRM::render()</a>. +<p> +<div class="fragment"><pre>00928 { +00929 <a class="code" href="a04199.html#a6">nlassert</a>(drv); +00930 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()==0) +00931 <span class="keywordflow">return</span>; +00932 +00933 +00934 <span class="comment">// get the meshMRM instance.</span> +00935 CMeshBaseInstance *mi= safe_cast<CMeshBaseInstance*>(trans); +00936 <span class="comment">// get a ptr on scene</span> +00937 CScene *ownerScene= mi->getOwnerScene(); +00938 <span class="comment">// get a ptr on renderTrav</span> +00939 CRenderTrav *renderTrav= &ownerScene->getRenderTrav(); +00940 +00941 +00942 <span class="comment">// get the result of the Load Balancing.</span> +00943 <span class="keywordtype">float</span> alphaMRM= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.getLevelDetailFromPolyCount(polygonCount); +00944 +00945 <span class="comment">// choose the lod.</span> +00946 <span class="keywordtype">float</span> alphaLod; +00947 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod); +00948 +00949 +00950 <span class="comment">// Render the choosen Lod.</span> +00951 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod]; +00952 <span class="keywordflow">if</span>(lod.RdrPass.size()==0) +00953 <span class="keywordflow">return</span>; +00954 +00955 +00956 <span class="comment">// Update the vertexBufferHard (if possible).</span> +00957 <span class="comment">// \toto yoyo: TODO_OPTIMIZE: allocate only what is needed for the current Lod (Max of all instances, like</span> +00958 <span class="comment">// the loading....) (see loadHeader()).</span> +00959 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_2">updateVertexBufferHard</a>(drv, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +00960 <span class="comment">/* currentVBHard is NULL if must disable it temporarily</span> +00961 <span class="comment"> For now, never disable it, but switch of VBHard may be VERY EXPENSIVE if NV_vertex_array_range2 is not</span> +00962 <span class="comment"> supported (old drivers).</span> +00963 <span class="comment"> */</span> +00964 IVertexBufferHard *currentVBHard= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>; +00965 +00966 +00967 <span class="comment">// get the skeleton model to which I am binded (else NULL).</span> +00968 CSkeletonModel *skeleton; +00969 skeleton = mi->getSkeletonModel(); +00970 <span class="comment">// The mesh must not be skinned for render()</span> +00971 <a class="code" href="a04199.html#a6">nlassert</a>(!(_Skinned && mi->isSkinned() && skeleton)); +00972 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size() > 0; +00973 <span class="keywordtype">bool</span> useTangentSpace = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> && <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->needTangentSpace(); +00974 +00975 +00976 <span class="comment">// Profiling</span> +00977 <span class="comment">//===========</span> +00978 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_RenderNormal ); +00979 +00980 +00981 <span class="comment">// Morphing</span> +00982 <span class="comment">// ========</span> +00983 <span class="keywordflow">if</span> (bMorphApplied) +00984 { +00985 <span class="comment">// If _Skinned (NB: the skin is not applied) and if lod.OriginalSkinRestored, then restoreOriginalSkinPart is</span> +00986 <span class="comment">// not called but mush morpher write changed vertices into VBHard so its ok. The unchanged vertices</span> +00987 <span class="comment">// are written in the preceding call to restoreOriginalSkinPart.</span> +00988 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +00989 { +00990 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.initSkinned(&_VBufferOriginal, +00991 &_VBufferFinal, +00992 currentVBHard, +00993 useTangentSpace, +00994 &_OriginalSkinVertices, +00995 &_OriginalSkinNormals, +00996 useTangentSpace ? &_OriginalTGSpace : NULL, +00997 <span class="keyword">false</span> ); +00998 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.updateSkinned (mi->getBlendShapeFactors()); +00999 } +01000 <span class="keywordflow">else</span> <span class="comment">// Not even skinned so we have to do all the stuff</span> +01001 { +01002 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.init(&_VBufferOriginal, +01003 &_VBufferFinal, +01004 currentVBHard, +01005 useTangentSpace); +01006 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.update (mi->getBlendShapeFactors()); +01007 } +01008 } +01009 +01010 <span class="comment">// Skinning.</span> +01011 <span class="comment">//===========</span> +01012 <span class="comment">// if mesh is skinned (but here skin not applied), we must copy vertices/normals from original vertices.</span> +01013 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +01014 { +01015 <span class="comment">// do it for this Lod only, and if cache say it is necessary.</span> +01016 <span class="keywordflow">if</span> (!lod.OriginalSkinRestored) +01017 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd14">restoreOriginalSkinPart</a>(lod, currentVBHard); +01018 } +01019 +01020 +01021 <span class="comment">// set the instance worldmatrix.</span> +01022 drv->setupModelMatrix(trans->getWorldMatrix()); +01023 +01024 +01025 <span class="comment">// Geomorph.</span> +01026 <span class="comment">//===========</span> +01027 <span class="comment">// Geomorph the choosen Lod (if not the coarser mesh).</span> +01028 <span class="keywordflow">if</span>(numLod>0) +01029 { +01030 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a>(lod.Geomorphs, alphaLod, currentVBHard); +01031 } +01032 +01033 +01034 <span class="comment">// force normalisation of normals..</span> +01035 <span class="keywordtype">bool</span> bkupNorm= drv->isForceNormalize(); +01036 drv->forceNormalize(<span class="keyword">true</span>); +01037 +01038 +01039 <span class="comment">// Setup meshVertexProgram</span> +01040 <span class="comment">//===========</span> +01041 +01042 <span class="comment">// use MeshVertexProgram effect?</span> +01043 <span class="keywordtype">bool</span> useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> != NULL; +01044 <span class="keywordflow">if</span>( useMeshVP ) +01045 { +01046 CMatrix invertedObjectMatrix; +01047 invertedObjectMatrix = trans->getWorldMatrix().inverted(); +01048 <span class="comment">// really ok if success to begin VP</span> +01049 useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->begin(drv, mi->getOwnerScene(), mi, invertedObjectMatrix, renderTrav->CamPos); +01050 } +01051 +01052 +01053 <span class="comment">// Render the lod.</span> +01054 <span class="comment">//===========</span> +01055 <span class="comment">// active VB.</span> +01056 <span class="keywordflow">if</span>(currentVBHard) +01057 drv->activeVertexBufferHard(currentVBHard); +01058 <span class="keywordflow">else</span> +01059 drv->activeVertexBuffer(_VBufferFinal); +01060 +01061 +01062 <span class="comment">// Global alpha used ?</span> +01063 <a class="code" href="a04558.html#a11">uint32</a> globalAlphaUsed= rdrFlags & IMeshGeom::RenderGlobalAlpha; +01064 <a class="code" href="a04558.html#a7">uint8</a> globalAlphaInt=(<a class="code" href="a04558.html#a7">uint8</a>)<a class="code" href="a05378.html#a397">NLMISC::OptFastFloor</a>(globalAlpha*255); +01065 +01066 <span class="comment">// Render all pass.</span> +01067 <span class="keywordflow">if</span> (globalAlphaUsed) +01068 { +01069 <span class="keywordtype">bool</span> gaDisableZWrite= (rdrFlags & IMeshGeom::RenderGADisableZWrite)?<span class="keyword">true</span>:<span class="keyword">false</span>; +01070 +01071 <span class="comment">// for all passes</span> +01072 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<lod.RdrPass.size();i++) +01073 { +01074 CRdrPass &rdrPass= lod.RdrPass[i]; +01075 +01076 <span class="keywordflow">if</span> ( ( (mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) && (rdrFlags & IMeshGeom::RenderOpaqueMaterial) ) || +01077 ( (mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) && (rdrFlags & IMeshGeom::RenderTransparentMaterial) ) ) +01078 { +01079 <span class="comment">// CMaterial Ref</span> +01080 CMaterial &material=mi->Materials[rdrPass.MaterialId]; +01081 +01082 <span class="comment">// Use a MeshBlender to modify material and driver.</span> +01083 CMeshBlender blender; +01084 blender.prepareRenderForGlobalAlpha(material, drv, globalAlpha, globalAlphaInt, gaDisableZWrite); +01085 +01086 <span class="comment">// Setup VP material</span> +01087 <span class="keywordflow">if</span> (useMeshVP) +01088 { +01089 <span class="keywordflow">if</span>(currentVBHard) +01090 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->setupForMaterial(material, drv, ownerScene, currentVBHard); +01091 <span class="keywordflow">else</span> +01092 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->setupForMaterial(material, drv, ownerScene, &_VBufferFinal); +01093 } +01094 +01095 <span class="comment">// Render</span> +01096 drv->render(rdrPass.PBlock, material); +01097 +01098 <span class="comment">// Resetup material/driver</span> +01099 blender.restoreRender(material, drv, gaDisableZWrite); +01100 } +01101 } +01102 } +01103 <span class="keywordflow">else</span> +01104 { +01105 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<lod.RdrPass.size();i++) +01106 { +01107 CRdrPass &rdrPass= lod.RdrPass[i]; +01108 +01109 <span class="keywordflow">if</span> ( ( (mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span>) && (rdrFlags & IMeshGeom::RenderOpaqueMaterial) ) || +01110 ( (mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">true</span>) && (rdrFlags & IMeshGeom::RenderTransparentMaterial) ) ) +01111 { +01112 <span class="comment">// CMaterial Ref</span> +01113 CMaterial &material=mi->Materials[rdrPass.MaterialId]; +01114 +01115 <span class="comment">// Setup VP material</span> +01116 <span class="keywordflow">if</span> (useMeshVP) +01117 { +01118 <span class="keywordflow">if</span>(currentVBHard) +01119 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->setupForMaterial(material, drv, ownerScene, currentVBHard); +01120 <span class="keywordflow">else</span> +01121 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->setupForMaterial(material, drv, ownerScene, &_VBufferFinal); +01122 } +01123 +01124 <span class="comment">// Render with the Materials of the MeshInstance.</span> +01125 drv->render(rdrPass.PBlock, material); +01126 } +01127 } +01128 } +01129 +01130 +01131 <span class="comment">// End VertexProgram effect</span> +01132 <span class="keywordflow">if</span>(useMeshVP) +01133 { +01134 <span class="comment">// end it.</span> +01135 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->end(drv); +01136 } +01137 +01138 +01139 <span class="comment">// bkup force normalisation.</span> +01140 drv->forceNormalize(bkupNorm); +01141 +01142 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_8" doxytag="NL3D::CMeshMRMGeom::renderPass" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderPass </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02887.html">CMeshGeomRenderContext</a> & </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> * </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 </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> </td> + <td class="mdname" nowrap> <em>rdrPass</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The framework call this method to render the current renderPass, with the current instance NB: if the material is blended, DON'T render it!! +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_9">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02768">2768</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00564">_MBRCurrentLodId</a>, <a class="el" href="a06000.html#l00062">NL3D::CMeshGeomRenderContext::Driver</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a06000.html#l00066">NL3D::CMeshGeomRenderContext::RenderThroughVBHeap</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a06006.html#l00347">NL3D::CMeshMRMGeom::CRdrPass::VBHeapPBlock</a>. +<p> +<div class="fragment"><pre>02769 { +02770 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.empty()) +02771 <span class="keywordflow">return</span>; +02772 +02773 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">_MBRCurrentLodId</a>]; +02774 CRdrPass &rdrPass= lod.RdrPass[rdrPassId]; +02775 +02776 <span class="keywordflow">if</span> ( mi->Materials[rdrPass.MaterialId].getBlend() == <span class="keyword">false</span> ) +02777 { +02778 <span class="comment">// CMaterial Ref</span> +02779 CMaterial &material=mi->Materials[rdrPass.MaterialId]; +02780 +02781 <span class="comment">// Render with the Materials of the MeshInstance.</span> +02782 <span class="keywordflow">if</span>(rdrCtx.RenderThroughVBHeap) +02783 <span class="comment">// render shifted primitives</span> +02784 rdrCtx.Driver->render(rdrPass.VBHeapPBlock, material); +02785 <span class="keywordflow">else</span> +02786 rdrCtx.Driver->render(rdrPass.PBlock, material); +02787 } +02788 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_1" doxytag="NL3D::CMeshMRMGeom::renderShadowSkinGeom" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::renderShadowSkinGeom </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>remainingVertices</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vbDest</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get the num of shadow skin vertices. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l03376">3376</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06009.html#l00339">applyArrayShadowSkin()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a05788.html#l00064">H_AUTO_USE</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00260">NL3D::CMeshMRMInstance::renderShadowSkinGeom()</a>. +<p> +<div class="fragment"><pre>03377 { +03378 <a class="code" href="a04558.html#a15">uint</a> numVerts= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size(); +03379 +03380 <span class="keywordflow">if</span>(numVerts==0) +03381 <span class="keywordflow">return</span> 0; +03382 +03383 <span class="comment">// If the Lod is too big to render in the VBufferHard</span> +03384 <span class="keywordflow">if</span>(numVerts>remainingVertices) +03385 <span class="comment">// return Failure</span> +03386 <span class="keywordflow">return</span> -1; +03387 +03388 <span class="comment">// get the skeleton model to which I am skinned</span> +03389 CSkeletonModel *skeleton; +03390 skeleton = mi->getSkeletonModel(); +03391 <span class="comment">// must be skinned for renderSkin()</span> +03392 <a class="code" href="a04199.html#a6">nlassert</a>(skeleton); +03393 +03394 +03395 <span class="comment">// Profiling</span> +03396 <span class="comment">//===========</span> +03397 <a class="code" href="a04365.html#a7">H_AUTO_USE</a>( NL3D_MeshMRMGeom_RenderShadow ); +03398 +03399 +03400 <span class="comment">// Skinning.</span> +03401 <span class="comment">//===========</span> +03402 +03403 <span class="comment">// skinning with normal, but no tangent space</span> +03404 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_0">applyArrayShadowSkin</a>(&_ShadowSkinVertices[0], (CVector*)vbDest, skeleton, numVerts); +03405 +03406 +03407 <span class="comment">// How many vertices are added to the VBuffer ???</span> +03408 <span class="keywordflow">return</span> numVerts; +03409 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_2" doxytag="NL3D::CMeshMRMGeom::renderShadowSkinPrimitives" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderShadowSkinPrimitives </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02839.html">CMaterial</a> & </td> + <td class="mdname" nowrap> <em>castMat</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02434.html">IDriver</a> * </td> + <td class="mdname" nowrap> <em>drv</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>baseVertex</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get the num of shadow skin vertices. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l03412">3412</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00571">_ShadowSkinTriangles</a>, <a class="el" href="a05788.html#l00064">H_AUTO_USE</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver::renderTriangles()</a>, <a class="el" href="a05646.html#l01124">src</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00270">NL3D::CMeshMRMInstance::renderShadowSkinPrimitives()</a>. +<p> +<div class="fragment"><pre>03413 { +03414 <a class="code" href="a04199.html#a6">nlassert</a>(drv); +03415 +03416 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>.empty()) +03417 <span class="keywordflow">return</span>; +03418 +03419 <span class="comment">// Profiling</span> +03420 <span class="comment">//===========</span> +03421 <a class="code" href="a04365.html#a7">H_AUTO_USE</a>( NL3D_MeshMRMGeom_RenderShadow ); +03422 +03423 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span> +03424 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span> +03425 +03426 <span class="comment">// TODO_SHADOW: optim: Special triangle cache for shadow!</span> +03427 <span class="keyword">static</span> vector<uint32> shiftedTris; +03428 <span class="keywordflow">if</span>(shiftedTris.size()<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>.size()) +03429 { +03430 shiftedTris.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>.size()); +03431 } +03432 <a class="code" href="a04558.html#a11">uint32</a> *<a class="code" href="a04223.html#a652">src</a>= &<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>[0]; +03433 <a class="code" href="a04558.html#a11">uint32</a> *dst= &shiftedTris[0]; +03434 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> n= _ShadowSkinTriangles.size();n>0;n--, <a class="code" href="a04223.html#a652">src</a>++, dst++) +03435 { +03436 *dst= *<a class="code" href="a04223.html#a652">src</a> + baseVertex; +03437 } +03438 +03439 <span class="comment">// Render Triangles with cache</span> +03440 <span class="comment">//===========</span> +03441 +03442 <a class="code" href="a04558.html#a15">uint</a> numTris= _ShadowSkinTriangles.size()/3; +03443 +03444 <span class="comment">// This speed up 4 ms for 80K polys.</span> +03445 <a class="code" href="a04558.html#a15">uint</a> memToCache= numTris*12; +03446 memToCache= <a class="code" href="a04061.html#a0">min</a>(memToCache, 4096U); +03447 CFastMem::precache(&shiftedTris[0], memToCache); +03448 +03449 <span class="comment">// Render with the Materials of the MeshInstance.</span> +03450 drv->renderTriangles(castMat, &shiftedTris[0], numTris); +03451 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_6" doxytag="NL3D::CMeshMRMGeom::renderSkin" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderSkin </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02537.html">CTransformShape</a> * </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 </td> + <td class="mdname" nowrap> <em>alphaMRM</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +<a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz467_5">render()</a> this mesh as a skin +<p> + +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeoma7">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l01146">1146</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06006.html#l00485">_VBufferOriginal</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06009.html#l00207">applySkin()</a>, <a class="el" href="a06009.html#l00741">applySkinWithNormal()</a>, <a class="el" href="a06009.html#l00804">applySkinWithTangentSpace()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06583.html#l00079">NL3D::CTravCameraScene::CamPos</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06006.html#l00383">NL3D::CMeshMRMGeom::CLod::Geomorphs</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06710.html#l00976">NL3D::CVertexBuffer::getNumTexCoordUsed()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06569.html#l00299">NL3D::CTransform::getWorldMatrix()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06003.html#l00082">NL3D::CMeshMorpher::initSkinned()</a>, <a class="el" href="a05972.html#l01090">NLMISC::CMatrix::inverted()</a>, <a class="el" href="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00394">NL3D::CMeshMRMGeom::CLod::OriginalSkinRestored</a>, <a class="el" href="a06006.html#l00345">NL3D::CMeshMRMGeom::CRdrPass::PBlock</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver::render()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06003.html#l00236">NL3D::CMeshMorpher::updateSkinned()</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00164">NL3D::CMeshMRMInstance::renderSkin()</a>. +<p> +<div class="fragment"><pre>01147 { +01148 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_renderSkin ); +01149 +01150 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>.size()==0) +01151 <span class="keywordflow">return</span>; +01152 +01153 +01154 <span class="comment">// get the meshMRM instance. only CMeshMRMInstance is possible when skinned (not MultiLod)</span> +01155 CMeshMRMInstance *mi= safe_cast<CMeshMRMInstance*>(trans); +01156 <span class="comment">// get a ptr on scene</span> +01157 CScene *ownerScene= mi->getOwnerScene(); +01158 <span class="comment">// get a ptr on renderTrav</span> +01159 CRenderTrav *renderTrav= &ownerScene->getRenderTrav(); +01160 <span class="comment">// get a ptr on the driver</span> +01161 IDriver *drv= renderTrav->getDriver(); +01162 <a class="code" href="a04199.html#a6">nlassert</a>(drv); +01163 +01164 +01165 <span class="comment">// choose the lod.</span> +01166 <span class="keywordtype">float</span> alphaLod; +01167 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod); +01168 +01169 +01170 <span class="comment">// Render the choosen Lod.</span> +01171 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod]; +01172 <span class="keywordflow">if</span>(lod.RdrPass.size()==0) +01173 <span class="keywordflow">return</span>; +01174 +01175 +01176 <span class="comment">/*</span> +01177 <span class="comment"> YOYO: renderSkin() no more support vertexBufferHard()!!! for AGP Memory optimisation concern.</span> +01178 <span class="comment"> AGP Skin rendering is made when supportSkinGrouping() is true</span> +01179 <span class="comment"> Hence if a skin is to be rendered here, because it doesn't have a good vertex format, or it has</span> +01180 <span class="comment"> MeshVertexProgram etc..., it will be rendered WITHOUT VBHard => slower.</span> +01181 <span class="comment"> */</span> +01182 +01183 +01184 <span class="comment">// get the skeleton model to which I am skinned</span> +01185 CSkeletonModel *skeleton; +01186 skeleton = mi->getSkeletonModel(); +01187 <span class="comment">// must be skinned for renderSkin()</span> +01188 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned && mi->isSkinned() && skeleton); +01189 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size() > 0; +01190 <span class="keywordtype">bool</span> useNormal= (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() & CVertexBuffer::NormalFlag)!=0; +01191 <span class="keywordtype">bool</span> useTangentSpace = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> && <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->needTangentSpace(); +01192 +01193 +01194 <span class="comment">// Profiling</span> +01195 <span class="comment">//===========</span> +01196 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_renderSkin_go ); +01197 +01198 +01199 <span class="comment">// Morphing</span> +01200 <span class="comment">// ========</span> +01201 <span class="keywordflow">if</span> (bMorphApplied) +01202 { +01203 <span class="comment">// Since Skinned we must update original skin vertices and normals because skinning use it</span> +01204 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.initSkinned(&_VBufferOriginal, +01205 &_VBufferFinal, +01206 NULL, +01207 useTangentSpace, +01208 &_OriginalSkinVertices, +01209 &_OriginalSkinNormals, +01210 useTangentSpace ? &_OriginalTGSpace : NULL, +01211 <span class="keyword">true</span> ); +01212 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.updateSkinned (mi->getBlendShapeFactors()); +01213 } +01214 +01215 <span class="comment">// Skinning.</span> +01216 <span class="comment">//===========</span> +01217 +01218 <span class="comment">// Never use RawSkin. Actually used in skinGrouping.</span> +01219 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_10">updateRawSkinNormal</a>(<span class="keyword">false</span>, mi, numLod); +01220 +01221 <span class="comment">// applySkin.</span> +01222 <span class="comment">//--------</span> +01223 +01224 <span class="comment">// If skin without normal (rare/usefull?) always simple (slow) case.</span> +01225 <span class="keywordflow">if</span>(!useNormal) +01226 { +01227 <span class="comment">// skinning with just position</span> +01228 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd4">applySkin</a> (lod, skeleton); +01229 } +01230 <span class="keywordflow">else</span> +01231 { +01232 <span class="comment">// apply skin for this Lod only.</span> +01233 <span class="keywordflow">if</span> (!useTangentSpace) +01234 { +01235 <span class="comment">// skinning with normal, but no tangent space</span> +01236 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd5">applySkinWithNormal</a> (lod, skeleton); +01237 } +01238 <span class="keywordflow">else</span> +01239 { +01240 <span class="comment">// Tangent space stored in the last texture coordinate</span> +01241 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd6">applySkinWithTangentSpace</a>(lod, skeleton, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed() - 1); +01242 } +01243 } +01244 +01245 <span class="comment">// endSkin.</span> +01246 <span class="comment">//--------</span> +01247 <span class="comment">// dirt this lod part. (NB: this is not optimal, but sufficient :) ).</span> +01248 lod.OriginalSkinRestored= <span class="keyword">false</span>; +01249 +01250 +01251 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span> +01252 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span> +01253 +01254 +01255 <span class="comment">// Geomorph.</span> +01256 <span class="comment">//===========</span> +01257 <span class="comment">// Geomorph the choosen Lod (if not the coarser mesh).</span> +01258 <span class="keywordflow">if</span>(numLod>0) +01259 { +01260 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd0">applyGeomorph</a>(lod.Geomorphs, alphaLod, NULL); +01261 } +01262 +01263 +01264 <span class="comment">// Setup meshVertexProgram</span> +01265 <span class="comment">//===========</span> +01266 +01267 <span class="comment">// use MeshVertexProgram effect?</span> +01268 <span class="keywordtype">bool</span> useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> != NULL; +01269 <span class="keywordflow">if</span>( useMeshVP ) +01270 { +01271 CMatrix invertedObjectMatrix; +01272 invertedObjectMatrix = skeleton->getWorldMatrix().inverted(); +01273 <span class="comment">// really ok if success to begin VP</span> +01274 useMeshVP= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->begin(drv, mi->getOwnerScene(), mi, invertedObjectMatrix, renderTrav->CamPos); +01275 } +01276 +01277 +01278 <span class="comment">// Render the lod.</span> +01279 <span class="comment">//===========</span> +01280 <span class="comment">// active VB.</span> +01281 drv->activeVertexBuffer(_VBufferFinal); +01282 +01283 +01284 <span class="comment">// Render all pass.</span> +01285 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<lod.RdrPass.size();i++) +01286 { +01287 CRdrPass &rdrPass= lod.RdrPass[i]; +01288 +01289 <span class="comment">// CMaterial Ref</span> +01290 CMaterial &material=mi->Materials[rdrPass.MaterialId]; +01291 +01292 <span class="comment">// Setup VP material</span> +01293 <span class="keywordflow">if</span> (useMeshVP) +01294 { +01295 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->setupForMaterial(material, drv, ownerScene, &_VBufferFinal); +01296 } +01297 +01298 <span class="comment">// Render with the Materials of the MeshInstance.</span> +01299 drv->render(rdrPass.PBlock, material); +01300 } +01301 +01302 <span class="comment">// End VertexProgram effect</span> +01303 <span class="keywordflow">if</span>(useMeshVP) +01304 { +01305 <span class="comment">// end it.</span> +01306 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->end(drv); +01307 } +01308 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_0" doxytag="NL3D::CMeshMRMGeom::renderSkinGroupGeom" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NL3D::CMeshMRMGeom::renderSkinGroupGeom </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>float </td> + <td class="mdname" nowrap> <em>alphaMRM</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>remainingVertices</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> * </td> + <td class="mdname" nowrap> <em>vbDest</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01318">1318</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00501">_LastLodComputed</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06008.html#l00126">NL3D::CMeshMRMInstance::_RawSkinCache</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06009.html#l01825">applyRawSkinWithNormal()</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06314.html#l00111">NL3D::CRawSkinNormalCache::Geomorphs</a>, <a class="el" href="a05994.html#l00129">NL3D::CMeshBaseInstance::getBlendShapeFactors()</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a06569.html#l00205">NL3D::CTransform::getSkeletonModel()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06569.html#l00423">NL3D::CTransform::isSkinned()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00381">NL3D::CMeshMRMGeom::CLod::NWedges</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06314.html#l00108">NL3D::CRawSkinNormalCache::TotalHardVertices</a>, <a class="el" href="a06314.html#l00107">NL3D::CRawSkinNormalCache::TotalSoftVertices</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a06003.html#l00399">NL3D::CMeshMorpher::updateRawSkin()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06314.html#l00122">NL3D::CRawSkinNormalCache::VertexRemap</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00204">NL3D::CMeshMRMInstance::renderSkinGroupGeom()</a>. +<p> +<div class="fragment"><pre>01319 { +01320 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpGeom ) +01321 +01322 <span class="comment">// get a ptr on scene</span> +01323 CScene *ownerScene= mi->getOwnerScene(); +01324 <span class="comment">// get a ptr on renderTrav</span> +01325 CRenderTrav *renderTrav= &ownerScene->getRenderTrav(); +01326 <span class="comment">// get a ptr on the driver</span> +01327 IDriver *drv= renderTrav->getDriver(); +01328 <a class="code" href="a04199.html#a6">nlassert</a>(drv); +01329 +01330 +01331 <span class="comment">// choose the lod.</span> +01332 <span class="keywordtype">float</span> alphaLod; +01333 <a class="code" href="a04558.html#a14">sint</a> numLod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd10">chooseLod</a>(alphaMRM, alphaLod); +01334 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a>= numLod; +01335 +01336 +01337 <span class="comment">// Render the choosen Lod.</span> +01338 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[numLod]; +01339 <span class="keywordflow">if</span>(lod.RdrPass.size()==0) +01340 <span class="comment">// return no vertices added</span> +01341 <span class="keywordflow">return</span> 0; +01342 +01343 <span class="comment">// If the Lod is too big to render in the VBufferHard</span> +01344 <span class="keywordflow">if</span>(lod.NWedges>remainingVertices) +01345 <span class="comment">// return Failure</span> +01346 <span class="keywordflow">return</span> -1; +01347 +01348 <span class="comment">// get the skeleton model to which I am skinned</span> +01349 CSkeletonModel *skeleton; +01350 skeleton = mi->getSkeletonModel(); +01351 <span class="comment">// must be skinned for renderSkin()</span> +01352 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned && mi->isSkinned() && skeleton); +01353 <span class="keywordtype">bool</span> bMorphApplied = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size() > 0; +01354 <span class="keywordtype">bool</span> useNormal= (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() & CVertexBuffer::NormalFlag)!=0; +01355 <a class="code" href="a04199.html#a6">nlassert</a>(useNormal); +01356 +01357 +01358 <span class="comment">// Profiling</span> +01359 <span class="comment">//===========</span> +01360 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpGeom_go ); +01361 +01362 +01363 <span class="comment">// Morphing</span> +01364 <span class="comment">// ========</span> +01365 +01366 <span class="comment">// Use RawSkin?. compute before morphing, cause of updateRawSkin</span> +01367 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_10">updateRawSkinNormal</a>(<span class="keyword">true</span>, mi, numLod); +01368 <a class="code" href="a04199.html#a6">nlassert</a>(mi->_RawSkinCache); +01369 +01370 <span class="comment">// Apply morph</span> +01371 <span class="keywordflow">if</span> (bMorphApplied) +01372 { +01373 <span class="comment">// No need to manage lod.OriginalSkinRestored, since in case of SkinGroupGeom, the VBuffer final is not modified.</span> +01374 +01375 <span class="comment">// copy directly from the original VB, and apply BlendShapes. Dest is directly the RawSkin</span> +01376 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.updateRawSkin(&_VBufferFinal, +01377 mi->_RawSkinCache->VertexRemap, +01378 mi->getBlendShapeFactors()); +01379 } +01380 +01381 <span class="comment">// Skinning.</span> +01382 <span class="comment">//===========</span> +01383 +01384 <span class="comment">// NB: the skeleton matrix has already been setuped by CSkeletonModel</span> +01385 <span class="comment">// NB: the normalize flag has already been setuped by CSkeletonModel</span> +01386 +01387 <span class="comment">// applySkin with RawSkin.</span> +01388 <span class="comment">//--------</span> +01389 <span class="comment">// always RawSkin now in SkinGrouping, even with MeshMorpher</span> +01390 { +01391 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_RawSkinning ); +01392 +01393 <span class="comment">// RawSkin do all the job in optimized way: Skinning, copy to VBHard and Geomorph.</span> +01394 +01395 <span class="comment">// skinning with normal, but no tangent space</span> +01396 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd3">applyRawSkinWithNormal</a> (lod, *(mi->_RawSkinCache), skeleton, vbDest, alphaLod); +01397 +01398 <span class="comment">// Vertices are packed in RawSkin mode (ie no holes due to MRM!)</span> +01399 <span class="keywordflow">return</span> mi->_RawSkinCache->Geomorphs.size() + +01400 mi->_RawSkinCache->TotalSoftVertices + +01401 mi->_RawSkinCache->TotalHardVertices; +01402 } +01403 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_1" doxytag="NL3D::CMeshMRMGeom::renderSkinGroupPrimitives" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderSkinGroupPrimitives </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>baseVertex</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>std::vector< <a class="el" href="a03407.html">CSkinSpecularRdrPass</a> > & </td> + <td class="mdname" nowrap> <em>specularRdrPasses</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>skinIndex</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01406">1406</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00501">_LastLodComputed</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06008.html#l00131">NL3D::CMeshMRMInstance::_ShiftedTriangleCache</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera32">NL3D::IDriver::getTextureHandle()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06387.html#l00052">NL3D::CShiftedTriangleCache::CRdrPass::NumTriangles</a>, <a class="el" href="a06387.html#l00059">NL3D::CShiftedTriangleCache::RdrPass</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06394.html#l00063">NL3D::CSkinSpecularRdrPass::RdrPassIndex</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver::renderTriangles()</a>, <a class="el" href="a06394.html#l00061">NL3D::CSkinSpecularRdrPass::SkinIndex</a>, <a class="el" href="a06394.html#l00065">NL3D::CSkinSpecularRdrPass::SpecId</a>, <a class="el" href="a06387.html#l00051">NL3D::CShiftedTriangleCache::CRdrPass::Triangles</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a06005.html#l01529">updateShiftedTriangleCache()</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00213">NL3D::CMeshMRMInstance::renderSkinGroupPrimitives()</a>. +<p> +<div class="fragment"><pre>01407 { +01408 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpPrimitives ); +01409 +01410 <span class="comment">// get a ptr on scene</span> +01411 CScene *ownerScene= mi->getOwnerScene(); +01412 <span class="comment">// get a ptr on renderTrav</span> +01413 CRenderTrav *renderTrav= &ownerScene->getRenderTrav(); +01414 <span class="comment">// get a ptr on the driver</span> +01415 IDriver *drv= renderTrav->getDriver(); +01416 <a class="code" href="a04199.html#a6">nlassert</a>(drv); +01417 +01418 <span class="comment">// Get the lod choosen in renderSkinGroupGeom()</span> +01419 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a>]; +01420 +01421 +01422 <span class="comment">// must update primitive cache</span> +01423 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd18">updateShiftedTriangleCache</a>(mi, _LastLodComputed, baseVertex); +01424 <a class="code" href="a04199.html#a6">nlassert</a>(mi->_ShiftedTriangleCache); +01425 +01426 +01427 <span class="comment">// Render Triangles with cache</span> +01428 <span class="comment">//===========</span> +01429 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<lod.RdrPass.size();i++) +01430 { +01431 CRdrPass &rdrPass= lod.RdrPass[i]; +01432 +01433 <span class="comment">// CMaterial Ref</span> +01434 CMaterial &material=mi->Materials[rdrPass.MaterialId]; +01435 +01436 <span class="comment">// TestYoyo. Material Speed Test</span> +01437 <span class="comment">/*if( material.getDiffuse()!=CRGBA(250, 251, 252) )</span> +01438 <span class="comment"> {</span> +01439 <span class="comment"> material.setDiffuse(CRGBA(250, 251, 252));</span> +01440 <span class="comment"> // Set all texture the same.</span> +01441 <span class="comment"> static CSmartPtr<ITexture> pTexFile= new CTextureFile("fy_hom_visage_c1_fy_e1.tga");</span> +01442 <span class="comment"> material.setTexture(0, pTexFile );</span> +01443 <span class="comment"> // Remove Specular.</span> +01444 <span class="comment"> if(material.getShader()==CMaterial::Specular)</span> +01445 <span class="comment"> {</span> +01446 <span class="comment"> CSmartPtr<ITexture> tex= material.getTexture(0);</span> +01447 <span class="comment"> material.setShader(CMaterial::Normal);</span> +01448 <span class="comment"> material.setTexture(0, tex );</span> +01449 <span class="comment"> }</span> +01450 <span class="comment"> // Remove MakeUp</span> +01451 <span class="comment"> material.setTexture(1, NULL);</span> +01452 <span class="comment"> }*/</span> +01453 +01454 <span class="comment">// If the material is a specular material, don't render it now!</span> +01455 <span class="keywordflow">if</span>(material.getShader()==CMaterial::Specular) +01456 { +01457 <span class="comment">// Add it to the rdrPass to sort!</span> +01458 CSkinSpecularRdrPass specRdrPass; +01459 specRdrPass.SkinIndex= skinIndex; +01460 specRdrPass.RdrPassIndex= i; +01461 <span class="comment">// Get the handle of the specular Map as the sort Key</span> +01462 ITexture *specTex= material.getTexture(1); +01463 <span class="keywordflow">if</span>(!specTex) +01464 specRdrPass.SpecId= 0; +01465 <span class="keywordflow">else</span> +01466 specRdrPass.SpecId= drv->getTextureHandle( *specTex ); +01467 <span class="comment">// Append it to the list</span> +01468 specularRdrPasses.push_back(specRdrPass); +01469 } +01470 <span class="keywordflow">else</span> +01471 { +01472 <span class="comment">// Get the shifted triangles.</span> +01473 CShiftedTriangleCache::CRdrPass &shiftedRdrPass= mi->_ShiftedTriangleCache->RdrPass[i]; +01474 +01475 <span class="comment">// This speed up 4 ms for 80K polys.</span> +01476 <a class="code" href="a04558.html#a15">uint</a> memToCache= shiftedRdrPass.NumTriangles*12; +01477 memToCache= <a class="code" href="a04061.html#a0">min</a>(memToCache, 4096U); +01478 CFastMem::precache(shiftedRdrPass.Triangles, memToCache); +01479 +01480 <span class="comment">// Render with the Materials of the MeshInstance.</span> +01481 drv->renderTriangles(material, shiftedRdrPass.Triangles, shiftedRdrPass.NumTriangles); +01482 } +01483 } +01484 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_2" doxytag="NL3D::CMeshMRMGeom::renderSkinGroupSpecularRdrPass" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::renderSkinGroupSpecularRdrPass </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>rdrPassId</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01488">1488</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00501">_LastLodComputed</a>, <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06008.html#l00131">NL3D::CMeshMRMInstance::_ShiftedTriangleCache</a>, <a class="el" href="a06330.html#l00133">NL3D::CRenderTrav::getDriver()</a>, <a class="el" href="a06569.html#l00105">NL3D::CTransform::getOwnerScene()</a>, <a class="el" href="a06349.html#l00479">NL3D::CScene::getRenderTrav()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06006.html#l00343">NL3D::CMeshMRMGeom::CRdrPass::MaterialId</a>, <a class="el" href="a05994.html#l00075">NL3D::CMeshBaseInstance::Materials</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06387.html#l00052">NL3D::CShiftedTriangleCache::CRdrPass::NumTriangles</a>, <a class="el" href="a06387.html#l00059">NL3D::CShiftedTriangleCache::RdrPass</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver::renderTriangles()</a>, <a class="el" href="a06387.html#l00051">NL3D::CShiftedTriangleCache::CRdrPass::Triangles</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00222">NL3D::CMeshMRMInstance::renderSkinGroupSpecularRdrPass()</a>. +<p> +<div class="fragment"><pre>01489 { +01490 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_MeshMRMGeom_rdrSkinGrpSpecularRdrPass ); +01491 +01492 <span class="comment">// get a ptr on scene</span> +01493 CScene *ownerScene= mi->getOwnerScene(); +01494 <span class="comment">// get a ptr on renderTrav</span> +01495 CRenderTrav *renderTrav= &ownerScene->getRenderTrav(); +01496 <span class="comment">// get a ptr on the driver</span> +01497 IDriver *drv= renderTrav->getDriver(); +01498 <a class="code" href="a04199.html#a6">nlassert</a>(drv); +01499 +01500 <span class="comment">// Get the lod choosen in renderSkinGroupGeom()</span> +01501 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">_LastLodComputed</a>]; +01502 +01503 +01504 <span class="comment">// _ShiftedTriangleCache must have been computed in renderSkinGroupPrimitives</span> +01505 <a class="code" href="a04199.html#a6">nlassert</a>(mi->_ShiftedTriangleCache); +01506 +01507 +01508 <span class="comment">// Render Triangles with cache</span> +01509 <span class="comment">//===========</span> +01510 CRdrPass &rdrPass= lod.RdrPass[rdrPassId]; +01511 +01512 <span class="comment">// CMaterial Ref</span> +01513 CMaterial &material=mi->Materials[rdrPass.MaterialId]; +01514 +01515 <span class="comment">// Get the shifted triangles.</span> +01516 CShiftedTriangleCache::CRdrPass &shiftedRdrPass= mi->_ShiftedTriangleCache->RdrPass[rdrPassId]; +01517 +01518 <span class="comment">// This speed up 4 ms for 80K polys.</span> +01519 <a class="code" href="a04558.html#a15">uint</a> memToCache= shiftedRdrPass.NumTriangles*12; +01520 memToCache= <a class="code" href="a04061.html#a0">min</a>(memToCache, 4096U); +01521 CFastMem::precache(shiftedRdrPass.Triangles, memToCache); +01522 +01523 <span class="comment">// Render with the Materials of the MeshInstance.</span> +01524 drv->renderTriangles(material, shiftedRdrPass.Triangles, shiftedRdrPass.NumTriangles); +01525 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd14" doxytag="NL3D::CMeshMRMGeom::restoreOriginalSkinPart" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::restoreOriginalSkinPart </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02893.html">CLod</a> & </td> + <td class="mdname" nowrap> <em>lod</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03694.html">IVertexBufferHard</a> * </td> + <td class="mdname" nowrap> <em>currentVBHard</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Skinning: same as <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices()</a>, but for one Lod only. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02131">2131</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06711.html#l00338">NL3D::CVertexBuffer::getNormalOff()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a06006.html#l00390">NL3D::CMeshMRMGeom::CLod::InfluencedVertices</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00394">NL3D::CMeshMRMGeom::CLod::OriginalSkinRestored</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00927">render()</a>. +<p> +<div class="fragment"><pre>02132 { +02133 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned); +02134 +02135 +02136 <span class="comment">/*</span> +02137 <span class="comment"> YOYO: _Skinned mrms no more support vertexBufferHard</span> +02138 <span class="comment"> see note in renderSkin()</span> +02139 <span class="comment"> */</span> +02140 +02141 <span class="comment">// get vertexPtr / normalOff.</span> +02142 <span class="comment">//===========================</span> +02143 <a class="code" href="a04558.html#a7">uint8</a> *destVertexPtr= (<a class="code" href="a04558.html#a7">uint8</a>*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(); +02144 <a class="code" href="a04558.html#a15">uint</a> flags= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(); +02145 <a class="code" href="a04558.html#a10">sint32</a> vertexSize= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize(); +02146 <span class="comment">// must have XYZ.</span> +02147 <a class="code" href="a04199.html#a6">nlassert</a>(flags & CVertexBuffer::PositionFlag); +02148 +02149 <span class="comment">// Compute offset of each component of the VB.</span> +02150 <a class="code" href="a04558.html#a10">sint32</a> normalOff; +02151 <span class="keywordflow">if</span>(flags & CVertexBuffer::NormalFlag) +02152 normalOff= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalOff(); +02153 <span class="keywordflow">else</span> +02154 normalOff= 0; +02155 +02156 +02157 <span class="comment">// compute src array.</span> +02158 CVector *srcVertexPtr; +02159 CVector *srcNormalPtr= NULL; +02160 srcVertexPtr= &<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[0]; +02161 <span class="keywordflow">if</span>(normalOff) +02162 srcNormalPtr= &(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[0]); +02163 +02164 +02165 <span class="comment">// copy skinning.</span> +02166 <span class="comment">//===========================</span> +02167 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<<a class="code" href="a04567.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>;i++) +02168 { +02169 <a class="code" href="a04558.html#a15">uint</a> nInf= lod.InfluencedVertices[i].size(); +02170 <span class="keywordflow">if</span>( nInf==0 ) +02171 <span class="keywordflow">continue</span>; +02172 <a class="code" href="a04558.html#a11">uint32</a> *infPtr= &(lod.InfluencedVertices[i][0]); +02173 +02174 <span class="comment">// for all InfluencedVertices only.</span> +02175 <span class="keywordflow">for</span>(;nInf>0;nInf--, infPtr++) +02176 { +02177 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a566">index</a>= *infPtr; +02178 CVector *srcVertex= srcVertexPtr + <a class="code" href="a04223.html#a566">index</a>; +02179 CVector *srcNormal= srcNormalPtr + <a class="code" href="a04223.html#a566">index</a>; +02180 <a class="code" href="a04558.html#a7">uint8</a> *dstVertexVB= destVertexPtr + <a class="code" href="a04223.html#a566">index</a> * vertexSize; +02181 CVector *dstVertex= (CVector*)(dstVertexVB); +02182 CVector *dstNormal= (CVector*)(dstVertexVB + normalOff); +02183 +02184 +02185 <span class="comment">// Vertex.</span> +02186 *dstVertex= *srcVertex; +02187 <span class="comment">// Normal.</span> +02188 <span class="keywordflow">if</span>(normalOff) +02189 *dstNormal= *srcNormal; +02190 } +02191 } +02192 +02193 +02194 <span class="comment">// clean this lod part. (NB: this is not optimal, but sufficient :) ).</span> +02195 lod.OriginalSkinRestored= <span class="keyword">true</span>; +02196 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd15" doxytag="NL3D::CMeshMRMGeom::restoreOriginalSkinVertices" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::restoreOriginalSkinVertices </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Skinning: restore Vertex/Normal from _OriginalSkin* to VBuffer. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02095">2095</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06710.html#l00449">NL3D::CVertexBuffer::getNormalCoordPointer()</a>, <a class="el" href="a06710.html#l00976">NL3D::CVertexBuffer::getNumTexCoordUsed()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06710.html#l00497">NL3D::CVertexBuffer::getTexCoordPointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +<div class="fragment"><pre>02096 { +02097 <a class="code" href="a04199.html#a6">nlassert</a>(_Skinned); +02098 +02099 <span class="comment">// Copy VBuffer content into Original vertices normals.</span> +02100 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() & CVertexBuffer::PositionFlag) +02101 { +02102 <span class="comment">// copy vertices from VBuffer. (NB: unusefull geomorphed vertices are still copied, but doesn't matter).</span> +02103 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices();i++) +02104 { +02105 *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(i)= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[i]; +02106 } +02107 } +02108 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() & CVertexBuffer::NormalFlag) +02109 { +02110 <span class="comment">// copy normals from VBuffer. (NB: unusefull geomorphed normals are still copied, but doesn't matter).</span> +02111 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices();i++) +02112 { +02113 *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNormalCoordPointer(i)= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[i]; +02114 } +02115 } +02116 <span class="keywordflow">if</span> (<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a> && <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>->needTangentSpace()) +02117 { +02118 <a class="code" href="a04558.html#a15">uint</a> numTexCoords = <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumTexCoordUsed(); +02119 <a class="code" href="a04199.html#a6">nlassert</a>(numTexCoords >= 2); +02120 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>.size() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices()); +02121 <span class="comment">// copy tangent space vectors</span> +02122 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i = 0; i < <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices(); ++i) +02123 { +02124 *(CVector*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(i, numTexCoords - 1)= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">_OriginalTGSpace</a>[i]; +02125 } +02126 } +02127 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd16" doxytag="NL3D::CMeshMRMGeom::save" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::save </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> throw (<a class="el" href="a03781.html">NLMISC::EStream</a>)<code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +save the entire mesh. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01792">1792</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +<div class="fragment"><pre>01793 { +01794 <span class="comment">/*</span> +01795 <span class="comment"> Version 5:</span> +01796 <span class="comment"> - Shadow Skinning</span> +01797 <span class="comment"> Version 4:</span> +01798 <span class="comment"> - serial SkinWeights per MRM, not per Lod</span> +01799 <span class="comment"> Version 3:</span> +01800 <span class="comment"> - Bones names.</span> +01801 <span class="comment"> Version 2:</span> +01802 <span class="comment"> - Mesh Vertex Program.</span> +01803 <span class="comment"> Version 1:</span> +01804 <span class="comment"> - added blend shapes</span> +01805 <span class="comment"> Version 0:</span> +01806 <span class="comment"> - base version.</span> +01807 <span class="comment"> */</span> +01808 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(5); +01809 <a class="code" href="a04558.html#a15">uint</a> i; +01810 +01811 <span class="comment">// if >= version 3, serial bones names</span> +01812 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_BonesName); +01813 +01814 <span class="comment">// Warning, if you have skinned this shape, you can't write it anymore because skinning id have been changed! </span> +01815 <a class="code" href="a04199.html#a6">nlassert</a> (_BoneIdComputed==<span class="keyword">false</span>); +01816 +01817 <span class="comment">// Mesh Vertex Program.</span> +01818 <span class="keywordflow">if</span> (ver >= 2) +01819 { +01820 IMeshVertexProgram *mvp= NULL; +01821 mvp= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">_MeshVertexProgram</a>; +01822 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_6">serialPolyPtr</a>(mvp); +01823 } +01824 +01825 <span class="comment">// blend shapes</span> +01826 <span class="keywordflow">if</span> (ver >= 1) +01827 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a> (_MeshMorpher); +01828 +01829 <span class="comment">// must have good original Skinned Vertex before writing.</span> +01830 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> ) +01831 { +01832 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd15">restoreOriginalSkinVertices</a>(); +01833 } +01834 +01835 +01836 <span class="comment">// serial Basic info.</span> +01837 <span class="comment">// ==================</span> +01838 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Skinned); +01839 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_BBox); +01840 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MaxFaceUsed); +01841 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.MinFaceUsed); +01842 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceFinest); +01843 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceMiddle); +01844 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistanceCoarsest); +01845 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.OODistanceDelta); +01846 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">_LevelDetail</a>.DistancePow); +01847 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_LodInfos); +01848 +01849 <span class="comment">// save number of wedges.</span> +01850 <a class="code" href="a04558.html#a11">uint32</a> nWedges; +01851 nWedges= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices(); +01852 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(nWedges); +01853 <span class="comment">// Save the VBuffer header.</span> +01854 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.serialHeader(f); +01855 +01856 +01857 <span class="comment">// If new version, serial SkinWeights in header, not in lods.</span> +01858 <span class="keywordflow">if</span>(ver >= 4) +01859 { +01860 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_SkinWeights); +01861 } +01862 +01863 <span class="comment">// if >= version 5, serial Shadow Skin Information</span> +01864 <span class="keywordflow">if</span>(ver>=5) +01865 { +01866 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinVertices); +01867 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a> (_ShadowSkinTriangles); +01868 } +01869 +01870 <span class="comment">// Serial lod offsets.</span> +01871 <span class="comment">// ==================</span> +01872 <span class="comment">// This is the reference pos, to load / save relative offsets.</span> +01873 <a class="code" href="a04558.html#a10">sint32</a> startPos = f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>(); +01874 <span class="comment">// Those are the lodOffsets, relative to startPos.</span> +01875 vector<sint32> lodOffsets; +01876 lodOffsets.resize(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(), 0); +01877 +01878 <span class="comment">// write all dummy offset. For now (since we don't know what to set), compute the offset of </span> +01879 <span class="comment">// the sint32 to come back in serial lod parts below.</span> +01880 <span class="keywordflow">for</span>(i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++) +01881 { +01882 lodOffsets[i]= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>(); +01883 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(lodOffsets[i]); +01884 } +01885 +01886 <span class="comment">// Serial lod subsets.</span> +01887 <span class="comment">// ==================</span> +01888 +01889 <span class="comment">// Save all the lods.</span> +01890 <span class="keywordflow">for</span>(i=0;i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">_LodInfos</a>.size(); i++) +01891 { +01892 <span class="comment">// get current absolute position.</span> +01893 <a class="code" href="a04558.html#a10">sint32</a> absCurPos= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_1">getPos</a>(); +01894 +01895 <span class="comment">// come back to "relative lodOffset" absolute position in the stream. (temp stored in lodOffset[i]).</span> +01896 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_3">seek</a>(lodOffsets[i], IStream::begin); +01897 +01898 <span class="comment">// write the relative position of the lod to the stream.</span> +01899 <a class="code" href="a04558.html#a10">sint32</a> relCurPos= absCurPos - startPos; +01900 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(relCurPos); +01901 +01902 <span class="comment">// come back to absCurPos, to save the lod.</span> +01903 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2036_3">seek</a>(absCurPos, IStream::begin); +01904 +01905 <span class="comment">// And so now, save the lod.</span> +01906 <span class="comment">// write the lod face data.</span> +01907 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Lods[i]); +01908 <span class="comment">// write the lod vertex data.</span> +01909 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd17">serialLodVertexData</a>(f, _LodInfos[i].StartAddWedge, _LodInfos[i].EndAddWedges); +01910 } +01911 +01912 +01913 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz467_7" doxytag="NL3D::CMeshMRMGeom::serial" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::serial </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </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> + + </td> + <td> + +<p> +serial this meshGeom. +<p> + +<p> +Implements <a class="el" href="a02867.html#NL3D_1_1ITrackDefaulta6">NLMISC::IStreamable</a>. +<p> +Definition at line <a class="el" href="a06005.html#l01613">1613</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +<div class="fragment"><pre>01614 { +01615 <span class="comment">// because of complexity, serial is separated in save / load.</span> +01616 +01617 <span class="keywordflow">if</span>(f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>()) +01618 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd12">load</a>(f); +01619 <span class="keywordflow">else</span> +01620 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd16">save</a>(f); +01621 +01622 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd17" doxytag="NL3D::CMeshMRMGeom::serialLodVertexData" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::serialLodVertexData </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname" nowrap> <em>f</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>startWedge</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>endWedge</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +serial a subset of the vertices. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01918">1918</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06005.html#l02055">bkupOriginalSkinVerticesSubset()</a>, <a class="el" href="a06463.html#l00064">NLMISC::IStream::isReading()</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, <a class="el" href="a06710.html#l01008">NL3D::CVertexBuffer::serialSubset()</a>, <a class="el" href="a06461.html#l00266">NLMISC::IStream::serialVersion()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, and <a class="el" href="a06005.html#l02001">loadNextLod()</a>. +<p> +<div class="fragment"><pre>01919 { +01920 <span class="comment">/*</span> +01921 <span class="comment"> Version 1:</span> +01922 <span class="comment"> - serial SkinWeights per MRM, not per Lod</span> +01923 <span class="comment"> */</span> +01924 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(1); +01925 +01926 <span class="comment">// VBuffer part.</span> +01927 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.serialSubset(f, startWedge, endWedge); +01928 +01929 <span class="comment">// SkinWeights.</span> +01930 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a>) +01931 { +01932 <span class="comment">// Serialize SkinWeight per lod only for old versions.</span> +01933 <span class="keywordflow">if</span>(ver<1) +01934 { +01935 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i= startWedge; i<endWedge; i++) +01936 { +01937 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_SkinWeights[i]); +01938 } +01939 } +01940 <span class="comment">// if reading, must copy original vertices from VB.</span> +01941 <span class="keywordflow">if</span>( f.<a class="code" href="a02270.html#NLMISC_1_1IStreama0">isReading</a>()) +01942 { +01943 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomd8">bkupOriginalSkinVerticesSubset</a>(startWedge, endWedge); +01944 } +01945 } +01946 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_3" doxytag="NL3D::CMeshMRMGeom::setShadowMesh" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::setShadowMesh </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const std::vector< <a class="el" href="a02897.html">CShadowVertex</a> > & </td> + <td class="mdname" nowrap> <em>shadowVertices</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const std::vector< <a class="el" href="a04558.html#a11">uint32</a> > & </td> + <td class="mdname" nowrap> <em>triangles</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Setup the ShadowMesh. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l03359">3359</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00571">_ShadowSkinTriangles</a>, <a class="el" href="a06006.html#l00570">_ShadowSkinVertices</a>, <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>, <a class="el" href="a06330.html#l00076">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>, and <a class="el" href="a06330.html#l00075">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>. +<p> +<div class="fragment"><pre>03360 { +03361 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>= shadowVertices; +03362 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">_ShadowSkinTriangles</a>= triangles; +03363 <span class="comment">// update flag. Support Shadow SkinGrouping if Shadow setuped, and if not too many vertices.</span> +03364 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>= !<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.empty() && +03365 <a class="code" href="a04907.html#a3">NL3D_SHADOW_MESH_SKIN_MANAGER_VERTEXFORMAT</a>==CVertexBuffer::PositionFlag && +03366 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">_ShadowSkinVertices</a>.size() <= <a class="code" href="a04907.html#a4">NL3D_SHADOW_MESH_SKIN_MANAGER_MAXVERTICES</a>; +03367 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_9" doxytag="NL3D::CMeshMRMGeom::sortPerMaterial" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::sortPerMaterial </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +true if the sort criterion must be by material. Else, sort per instance. +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_10">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02687">2687</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +<div class="fragment"><pre>02688 { +02689 <span class="comment">// Can't do it per material since 2 lods may not have the same number of RdrPass!!</span> +02690 <span class="keywordflow">return</span> <span class="keyword">false</span>; +02691 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz475_10" doxytag="NL3D::CMeshMRMGeom::supportMeshBlockRendering" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::supportMeshBlockRendering </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [virtual]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +true if this meshGeom support meshBlock rendering. return false if skinned/meshMorphed. +<p> +Implements <a class="el" href="a02879.html#NL3D_1_1IMeshGeomz457_11">NL3D::IMeshGeom</a>. +<p> +Definition at line <a class="el" href="a06005.html#l02673">2673</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, and <a class="el" href="a06005.html#l03017">NL3D::CMeshMRM::supportMeshBlockRendering()</a>. +<p> +<div class="fragment"><pre>02674 { +02675 <span class="comment">/*</span> +02676 <span class="comment"> Yoyo: Don't Support It for MRM because too Slow!!</span> +02677 <span class="comment"> The problem is that lock() unlock() on each instance, on the same VBHeap IS AS SLOWER AS</span> +02678 <span class="comment"> VB switching.</span> +02679 <span class="comment"></span> +02680 <span class="comment"> TODO_OPTIMIZE: find a way to optimize MRM.</span> +02681 <span class="comment"> */</span> +02682 <span class="keywordflow">return</span> <span class="keyword">false</span>; +02683 <span class="comment">//return _SupportMeshBlockRendering;</span> +02684 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz479_4" doxytag="NL3D::CMeshMRMGeom::supportShadowSkinGrouping" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::supportShadowSkinGrouping </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Render the ShadowSkin (SkinGroup like). +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00325">325</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +References <a class="el" href="a06006.html#l00572">_SupportShadowSkinGrouping</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00248">NL3D::CMeshMRMInstance::supportShadowSkinGrouping()</a>. +<p> +<div class="fragment"><pre>00325 {<span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">_SupportShadowSkinGrouping</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz477_3" doxytag="NL3D::CMeshMRMGeom::supportSkinGrouping" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CMeshMRMGeom::supportSkinGrouping </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const</td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01312">1312</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00498">_SupportSkinGrouping</a>. +<p> +Referenced by <a class="el" href="a06007.html#l00193">NL3D::CMeshMRMInstance::supportSkinGrouping()</a>. +<p> +<div class="fragment"><pre>01313 { +01314 <span class="keywordflow">return</span> <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">_SupportSkinGrouping</a>; +01315 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz469_3" doxytag="NL3D::CMeshMRMGeom::unloadNextLod" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::unloadNextLod </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>f</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +UnLoad Lod <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a>-1 from memory. use <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a>-1 to know what Lod will be unloaded. NB: if <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded()</a> <= 1, no op. +<p> +Definition at line <a class="el" href="a06005.html#l02029">2029</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00520">_NbLodLoaded</a>, and <a class="el" href="a06006.html#l00140">getNbLodLoaded()</a>. +<p> +<div class="fragment"><pre>02030 { +02031 <span class="comment">// If just first lod remain (or no lod), quit</span> +02032 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz469_0">getNbLodLoaded</a>() <= 1) +02033 <span class="keywordflow">return</span>; +02034 +02035 <span class="comment">// Reset the entire Lod object. (Free Memory).</span> +02036 <a class="code" href="a05378.html#a381">contReset</a>(_Lods[_NbLodLoaded-1]); +02037 +02038 +02039 <span class="comment">// Dec LodLoaded count.</span> +02040 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">_NbLodLoaded</a>--; +02041 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_10" doxytag="NL3D::CMeshMRMGeom::updateRawSkinNormal" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateRawSkinNormal </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">bool </td> + <td class="mdname" nowrap> <em>enabled</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a> </td> + <td class="mdname" nowrap> <em>curLodId</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +compute RawSkin info in the MRMInstance according to current skin setup. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l03060">3060</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00639">_MeshDataId</a>, <a class="el" href="a06008.html#l00126">NL3D::CMeshMRMInstance::_RawSkinCache</a>, <a class="el" href="a06006.html#l00490">_SkinWeights</a>, <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06313.html#l00037">NL3D::CRawSkinNormalCache::clearArrays()</a>, <a class="el" href="a06007.html#l00068">NL3D::CMeshMRMInstance::clearRawSkinCache()</a>, <a class="el" href="a06314.html#l00111">NL3D::CRawSkinNormalCache::Geomorphs</a>, <a class="el" href="a06006.html#l00383">NL3D::CMeshMRMGeom::CLod::Geomorphs</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06710.html#l00497">NL3D::CVertexBuffer::getTexCoordPointer()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06314.html#l00105">NL3D::CRawSkinNormalCache::HardVertices</a>, <a class="el" href="a06006.html#l00390">NL3D::CMeshMRMGeom::CLod::InfluencedVertices</a>, <a class="el" href="a06314.html#l00116">NL3D::CRawSkinNormalCache::LodId</a>, <a class="el" href="a06314.html#l00118">NL3D::CRawSkinNormalCache::MeshDataId</a>, <a class="el" href="a05990.html#l00063">NL3D_MESH_SKINNING_MAX_MATRIX</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06314.html#l00113">NL3D::CRawSkinNormalCache::RdrPass</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< CRawSkinVertex *, false >::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< CRawVertexNormalSkin4, false >::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< CRawVertexNormalSkin3, false >::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< CRawVertexNormalSkin2, false >::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< CRawVertexNormalSkin1, false >::resize()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector< CRawVertexNormalSkin4, false >::size()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector< CRawVertexNormalSkin3, false >::size()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector< CRawVertexNormalSkin2, false >::size()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector< CRawVertexNormalSkin1, false >::size()</a>, <a class="el" href="a06314.html#l00104">NL3D::CRawSkinNormalCache::SoftVertices</a>, <a class="el" href="a06314.html#l00108">NL3D::CRawSkinNormalCache::TotalHardVertices</a>, <a class="el" href="a06314.html#l00107">NL3D::CRawSkinNormalCache::TotalSoftVertices</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a06314.html#l00122">NL3D::CRawSkinNormalCache::VertexRemap</a>, <a class="el" href="a06314.html#l00095">NL3D::CRawSkinNormalCache::Vertices1</a>, <a class="el" href="a06314.html#l00097">NL3D::CRawSkinNormalCache::Vertices2</a>, <a class="el" href="a06314.html#l00099">NL3D::CRawSkinNormalCache::Vertices3</a>, and <a class="el" href="a06314.html#l00101">NL3D::CRawSkinNormalCache::Vertices4</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01146">renderSkin()</a>, and <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>. +<p> +<div class="fragment"><pre>03061 { +03062 <span class="keywordflow">if</span>(!enabled) +03063 { +03064 <span class="comment">// if the instance cache is not cleared, must clear.</span> +03065 <span class="keywordflow">if</span>(mi->_RawSkinCache) +03066 mi->clearRawSkinCache(); +03067 } +03068 <span class="keywordflow">else</span> +03069 { +03070 <span class="comment">// If the instance has no RawSkin, or has a too old RawSkin cache, must delete it, and recreate</span> +03071 <span class="keywordflow">if</span>( !mi->_RawSkinCache || mi->_RawSkinCache->MeshDataId!=<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>) +03072 { +03073 <span class="comment">// first delete if too old.</span> +03074 <span class="keywordflow">if</span>(mi->_RawSkinCache) +03075 mi->clearRawSkinCache(); +03076 <span class="comment">// Then recreate, and use _MeshDataId to verify that the instance works with same data.</span> +03077 mi->_RawSkinCache= <span class="keyword">new</span> CRawSkinNormalCache; +03078 mi->_RawSkinCache->MeshDataId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>; +03079 mi->_RawSkinCache->LodId= -1; +03080 } +03081 +03082 +03083 <span class="comment">/* If the instance rawSkin has a different Lod (or if -1), then must recreate it.</span> +03084 <span class="comment"> NB: The lod may change each frame per instance, but suppose not so many change, so we can cache those data.</span> +03085 <span class="comment"> */</span> +03086 <span class="keywordflow">if</span>( mi->_RawSkinCache->LodId != curLodId ) +03087 { +03088 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_CMeshMRMGeom_updateRawSkinNormal ); +03089 +03090 CRawSkinNormalCache &skinLod= *mi->_RawSkinCache; +03091 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[curLodId]; +03092 <a class="code" href="a04558.html#a15">uint</a> i; +03093 <a class="code" href="a04558.html#a14">sint</a> rawIdx; +03094 +03095 <span class="comment">// Clear the raw skin mesh.</span> +03096 skinLod.clearArrays(); +03097 +03098 <span class="comment">// Cache this lod</span> +03099 mi->_RawSkinCache->LodId= curLodId; +03100 +03101 <span class="comment">// For each matrix influence.</span> +03102 <a class="code" href="a04199.html#a6">nlassert</a>(NL3D_MESH_SKINNING_MAX_MATRIX==4); +03103 +03104 <span class="comment">// For each vertex, acknowledge if it is a src for geomorph.</span> +03105 <span class="keyword">static</span> vector<uint8> softVertices; +03106 softVertices.clear(); +03107 softVertices.resize( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices(), 0 ); +03108 <span class="keywordflow">for</span>(i=0;i<lod.Geomorphs.size();i++) +03109 { +03110 softVertices[lod.Geomorphs[i].Start]= 1; +03111 softVertices[lod.Geomorphs[i].End]= 1; +03112 } +03113 +03114 <span class="comment">// The remap from old index in _VBufferFinal to RawSkin vertices (without Geomorphs).</span> +03115 <span class="keyword">static</span> vector<uint32> vertexRemap; +03116 vertexRemap.resize( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices() ); +03117 <a class="code" href="a04558.html#a14">sint</a> softSize[4]; +03118 <a class="code" href="a04558.html#a14">sint</a> hardSize[4]; +03119 <a class="code" href="a04558.html#a14">sint</a> softStart[4]; +03120 <a class="code" href="a04558.html#a14">sint</a> hardStart[4]; +03121 <span class="comment">// count vertices</span> +03122 skinLod.TotalSoftVertices= 0; +03123 skinLod.TotalHardVertices= 0; +03124 <span class="keywordflow">for</span>(i=0;i<4;i++) +03125 { +03126 softSize[i]= 0; +03127 hardSize[i]= 0; +03128 <span class="comment">// Count.</span> +03129 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j<lod.InfluencedVertices[i].size();j++) +03130 { +03131 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[i][j]; +03132 <span class="keywordflow">if</span>(softVertices[vid]) +03133 softSize[i]++; +03134 <span class="keywordflow">else</span> +03135 hardSize[i]++; +03136 } +03137 skinLod.TotalSoftVertices+= softSize[i]; +03138 skinLod.TotalHardVertices+= hardSize[i]; +03139 skinLod.SoftVertices[i]= softSize[i]; +03140 skinLod.HardVertices[i]= hardSize[i]; +03141 } +03142 <span class="comment">// compute offsets</span> +03143 softStart[0]= 0; +03144 hardStart[0]= skinLod.TotalSoftVertices; +03145 <span class="keywordflow">for</span>(i=1;i<4;i++) +03146 { +03147 softStart[i]= softStart[i-1]+softSize[i-1]; +03148 hardStart[i]= hardStart[i-1]+hardSize[i-1]; +03149 } +03150 <span class="comment">// compute remap</span> +03151 <span class="keywordflow">for</span>(i=0;i<4;i++) +03152 { +03153 <a class="code" href="a04558.html#a15">uint</a> softIdx= softStart[i]; +03154 <a class="code" href="a04558.html#a15">uint</a> hardIdx= hardStart[i]; +03155 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j<lod.InfluencedVertices[i].size();j++) +03156 { +03157 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[i][j]; +03158 <span class="keywordflow">if</span>(softVertices[vid]) +03159 vertexRemap[vid]= softIdx++; +03160 <span class="keywordflow">else</span> +03161 vertexRemap[vid]= hardIdx++; +03162 } +03163 } +03164 +03165 +03166 <span class="comment">// Resize the dest array.</span> +03167 skinLod.Vertices1.resize(lod.InfluencedVertices[0].size()); +03168 skinLod.Vertices2.resize(lod.InfluencedVertices[1].size()); +03169 skinLod.Vertices3.resize(lod.InfluencedVertices[2].size()); +03170 skinLod.Vertices4.resize(lod.InfluencedVertices[3].size()); +03171 +03172 <span class="comment">// Remap for BlendShape. Lasts 2 bits tells what RawSkin Array to seek (1 to 4), </span> +03173 <span class="comment">// low Bits indicate the number in them. 0xFFFFFFFF is a special value indicating "NotUsed in this lod"</span> +03174 <span class="keyword">static</span> vector<uint32> vertexFinalRemap; +03175 vertexFinalRemap.clear(); +03176 vertexFinalRemap.resize(vertexRemap.size(), 0xFFFFFFFF); +03177 +03178 <span class="comment">// 1 Matrix skinning.</span> +03179 <span class="comment">//========</span> +03180 <span class="keywordflow">for</span>(i=0;i<skinLod.Vertices1.size();i++) +03181 { +03182 <span class="comment">// get the dest vertex.</span> +03183 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[0][i]; +03184 <span class="comment">// where to store?</span> +03185 rawIdx= vertexRemap[vid]; +03186 <span class="keywordflow">if</span>(softVertices[vid]) +03187 rawIdx-= softStart[0]; +03188 <span class="keywordflow">else</span> +03189 rawIdx+= softSize[0]-hardStart[0]; +03190 <span class="comment">// for BlendShapes remapping</span> +03191 vertexFinalRemap[vid]= (0<<30) + rawIdx; +03192 <span class="comment">// fill raw struct</span> +03193 skinLod.Vertices1[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0]; +03194 skinLod.Vertices1[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid]; +03195 skinLod.Vertices1[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid]; +03196 skinLod.Vertices1[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid); +03197 } +03198 +03199 <span class="comment">// 2 Matrix skinning.</span> +03200 <span class="comment">//========</span> +03201 <span class="keywordflow">for</span>(i=0;i<skinLod.Vertices2.size();i++) +03202 { +03203 <span class="comment">// get the dest vertex.</span> +03204 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[1][i]; +03205 <span class="comment">// where to store?</span> +03206 rawIdx= vertexRemap[vid]; +03207 <span class="keywordflow">if</span>(softVertices[vid]) +03208 rawIdx-= softStart[1]; +03209 <span class="keywordflow">else</span> +03210 rawIdx+= softSize[1]-hardStart[1]; +03211 <span class="comment">// for BlendShapes remapping</span> +03212 vertexFinalRemap[vid]= (1<<30) + rawIdx; +03213 <span class="comment">// fill raw struct</span> +03214 skinLod.Vertices2[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0]; +03215 skinLod.Vertices2[rawIdx].MatrixId[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[1]; +03216 skinLod.Vertices2[rawIdx].Weights[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[0]; +03217 skinLod.Vertices2[rawIdx].Weights[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[1]; +03218 skinLod.Vertices2[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid]; +03219 skinLod.Vertices2[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid]; +03220 skinLod.Vertices2[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid); +03221 } +03222 +03223 <span class="comment">// 3 Matrix skinning.</span> +03224 <span class="comment">//========</span> +03225 <span class="keywordflow">for</span>(i=0;i<skinLod.Vertices3.size();i++) +03226 { +03227 <span class="comment">// get the dest vertex.</span> +03228 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[2][i]; +03229 <span class="comment">// where to store?</span> +03230 rawIdx= vertexRemap[vid]; +03231 <span class="keywordflow">if</span>(softVertices[vid]) +03232 rawIdx-= softStart[2]; +03233 <span class="keywordflow">else</span> +03234 rawIdx+= softSize[2]-hardStart[2]; +03235 <span class="comment">// for BlendShapes remapping</span> +03236 vertexFinalRemap[vid]= (2<<30) + rawIdx; +03237 <span class="comment">// fill raw struct</span> +03238 skinLod.Vertices3[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0]; +03239 skinLod.Vertices3[rawIdx].MatrixId[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[1]; +03240 skinLod.Vertices3[rawIdx].MatrixId[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[2]; +03241 skinLod.Vertices3[rawIdx].Weights[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[0]; +03242 skinLod.Vertices3[rawIdx].Weights[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[1]; +03243 skinLod.Vertices3[rawIdx].Weights[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[2]; +03244 skinLod.Vertices3[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid]; +03245 skinLod.Vertices3[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid]; +03246 skinLod.Vertices3[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid); +03247 } +03248 +03249 <span class="comment">// 4 Matrix skinning.</span> +03250 <span class="comment">//========</span> +03251 <span class="keywordflow">for</span>(i=0;i<skinLod.Vertices4.size();i++) +03252 { +03253 <span class="comment">// get the dest vertex.</span> +03254 <a class="code" href="a04558.html#a15">uint</a> vid= lod.InfluencedVertices[3][i]; +03255 <span class="comment">// where to store?</span> +03256 rawIdx= vertexRemap[vid]; +03257 <span class="keywordflow">if</span>(softVertices[vid]) +03258 rawIdx-= softStart[3]; +03259 <span class="keywordflow">else</span> +03260 rawIdx+= softSize[3]-hardStart[3]; +03261 <span class="comment">// for BlendShapes remapping</span> +03262 vertexFinalRemap[vid]= (3<<30) + rawIdx; +03263 <span class="comment">// fill raw struct</span> +03264 skinLod.Vertices4[rawIdx].MatrixId[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[0]; +03265 skinLod.Vertices4[rawIdx].MatrixId[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[1]; +03266 skinLod.Vertices4[rawIdx].MatrixId[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[2]; +03267 skinLod.Vertices4[rawIdx].MatrixId[3]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].MatrixId[3]; +03268 skinLod.Vertices4[rawIdx].Weights[0]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[0]; +03269 skinLod.Vertices4[rawIdx].Weights[1]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[1]; +03270 skinLod.Vertices4[rawIdx].Weights[2]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[2]; +03271 skinLod.Vertices4[rawIdx].Weights[3]= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">_SkinWeights</a>[vid].Weights[3]; +03272 skinLod.Vertices4[rawIdx].Vertex.Pos= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">_OriginalSkinVertices</a>[vid]; +03273 skinLod.Vertices4[rawIdx].Vertex.Normal= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">_OriginalSkinNormals</a>[vid]; +03274 skinLod.Vertices4[rawIdx].Vertex.UV= *(CUV*)<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getTexCoordPointer(vid); +03275 } +03276 +03277 <span class="comment">// Remap Geomorphs.</span> +03278 <span class="comment">//========</span> +03279 <a class="code" href="a04558.html#a15">uint</a> numGeoms= lod.Geomorphs.size(); +03280 skinLod.Geomorphs.resize( numGeoms ); +03281 <span class="keywordflow">for</span>(i=0;i<numGeoms;i++) +03282 { +03283 <span class="comment">// NB: don't add "numGeoms" to the index because RawSkin look in a TempArray in RAM, wich start at 0...</span> +03284 skinLod.Geomorphs[i].Start= vertexRemap[lod.Geomorphs[i].Start]; +03285 skinLod.Geomorphs[i].End= vertexRemap[lod.Geomorphs[i].End]; +03286 } +03287 +03288 <span class="comment">// Remap RdrPass.</span> +03289 <span class="comment">//========</span> +03290 skinLod.RdrPass.resize(lod.RdrPass.size()); +03291 <span class="keywordflow">for</span>(i=0;i<skinLod.RdrPass.size();i++) +03292 { +03293 <span class="comment">// NB: since RawSkin is possible only with SkinGrouping, and since SkniGrouping is </span> +03294 <span class="comment">// possible only with no Quads/Lines, we should have only Tris here.</span> +03295 <a class="code" href="a04199.html#a6">nlassert</a>( lod.RdrPass[i].PBlock.getNumQuad()== 0); +03296 <a class="code" href="a04199.html#a6">nlassert</a>( lod.RdrPass[i].PBlock.getNumLine()== 0); +03297 <span class="comment">// remap tris.</span> +03298 skinLod.RdrPass[i].setNumTri(lod.RdrPass[i].PBlock.getNumTri()); +03299 <a class="code" href="a04558.html#a11">uint32</a> *srcTriPtr= lod.RdrPass[i].PBlock.getTriPointer(); +03300 <a class="code" href="a04558.html#a11">uint32</a> *dstTriPtr= skinLod.RdrPass[i].getTriPointer(); +03301 <a class="code" href="a04558.html#a11">uint32</a> numIndices= lod.RdrPass[i].PBlock.getNumTri()*3; +03302 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> j=0;j<numIndices;j++, srcTriPtr++, dstTriPtr++) +03303 { +03304 <a class="code" href="a04558.html#a15">uint</a> vid= *srcTriPtr; +03305 <span class="comment">// If this index refers to a Geomorphed vertex, don't modify!</span> +03306 <span class="keywordflow">if</span>(vid<numGeoms) +03307 *dstTriPtr= vid; +03308 <span class="keywordflow">else</span> +03309 *dstTriPtr= vertexRemap[vid] + numGeoms; +03310 } +03311 } +03312 +03313 <span class="comment">// Case of MeshMorpher</span> +03314 <span class="comment">//========</span> +03315 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size()>0) +03316 { +03317 skinLod.VertexRemap.resize(vertexFinalRemap.size()); +03318 +03319 <span class="keywordflow">for</span>(i=0;i<vertexFinalRemap.size();i++) +03320 { +03321 <a class="code" href="a04558.html#a15">uint</a> vfr= vertexFinalRemap[i]; +03322 <span class="keywordflow">if</span>(vfr!=0xFFFFFFFF) +03323 { +03324 <a class="code" href="a04558.html#a15">uint</a> rsArrayId= vfr >> 30; +03325 <a class="code" href="a04558.html#a15">uint</a> rsIndex= vfr & ((1<<30)-1); +03326 <span class="keywordflow">switch</span>(rsArrayId) +03327 { +03328 <span class="keywordflow">case</span> 0: +03329 skinLod.VertexRemap[i]= &skinLod.Vertices1[rsIndex].Vertex; +03330 <span class="keywordflow">break</span>; +03331 <span class="keywordflow">case</span> 1: +03332 skinLod.VertexRemap[i]= &skinLod.Vertices2[rsIndex].Vertex; +03333 <span class="keywordflow">break</span>; +03334 <span class="keywordflow">case</span> 2: +03335 skinLod.VertexRemap[i]= &skinLod.Vertices3[rsIndex].Vertex; +03336 <span class="keywordflow">break</span>; +03337 <span class="keywordflow">case</span> 3: +03338 skinLod.VertexRemap[i]= &skinLod.Vertices4[rsIndex].Vertex; +03339 <span class="keywordflow">break</span>; +03340 }; +03341 } +03342 <span class="keywordflow">else</span> +03343 skinLod.VertexRemap[i]= NULL; +03344 } +03345 } +03346 } +03347 } +03348 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomd18" doxytag="NL3D::CMeshMRMGeom::updateShiftedTriangleCache" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateShiftedTriangleCache </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02899.html">CMeshMRMInstance</a> * </td> + <td class="mdname" nowrap> <em>mi</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a> </td> + <td class="mdname" nowrap> <em>curLodId</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a> </td> + <td class="mdname" nowrap> <em>baseVertex</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l01529">1529</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00513">_Lods</a>, <a class="el" href="a06006.html#l00639">_MeshDataId</a>, <a class="el" href="a06008.html#l00126">NL3D::CMeshMRMInstance::_RawSkinCache</a>, <a class="el" href="a06008.html#l00131">NL3D::CMeshMRMInstance::_ShiftedTriangleCache</a>, <a class="el" href="a06387.html#l00066">NL3D::CShiftedTriangleCache::BaseVertex</a>, <a class="el" href="a06007.html#l00075">NL3D::CMeshMRMInstance::clearShiftedTriangleCache()</a>, <a class="el" href="a06116.html#l00195">NLMISC::CObjectVector< uint32, false >::getPtr()</a>, <a class="el" href="a06387.html#l00062">NL3D::CShiftedTriangleCache::LodId</a>, <a class="el" href="a06387.html#l00064">NL3D::CShiftedTriangleCache::MeshDataId</a>, <a class="el" href="a06387.html#l00052">NL3D::CShiftedTriangleCache::CRdrPass::NumTriangles</a>, <a class="el" href="a06387.html#l00057">NL3D::CShiftedTriangleCache::RawIndices</a>, <a class="el" href="a06387.html#l00059">NL3D::CShiftedTriangleCache::RdrPass</a>, <a class="el" href="a06006.html#l00385">NL3D::CMeshMRMGeom::CLod::RdrPass</a>, <a class="el" href="a06314.html#l00113">NL3D::CRawSkinNormalCache::RdrPass</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< uint32, false >::resize()</a>, <a class="el" href="a06116.html#l00142">NLMISC::CObjectVector< CRdrPass, false >::resize()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06387.html#l00051">NL3D::CShiftedTriangleCache::CRdrPass::Triangles</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01406">renderSkinGroupPrimitives()</a>. +<p> +<div class="fragment"><pre>01530 { +01531 <span class="comment">// if the instance has a cache, but not sync to us, delete it.</span> +01532 <span class="keywordflow">if</span>( mi->_ShiftedTriangleCache && ( +01533 mi->_ShiftedTriangleCache->MeshDataId != <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a> || +01534 mi->_ShiftedTriangleCache->LodId != curLodId || +01535 mi->_ShiftedTriangleCache->BaseVertex != baseVertex) ) +01536 { +01537 mi->clearShiftedTriangleCache(); +01538 } +01539 +01540 <span class="comment">// If the instance has not a valid cache, must create it.</span> +01541 <span class="keywordflow">if</span>( !mi->_ShiftedTriangleCache ) +01542 { +01543 mi->_ShiftedTriangleCache= <span class="keyword">new</span> CShiftedTriangleCache; +01544 <span class="comment">// Fill the cache Key.</span> +01545 mi->_ShiftedTriangleCache->MeshDataId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">_MeshDataId</a>; +01546 mi->_ShiftedTriangleCache->LodId= curLodId; +01547 mi->_ShiftedTriangleCache->BaseVertex= baseVertex; +01548 +01549 <span class="comment">// Build list of PBlock. From Lod, or from RawSkin cache.</span> +01550 <span class="keyword">static</span> vector<CPrimitiveBlock*> pbList; +01551 pbList.clear(); +01552 <span class="keywordflow">if</span>(mi->_RawSkinCache) +01553 { +01554 pbList.resize(mi->_RawSkinCache->RdrPass.size()); +01555 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<pbList.size();i++) +01556 { +01557 pbList[i]= &mi->_RawSkinCache->RdrPass[i]; +01558 } +01559 } +01560 <span class="keywordflow">else</span> +01561 { +01562 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz481_0">CLod</a> &lod= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">_Lods</a>[curLodId]; +01563 pbList.resize(lod.RdrPass.size()); +01564 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<pbList.size();i++) +01565 { +01566 pbList[i]= &lod.RdrPass[i].PBlock; +01567 } +01568 } +01569 +01570 <span class="comment">// Build RdrPass</span> +01571 mi->_ShiftedTriangleCache->RdrPass.resize(pbList.size()); +01572 +01573 <span class="comment">// First pass, count number of triangles, and fill header info</span> +01574 <a class="code" href="a04558.html#a15">uint</a> totalTri= 0; +01575 <a class="code" href="a04558.html#a15">uint</a> i; +01576 <span class="keywordflow">for</span>(i=0;i<pbList.size();i++) +01577 { +01578 mi->_ShiftedTriangleCache->RdrPass[i].NumTriangles= pbList[i]->getNumTri(); +01579 totalTri+= pbList[i]->getNumTri(); +01580 } +01581 +01582 <span class="comment">// Allocate triangles indices.</span> +01583 mi->_ShiftedTriangleCache->RawIndices.resize(totalTri*3); +01584 <a class="code" href="a04558.html#a11">uint32</a> *rawPtr= mi->_ShiftedTriangleCache->RawIndices.getPtr(); +01585 +01586 <span class="comment">// Second pass, fill ptrs, and fill Arrays</span> +01587 <a class="code" href="a04558.html#a15">uint</a> indexTri= 0; +01588 <span class="keywordflow">for</span>(i=0;i<pbList.size();i++) +01589 { +01590 CShiftedTriangleCache::CRdrPass &dstRdrPass= mi->_ShiftedTriangleCache->RdrPass[i]; +01591 dstRdrPass.Triangles= rawPtr + indexTri*3; +01592 +01593 <span class="comment">// Fill the array</span> +01594 <a class="code" href="a04558.html#a15">uint</a> numTris= pbList[i]->getNumTri(); +01595 <span class="keywordflow">if</span>(numTris) +01596 { +01597 <a class="code" href="a04558.html#a15">uint</a> nIds= numTris*3; +01598 <span class="comment">// index, and fill</span> +01599 <a class="code" href="a04558.html#a11">uint32</a> *pSrcTri= pbList[i]->getTriPointer(); +01600 <a class="code" href="a04558.html#a11">uint32</a> *pDstTri= dstRdrPass.Triangles; +01601 <span class="keywordflow">for</span>(;nIds>0;nIds--,pSrcTri++,pDstTri++) +01602 *pDstTri= *pSrcTri + baseVertex; +01603 } +01604 +01605 <span class="comment">// Next</span> +01606 indexTri+= dstRdrPass.NumTriangles; +01607 } +01608 } +01609 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz473_4" doxytag="NL3D::CMeshMRMGeom::updateSkeletonUsage" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateSkeletonUsage </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03399.html">CSkeletonModel</a> * </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 </td> + <td class="mdname" nowrap> <em>increment</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +update Skeleton Usage. increment or decrement. computeBonesId must has been called before. +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02535">2535</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06394.html#l00098">NL3D::CSkeletonModel::Bones</a>, <a class="el" href="a06393.html#l00213">NL3D::CSkeletonModel::decBoneUsage()</a>, <a class="el" href="a06393.html#l00189">NL3D::CSkeletonModel::incBoneUsage()</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, and <a class="el" href="a05981.html#l00105">uint</a>. +<p> +Referenced by <a class="el" href="a06005.html#l03005">NL3D::CMeshMRM::updateSkeletonUsage()</a>. +<p> +<div class="fragment"><pre>02536 { +02537 <span class="comment">// For all Bones used.</span> +02538 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i<<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>.size();i++) +02539 { +02540 <a class="code" href="a04558.html#a15">uint</a> boneId= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">_BonesIdExt</a>[i]; +02541 <span class="comment">// Some explicit Error.</span> +02542 <span class="keywordflow">if</span>(boneId>=sm->Bones.size()) +02543 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">" Skin is incompatible with Skeleton: tries to use bone %d"</span>, boneId); +02544 <span class="comment">// increment or decrement not Forced, because CMeshGeom use getActiveBoneSkinMatrix().</span> +02545 <span class="keywordflow">if</span>(increment) +02546 sm->incBoneUsage(boneId, CSkeletonModel::UsageNormal); +02547 <span class="keywordflow">else</span> +02548 sm->decBoneUsage(boneId, CSkeletonModel::UsageNormal); +02549 } +02550 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_2" doxytag="NL3D::CMeshMRMGeom::updateVertexBufferHard" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CMeshMRMGeom::updateVertexBufferHard </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02434.html">IDriver</a> * </td> + <td class="mdname" nowrap> <em>drv</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a> </td> + <td class="mdname" nowrap> <em>numVertices</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06005.html#l02224">2224</a> of file <a class="el" href="a06005.html">mesh_mrm.cpp</a>. +<p> +References <a class="el" href="a06006.html#l00487">_VBufferFinal</a>, <a class="el" href="a06004.html#l00077">NL3D::CMeshMorpher::BlendShapes</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06711.html#l00504">NL3D::CVertexBuffer::getUVRouting()</a>, <a class="el" href="a06711.html#l00483">NL3D::CVertexBuffer::getValueTypePointer()</a>, <a class="el" href="a06710.html#l00438">NL3D::CVertexBuffer::getVertexCoordPointer()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a06711.html#l00473">NL3D::CVertexBuffer::getVertexSize()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera75">NL3D::IDriver::slowUnlockVertexBufferHard()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera78">NL3D::IDriver::supportVertexBufferHard()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02705">beginMesh()</a>, and <a class="el" href="a06005.html#l00927">render()</a>. +<p> +<div class="fragment"><pre>02225 { +02226 <span class="keywordflow">if</span>(!drv->supportVertexBufferHard() || numVertices==0) +02227 <span class="keywordflow">return</span>; +02228 +02229 +02239 <span class="keywordtype">bool</span> avoidVBHard; +02240 avoidVBHard= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">_Skinned</a> || ( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">_MeshMorpher</a>.BlendShapes.size()>0 && drv->slowUnlockVertexBufferHard() ); +02241 <span class="keywordflow">if</span>( <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a> && avoidVBHard ) +02242 { +02243 <span class="comment">// delete possible old VBHard.</span> +02244 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL) +02245 { +02246 <span class="comment">// VertexBufferHard lifetime < Driver lifetime.</span> +02247 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL); +02248 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>->deleteVertexBufferHard(_VBHard); +02249 } +02250 <span class="keywordflow">return</span>; +02251 } +02252 +02253 +02254 <span class="comment">// If the vbufferhard is not here, or if dirty, or if do not have enough vertices.</span> +02255 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>==NULL || <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a> || <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>->getNumVertices() < numVertices) +02256 { +02257 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">_VertexBufferHardDirty</a>= <span class="keyword">false</span>; +02258 +02259 <span class="comment">// delete possible old _VBHard.</span> +02260 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL) +02261 { +02262 <span class="comment">// VertexBufferHard lifetime < Driver lifetime.</span> +02263 <a class="code" href="a04199.html#a6">nlassert</a>(_Driver!=NULL); +02264 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>->deleteVertexBufferHard(_VBHard); +02265 } +02266 +02267 <span class="comment">// bkup drv in a refptr. (so we know if the vbuffer hard has to be deleted).</span> +02268 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>= drv; +02269 <span class="comment">// try to create new one, in AGP Ram</span> +02270 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">_Driver</a>->createVertexBufferHard(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat(), <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getValueTypePointer (), numVertices, IDriver::VBHardAGP, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getUVRouting()); +02271 +02272 +02273 <span class="comment">// If KO, use normal VertexBuffer, else, Fill it with VertexBuffer.</span> +02274 <span class="keywordflow">if</span>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>!=NULL) +02275 { +02276 <span class="keywordtype">void</span> *vertexPtr= <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>->lock(); +02277 +02278 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexFormat() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>->getVertexFormat()); +02279 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getNumVertices() >= numVertices); +02280 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() == <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>->getVertexSize()); +02281 +02282 <span class="comment">// \todo yoyo: TODO_DX8 and DX8 ???</span> +02283 <span class="comment">// Because same internal format, just copy all block.</span> +02284 memcpy(vertexPtr, <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexCoordPointer(), numVertices * <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">_VBufferFinal</a>.getVertexSize() ); +02285 +02286 <a class="code" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">_VBHard</a>->unlock(); +02287 } +02288 } +02289 +02290 } +</pre></div> </td> + </tr> +</table> +<hr><h2>Friends And Related Function Documentation</h2> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz481_0" doxytag="NL3D::CMeshMRMGeom::CLod" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> friend class <a class="el" href="a02893.html">CLod</a><code> [friend]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00416">416</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomn0" doxytag="NL3D::CMeshMRMGeom::CMRMBuilder" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> friend class <a class="el" href="a02951.html">CMRMBuilder</a><code> [friend]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00333">333</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<hr><h2>Field Documentation</h2> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr0" doxytag="NL3D::CMeshMRMGeom::_BBox" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a02157.html">NLMISC::CAABBoxExt</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr0">NL3D::CMeshMRMGeom::_BBox</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +For clipping. this is the BB of all vertices of all Lods. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00515">515</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr1" doxytag="NL3D::CMeshMRMGeom::_BoneIdComputed" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr1">NL3D::CMeshMRMGeom::_BoneIdComputed</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This boolean is true if the bones id have been passed in the skeleton. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00493">493</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr2" doxytag="NL3D::CMeshMRMGeom::_BoneIdExtended" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr2">NL3D::CMeshMRMGeom::_BoneIdExtended</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +true if the _BonesIdExt have been computed (for bone Usage). +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00495">495</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr3" doxytag="NL3D::CMeshMRMGeom::_BonesId" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a04558.html#a10">sint32</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr3">NL3D::CMeshMRMGeom::_BonesId</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This array give the index in the skeleton of the local bones used. computed at first computeBoneId(). +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00506">506</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr4" doxytag="NL3D::CMeshMRMGeom::_BonesIdExt" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a04558.html#a10">sint32</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr4">NL3D::CMeshMRMGeom::_BonesIdExt</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Same as _BonesId but with parent of bones added. (used for bone usage). +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00508">508</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr5" doxytag="NL3D::CMeshMRMGeom::_BonesName" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<std::string> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr5">NL3D::CMeshMRMGeom::_BonesName</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This array give the name of the local bones. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00504">504</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr6" doxytag="NL3D::CMeshMRMGeom::_BonesSphere" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a02291.html">NLMISC::CBSphere</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr6">NL3D::CMeshMRMGeom::_BonesSphere</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +see <a class="el" href="a02316.html#NL3D_1_1CWaveMakerModelz1032_0">CTransform::getSkinBoneSphere()</a> doc for the meaning of this value +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00510">510</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02293">computeBonesId()</a>, and <a class="el" href="a06006.html#l00246">getSkinBoneSphere()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_3" doxytag="NL3D::CMeshMRMGeom::_Driver" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">CRefPtr</a><<a class="el" href="a02434.html">IDriver</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_3">NL3D::CMeshMRMGeom::_Driver</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00534">534</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr7" doxytag="NL3D::CMeshMRMGeom::_LastLodComputed" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a7">uint8</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr7">NL3D::CMeshMRMGeom::_LastLodComputed</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Last lod rendered. used with renderSkinGroup*() only. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00501">501</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>, <a class="el" href="a06005.html#l01406">renderSkinGroupPrimitives()</a>, and <a class="el" href="a06005.html#l01488">renderSkinGroupSpecularRdrPass()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz482_0" doxytag="NL3D::CMeshMRMGeom::_LevelDetail" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a02959.html">CMRMLevelDetail</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz482_0">NL3D::CMeshMRMGeom::_LevelDetail</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00525">525</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l00228">changeMRMDistanceSetup()</a>, <a class="el" href="a06006.html#l00275">getLevelDetail()</a>, <a class="el" href="a06005.html#l02200">getNumTriangles()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, and <a class="el" href="a06005.html#l00927">render()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr8" doxytag="NL3D::CMeshMRMGeom::_LodInfos" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a02894.html">CLodInfo</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr8">NL3D::CMeshMRMGeom::_LodInfos</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Info for pre-loading Lods. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00519">519</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, and <a class="el" href="a06005.html#l02001">loadNextLod()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr9" doxytag="NL3D::CMeshMRMGeom::_Lods" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a02893.html">CLod</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr9">NL3D::CMeshMRMGeom::_Lods</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +List of Lods. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00513">513</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06009.html#l00339">applyArrayShadowSkin()</a>, <a class="el" href="a06005.html#l00462">applyMaterialRemap()</a>, <a class="el" href="a06005.html#l02705">beginMesh()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l02293">computeBonesId()</a>, <a class="el" href="a06005.html#l02811">computeMeshVBHeap()</a>, <a class="el" href="a06005.html#l02791">endMesh()</a>, <a class="el" href="a06006.html#l00216">getGeomorphs()</a>, <a class="el" href="a06006.html#l00186">getNbLod()</a>, <a class="el" href="a06006.html#l00192">getNbRdrPass()</a>, <a class="el" href="a06005.html#l02700">getNumRdrPassesForInstance()</a>, <a class="el" href="a06006.html#l00209">getRdrPassMaterial()</a>, <a class="el" href="a06006.html#l00199">getRdrPassPrimitiveBlock()</a>, <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, <a class="el" href="a06005.html#l02001">loadNextLod()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, <a class="el" href="a06005.html#l00927">render()</a>, <a class="el" href="a06005.html#l02768">renderPass()</a>, <a class="el" href="a06005.html#l01146">renderSkin()</a>, <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>, <a class="el" href="a06005.html#l01406">renderSkinGroupPrimitives()</a>, <a class="el" href="a06005.html#l01488">renderSkinGroupSpecularRdrPass()</a>, <a class="el" href="a06005.html#l02029">unloadNextLod()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06005.html#l01529">updateShiftedTriangleCache()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz486_0" doxytag="NL3D::CMeshMRMGeom::_MBRBkupNormalize" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_0">NL3D::CMeshMRMGeom::_MBRBkupNormalize</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +BeginMesh setup. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00562">562</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02705">beginMesh()</a>, and <a class="el" href="a06005.html#l02791">endMesh()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz486_1" doxytag="NL3D::CMeshMRMGeom::_MBRCurrentLodId" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_1">NL3D::CMeshMRMGeom::_MBRCurrentLodId</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +global setup at activateInstance() +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00564">564</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02738">activeInstance()</a>, <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02700">getNumRdrPassesForInstance()</a>, and <a class="el" href="a06005.html#l02768">renderPass()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_11" doxytag="NL3D::CMeshMRMGeom::_MeshDataId" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_11">NL3D::CMeshMRMGeom::_MeshDataId</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Each time the mesh is loaded/built, this increment. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00639">639</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l03052">dirtMeshDataId()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06005.html#l01529">updateShiftedTriangleCache()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr10" doxytag="NL3D::CMeshMRMGeom::_MeshMorpher" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a02890.html">CMeshMorpher</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr10">NL3D::CMeshMRMGeom::_MeshMorpher</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00552">552</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr11" doxytag="NL3D::CMeshMRMGeom::_MeshVertexProgram" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03408.html">NLMISC::CSmartPtr</a><<a class="el" href="a02916.html">IMeshVertexProgram</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr11">NL3D::CMeshMRMGeom::_MeshVertexProgram</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00555">555</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr12" doxytag="NL3D::CMeshMRMGeom::_NbLodLoaded" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr12">NL3D::CMeshMRMGeom::_NbLodLoaded</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00520">520</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l00898">chooseLod()</a>, <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06006.html#l00140">getNbLodLoaded()</a>, <a class="el" href="a06005.html#l01951">loadFirstLod()</a>, <a class="el" href="a06005.html#l02001">loadNextLod()</a>, and <a class="el" href="a06005.html#l02029">unloadNextLod()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr13" doxytag="NL3D::CMeshMRMGeom::_OriginalSkinNormals" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a03128.html">CVector</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr13">NL3D::CMeshMRMGeom::_OriginalSkinNormals</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00481">481</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr14" doxytag="NL3D::CMeshMRMGeom::_OriginalSkinVertices" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a03128.html">CVector</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr14">NL3D::CMeshMRMGeom::_OriginalSkinVertices</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Skinning: this is the list of vertices (mirror of VBuffer), at the bind Pos. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00480">480</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr15" doxytag="NL3D::CMeshMRMGeom::_OriginalTGSpace" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a03128.html">CVector</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr15">NL3D::CMeshMRMGeom::_OriginalTGSpace</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00482">482</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_4" doxytag="NL3D::CMeshMRMGeom::_PreciseClipping" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_4">NL3D::CMeshMRMGeom::_PreciseClipping</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +NB: HERE FOR PACKING ONLY. For clipping. Estimate if we must do a Precise clipping (ie with bboxes). +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00538">538</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_1" doxytag="NL3D::CMeshMRMGeom::_ShadowSkinTriangles" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a04558.html#a11">uint32</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_1">NL3D::CMeshMRMGeom::_ShadowSkinTriangles</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00571">571</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l03412">renderShadowSkinPrimitives()</a>, and <a class="el" href="a06005.html#l03359">setShadowMesh()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_2" doxytag="NL3D::CMeshMRMGeom::_ShadowSkinVertices" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a02897.html">CShadowVertex</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_2">NL3D::CMeshMRMGeom::_ShadowSkinVertices</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00570">570</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l02293">computeBonesId()</a>, <a class="el" href="a06005.html#l03370">getNumShadowSkinVertices()</a>, <a class="el" href="a06005.html#l03376">renderShadowSkinGeom()</a>, and <a class="el" href="a06005.html#l03359">setShadowMesh()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr16" doxytag="NL3D::CMeshMRMGeom::_Skinned" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr16">NL3D::CMeshMRMGeom::_Skinned</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Skinning: This tells if the mesh is correctly skinned (suuport skinning). +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00478">478</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr17" doxytag="NL3D::CMeshMRMGeom::_SkinWeights" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a02865.html">CMesh::CSkinWeight</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr17">NL3D::CMeshMRMGeom::_SkinWeights</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This is the array of SkinWeights, same size as the VB. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00490">490</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06009.html#l00207">applySkin()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l02482">buildBoneUsageVer2()</a>, <a class="el" href="a06005.html#l02293">computeBonesId()</a>, <a class="el" href="a06006.html#l00179">getSkinWeights()</a>, <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>, and <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz486_2" doxytag="NL3D::CMeshMRMGeom::_SupportMeshBlockRendering" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz486_2">NL3D::CMeshMRMGeom::_SupportMeshBlockRendering</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +setuped at compileRunTime. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00560">560</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, and <a class="el" href="a06005.html#l02802">getVBHeapInfo()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz488_3" doxytag="NL3D::CMeshMRMGeom::_SupportShadowSkinGrouping" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz488_3">NL3D::CMeshMRMGeom::_SupportShadowSkinGrouping</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00572">572</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l03359">setShadowMesh()</a>, and <a class="el" href="a06006.html#l00325">supportShadowSkinGrouping()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr18" doxytag="NL3D::CMeshMRMGeom::_SupportSkinGrouping" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr18">NL3D::CMeshMRMGeom::_SupportSkinGrouping</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +if true, then maybe use faster render +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00498">498</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00204">CMeshMRMGeom()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, and <a class="el" href="a06005.html#l01312">supportSkinGrouping()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_5" doxytag="NL3D::CMeshMRMGeom::_VBHard" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">CRefPtr</a><<a class="el" href="a03694.html">IVertexBufferHard</a>> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_5">NL3D::CMeshMRMGeom::_VBHard</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00532">532</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr19" doxytag="NL3D::CMeshMRMGeom::_VBufferFinal" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03692.html">CVertexBuffer</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr19">NL3D::CMeshMRMGeom::_VBufferFinal</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The Final VBuffer. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00487">487</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00477">applyGeomorph()</a>, <a class="el" href="a06005.html#l00498">applyGeomorphWithVBHardPtr()</a>, <a class="el" href="a06009.html#l00207">applySkin()</a>, <a class="el" href="a06005.html#l02705">beginMesh()</a>, <a class="el" href="a06005.html#l02045">bkupOriginalSkinVertices()</a>, <a class="el" href="a06005.html#l02055">bkupOriginalSkinVerticesSubset()</a>, <a class="el" href="a06005.html#l00246">build()</a>, <a class="el" href="a06005.html#l02554">compileRunTime()</a>, <a class="el" href="a06005.html#l02811">computeMeshVBHeap()</a>, <a class="el" href="a06005.html#l02802">getVBHeapInfo()</a>, <a class="el" href="a06006.html#l00176">getVertexBuffer()</a>, <a class="el" href="a06005.html#l02600">profileSceneRender()</a>, <a class="el" href="a06005.html#l00927">render()</a>, <a class="el" href="a06005.html#l01146">renderSkin()</a>, <a class="el" href="a06005.html#l01318">renderSkinGroupGeom()</a>, <a class="el" href="a06005.html#l02131">restoreOriginalSkinPart()</a>, <a class="el" href="a06005.html#l02095">restoreOriginalSkinVertices()</a>, <a class="el" href="a06005.html#l01918">serialLodVertexData()</a>, <a class="el" href="a06005.html#l03060">updateRawSkinNormal()</a>, and <a class="el" href="a06005.html#l02224">updateVertexBufferHard()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomr20" doxytag="NL3D::CMeshMRMGeom::_VBufferOriginal" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03692.html">CVertexBuffer</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomr20">NL3D::CMeshMRMGeom::_VBufferOriginal</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The Original VBuffer. +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00485">485</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. +<p> +Referenced by <a class="el" href="a06005.html#l00927">render()</a>, and <a class="el" href="a06005.html#l01146">renderSkin()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz484_6" doxytag="NL3D::CMeshMRMGeom::_VertexBufferHardDirty" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz484_6">NL3D::CMeshMRMGeom::_VertexBufferHardDirty</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06006.html#l00535">535</a> of file <a class="el" href="a06006.html">mesh_mrm.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_0" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal1" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_0">NL3D::CMeshMRMGeom::NumCacheVertexNormal1</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03309.html">CRawVertexNormalSkin1</a>)<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00380">380</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_1" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal2" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_1">NL3D::CMeshMRMGeom::NumCacheVertexNormal2</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03310.html">CRawVertexNormalSkin2</a>)<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00382">382</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_2" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal3" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_2">NL3D::CMeshMRMGeom::NumCacheVertexNormal3</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03311.html">CRawVertexNormalSkin3</a>)<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00384">384</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_3" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexNormal4" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_3">NL3D::CMeshMRMGeom::NumCacheVertexNormal4</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a03312.html">CRawVertexNormalSkin4</a>)<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00386">386</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CMeshMRMGeomz490_4" doxytag="NL3D::CMeshMRMGeom::NumCacheVertexShadow" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a02892.html#NL3D_1_1CMeshMRMGeomz490_4">NL3D::CMeshMRMGeom::NumCacheVertexShadow</a> = <a class="el" href="a05363.html#a134">NL_BlockByteL1</a> / sizeof(<a class="el" href="a02897.html">CMeshMRMGeom::CShadowVertex</a>)<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06009.html#l00389">389</a> of file <a class="el" href="a06009.html">mesh_mrm_skin.cpp</a>. +<p> +Referenced by <a class="el" href="a06009.html#l00339">applyArrayShadowSkin()</a>. </td> + </tr> +</table> +<hr>The documentation for this class was generated from the following files:<ul> +<li><a class="el" href="a06006.html">mesh_mrm.h</a><li><a class="el" href="a06005.html">mesh_mrm.cpp</a><li><a class="el" href="a06009.html">mesh_mrm_skin.cpp</a></ul> +<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 06:53:13 2004 for NeL by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border=0 > +</a>1.3.6 </small></address> +</body> +</html> |