diff options
Diffstat (limited to 'docs/doxygen/nel/a03190.html')
-rw-r--r-- | docs/doxygen/nel/a03190.html | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a03190.html b/docs/doxygen/nel/a03190.html new file mode 100644 index 00000000..9d13517e --- /dev/null +++ b/docs/doxygen/nel/a03190.html @@ -0,0 +1,241 @@ +<!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::CPSFaceHelper 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::CPSFaceHelper Class Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2> +Well, we could have put a method template in <a class="el" href="a03186.html">CPSFace</a>, but some compilers want the definition of the methods in the header, and some compilers don't want friend with function template, so we use a static method template of a friend class instead, which gives us the same result :) +<p> + +<p> +Definition at line <a class="el" href="a06231.html#l00051">51</a> of file <a class="el" href="a06231.html">ps_face.cpp</a>.<table border=0 cellpadding=0 cellspacing=0> +<tr><td></td></tr> +<tr><td colspan=2><br><h2>Static Public Member Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>template<class T, class U> void </td><td class="memItemRight" valign=bottom><a class="el" href="a03190.html#NL3D_1_1CPSFaceHelpere0">drawFaces</a> (T posIt, U indexIt, <a class="el" href="a03186.html">CPSFace</a> &f, <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a587">size</a>, <a class="el" href="a04558.html#a11">uint32</a> srcStep)</td></tr> + +</table> +<hr><h2>Member Function Documentation</h2> +<a class="anchor" name="NL3D_1_1CPSFaceHelpere0" doxytag="NL3D::CPSFaceHelper::drawFaces" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" colspan="4"> +template<class T, class U> </td> + </tr> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CPSFaceHelper::drawFaces </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">T </td> + <td class="mdname" nowrap> <em>posIt</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>U </td> + <td class="mdname" nowrap> <em>indexIt</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03186.html">CPSFace</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>size</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>srcStep</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [inline, static]</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="a06231.html#l00055">55</a> of file <a class="el" href="a06231.html">ps_face.cpp</a>. +<p> +References <a class="el" href="a06258.html#l00844">NL3D::CPSMaterial::_Mat</a>, <a class="el" href="a06247.html#l01026">NL3D::CPSLocatedBindable::_Owner</a>, <a class="el" href="a06258.html#l00289">NL3D::CPSSizedParticle::_ParticleSize</a>, <a class="el" href="a06258.html#l00697">NL3D::CPSRotated3DPlaneParticle::_PlaneBasis</a>, <a class="el" href="a06258.html#l00695">NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme</a>, <a class="el" href="a06232.html#l00140">NL3D::CPSFace::_PrecompBasis</a>, <a class="el" href="a06258.html#l00290">NL3D::CPSSizedParticle::_SizeScheme</a>, <a class="el" href="a06258.html#l00472">NL3D::CPSTexturedParticle::_Tex</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver::activeVertexBuffer()</a>, <a class="el" href="a06249.html#l00039">CHECK_VERTEX_BUFFER</a>, <a class="el" href="a06247.html#l00890">NL3D::CPSLocatedBindable::getDriver()</a>, <a class="el" href="a06262.html#l00146">NL3D::CPSQuad::getNeededVB()</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="a06246.html#l00500">NL3D::CPSLocated::incrementNbDrawnParticles()</a>, <a class="el" href="a06258.html#l00519">NL3D::CPSMultiTexturedParticle::isMultiTextureEnabled()</a>, <a class="el" href="a03136.html#NL3D_1_1CPSAttribMakerz714_2">NL3D::CPSAttribMaker< CPlaneBasis >::make()</a>, <a class="el" href="a03136.html#NL3D_1_1CPSAttribMakerz714_2">NL3D::CPSAttribMaker< float >::make()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06152.html#l00060">PARTICLES_CHECK_MEM</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera54">NL3D::IDriver::renderQuads()</a>, <a class="el" href="a06246.html#l02142">NL3D::CPSLocatedBindable::setupDriverModelMatrix()</a>, <a class="el" href="a06257.html#l00733">NL3D::CPSMultiTexturedParticle::setupMaterial()</a>, <a class="el" href="a05646.html#l00645">size</a>, <a class="el" href="a05646.html#l00244">stride</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="a06262.html#l00520">NL3D::CPSQuad::updateMatBeforeRendering()</a>, <a class="el" href="a06262.html#l00386">NL3D::CPSQuad::updateVbColNUVForRender()</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06259.html#l00048">NL3D::CPlaneBasis::X</a>, <a class="el" href="a06259.html#l00049">NL3D::CPlaneBasis::Y</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>. +<p> +<div class="fragment"><pre>00056 { +00057 <a class="code" href="a04729.html#a0">PARTICLES_CHECK_MEM</a>; +00058 <a class="code" href="a04199.html#a6">nlassert</a>(f._Owner); +00059 IDriver *driver = f.getDriver(); +00060 +00061 f.updateMatBeforeRendering(driver); +00062 +00063 CVertexBuffer &vb = f.getNeededVB(); +00064 <a class="code" href="a04558.html#a7">uint8</a> *currVertex; +00065 +00066 <span class="comment">// number of left faces to draw, number of faces to process at once</span> +00067 <a class="code" href="a04558.html#a11">uint32</a> leftFaces = <a class="code" href="a04223.html#a587">size</a>, toProcess; +00068 f._Owner->incrementNbDrawnParticles(size); <span class="comment">// for benchmark purpose </span> +00069 f.setupDriverModelMatrix(); +00070 driver->activeVertexBuffer(vb); +00071 <span class="keywordflow">if</span> (f.isMultiTextureEnabled()) +00072 { +00073 f.setupMaterial(f._Tex, driver, f._Mat); +00074 } +00075 <span class="keywordtype">float</span> sizeBuf[CPSQuad::quadBufSize]; +00076 <span class="keywordtype">float</span> *ptSize; +00077 T endPosIt; +00078 +00079 <span class="comment">// if constant size is used, the pointer points always the same float </span> +00080 <a class="code" href="a04558.html#a11">uint32</a> ptSizeIncrement = f._SizeScheme ? 1 : 0; +00081 +00082 <span class="keywordflow">if</span> (f._PrecompBasis.size()) <span class="comment">// do we use precomputed basis ?</span> +00083 { +00084 <span class="keywordflow">do</span> +00085 { +00086 toProcess = leftFaces > CPSQuad::quadBufSize ? CPSQuad::quadBufSize : leftFaces; +00087 currVertex = (<a class="code" href="a04558.html#a7">uint8</a> *) vb.getVertexCoordPointer() ; +00088 <span class="keywordflow">if</span> (f._SizeScheme) +00089 { +00090 ptSize = (<span class="keywordtype">float</span> *) (f._SizeScheme->make(f._Owner, size - leftFaces, sizeBuf, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>), toProcess, <span class="keyword">true</span>, srcStep)); +00091 } +00092 <span class="keywordflow">else</span> +00093 { +00094 ptSize = &f._ParticleSize; +00095 } +00096 f.updateVbColNUVForRender(vb, size - leftFaces, toProcess, srcStep); +00097 <span class="keyword">const</span> <a class="code" href="a04558.html#a11">uint32</a> <a class="code" href="a04223.html#a582">stride</a> = vb.getVertexSize(); +00098 endPosIt = posIt + toProcess; +00099 <span class="keywordflow">do</span> +00100 { +00101 <span class="keyword">const</span> CPlaneBasis &currBasis = f._PrecompBasis[*indexIt].Basis; +00102 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00103 ((CVector *) currVertex)->x = (*posIt).x + *ptSize * currBasis.X.x; +00104 ((CVector *) currVertex)->y = (*posIt).y + *ptSize * currBasis.X.y; +00105 ((CVector *) currVertex)->z = (*posIt).z + *ptSize * currBasis.X.z; +00106 currVertex += <a class="code" href="a04223.html#a582">stride</a>; +00107 +00108 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00109 ((CVector *) currVertex)->x = (*posIt).x + *ptSize * currBasis.Y.x; +00110 ((CVector *) currVertex)->y = (*posIt).y + *ptSize * currBasis.Y.y; +00111 ((CVector *) currVertex)->z = (*posIt).z + *ptSize * currBasis.Y.z; +00112 currVertex += <a class="code" href="a04223.html#a582">stride</a>; +00113 +00114 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00115 ((CVector *) currVertex)->x = (*posIt).x - *ptSize * currBasis.X.x; +00116 ((CVector *) currVertex)->y = (*posIt).y - *ptSize * currBasis.X.y; +00117 ((CVector *) currVertex)->z = (*posIt).z - *ptSize * currBasis.X.z; +00118 currVertex += <a class="code" href="a04223.html#a582">stride</a>; +00119 +00120 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00121 ((CVector *) currVertex)->x = (*posIt).x - *ptSize * currBasis.Y.x; +00122 ((CVector *) currVertex)->y = (*posIt).y - *ptSize * currBasis.Y.y; +00123 ((CVector *) currVertex)->z = (*posIt).z - *ptSize * currBasis.Y.z; +00124 currVertex += <a class="code" href="a04223.html#a582">stride</a>; +00125 ptSize += ptSizeIncrement; +00126 ++indexIt; +00127 ++posIt; +00128 } +00129 <span class="keywordflow">while</span> (posIt != endPosIt); +00130 driver->renderQuads(f._Mat, 0, toProcess); +00131 leftFaces -= toProcess; +00132 } +00133 <span class="keywordflow">while</span> (leftFaces); +00134 } +00135 <span class="keywordflow">else</span> +00136 { +00137 <span class="comment">// must compute each particle basis at each time</span> +00138 <span class="keyword">static</span> CPlaneBasis planeBasis[CPSQuad::quadBufSize]; <span class="comment">// buffer to compute each particle basis</span> +00139 CPlaneBasis *currBasis; +00140 <a class="code" href="a04558.html#a11">uint32</a> ptPlaneBasisIncrement = f._PlaneBasisScheme ? 1 : 0; +00141 <span class="keyword">const</span> <a class="code" href="a04558.html#a11">uint32</a> vSize = vb.getVertexSize(); +00142 <span class="keywordflow">do</span> +00143 { +00144 toProcess = leftFaces > CPSQuad::quadBufSize ? CPSQuad::quadBufSize : leftFaces; +00145 currVertex = (<a class="code" href="a04558.html#a7">uint8</a> *) vb.getVertexCoordPointer() ; +00146 <span class="keywordflow">if</span> (f._SizeScheme) +00147 { +00148 ptSize = (<span class="keywordtype">float</span> *) (f._SizeScheme->make(f._Owner, size - leftFaces, sizeBuf, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>), toProcess, <span class="keyword">true</span>, srcStep)); +00149 } +00150 <span class="keywordflow">else</span> +00151 { +00152 ptSize = &f._ParticleSize; +00153 } +00154 +00155 <span class="keywordflow">if</span> (f._PlaneBasisScheme) +00156 { +00157 currBasis = (CPlaneBasis *) (f._PlaneBasisScheme->make(f._Owner, size - leftFaces, planeBasis, <span class="keyword">sizeof</span>(CPlaneBasis), toProcess, <span class="keyword">true</span>, srcStep)); +00158 } +00159 <span class="keywordflow">else</span> +00160 { +00161 currBasis = &f._PlaneBasis; +00162 } +00163 f.updateVbColNUVForRender(vb, size - leftFaces, toProcess, srcStep); +00164 endPosIt = posIt + toProcess; +00165 <span class="keywordflow">do</span> +00166 { +00167 <span class="comment">// we use this instead of the + operator, because we avoid 4 constructor calls this way</span> +00168 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00169 ((CVector *) currVertex)->x = (*posIt).x + *ptSize * currBasis->X.x; +00170 ((CVector *) currVertex)->y = (*posIt).y + *ptSize * currBasis->X.y; +00171 ((CVector *) currVertex)->z = (*posIt).z + *ptSize * currBasis->X.z; +00172 currVertex += vSize; +00173 +00174 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00175 ((CVector *) currVertex)->x = (*posIt).x + *ptSize * currBasis->Y.x; +00176 ((CVector *) currVertex)->y = (*posIt).y + *ptSize * currBasis->Y.y; +00177 ((CVector *) currVertex)->z = (*posIt).z + *ptSize * currBasis->Y.z; +00178 currVertex += vSize; +00179 +00180 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00181 ((CVector *) currVertex)->x = (*posIt).x - *ptSize * currBasis->X.x; +00182 ((CVector *) currVertex)->y = (*posIt).y - *ptSize * currBasis->X.y; +00183 ((CVector *) currVertex)->z = (*posIt).z - *ptSize * currBasis->X.z; +00184 currVertex += vSize; +00185 +00186 <a class="code" href="a04826.html#a0">CHECK_VERTEX_BUFFER</a>(vb, currVertex); +00187 ((CVector *) currVertex)->x = (*posIt).x - *ptSize * currBasis->Y.x; +00188 ((CVector *) currVertex)->y = (*posIt).y - *ptSize * currBasis->Y.y; +00189 ((CVector *) currVertex)->z = (*posIt).z - *ptSize * currBasis->Y.z; +00190 currVertex += vSize; +00191 ptSize += ptSizeIncrement; +00192 ++posIt; +00193 currBasis += ptPlaneBasisIncrement; +00194 } +00195 <span class="keywordflow">while</span> (posIt != endPosIt); +00196 driver->renderQuads(f._Mat, 0, toProcess); +00197 leftFaces -= toProcess; +00198 } +00199 <span class="keywordflow">while</span> (leftFaces); +00200 } +00201 <a class="code" href="a04729.html#a0">PARTICLES_CHECK_MEM</a>; +00202 } +</pre></div> </td> + </tr> +</table> +<hr>The documentation for this class was generated from the following file:<ul> +<li><a class="el" href="a06231.html">ps_face.cpp</a></ul> +<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 07:11:18 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> |