aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02433.html
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/a02433.html
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to '')
-rw-r--r--docs/doxygen/nel/a02433.html21892
1 files changed, 21892 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02433.html b/docs/doxygen/nel/a02433.html
new file mode 100644
index 00000000..00cf3b21
--- /dev/null
+++ b/docs/doxygen/nel/a02433.html
@@ -0,0 +1,21892 @@
+<!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::CDriverGL class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NL3D::CDriverGL Class Reference</h1><code>#include &lt;<a class="el" href="a05643.html">driver_opengl.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for NL3D::CDriverGL:
+<p><center><img src="a02433.png" usemap="#NL3D::CDriverGL_map" border="0" alt=""></center>
+<map name="NL3D::CDriverGL_map">
+<area href="a02434.html" alt="NL3D::IDriver" shape="rect" coords="0,56,126,80">
+<area href="a02209.html" alt="NLMISC::CRefCount" shape="rect" coords="0,0,126,24">
+</map>
+<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>EXTVertexShader specifics.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0">EEVSVariants</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a> = 0,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a> = 1,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a> = 2,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a> = 3,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw8">EVSNumVariants</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_1">setupEXTVertexShader</a> (const <a class="el" href="a03717.html#CVPParserw0">CVPParser::TProgram</a> &amp;<a class="el" href="a04223.html#a568">program</a>, GLuint <a class="el" href="a04223.html#a564">id</a>, <a class="el" href="a04558.html#a15">uint</a> variants[EVSNumVariants], <a class="el" href="a04558.html#a9">uint16</a> &amp;usedInputRegisters)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_2">_EVSColorHandle</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_3">_EVSConstantHandle</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_4">_EVSNormalHandle</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_5">_EVSPositionHandle</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_6">_EVSTexHandle</a> [8]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_7">_EVSNumConstant</a> = 97</td></tr>
+
+<tr><td colspan=2><br><h2>Vertex program interface</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverz147_0">TMatrix</a> { <a class="el" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw18">ModelView</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw28">Projection</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw19">ModelViewProjection</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw22">NumMatrix</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverz147_1">TTransform</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw11">Identity</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw14">Inverse</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw38">Transpose</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw15">InverseTranspose</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw23">NumTransform</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverz147_12">setConstantMatrix</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a566">index</a>, <a class="el" href="a02434.html#NL3D_1_1IDriverz147_0">TMatrix</a> <a class="el" href="a04223.html#a578">matrix</a>, <a class="el" href="a02434.html#NL3D_1_1IDriverz147_1">TTransform</a> <a class="el" href="a04223.html#a579">transform</a>)=0</td></tr>
+
+<tr><td colspan=2><br><h2>Prec settings, for optimisation.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0">CTexEnvSpecial</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a> = 0,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy3">TexEnvSpecialLightMap</a>,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy6">TexEnvSpecialSpecularStage1</a>,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy7">TexEnvSpecialSpecularStage1NoText</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy5">TexEnvSpecialPPLStage2</a>,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy0">TexEnvSpecialCloudStage0</a>,
+<a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy1">TexEnvSpecialCloudStage1</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_1">resetTextureShaders</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_2">setTextureShaders</a> (const <a class="el" href="a04558.html#a7">uint8</a> *addressingModes, const <a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt; <a class="el" href="a03487.html">ITexture</a> &gt; *textures)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02839.html">CMaterial</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02839.html#NL3D_1_1CMaterialw65">CMaterial::TShader</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_4">_CurrentMaterialSupportedShader</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLenum&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_5">_CurrentTexAddrMode</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02842.html">CMaterial::CTexEnv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_6">_CurrentTexEnv</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0">CTexEnvSpecial</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03487.html">ITexture</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03495.html">CTextureDrvInfosGL</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02436.html">CDriverGLStates</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_11">_MaterialAllTextureTouchedFlag</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_13">_StageSupportEMBM</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td colspan=2><br><h2>Per pixel lighting</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt;<br>
+ <a class="el" href="a03492.html">CTextureCube</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_0">TSPTextureCube</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef std::vector&lt; <a class="el" href="a03408.html">TSPTextureCube</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_1">TTexCubeVect</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_2">beginPPLMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_3">beginPPLNoSpecMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_4">endPPLMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_5">endPPLNoSpecMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03492.html">CTextureCube</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_6">getDiffuseCubeMap</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03492.html">CTextureCube</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_7">getSpecularCubeMap</a> (<a class="el" href="a04558.html#a15">uint</a> exp)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get (and if necessary, build) a cube map used for specular lighting. The range for exponent is limited, and only the best fit is used <a href="#NL3D_1_1CDriverGLz95_7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_8">setupPPLNoSpecPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_9">setupPPLPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_1">TTexCubeVect</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_10">_SpecularTextureCubes</a></td></tr>
+
+<tr><td colspan=2><br><h2>Profiling</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_0">appendVBHardLockProfile</a> (<a class="el" href="a05378.html#a243">NLMISC::TTicks</a> time, <a class="el" href="a03694.html">IVertexBufferHard</a> *vb)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_1">computeMipMapMemoryUsage</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a575">w</a>, <a class="el" href="a04558.html#a15">uint</a> h, GLint glfmt) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_2">_AllocatedTextureMemory</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_4">_NbSetupMaterialCall</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_5">_NbSetupModelMatrixCall</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_6">_NumVBHardProfileFrame</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03116.html">CPrimitiveProfile</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03116.html">CPrimitiveProfile</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_9">_SumTextureMemoryUsed</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::set&lt; <a class="el" href="a03495.html">CTextureDrvInfosGL</a> * &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_10">_TextureUsed</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02435.html">CVBHardProfile</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a></td></tr>
+
+<tr><td colspan=2><br><h2>Lightmap.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_0">beginLightMapMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_1">computeLightMapInfos</a> (const <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_2">endLightMapMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_3">resetLightMapVertexSetup</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_4">setupLightMapPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02842.html">CMaterial::CTexEnv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_6">_LightMapLastStageEnv</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a15">uint</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_7">_LightMapLUT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a6">sint8</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_9">_NLightMapPass</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_11">_NLightMaps</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Temp Variables computed in <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_0">beginLightMapMultiPass()</a>. Reused in <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_4">setupLightMapPass()</a>. <a href="#NL3D_1_1CDriverGLz89_11"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Specular.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz91_0">beginSpecularMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz91_1">endSpecularMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz91_2">setupSpecularBegin</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz91_3">setupSpecularEnd</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz91_4">setupSpecularPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz91_5">_SpecularBatchOn</a></td></tr>
+
+<tr><td colspan=2><br><h2>[NOHEADER]</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_0">checkForPerPixelLightingSupport</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_1">_PPLExponent</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_2">_PPLightDiffuseColor</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_3">_PPLightSpecularColor</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_4">_SupportPerPixelShader</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_5">_SupportPerPixelShaderNoSpec</a></td></tr>
+
+<tr><td colspan=2><br><h2>[NOHEADER]</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_0">deleteARBFragmentPrograms</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_1">deleteFragmentShaders</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_2">initFragmentShaders</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_3">setupWaterPassARB</a> (const <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_4">setupWaterPassNV20</a> (const <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_5">setupWaterPassR200</a> (const <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a> [4]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLuint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a></td></tr>
+
+<tr><td colspan=2><br><h2>VertexBufferHard</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_0">fenceOnCurVBHardIfNeeded</a> (<a class="el" href="a03695.html">IVertexBufferHardGL</a> *newVBHard)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_1">resetVertexArrayRange</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03689.html">IVertexArrayRange</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03689.html">IVertexArrayRange</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_3">_CurrentVertexArrayRange</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03695.html">IVertexBufferHardGL</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_6">_NVCurrentVARPtr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_7">_NVCurrentVARSize</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_8">_SlowUnlockVBHard</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03262.html">CPtrSet</a>&lt; <a class="el" href="a03695.html">IVertexBufferHardGL</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03689.html">IVertexArrayRange</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_12">CVertexArrayRangeATI</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_13">CVertexArrayRangeMapObjectATI</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_14">CVertexArrayRangeNVidia</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_15">CVertexBufferHardGLATI</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_16">CVertexBufferHardGLMapObjectATI</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_17">CVertexBufferHardGLNVidia</a></td></tr>
+
+<tr><td colspan=2><br><h2>Caustics shaders</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt; <a class="el" href="a03492.html">CTextureCube</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz109_0">_CausticCubeMap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz109_1">initCausticCubeMap</a> ()</td></tr>
+
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom>{ <a class="el" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a> = 8
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverw33">TMatrixCount</a> { <a class="el" href="a02434.html#NL3D_1_1IDriverw33NL3D_1_1IDriverw17">MaxModelMatrix</a> = 16
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverw34">TMessageBoxIcon</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw20">noIcon</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw8">handIcon</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw29">questionIcon</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw6">exclamationIcon</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw2">asteriskIcon</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw43">warningIcon</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw5">errorIcon</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw13">informationIcon</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw32">stopIcon</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw9">iconCount</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverw35">TMessageBoxId</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw25">okId</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw44">yesId</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw21">noId</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw0">abortId</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw31">retryId</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw3">cancelId</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw12">ignoreId</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw10">idCount</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverw36">TMessageBoxType</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw26">okType</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw24">okCancelType</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw46">yesNoType</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw1">abortRetryIgnoreType</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw45">yesNoCancelType</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw30">retryCancelType</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw40">typeCount</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a> { <a class="el" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw7">Filled</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw16">Line</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw27">Point</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverw39">TVBHardType</a> { <a class="el" href="a02434.html#NL3D_1_1IDriverw39NL3D_1_1IDriverw41">VBHardAGP</a> = 0,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw39NL3D_1_1IDriverw42">VBHardVRAM</a>,
+<a class="el" href="a02434.html#NL3D_1_1IDriverw39NL3D_1_1IDriverw4">CountVBHard</a>
+ }</td></tr>
+
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa0">activate</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Before rendering via a driver in a thread, must <a class="el" href="a02433.html#NL3D_1_1CDriverGLa0">activate()</a> (per thread). <a href="#NL3D_1_1CDriverGLa0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa1">activeVertexBuffer</a> (<a class="el" href="a03692.html">CVertexBuffer</a> &amp;VB, <a class="el" href="a04558.html#a15">uint</a> first, <a class="el" href="a04558.html#a15">uint</a> end)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa2">activeVertexBuffer</a> (<a class="el" href="a03692.html">CVertexBuffer</a> &amp;VB)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa3">activeVertexBufferHard</a> (<a class="el" href="a03694.html">IVertexBufferHard</a> *VB)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa4">CDriverGL</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa5">clear2D</a> (<a class="el" href="a03337.html">CRGBA</a> rgba)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa6">clearZBuffer</a> (float zval=1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa7">copyFrameBufferToTexture</a> (<a class="el" href="a03487.html">ITexture</a> *tex, <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a04223.html#a630">level</a>, <a class="el" href="a04558.html#a11">uint32</a> offsetx, <a class="el" href="a04558.html#a11">uint32</a> offsety, <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a04223.html#a572">x</a>, <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a04223.html#a573">y</a>, <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a04223.html#a632">width</a>, <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a04223.html#a633">height</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivera7">createVertexBufferHard</a> (<a class="el" href="a04558.html#a9">uint16</a> vertexFormat, const <a class="el" href="a04558.html#a7">uint8</a> *typeArray, <a class="el" href="a04558.html#a11">uint32</a> numVertices, <a class="el" href="a02434.html#NL3D_1_1IDriverw39">TVBHardType</a> vbType, const <a class="el" href="a04558.html#a7">uint8</a> *uvRouting)=0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa9">createVertexBufferHard</a> (<a class="el" href="a04558.html#a9">uint16</a> vertexFormat, const <a class="el" href="a04558.html#a7">uint8</a> *typeArray, <a class="el" href="a04558.html#a11">uint32</a> numVertices, <a class="el" href="a02434.html#NL3D_1_1IDriverw39">IDriver::TVBHardType</a> vbType, const <a class="el" href="a04558.html#a7">uint8</a> *uvRouting)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa10">deleteVertexBufferHard</a> (<a class="el" href="a03694.html">IVertexBufferHard</a> *VB)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa11">disableHardwareTextureShader</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa12">disableHardwareVertexArrayAGP</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa13">disableHardwareVertexProgram</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa14">disableUserTextureMatrix</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">disable all texture matrix <a href="#NL3D_1_1CDriverGLa14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa15">enableLight</a> (<a class="el" href="a04558.html#a7">uint8</a> <a class="el" href="a04223.html#a653">num</a>, bool enable=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03860.html">NLMISC::IKeyboardDevice</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa16">enableLowLevelKeyboard</a> (bool enable)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03867.html">NLMISC::IMouseDevice</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa17">enableLowLevelMouse</a> (bool enable, bool exclusive)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa18">enableUsedTextureMemorySum</a> (bool enable)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa19">endProfileVBHardLock</a> (std::vector&lt; std::string &gt; &amp;result)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa20">endSpecularBatch</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a05363.html#a19">ModeList</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa21">enumModes</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa22">fillBuffer</a> (<a class="el" href="a02268.html">CBitmap</a> &amp;bitmap)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa23">forceDXTCCompression</a> (bool dxtcComp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa24">forceNormalize</a> (bool normalize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa25">forceTextureResize</a> (<a class="el" href="a04558.html#a15">uint</a> divisor)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa26">getAvailableVertexAGPMemory</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa27">getAvailableVertexVRAMMemory</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa28">getBitPerPixel</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the depth of the driver after <a class="el" href="a02433.html#NL3D_1_1CDriverGLa55">init()</a>. <a href="#NL3D_1_1CDriverGLa28"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa29">getBuffer</a> (<a class="el" href="a02268.html">CBitmap</a> &amp;bitmap)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa30">getBufferPart</a> (<a class="el" href="a02268.html">CBitmap</a> &amp;bitmap, <a class="el" href="a03319.html">NLMISC::CRect</a> &amp;rect)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa31">getDisplay</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa32">getDoubleClickDelay</a> (bool hardwareMouse)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual const char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa33">getDriverInformation</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03852.html">NLMISC::IEventEmitter</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa34">getEventEmitter</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa35">getHwnd</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa36">getImplementationVersion</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03858.html">NLMISC::IInputDeviceManager</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa37">getLowLevelInputDeviceManager</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa38">getMaxLight</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa39">getMaxVerticesByVertexBufferHard</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa40">getModes</a> (std::vector&lt; <a class="el" href="a03831.html">GfxMode</a> &gt; &amp;modes)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa41">getNbTextureStages</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of texture stage avaliable, for multitexturing (Normal material shaders). Valid only after <a class="el" href="a02433.html#NL3D_1_1CDriverGLa78">setDisplay()</a>. <a href="#NL3D_1_1CDriverGLa41"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivera29">getPolygonMode</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a14">sint</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02209.html#NLGEORGES_1_1UTypea8">getRefCount</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa44">getSwapVBLInterval</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get the number of VBL wait when a <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> is issued. 0 means no synchronisation to the VBL <a href="#NL3D_1_1CDriverGLa44"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa45">getTextureHandle</a> (const <a class="el" href="a03487.html">ITexture</a> &amp;tex)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa46">getUsedTextureMemory</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual const char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa47">getVideocardInformation</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a02851.html">CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa48">getViewMatrix</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa49">getViewport</a> (<a class="el" href="a03704.html">CViewport</a> &amp;viewport)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa50">getWindowPos</a> (<a class="el" href="a04558.html#a11">uint32</a> &amp;<a class="el" href="a04223.html#a572">x</a>, <a class="el" href="a04558.html#a11">uint32</a> &amp;<a class="el" href="a04223.html#a573">y</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the position of the window always (0,0) in fullscreen. <a href="#NL3D_1_1CDriverGLa50"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a05363.html#a20">emptyProc</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa51">getWindowProc</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa52">getWindowSize</a> (<a class="el" href="a04558.html#a11">uint32</a> &amp;<a class="el" href="a04223.html#a632">width</a>, <a class="el" href="a04558.html#a11">uint32</a> &amp;<a class="el" href="a04223.html#a633">height</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the width and the height of the window. <a href="#NL3D_1_1CDriverGLa52"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa53">getZBuffer</a> (std::vector&lt; float &gt; &amp;zbuffer)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa54">getZBufferPart</a> (std::vector&lt; float &gt; &amp;zbuffer, <a class="el" href="a03319.html">NLMISC::CRect</a> &amp;rect)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa55">init</a> (<a class="el" href="a04558.html#a15">uint</a> windowIcon=0)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa56">initVertexArrayRange</a> (<a class="el" href="a04558.html#a15">uint</a> agpMem, <a class="el" href="a04558.html#a15">uint</a> vramMem)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivera44">invalidateShareTexture</a> (<a class="el" href="a03487.html">ITexture</a> &amp;)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa58">isActive</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return true if driver is still active. Return false else. If he user close the window, must return false. <a href="#NL3D_1_1CDriverGLa58"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa59">isForceNormalize</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa60">isTextureExist</a> (const <a class="el" href="a03487.html">ITexture</a> &amp;tex)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa61">mapTextureStageToUV</a> (<a class="el" href="a04558.html#a15">uint</a> stage, <a class="el" href="a04558.html#a15">uint</a> uv)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa62">multiplyModelMatrix</a> (const <a class="el" href="a02851.html">CMatrix</a> &amp;mtx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa63">profileAllocatedTextureMemory</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa64">profileRenderedPrimitives</a> (<a class="el" href="a03116.html">CPrimitiveProfile</a> &amp;pIn, <a class="el" href="a03116.html">CPrimitiveProfile</a> &amp;pOut)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa65">profileSetupedMaterials</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa66">profileSetupedModelMatrix</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa67">profileVBHardAllocation</a> (std::vector&lt; std::string &gt; &amp;result)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa68">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Deriver should calls <a class="el" href="a02434.html#NL3D_1_1IDrivera50">IDriver::release()</a> first, to destroy all driver components (textures, shaders, VBuffers). <a href="#NL3D_1_1CDriverGLa68"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render</a> (<a class="el" href="a03105.html">CPrimitiveBlock</a> &amp;PB, <a class="el" href="a02839.html">CMaterial</a> &amp;Mat)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa70">renderOrientedQuads</a> (<a class="el" href="a02839.html">CMaterial</a> &amp;mat, <a class="el" href="a04558.html#a11">uint32</a> startIndex, <a class="el" href="a04558.html#a11">uint32</a> numQuads)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa71">renderPoints</a> (<a class="el" href="a02839.html">CMaterial</a> &amp;Mat, <a class="el" href="a04558.html#a11">uint32</a> numPoints)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa72">renderQuads</a> (<a class="el" href="a02839.html">CMaterial</a> &amp;Mat, <a class="el" href="a04558.html#a11">uint32</a> startIndex, <a class="el" href="a04558.html#a11">uint32</a> numQuads)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa73">renderSimpleTriangles</a> (<a class="el" href="a04558.html#a11">uint32</a> *tri, <a class="el" href="a04558.html#a11">uint32</a> ntris)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa74">renderTriangles</a> (<a class="el" href="a02839.html">CMaterial</a> &amp;Mat, <a class="el" href="a04558.html#a11">uint32</a> *tri, <a class="el" href="a04558.html#a11">uint32</a> ntris)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa75">setAmbientColor</a> (<a class="el" href="a03337.html">CRGBA</a> color)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa76">setCapture</a> (bool b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa77">setColorMask</a> (bool bRed, bool bGreen, bool bBlue, bool bAlpha)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the color mask filter through where the operation done will pass. <a href="#NL3D_1_1CDriverGLa77"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa78">setDisplay</a> (void *wnd, const <a class="el" href="a03831.html">GfxMode</a> &amp;mode, bool show) throw (EBadDisplay)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa79">setFrustum</a> (float left, float right, float bottom, float top, float znear, float zfar, bool perspective=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa80">setLight</a> (<a class="el" href="a04558.html#a7">uint8</a> <a class="el" href="a04223.html#a653">num</a>, const <a class="el" href="a02743.html">CLight</a> &amp;light)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa81">setMode</a> (const <a class="el" href="a03831.html">GfxMode</a> &amp;mode)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa82">setMousePos</a> (float <a class="el" href="a04223.html#a572">x</a>, float <a class="el" href="a04223.html#a573">y</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">x and y must be between 0.0 and 1.0 <a href="#NL3D_1_1CDriverGLa82"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa83">setPerPixelLightingLight</a> (<a class="el" href="a03337.html">CRGBA</a> diffuse, <a class="el" href="a03337.html">CRGBA</a> specular, float shininess)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa84">setPolygonMode</a> (<a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a> mode)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa85">setSwapVBLInterval</a> (<a class="el" href="a04558.html#a15">uint</a> interval)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa86">setTextureEnvFunction</a> (<a class="el" href="a04558.html#a15">uint</a> stage, <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Setup texture env functions. Used by setupMaterial. <a href="#NL3D_1_1CDriverGLa86"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial</a> (<a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">For objects with caustics, setup the first texture (which actually is the one from the material). <a href="#NL3D_1_1CDriverGLa87"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa88">setupModelMatrix</a> (const <a class="el" href="a02851.html">CMatrix</a> &amp;mtx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa89">setupScissor</a> (const class <a class="el" href="a03353.html">CScissor</a> &amp;scissor)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a> (<a class="el" href="a03487.html">ITexture</a> &amp;tex)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa91">setupTextureEx</a> (<a class="el" href="a03487.html">ITexture</a> &amp;tex, bool bUpload, bool &amp;bAllUploaded, bool bMustRecreateSharedTexture=false)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa92">setupUserTextureMatrix</a> (<a class="el" href="a04558.html#a15">uint</a> numStages, <a class="el" href="a02839.html">CMaterial</a> &amp;mat)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup the texture matrix for a given number of stages (starting from 0) <a href="#NL3D_1_1CDriverGLa92"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa93">setupViewMatrix</a> (const <a class="el" href="a02851.html">CMatrix</a> &amp;mtx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa94">setupViewMatrixEx</a> (const <a class="el" href="a02851.html">CMatrix</a> &amp;mtx, const <a class="el" href="a03128.html">CVector</a> &amp;cameraPos)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa95">setupViewport</a> (const class <a class="el" href="a03704.html">CViewport</a> &amp;viewport)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa96">showCursor</a> (bool b)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">show cursor if b is true, or hide it if b is false <a href="#NL3D_1_1CDriverGLa96"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa97">slowUnlockVertexBufferHard</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa98">startProfileVBHardLock</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa99">startSpecularBatch</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa100">supportCloudRenderSinglePass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa101">supportPerPixelLighting</a> (bool specular) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa102">supportVertexBufferHard</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Swap the back and front buffers. <a href="#NL3D_1_1CDriverGLa103"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa104">swapTextureHandle</a> (<a class="el" href="a03487.html">ITexture</a> &amp;tex0, <a class="el" href="a03487.html">ITexture</a> &amp;tex1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a02434.html#NL3D_1_1IDriverw35">TMessageBoxId</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa105">systemMessageBox</a> (const char *message, const char *title, <a class="el" href="a02434.html#NL3D_1_1IDriverw36">TMessageBoxType</a> <a class="el" href="a04223.html#a581">type</a>=okType, <a class="el" href="a02434.html#NL3D_1_1IDriverw34">TMessageBoxIcon</a> icon=noIcon)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa106">uploadTexture</a> (<a class="el" href="a03487.html">ITexture</a> &amp;tex, <a class="el" href="a03319.html">NLMISC::CRect</a> &amp;rect, <a class="el" href="a04558.html#a7">uint8</a> nNumMipMap)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa107">uploadTextureCube</a> (<a class="el" href="a03487.html">ITexture</a> &amp;tex, <a class="el" href="a03319.html">NLMISC::CRect</a> &amp;rect, <a class="el" href="a04558.html#a7">uint8</a> nNumMipMap, <a class="el" href="a04558.html#a7">uint8</a> nNumFace)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLa108">~CDriverGL</a> ()</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Material multipass.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz80_0">beginMaterialMultiPass</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">init multipass for _CurrentMaterial. return number of pass required to render this material. <a href="#NL3D_1_1CDriverGLz80_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz80_1">endMaterialMultiPass</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end multipass for this material. <a href="#NL3D_1_1CDriverGLz80_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz80_2">setupMaterialPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">active the ith pass of this material. <a href="#NL3D_1_1CDriverGLz80_2"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Fog support.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz72_0">enableFog</a> (bool enable)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz72_1">fogEnabled</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03337.html">CRGBA</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz72_2">getFogColor</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz72_3">getFogEnd</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz72_4">getFogStart</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get. <a href="#NL3D_1_1CDriverGLz72_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz72_5">setupFog</a> (float start, float end, <a class="el" href="a03337.html">CRGBA</a> color)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup fog parameters. fog must enabled to see result. start and end are in [0,1] range. <a href="#NL3D_1_1CDriverGLz72_5"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Misc</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_0">enablePolygonSmoothing</a> (bool smooth)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_1">finish</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual <a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_2">getBlendConstantColor</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_3">isPolygonSmoothingEnabled</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see <a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_0">enablePolygonSmoothing()</a> <a href="#NL3D_1_1CDriverGLz78_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_4">setBlendConstantColor</a> (<a class="el" href="a03337.html">NLMISC::CRGBA</a> col)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_5">setMonitorColorProperties</a> (const <a class="el" href="a02935.html">CMonitorColorProperties</a> &amp;properties)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_6">supportBlendConstantColor</a> () const </td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">EMBM support</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz76_0">isEMBMSupportedAtStage</a> (<a class="el" href="a04558.html#a15">uint</a> stage) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz76_1">setEMBMMatrix</a> (const <a class="el" href="a04558.html#a15">uint</a> stage, const float mat[4])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz76_2">supportEMBM</a> () const </td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">texture addressing modes</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz74_0">isTextureAddrModeSupported</a> (<a class="el" href="a02839.html#NL3D_1_1CMaterialz360_0">CMaterial::TTexAddressingMode</a> mode) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test wether a texture addressing mode is supported <a href="#NL3D_1_1CDriverGLz74_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz74_1">isWaterShaderSupported</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test wether a texture addressing mode is supported <a href="#NL3D_1_1CDriverGLz74_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz74_2">setMatrix2DForTextureOffsetAddrMode</a> (const <a class="el" href="a04558.html#a15">uint</a> stage, const float mat[4])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz74_3">supportTextureShaders</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test wether the device supports some form of texture shader. (could be limited to DX6 EMBM for example) <a href="#NL3D_1_1CDriverGLz74_3"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivere0">getTextureShareName</a> (const <a class="el" href="a03487.html">ITexture</a> &amp;tex, std::string &amp;output)</td></tr>
+
+<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02209.html#NLGEORGES_1_1UTypeo0">crefs</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>CPtrInfo *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02209.html#NLGEORGES_1_1UTypeo1">pinfo</a></td></tr>
+
+<tr><td colspan=2><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivers0">InterfaceVersion</a> = 0x4e</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Version of the driver interface. To increment when the interface change. <a href="#NL3D_1_1IDrivers0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>CPtrInfo&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02209.html#NLGEORGES_1_1UTypes0">NullPtrInfo</a></td></tr>
+
+<tr><td colspan=2><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverb0">removeShaderPtr</a> (<a class="el" href="a05363.html#a287">ItShaderPtrList</a> shaderIt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverb1">removeTextureDrvInfoPtr</a> (<a class="el" href="a05363.html#a297">ItTexDrvInfoPtrMap</a> texDrvInfoIt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverb2">removeTextureDrvSharePtr</a> (<a class="el" href="a05363.html#a298">ItTexDrvSharePtrList</a> texDrvShareIt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverb3">removeVBDrvInfoPtr</a> (<a class="el" href="a05363.html#a343">ItVBDrvInfoPtrList</a> vbDrvInfoIt)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">remove ptr from the lists in the driver. <a href="#NL3D_1_1IDriverb3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverb4">removeVtxPrgDrvInfoPtr</a> (<a class="el" href="a05363.html#a345">ItVtxPrgDrvInfoPtrList</a> vtxPrgDrvInfoIt)</td></tr>
+
+<tr><td colspan=2><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverp0">_PolygonMode</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05363.html#a286">TShaderPtrList</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverp1">_Shaders</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>CSynchronized&lt; <a class="el" href="a03916.html">TTexDrvInfoPtrMap</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverp2">_SyncTexDrvInfos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05363.html#a296">TTexDrvSharePtrList</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverp3">_TexDrvShares</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05363.html#a342">TVBDrvInfoPtrList</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverp4">_VBDrvInfos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05363.html#a344">TVtxPrgDrvInfoPtrList</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a></td></tr>
+
+<tr><td colspan=2><br><h2>Private Types</h2></td></tr>
+<tr><td colspan=2><br><h2>Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd0">activateTexEnvColor</a> (<a class="el" href="a04558.html#a15">uint</a> stage, <a class="el" href="a03337.html">NLMISC::CRGBA</a> col)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a> (<a class="el" href="a04558.html#a15">uint</a> stage, const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;env)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a> (<a class="el" href="a04558.html#a15">uint</a> stage, const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;env)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a> (<a class="el" href="a04558.html#a15">uint</a> stage, <a class="el" href="a03487.html">ITexture</a> *tex)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd4">cleanLightSetup</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd5">clipRect</a> (<a class="el" href="a03319.html">NLMISC::CRect</a> &amp;rect)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd6">doRefreshRenderSetup</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd7">enableGlNormalize</a> (bool normalize)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Test/activate normalisation of normal. <a href="#NL3D_1_1CDriverGLd7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd8">enableNVTextureShader</a> (bool enabled)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">nv texture shaders. Should be used only if this caps is present! <a href="#NL3D_1_1CDriverGLd8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd9">forceActivateTexEnvColor</a> (<a class="el" href="a04558.html#a15">uint</a> stage, const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;env)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd10">forceActivateTexEnvColor</a> (<a class="el" href="a04558.html#a15">uint</a> stage, <a class="el" href="a03337.html">NLMISC::CRGBA</a> col)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd11">forceActivateTexEnvMode</a> (<a class="el" href="a04558.html#a15">uint</a> stage, const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;env)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLint&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd12">getGlTextureFormat</a> (<a class="el" href="a03487.html">ITexture</a> &amp;tex, bool &amp;compressed)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd13">initEMBM</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Same as <a class="el" href="a02433.html#NL3D_1_1CDriverGLa41">getNbTextureStages()</a>, but faster because inline, and not virtual!! <a href="#NL3D_1_1CDriverGLd14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd16">refreshProjMatrixFromGL</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd18">retrieveATIDriverVersion</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd19">setupGlArrays</a> (<a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;vb)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup GL arrays, with a vb info. <a href="#NL3D_1_1CDriverGLd19"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd20">setupGlArraysForEXTVertexShader</a> (<a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;vb)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd21">setupGlArraysForNVVertexProgram</a> (<a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;vb)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd22">setupGlArraysStd</a> (<a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;vb)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tools fct used by setupGLArrays. <a href="#NL3D_1_1CDriverGLd22"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd23">setupUVPtr</a> (<a class="el" href="a04558.html#a15">uint</a> stage, <a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;VB, <a class="el" href="a04558.html#a15">uint</a> uvId)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup a texture stage with an UV from VB. <a href="#NL3D_1_1CDriverGLd23"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd24">setupVertexBuffer</a> (<a class="el" href="a03692.html">CVertexBuffer</a> &amp;VB)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd25">toggleGlArraysForEXTVertexShader</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd26">toggleGlArraysForNVVertexProgram</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLd27">verifyNVTextureShaderConfig</a> ()</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Vertex program implementation</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz106_0">activeEXTVertexShader</a> (<a class="el" href="a03702.html">CVertexProgram</a> *<a class="el" href="a04223.html#a568">program</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz106_1">activeNVVertexProgram</a> (<a class="el" href="a03702.html">CVertexProgram</a> *<a class="el" href="a04223.html#a568">program</a>)</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Vertex program interface</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_0">activeVertexProgram</a> (<a class="el" href="a03702.html">CVertexProgram</a> *<a class="el" href="a04223.html#a568">program</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_1">enableVertexProgramDoubleSidedColor</a> (bool doubleSided)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_2">isVertexProgramEmulated</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_3">isVertexProgramSupported</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_4">setConstant</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a566">index</a>, <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a653">num</a>, const double *<a class="el" href="a04223.html#a652">src</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup several 4 double csts taken from the given tab <a href="#NL3D_1_1CDriverGLz104_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_5">setConstant</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a566">index</a>, <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a653">num</a>, const float *<a class="el" href="a04223.html#a652">src</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup several 4 float csts taken from the given tab <a href="#NL3D_1_1CDriverGLz104_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_6">setConstant</a> (<a class="el" href="a04558.html#a15">uint</a> indexStart, const <a class="el" href="a03664.html">NLMISC::CVectorD</a> &amp;<a class="el" href="a04223.html#a658">value</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_7">setConstant</a> (<a class="el" href="a04558.html#a15">uint</a> indexStart, const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;<a class="el" href="a04223.html#a658">value</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_8">setConstant</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a566">index</a>, double, double, double, double)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_9">setConstant</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a566">index</a>, float, float, float, float)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_10">setConstantMatrix</a> (<a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a04223.html#a566">index</a>, <a class="el" href="a02434.html#NL3D_1_1IDriverz147_0">IDriver::TMatrix</a> <a class="el" href="a04223.html#a578">matrix</a>, <a class="el" href="a02434.html#NL3D_1_1IDriverz147_1">IDriver::TTransform</a> <a class="el" href="a04223.html#a579">transform</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_11">supportVertexProgramDoubleSidedColor</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if the driver support double sided colors vertex programs. <a href="#NL3D_1_1CDriverGLz104_11"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Cloud Shader</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz98_0">beginCloudMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz98_1">endCloudMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz98_2">setupCloudPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Material multipass.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">init multipass for _CurrentMaterial. return number of pass required to render this material. <a href="#NL3D_1_1CDriverGLz87_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end multipass for this material. <a href="#NL3D_1_1CDriverGLz87_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">active the ith pass of this material. <a href="#NL3D_1_1CDriverGLz87_2"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Water</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz93_0">beginWaterMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz93_1">endWaterMultiPass</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz93_2">setupWaterPass</a> (<a class="el" href="a04558.html#a15">uint</a> pass)</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="a02839.html#NL3D_1_1CMaterialw65">CMaterial::TShader</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz107_0">getSupportedShader</a> (<a class="el" href="a02839.html#NL3D_1_1CMaterialw65">CMaterial::TShader</a> shader)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test wether the given shader is supported, and gives back a supported shader <a href="#NL3D_1_1CDriverGLz107_0"></a><br><br></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="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr0">_ATIDriverVersion</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr2">_CurrentBlendConstantColor</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>GLfloat&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a> [4]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr4">_CurrentGlNormalize</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03704.html">CViewport</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr5">_CurrViewport</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr7">_FogEnabled</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr8">_FogEnd</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr9">_FogStart</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr10">_ForceDXTCCompression</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr11">_ForceNormalize</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Divisor for textureResize (power). <a href="#NL3D_1_1CDriverGLr12"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02851.html">NLMISC::CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr14">_GLProjMat</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr15">_Initialized</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; <a class="el" href="a03702.html">CVertexProgram</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr17">_LastSetuppedVP</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03699.html">CVertexBufferInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr18">_LastVB</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LastVB for UV setup. <a href="#NL3D_1_1CDriverGLr18"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a> [MaxLight]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr20">_LightEnable</a> [MaxLight]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr21">_LightMode</a> [MaxLight]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02851.html">CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr27">_OODeltaZ</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr28">_PolygonSmooth</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr29">_ProjMatDirty</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03128.html">CVector</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02851.html">CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02851.html">NLMISC::CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr33">_UserTexMat</a> [<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02851.html">CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr35">_UserViewMtx</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02851.html">CMatrix</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03128.html">CVector</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr38">_WorldLightDirection</a> [MaxLight]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03128.html">CVector</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLr39">_WorldLightPos</a> [MaxLight]</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Driver Caps.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02587.html">CGlExtensions</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a></td></tr>
+
+<tr><td colspan=2><br><h2>Static Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLv0">GLMatrix</a> [IDriver::NumMatrix]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLv1">GLTransform</a> [IDriver::NumTransform]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLv2">GLType</a> [CVertexBuffer::NumType]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLv3">GLVertexAttribIndex</a> [CVertexBuffer::NumValue]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLv4">NumCoordinatesType</a> [CVertexBuffer::NumType]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLv5">ReleaseVersion</a> = 0xa</td></tr>
+
+<tr><td colspan=2><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>struct&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02209.html#NLGEORGES_1_1UTypen0">CPtrInfo</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivern1">CTextureDrvShare</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivern2">IShader</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivern3">ITextureDrvInfos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivern4">IVBDrvInfos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02434.html#NL3D_1_1IDrivern5">IVertexProgramDrvInfos</a></td></tr>
+
+</table>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_0" doxytag="NL3D::CDriverGL::TSPTextureCube" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> typedef <a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt;<a class="el" href="a03492.html">CTextureCube</a>&gt; <a class="el" href="a03408.html">NL3D::CDriverGL::TSPTextureCube</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00812">812</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_1" doxytag="NL3D::CDriverGL::TTexCubeVect" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> typedef std::vector&lt;<a class="el" href="a03408.html">TSPTextureCube</a>&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_1">NL3D::CDriverGL::TTexCubeVect</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00813">813</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="NL3D_1_1CDriverGLw0" doxytag="NL3D::CDriverGL::@10" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> anonymous enum
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23" doxytag="MaxLight" ></a>MaxLight</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00202">202</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+<div class="fragment"><pre>00202 { <a class="code" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>=8 };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_0" doxytag="NL3D::CDriverGL::CTexEnvSpecial" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz85_0">NL3D::CDriverGL::CTexEnvSpecial</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2" doxytag="TexEnvSpecialDisabled" ></a>TexEnvSpecialDisabled</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy3" doxytag="TexEnvSpecialLightMap" ></a>TexEnvSpecialLightMap</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy6" doxytag="TexEnvSpecialSpecularStage1" ></a>TexEnvSpecialSpecularStage1</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy7" doxytag="TexEnvSpecialSpecularStage1NoText" ></a>TexEnvSpecialSpecularStage1NoText</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4" doxytag="TexEnvSpecialPPLStage0" ></a>TexEnvSpecialPPLStage0</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy5" doxytag="TexEnvSpecialPPLStage2" ></a>TexEnvSpecialPPLStage2</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy0" doxytag="TexEnvSpecialCloudStage0" ></a>TexEnvSpecialCloudStage0</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy1" doxytag="TexEnvSpecialCloudStage1" ></a>TexEnvSpecialCloudStage1</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00641">641</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>.
+<p>
+<div class="fragment"><pre>00641 {
+00642 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a>= 0,
+00643 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy3">TexEnvSpecialLightMap</a>,
+00644 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy6">TexEnvSpecialSpecularStage1</a>,
+00645 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy7">TexEnvSpecialSpecularStage1NoText</a>,
+00646 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>,
+00647 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy5">TexEnvSpecialPPLStage2</a>,
+00648 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy0">TexEnvSpecialCloudStage0</a>,
+00649 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy1">TexEnvSpecialCloudStage1</a>,
+00650 };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_0" doxytag="NL3D::CDriverGL::EEVSVariants" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz111_0">NL3D::CDriverGL::EEVSVariants</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10" doxytag="EVSSecondaryColorVariant" ></a>EVSSecondaryColorVariant</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7" doxytag="EVSFogCoordsVariant" ></a>EVSFogCoordsVariant</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11" doxytag="EVSSkinWeightVariant" ></a>EVSSkinWeightVariant</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9" doxytag="EVSPaletteSkinVariant" ></a>EVSPaletteSkinVariant</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw8" doxytag="EVSNumVariants" ></a>EVSNumVariants</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01031">1031</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+<div class="fragment"><pre>01031 { <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a> = 0, <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a> = 1, <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a> = 2, <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a> = 3, <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw8">EVSNumVariants</a> };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverz147_0" doxytag="NL3D::CDriverGL::TMatrix" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverz147_0">NL3D::IDriver::TMatrix</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_0NL3D_1_1IDriverw18" doxytag="ModelView" ></a>ModelView</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_0NL3D_1_1IDriverw28" doxytag="Projection" ></a>Projection</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_0NL3D_1_1IDriverw19" doxytag="ModelViewProjection" ></a>ModelViewProjection</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_0NL3D_1_1IDriverw22" doxytag="NumMatrix" ></a>NumMatrix</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00825">825</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00826 {
+00827 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw18">ModelView</a>= 0,
+00828 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw28">Projection</a>,
+00829 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw19">ModelViewProjection</a>,
+00830 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_0NL3D_1_1IDriverw22">NumMatrix</a>
+00831 };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverw33" doxytag="NL3D::CDriverGL::TMatrixCount" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw33">NL3D::IDriver::TMatrixCount</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Driver Max matrix count. Kept for backward compatibility. Suppose any Hardware VertexProgram can handle only 16 matrix<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_1IDriverw33NL3D_1_1IDriverw17" doxytag="MaxModelMatrix" ></a>MaxModelMatrix</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00148">148</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00148 { <a class="code" href="a02434.html#NL3D_1_1IDriverw33NL3D_1_1IDriverw17">MaxModelMatrix</a>= 16 };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverw34" doxytag="NL3D::CDriverGL::TMessageBoxIcon" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw34">NL3D::IDriver::TMessageBoxIcon</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw20" doxytag="noIcon" ></a>noIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw8" doxytag="handIcon" ></a>handIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw29" doxytag="questionIcon" ></a>questionIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw6" doxytag="exclamationIcon" ></a>exclamationIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw2" doxytag="asteriskIcon" ></a>asteriskIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw43" doxytag="warningIcon" ></a>warningIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw5" doxytag="errorIcon" ></a>errorIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw13" doxytag="informationIcon" ></a>informationIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw32" doxytag="stopIcon" ></a>stopIcon</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw34NL3D_1_1IDriverw9" doxytag="iconCount" ></a>iconCount</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00133">133</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00133 { <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw20">noIcon</a>=0, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw8">handIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw29">questionIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw6">exclamationIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw2">asteriskIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw43">warningIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw5">errorIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw13">informationIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw32">stopIcon</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw34NL3D_1_1IDriverw9">iconCount</a> };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverw35" doxytag="NL3D::CDriverGL::TMessageBoxId" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw35">NL3D::IDriver::TMessageBoxId</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw25" doxytag="okId" ></a>okId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw44" doxytag="yesId" ></a>yesId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw21" doxytag="noId" ></a>noId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw0" doxytag="abortId" ></a>abortId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw31" doxytag="retryId" ></a>retryId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw3" doxytag="cancelId" ></a>cancelId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw12" doxytag="ignoreId" ></a>ignoreId</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw35NL3D_1_1IDriverw10" doxytag="idCount" ></a>idCount</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00131">131</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00131 { <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw25">okId</a>=0, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw44">yesId</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw21">noId</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw0">abortId</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw31">retryId</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw3">cancelId</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw12">ignoreId</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw35NL3D_1_1IDriverw10">idCount</a> };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverw36" doxytag="NL3D::CDriverGL::TMessageBoxType" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw36">NL3D::IDriver::TMessageBoxType</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw26" doxytag="okType" ></a>okType</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw24" doxytag="okCancelType" ></a>okCancelType</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw46" doxytag="yesNoType" ></a>yesNoType</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw1" doxytag="abortRetryIgnoreType" ></a>abortRetryIgnoreType</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw45" doxytag="yesNoCancelType" ></a>yesNoCancelType</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw30" doxytag="retryCancelType" ></a>retryCancelType</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw36NL3D_1_1IDriverw40" doxytag="typeCount" ></a>typeCount</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00132">132</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00132 { <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw26">okType</a>=0, <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw24">okCancelType</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw46">yesNoType</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw1">abortRetryIgnoreType</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw45">yesNoCancelType</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw30">retryCancelType</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw36NL3D_1_1IDriverw40">typeCount</a> };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverw37" doxytag="NL3D::CDriverGL::TPolygonMode" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw37">NL3D::IDriver::TPolygonMode</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Driver's polygon modes.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02434.html#NL3D_1_1IDrivera65">setPolygonMode</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera29">getPolygonMode</a></dd></dl>
+<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_1IDriverw37NL3D_1_1IDriverw7" doxytag="Filled" ></a>Filled</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw37NL3D_1_1IDriverw16" doxytag="Line" ></a>Line</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw37NL3D_1_1IDriverw27" doxytag="Point" ></a>Point</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00140">140</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05640.html#l00817">NL3D::IDriver::getPolygonMode()</a>.
+<p>
+<div class="fragment"><pre>00140 { <a class="code" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw7">Filled</a>=0, <a class="code" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw16">Line</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw27">Point</a> };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverz147_1" doxytag="NL3D::CDriverGL::TTransform" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverz147_1">NL3D::IDriver::TTransform</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_1NL3D_1_1IDriverw11" doxytag="Identity" ></a>Identity</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_1NL3D_1_1IDriverw14" doxytag="Inverse" ></a>Inverse</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_1NL3D_1_1IDriverw38" doxytag="Transpose" ></a>Transpose</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_1NL3D_1_1IDriverw15" doxytag="InverseTranspose" ></a>InverseTranspose</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverz147_1NL3D_1_1IDriverw23" doxytag="NumTransform" ></a>NumTransform</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00833">833</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00834 {
+00835 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw11">Identity</a>=0,
+00836 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw14">Inverse</a>,
+00837 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw38">Transpose</a>,
+00838 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw15">InverseTranspose</a>,
+00839 <a class="code" href="a02434.html#NL3D_1_1IDriverz147_1NL3D_1_1IDriverw23">NumTransform</a>
+00840 };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverw39" doxytag="NL3D::CDriverGL::TVBHardType" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw39">NL3D::IDriver::TVBHardType</a><code> [inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Driver VertexBufferHard type. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02434.html#NL3D_1_1IDrivera7">createVertexBufferHard()</a></dd></dl>
+<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_1IDriverw39NL3D_1_1IDriverw41" doxytag="VBHardAGP" ></a>VBHardAGP</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw39NL3D_1_1IDriverw42" doxytag="VBHardVRAM" ></a>VBHardVRAM</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NL3D_1_1IDriverw39NL3D_1_1IDriverw4" doxytag="CountVBHard" ></a>CountVBHard</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00155">155</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+<div class="fragment"><pre>00155 { <a class="code" href="a02434.html#NL3D_1_1IDriverw39NL3D_1_1IDriverw41">VBHardAGP</a>=0, <a class="code" href="a02434.html#NL3D_1_1IDriverw39NL3D_1_1IDriverw42">VBHardVRAM</a>, <a class="code" href="a02434.html#NL3D_1_1IDriverw39NL3D_1_1IDriverw4">CountVBHard</a> };
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NL3D_1_1CDriverGLa4" doxytag="NL3D::CDriverGL::CDriverGL" ></a><p>
+<table class="mdTable" 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::CDriverGL::CDriverGL </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+buildCausticCubeMapTex();
+<p>
+Definition at line <a class="el" href="a05642.html#l00190">190</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00900">_AGPVertexArrayRange</a>, <a class="el" href="a05643.html#l00917">_AllocatedTextureMemory</a>, <a class="el" href="a05643.html#l01079">_ATIDriverVersion</a>, <a class="el" href="a05643.html#l01080">_ATIFogRangeFixed</a>, <a class="el" href="a05643.html#l00611">_CurrentFogColor</a>, <a class="el" href="a05643.html#l00684">_CurrentGlNormalize</a>, <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00665">_CurrentTexAddrMode</a>, <a class="el" href="a05643.html#l00887">_CurrentVertexArrayRange</a>, <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00940">_CurVBHardLockCount</a>, <a class="el" href="a05643.html#l00609">_FogEnabled</a>, <a class="el" href="a05643.html#l00610">_FogEnd</a>, <a class="el" href="a05643.html#l00610">_FogStart</a>, <a class="el" href="a05643.html#l00993">_ForceDXTCCompression</a>, <a class="el" href="a05643.html#l00572">_ForceNormalize</a>, <a class="el" href="a05643.html#l00995">_ForceTextureResizePower</a>, <a class="el" href="a05643.html#l00523">_FullScreen</a>, <a class="el" href="a05643.html#l00559">_Initialized</a>, <a class="el" href="a05643.html#l00774">_LastVertexSetupIsLightMap</a>, <a class="el" href="a05643.html#l00623">_LightDirty</a>, <a class="el" href="a05643.html#l00771">_LightMapLastStageEnv</a>, <a class="el" href="a05643.html#l00768">_LightMapLUT</a>, <a class="el" href="a05643.html#l00775">_LightMapUVMap</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00680">_MaterialAllTextureTouchedFlag</a>, <a class="el" href="a05643.html#l00897">_MaxVerticesByVBHard</a>, <a class="el" href="a05643.html#l00578">_ModelViewMatrixDirty</a>, <a class="el" href="a05643.html#l00941">_NumVBHardProfileFrame</a>, <a class="el" href="a05643.html#l00891">_NVCurrentVARPtr</a>, <a class="el" href="a05643.html#l00892">_NVCurrentVARSize</a>, <a class="el" href="a05643.html#l00673">_NVTextureShaderEnabled</a>, <a class="el" href="a05643.html#l00524">_OffScreen</a>, <a class="el" href="a05643.html#l01076">_PolygonSmooth</a>, <a class="el" href="a05643.html#l00581">_ProjMatDirty</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05643.html#l00896">_SlowUnlockVBHard</a>, <a class="el" href="a05643.html#l00789">_SpecularBatchOn</a>, <a class="el" href="a05643.html#l00675">_StageSupportEMBM</a>, <a class="el" href="a05643.html#l00920">_SumTextureMemoryUsed</a>, <a class="el" href="a05643.html#l00895">_SupportVBHard</a>, <a class="el" href="a05643.html#l01000">_UserTexMatEnabled</a>, <a class="el" href="a05643.html#l00938">_VBHardProfiling</a>, <a class="el" href="a05643.html#l00902">_VRAMVertexArrayRange</a>, <a class="el" href="a05643.html#l01063">ARBWaterShader</a>, <a class="el" href="a05643.html#l01061">ATIWaterShaderHandle</a>, <a class="el" href="a05643.html#l01060">ATIWaterShaderHandleNoDiffuseMap</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a05969.html#l00047">NL3D::IDRV_MAT_MAXTEXTURES</a>, <a class="el" href="a05969.html#l00065">NL3D::IDRV_TOUCHED_TEX</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>, <a class="el" href="a05643.html#l00085">NL3D_DRV_MAX_LIGHTMAP</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00191 {
+00192 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a> = <span class="keyword">false</span>;
+00193
+00194 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00195 <span class="preprocessor"></span> _PBuffer = NULL;
+00196 _hWnd = NULL;
+00197 _hRC = NULL;
+00198 _hDC = NULL;
+00199 _NeedToRestaureGammaRamp = <span class="keyword">false</span>;
+00200 <span class="preprocessor">#elif defined (NL_OS_UNIX) // NL_OS_WINDOWS</span>
+00201 <span class="preprocessor"></span>
+00202 cursor = None;
+00203
+00204 <span class="preprocessor">#ifdef XF86VIDMODE</span>
+00205 <span class="preprocessor"></span> <span class="comment">// zero the old screen mode</span>
+00206 memset(&amp;_OldScreenMode, 0, <span class="keyword">sizeof</span>(_OldScreenMode));
+00207 <span class="preprocessor">#endif //XF86VIDMODE</span>
+00208 <span class="preprocessor"></span>
+00209 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+00210 <span class="preprocessor"></span>
+00211 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>= <span class="keyword">false</span>;
+00212
+00213 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>=NULL;
+00214 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr15">_Initialized</a> = <span class="keyword">false</span>;
+00215
+00216 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr7">_FogEnabled</a>= <span class="keyword">false</span>;
+00217 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr8">_FogEnd</a> = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr9">_FogStart</a> = 0.f;
+00218 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[0]= 0;
+00219 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[1]= 0;
+00220 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[2]= 0;
+00221 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[3]= 0;
+00222
+00223
+00224 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>= <span class="keyword">false</span>;
+00225 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a>= <span class="keyword">false</span>;
+00226 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">false</span>;
+00227 <span class="comment">// All lights default pos.</span>
+00228 <a class="code" href="a04558.html#a15">uint</a> i;
+00229 <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>;i++)
+00230 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a>[i]= <span class="keyword">false</span>;
+00231
+00232
+00233
+00234 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr4">_CurrentGlNormalize</a>= <span class="keyword">false</span>;
+00235 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr11">_ForceNormalize</a>= <span class="keyword">false</span>;
+00236
+00237 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>= NULL;
+00238 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>= NULL;
+00239 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_3">_CurrentVertexArrayRange</a>= NULL;
+00240 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>= NULL;
+00241 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_6">_NVCurrentVARPtr</a>= NULL;
+00242 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_7">_NVCurrentVARSize</a>= 0;
+00243 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>= <span class="keyword">false</span>;
+00244 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_8">_SlowUnlockVBHard</a>= <span class="keyword">false</span>;
+00245 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>= 0;
+00246
+00247 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_2">_AllocatedTextureMemory</a>= 0;
+00248
+00249 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr10">_ForceDXTCCompression</a>= <span class="keyword">false</span>;
+00250 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>= 0;
+00251
+00252 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_9">_SumTextureMemoryUsed</a> = <span class="keyword">false</span>;
+00253
+00254 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a> = <span class="keyword">false</span>;
+00255
+00256
+00257 <span class="comment">// Compute the Flag which say if one texture has been changed in CMaterial.</span>
+00258 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_11">_MaterialAllTextureTouchedFlag</a>= 0;
+00259 <span class="keywordflow">for</span>(i=0; i &lt; <a class="code" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>; i++)
+00260 {
+00261 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_11">_MaterialAllTextureTouchedFlag</a>|= <a class="code" href="a05363.html#a97">IDRV_TOUCHED_TEX</a>[i];
+00262 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_5">_CurrentTexAddrMode</a>[i] = GL_NONE;
+00263 }
+00264
+00265
+00266 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> = 0;
+00267
+00268 <span class="comment">// Ligtmap preca.</span>
+00269 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a>= <span class="keyword">false</span>;
+00270 <span class="keywordflow">for</span>(i=0; i &lt; <a class="code" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>; i++)
+00271 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a>[i]= -1;
+00272 <span class="comment">// reserve enough space to never reallocate, nor test for reallocation.</span>
+00273 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_7">_LightMapLUT</a>.resize(NL3D_DRV_MAX_LIGHTMAP);
+00274 <span class="comment">// must set replace for alpha part.</span>
+00275 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_6">_LightMapLastStageEnv</a>.Env.OpAlpha= CMaterial::Replace;
+00276 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_6">_LightMapLastStageEnv</a>.Env.SrcArg0Alpha= CMaterial::Texture;
+00277 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_6">_LightMapLastStageEnv</a>.Env.OpArg0Alpha= CMaterial::SrcAlpha;
+00278
+00279 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr29">_ProjMatDirty</a> = <span class="keyword">true</span>;
+00280
+00281 std::fill(_StageSupportEMBM, _StageSupportEMBM + IDRV_MAT_MAXTEXTURES, <span class="keyword">false</span>);
+00282
+00283 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a> = 0;
+00284 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a> = 0;
+00285
+00286 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr0">_ATIDriverVersion</a> = 0;
+00287 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a> = <span class="keyword">true</span>;
+00288
+00289 std::fill(ARBWaterShader, ARBWaterShader + 4, 0);
+00290
+00292
+00293 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_5">_SpecularBatchOn</a>= <span class="keyword">false</span>;
+00294
+00295 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr28">_PolygonSmooth</a>= <span class="keyword">false</span>;
+00296
+00297 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a>= <span class="keyword">false</span>;
+00298 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>= 0;
+00299 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_6">_NumVBHardProfileFrame</a>= 0;
+00300 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa108" doxytag="NL3D::CDriverGL::~CDriverGL" ></a><p>
+<table class="mdTable" 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::CDriverGL::~<a class="el" href="a02433.html">CDriverGL</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l00304">304</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05642.html#l01667">release()</a>.
+<p>
+<div class="fragment"><pre>00305 {
+00306 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa68">release</a>();
+00307 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NL3D_1_1CDriverGLa0" doxytag="NL3D::CDriverGL::activate" ></a><p>
+<table class="mdTable" 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::CDriverGL::activate </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Before rendering via a driver in a thread, must <a class="el" href="a02433.html#NL3D_1_1CDriverGLa0">activate()</a> (per thread).
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01473">1473</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>01474 {
+01475 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01476 <span class="preprocessor"></span> HGLRC hglrc=wglGetCurrentContext();
+01477 <span class="keywordflow">if</span> (hglrc!=_hRC)
+01478 {
+01479 wglMakeCurrent(_hDC,_hRC);
+01480 }
+01481 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+01482 <span class="preprocessor"></span> GLXContext nctx=glXGetCurrentContext();
+01483 <span class="keywordflow">if</span> (nctx != NULL &amp;&amp; nctx!=ctx)
+01484 {
+01485 glXMakeCurrent(dpy, win,ctx);
+01486 }
+01487 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+01488 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01489 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd0" doxytag="NL3D::CDriverGL::activateTexEnvColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::activateTexEnvColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>col</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05652.html#l01137">1137</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00661">_CurrentTexEnv</a>, <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a05643.html#l00699">forceActivateTexEnvColor()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01138 {
+01139 <span class="keywordflow">if</span> (col != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_6">_CurrentTexEnv</a>[stage].ConstantColor)
+01140 {
+01141 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd10">forceActivateTexEnvColor</a>(stage, col);
+01142 }
+01143 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd1" doxytag="NL3D::CDriverGL::activateTexEnvColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::activateTexEnvColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>env</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05652.html#l01159">1159</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00661">_CurrentTexEnv</a>, <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a05643.html#l00699">forceActivateTexEnvColor()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00117">setTextureEnvFunction()</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, and <a class="el" href="a05648.html#l01376">setupPPLPass()</a>.
+<p>
+<div class="fragment"><pre>01160 {
+01161 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_6">_CurrentTexEnv</a>[stage].ConstantColor!= env.ConstantColor)
+01162 {
+01163 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd10">forceActivateTexEnvColor</a>(stage, env);
+01164 }
+01165 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd2" doxytag="NL3D::CDriverGL::activateTexEnvMode" ></a><p>
+<table class="mdTable" 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::CDriverGL::activateTexEnvMode </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>env</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05652.html#l01147">1147</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00661">_CurrentTexEnv</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05969.html#l00504">NL3D::CMaterial::CTexEnv::EnvPacked</a>, <a class="el" href="a05652.html#l01054">forceActivateTexEnvMode()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00117">setTextureEnvFunction()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l00985">setupSpecularBegin()</a>, <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>, and <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>.
+<p>
+<div class="fragment"><pre>01148 {
+01149 <span class="comment">// If a special Texture environnement is setuped, or if not the same normal texture environnement,</span>
+01150 <span class="comment">// must setup a new normal Texture environnement.</span>
+01151 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[stage] != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a> || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_6">_CurrentTexEnv</a>[stage].EnvPacked!= env.EnvPacked)
+01152 {
+01153 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd11">forceActivateTexEnvMode</a>(stage, env);
+01154 }
+01155 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd3" doxytag="NL3D::CDriverGL::activateTexture" ></a><p>
+<table class="mdTable" 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::CDriverGL::activateTexture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03487.html">ITexture</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05652.html#l00941">941</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00658">_CurrentTexture</a>, <a class="el" href="a05643.html#l00660">_CurrentTextureInfoGL</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00920">_SumTextureMemoryUsed</a>, <a class="el" href="a05643.html#l00921">_TextureUsed</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05645.html#l00081">NL3D::CGlExtensions::ARBTextureCubeMap</a>, <a class="el" href="a06506.html#l00214">NL3D::ITexture::getMagFilter()</a>, <a class="el" href="a06506.html#l00215">NL3D::ITexture::getMinFilter()</a>, <a class="el" href="a05652.html#l00089">NL3D::getTextureGl()</a>, <a class="el" href="a06506.html#l00204">NL3D::ITexture::getWrapS()</a>, <a class="el" href="a06506.html#l00205">NL3D::ITexture::getWrapT()</a>, <a class="el" href="a06506.html#l00376">NL3D::ITexture::isTextureCube()</a>, <a class="el" href="a05650.html#l00473">NL3D::CDriverGLStates::setTextureMode()</a>, <a class="el" href="a05652.html#l00261">NL3D::translateMagFilterToGl()</a>, <a class="el" href="a05652.html#l00280">NL3D::translateMinFilterToGl()</a>, <a class="el" href="a05652.html#l00246">NL3D::translateWrapToGl()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l00985">setupSpecularBegin()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>, <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>, <a class="el" href="a05648.html#l01876">setupWaterPassR200()</a>, and <a class="el" href="a05652.html#l01185">swapTextureHandle()</a>.
+<p>
+<div class="fragment"><pre>00942 {
+00943 <span class="keywordflow">if</span> (this-&gt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[stage]!=tex)
+00944 {
+00945 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00946 <span class="keywordflow">if</span>(tex)
+00947 {
+00948 <span class="comment">// get the drv info. should be not NULL.</span>
+00949 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>* gltext;
+00950 gltext= <a class="code" href="a05363.html#a407">getTextureGl</a>(*tex);
+00951
+00952 <span class="comment">// Profile, log the use of this texture</span>
+00953 <span class="comment">//=========================================</span>
+00954 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_9">_SumTextureMemoryUsed</a>)
+00955 {
+00956 <span class="comment">// Insert the pointer of this texture</span>
+00957 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_10">_TextureUsed</a>.insert (gltext);
+00958 }
+00959
+00960
+00961 <span class="keywordflow">if</span>(tex-&gt;isTextureCube())
+00962 {
+00963 <span class="comment">// setup texture mode, after activeTextureARB()</span>
+00964 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::TextureCubeMap);
+00965
+00966 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBTextureCubeMap)
+00967 {
+00968 <span class="comment">// Activate texturing...</span>
+00969 <span class="comment">//======================</span>
+00970
+00971 <span class="comment">// If the shared texture is the same than before, no op.</span>
+00972 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage] != gltext)
+00973 {
+00974 <span class="comment">// Cache setup.</span>
+00975 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage]= gltext;
+00976
+00977 <span class="comment">// setup this texture</span>
+00978 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, gltext-&gt;ID);
+00979
+00980
+00981 <span class="comment">// Change parameters of texture, if necessary.</span>
+00982 <span class="comment">//============================================</span>
+00983 <span class="keywordflow">if</span>(gltext-&gt;MagFilter!= tex-&gt;getMagFilter())
+00984 {
+00985 gltext-&gt;MagFilter= tex-&gt;getMagFilter();
+00986 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MAG_FILTER, <a class="code" href="a05363.html#a411">translateMagFilterToGl</a>(gltext));
+00987 }
+00988 <span class="keywordflow">if</span>(gltext-&gt;MinFilter!= tex-&gt;getMinFilter())
+00989 {
+00990 gltext-&gt;MinFilter= tex-&gt;getMinFilter();
+00991 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MIN_FILTER, <a class="code" href="a05363.html#a412">translateMinFilterToGl</a>(gltext));
+00992 }
+00993 }
+00994 }
+00995 }
+00996 <span class="keywordflow">else</span>
+00997 {
+00998 <span class="comment">// setup texture mode, after activeTextureARB()</span>
+00999 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::Texture2D);
+01000
+01001 <span class="comment">// Activate texture...</span>
+01002 <span class="comment">//======================</span>
+01003
+01004 <span class="comment">// If the shared texture is the same than before, no op.</span>
+01005 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage] != gltext)
+01006 {
+01007 <span class="comment">// Cache setup.</span>
+01008 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage]= gltext;
+01009
+01010 <span class="comment">// setup this texture</span>
+01011 glBindTexture(GL_TEXTURE_2D, gltext-&gt;ID);
+01012
+01013
+01014 <span class="comment">// Change parameters of texture, if necessary.</span>
+01015 <span class="comment">//============================================</span>
+01016 <span class="keywordflow">if</span>(gltext-&gt;WrapS!= tex-&gt;getWrapS())
+01017 {
+01018 gltext-&gt;WrapS= tex-&gt;getWrapS();
+01019 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(gltext-&gt;WrapS, _Extensions));
+01020 }
+01021 <span class="keywordflow">if</span>(gltext-&gt;WrapT!= tex-&gt;getWrapT())
+01022 {
+01023 gltext-&gt;WrapT= tex-&gt;getWrapT();
+01024 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(gltext-&gt;WrapT, _Extensions));
+01025 }
+01026 <span class="keywordflow">if</span>(gltext-&gt;MagFilter!= tex-&gt;getMagFilter())
+01027 {
+01028 gltext-&gt;MagFilter= tex-&gt;getMagFilter();
+01029 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, <a class="code" href="a05363.html#a411">translateMagFilterToGl</a>(gltext));
+01030 }
+01031 <span class="keywordflow">if</span>(gltext-&gt;MinFilter!= tex-&gt;getMinFilter())
+01032 {
+01033 gltext-&gt;MinFilter= tex-&gt;getMinFilter();
+01034 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, <a class="code" href="a05363.html#a412">translateMinFilterToGl</a>(gltext));
+01035 }
+01036 }
+01037 }
+01038 }
+01039 <span class="keywordflow">else</span>
+01040 {
+01041 <span class="comment">// Force no texturing for this stage.</span>
+01042 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage]= NULL;
+01043 <span class="comment">// setup texture mode, after activeTextureARB()</span>
+01044 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::TextureDisabled);
+01045 }
+01046
+01047 this-&gt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[stage]= tex;
+01048 }
+01049
+01050 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01051 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz106_0" doxytag="NL3D::CDriverGL::activeEXTVertexShader" ></a><p>
+<table class="mdTable" 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::CDriverGL::activeEXTVertexShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03702.html">CVertexProgram</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>program</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05656.html#l01148">1148</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00991">_LastSetuppedVP</a>, <a class="el" href="a05643.html#l00986">_VertexProgramEnabled</a>, <a class="el" href="a05643.html#l00516">CVertexProgamDrvInfosGL</a>, <a class="el" href="a05646.html#l00492">GL_VERTEX_SHADER_EXT</a>, <a class="el" href="a05643.html#l01091">NL3D::CVertexProgamDrvInfosGL::ID</a>, <a class="el" href="a06717.html#l00041">NL3D::ItVtxPrgDrvInfoPtrList</a>, <a class="el" href="a05645.html#l00336">nglBindVertexShaderEXT</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a06718.html#l00921">CVPParser::parse()</a>, <a class="el" href="a05646.html#l00228">program</a>, <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>, and <a class="el" href="a06719.html#l00194">CVPParser::TProgram</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01220">activeVertexProgram()</a>.
+<p>
+<div class="fragment"><pre>01149 {
+01150 <span class="comment">// Setup or unsetup ?</span>
+01151 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a568">program</a>)
+01152 {
+01153 <span class="comment">// Driver info</span>
+01154 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a> *drvInfo;
+01155
+01156 <span class="comment">// Program setuped ?</span>
+01157 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo==NULL)
+01158 {
+01159 <span class="comment">// try to parse the program</span>
+01160 <a class="code" href="a03717.html">CVPParser</a> parser;
+01161 <a class="code" href="a03717.html#CVPParserw0">CVPParser::TProgram</a> parsedProgram;
+01162 std::string errorOutput;
+01163 <span class="keywordtype">bool</span> result = parser.<a class="code" href="a03717.html#CVPParsera0">parse</a>(<a class="code" href="a04223.html#a568">program</a>-&gt;getProgram().c_str(), parsedProgram, errorOutput);
+01164 <span class="keywordflow">if</span> (!result)
+01165 {
+01166 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to parse a vertex program."</span>);
+01167 <span class="preprocessor"> #ifdef NL_DEBUG</span>
+01168 <span class="preprocessor"></span> <a class="code" href="a04199.html#a3">nlerror</a>(errorOutput.c_str());
+01169 <span class="preprocessor"> #endif</span>
+01170 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01171 }
+01172
+01173 <span class="comment">/* </span>
+01174 <span class="comment"> FILE *f = fopen("c:\\test.txt", "wb");</span>
+01175 <span class="comment"> if (f)</span>
+01176 <span class="comment"> {</span>
+01177 <span class="comment"> std::string vpText;</span>
+01178 <span class="comment"> CVPParser::dump(parsedProgram, vpText);</span>
+01179 <span class="comment"> fwrite(vpText.c_str(), vpText.size(), 1, f);</span>
+01180 <span class="comment"> fclose(f);</span>
+01181 <span class="comment"> }</span>
+01182 <span class="comment"> */</span>
+01183
+01184 <span class="comment">// Insert into driver list. (so it is deleted when driver is deleted).</span>
+01185 <a class="code" href="a05363.html#a345">ItVtxPrgDrvInfoPtrList</a> it= <a class="code" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a>.insert(<a class="code" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a>.end());
+01186
+01187 <span class="comment">// Create a driver info</span>
+01188 *it = drvInfo = <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a> (<span class="keyword">this</span>, it);
+01189 <span class="comment">// Set the pointer</span>
+01190 <a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo=drvInfo;
+01191
+01192 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_1">setupEXTVertexShader</a>(parsedProgram, drvInfo-&gt;ID, drvInfo-&gt;Variants, drvInfo-&gt;UsedVertexComponents))
+01193 {
+01194 <span class="keyword">delete</span> drvInfo;
+01195 <a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo = NULL;
+01196 <a class="code" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a>.erase(it);
+01197 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01198 }
+01199 }
+01200 <span class="keywordflow">else</span>
+01201 {
+01202 <span class="comment">// Cast the driver info pointer</span>
+01203 drvInfo=safe_cast&lt;CVertexProgamDrvInfosGL*&gt;((<a class="code" href="a02434.html#NL3D_1_1IDrivern5">IVertexProgramDrvInfos</a>*)<a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo);
+01204 }
+01205
+01206 glEnable( GL_VERTEX_SHADER_EXT);
+01207 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a> = <span class="keyword">true</span>;
+01208 <a class="code" href="a04222.html#a118">nglBindVertexShaderEXT</a>( drvInfo-&gt;ID );
+01209 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr17">_LastSetuppedVP</a> = <a class="code" href="a04223.html#a568">program</a>;
+01210 }
+01211 <span class="keywordflow">else</span>
+01212 {
+01213 glDisable( GL_VERTEX_SHADER_EXT );
+01214 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a> = <span class="keyword">false</span>;
+01215 }
+01216 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01217 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz106_1" doxytag="NL3D::CDriverGL::activeNVVertexProgram" ></a><p>
+<table class="mdTable" 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::CDriverGL::activeNVVertexProgram </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03702.html">CVertexProgram</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>program</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05656.html#l00079">79</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00991">_LastSetuppedVP</a>, <a class="el" href="a05643.html#l00986">_VertexProgramEnabled</a>, <a class="el" href="a05643.html#l00516">CVertexProgamDrvInfosGL</a>, <a class="el" href="a05646.html#l00104">GL_PROGRAM_ERROR_POSITION_NV</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05643.html#l01091">NL3D::CVertexProgamDrvInfosGL::ID</a>, <a class="el" href="a06717.html#l00041">NL3D::ItVtxPrgDrvInfoPtrList</a>, <a class="el" href="a05645.html#l00269">nglBindProgramNV</a>, <a class="el" href="a05645.html#l00283">nglLoadProgramNV</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05646.html#l00645">offset</a>, <a class="el" href="a06718.html#l00921">CVPParser::parse()</a>, <a class="el" href="a05646.html#l00228">program</a>, <a class="el" href="a06719.html#l00194">CVPParser::TProgram</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01220">activeVertexProgram()</a>.
+<p>
+<div class="fragment"><pre>00080 {
+00081 <span class="comment">// Setup or unsetup ?</span>
+00082 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a568">program</a>)
+00083 {
+00084 <span class="comment">// Enable vertex program</span>
+00085 glEnable (GL_VERTEX_PROGRAM_NV);
+00086 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a>= <span class="keyword">true</span>;
+00087
+00088
+00089 <span class="comment">// Driver info</span>
+00090 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a> *drvInfo;
+00091
+00092 <span class="comment">// Program setuped ?</span>
+00093 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo==NULL)
+00094 {
+00098 <a class="code" href="a03717.html">CVPParser</a> parser;
+00099 <a class="code" href="a03717.html#CVPParserw0">CVPParser::TProgram</a> parsedProgram;
+00100 std::string errorOutput;
+00101 <span class="keywordtype">bool</span> result = parser.<a class="code" href="a03717.html#CVPParsera0">parse</a>(<a class="code" href="a04223.html#a568">program</a>-&gt;getProgram().c_str(), parsedProgram, errorOutput);
+00102 <span class="keywordflow">if</span> (!result)
+00103 {
+00104 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to parse a vertex program :"</span>);
+00105 <a class="code" href="a04199.html#a2">nlwarning</a>(errorOutput.c_str());
+00106 <span class="preprocessor"> #ifdef NL_DEBUG</span>
+00107 <span class="preprocessor"></span> <a class="code" href="a04199.html#a6">nlassert</a>(0);
+00108 <span class="preprocessor"> #endif</span>
+00109 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00110 }
+00111
+00112 <span class="comment">// Insert into driver list. (so it is deleted when driver is deleted).</span>
+00113 <a class="code" href="a05363.html#a345">ItVtxPrgDrvInfoPtrList</a> it= <a class="code" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a>.insert(<a class="code" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a>.end());
+00114
+00115 <span class="comment">// Create a driver info</span>
+00116 *it = drvInfo = <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a> (<span class="keyword">this</span>, it);
+00117
+00118 <span class="comment">// Set the pointer</span>
+00119 <a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo=drvInfo;
+00120
+00121 <span class="comment">// Compile the program</span>
+00122 <a class="code" href="a04222.html#a68">nglLoadProgramNV</a> (GL_VERTEX_PROGRAM_NV, drvInfo-&gt;ID, <a class="code" href="a04223.html#a568">program</a>-&gt;getProgram().length(), (<span class="keyword">const</span> GLubyte*)<a class="code" href="a04223.html#a568">program</a>-&gt;getProgram().c_str());
+00123
+00124 <span class="comment">// Get loading error code</span>
+00125 GLint errorOff;
+00126 glGetIntegerv (GL_PROGRAM_ERROR_POSITION_NV, &amp;errorOff);
+00127
+00128 <span class="comment">// Compilation error ?</span>
+00129 <span class="keywordflow">if</span> (errorOff&gt;=0)
+00130 {
+00131 <span class="comment">// String length</span>
+00132 <a class="code" href="a04558.html#a15">uint</a> length = <a class="code" href="a04223.html#a568">program</a>-&gt;getProgram ().length();
+00133 <span class="keyword">const</span> <span class="keywordtype">char</span>* sString= <a class="code" href="a04223.html#a568">program</a>-&gt;getProgram ().c_str();
+00134
+00135 <span class="comment">// Line count and char count</span>
+00136 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05377.html#a3">line</a>=1;
+00137 <a class="code" href="a04558.html#a15">uint</a> charC=1;
+00138
+00139 <span class="comment">// Find the line</span>
+00140 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a586">offset</a>=0;
+00141 <span class="keywordflow">while</span> ((<a class="code" href="a04223.html#a586">offset</a>&lt;length)&amp;&amp;(<a class="code" href="a04223.html#a586">offset</a>&lt;(<a class="code" href="a04558.html#a15">uint</a>)errorOff))
+00142 {
+00143 <span class="keywordflow">if</span> (sString[<a class="code" href="a04223.html#a586">offset</a>]==<span class="charliteral">'\n'</span>)
+00144 {
+00145 <a class="code" href="a05377.html#a3">line</a>++;
+00146 charC=1;
+00147 }
+00148 <span class="keywordflow">else</span>
+00149 charC++;
+00150
+00151 <span class="comment">// Next character</span>
+00152 <a class="code" href="a04223.html#a586">offset</a>++;
+00153 }
+00154
+00155 <span class="comment">// Show the error</span>
+00156 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"Vertex program syntax error line %d character %d\n"</span>, line, charC);
+00157
+00158 <span class="comment">// Disable vertex program</span>
+00159 glDisable (GL_VERTEX_PROGRAM_NV);
+00160 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a>= <span class="keyword">false</span>;
+00161
+00162 <span class="comment">// Setup not ok</span>
+00163 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00164 }
+00165
+00166 <span class="comment">// Setup ok</span>
+00167 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00168 }
+00169 <span class="keywordflow">else</span>
+00170 {
+00171 <span class="comment">// Cast the driver info pointer</span>
+00172 drvInfo=safe_cast&lt;CVertexProgamDrvInfosGL*&gt;((<a class="code" href="a02434.html#NL3D_1_1IDrivern5">IVertexProgramDrvInfos</a>*)<a class="code" href="a04223.html#a568">program</a>-&gt;_DrvInfo);
+00173 }
+00174
+00175 <span class="comment">// Setup this program</span>
+00176 <a class="code" href="a04222.html#a54">nglBindProgramNV</a> (GL_VERTEX_PROGRAM_NV, drvInfo-&gt;ID);
+00177 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr17">_LastSetuppedVP</a> = <a class="code" href="a04223.html#a568">program</a>;
+00178
+00179 <span class="comment">// Ok</span>
+00180 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00181 }
+00182 <span class="keywordflow">else</span> <span class="comment">// Unsetup</span>
+00183 {
+00184 <span class="comment">// Disable vertex program</span>
+00185 glDisable (GL_VERTEX_PROGRAM_NV);
+00186 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a>= <span class="keyword">false</span>;
+00187 <span class="comment">// Ok</span>
+00188 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00189 }
+00190 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa1" doxytag="NL3D::CDriverGL::activeVertexBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::activeVertexBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03692.html">CVertexBuffer</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>VB</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>first</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>end</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+active a current VB, for future <a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render()</a>. This method suppose that only vertices in given range will be used in future <a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render()</a>. This could be usefull for DX or OpenGL driver. Undefined results if primitives in <a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render()</a> use vertices not in this range.<p>
+NB: please make sure you have setuped / unsetuped the current vertex program BEFORE activate the vertex buffer.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>VB</em>&nbsp;</td><td>the vertexBuffer to activate. </td></tr>
+ <tr><td valign=top><em>first</em>&nbsp;</td><td>the first vertex important for render (begin to 0). nlassert(first&lt;=end); </td></tr>
+ <tr><td valign=top><em>end</em>&nbsp;</td><td>the last vertex important for render, +1. count==end-first. nlassert(end&lt;=VB.getNumVertices);</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_0">activeVertexProgram</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00087">87</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00748">_LastVB</a>, <a class="el" href="a03695.html#NL3D_1_1IVertexBufferHardGLa0">NL3D::IVertexBufferHardGL::disable()</a>, <a class="el" href="a05653.html#l01319">fenceOnCurVBHardIfNeeded()</a>, <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>, <a class="el" href="a06711.html#l00319">NL3D::CVertexBuffer::getVertexFormat()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05653.html#l01033">setupGlArrays()</a>, <a class="el" href="a05653.html#l01075">NL3D::CVertexBufferInfo::setupVertexBuffer()</a>, <a class="el" href="a05653.html#l00060">setupVertexBuffer()</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>00088 {
+00089 <span class="comment">// NB: must duplicate changes in activeVertexBufferHard()</span>
+00090
+00091 <a class="code" href="a04558.html#a11">uint32</a> flags;
+00092
+00093 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLd24">setupVertexBuffer</a>(VB))
+00094 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00095
+00096 <span class="keywordflow">if</span> (VB.getNumVertices()==0)
+00097 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00098
+00099 <a class="code" href="a04199.html#a6">nlassert</a>(end&lt;=VB.getNumVertices());
+00100 <a class="code" href="a04199.html#a6">nlassert</a>(first&lt;=end);
+00101
+00102 <span class="comment">// Get VB flags, to setup matrixes and arrays.</span>
+00103 flags=VB.getVertexFormat();
+00104
+00105
+00106 <span class="comment">// 2. Setup Arrays.</span>
+00107 <span class="comment">//===================</span>
+00108
+00109 <span class="comment">// Fence mgt.</span>
+00110 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_0">fenceOnCurVBHardIfNeeded</a>(NULL);
+00111
+00112 <span class="comment">// For MultiPass Material.</span>
+00113 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr18">_LastVB</a>.setupVertexBuffer(VB);
+00114
+00115 <span class="comment">// Disable the current vertexBufferHard if setuped.</span>
+00116 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00117 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;disable();
+00118
+00119 <span class="comment">// Setup the OpenGL arrays.</span>
+00120 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd19">setupGlArrays</a>(_LastVB);
+00121
+00122
+00123 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00124 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa2" doxytag="NL3D::CDriverGL::activeVertexBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::activeVertexBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03692.html">CVertexBuffer</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>VB</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+active a current VB, for future <a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render()</a>. This method suppose that all vertices in the VB will be used.<p>
+NB: please make sure you have setuped / unsetuped the current vertex program BEFORE activate the vertex buffer.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_0">activeVertexProgram</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00128">128</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a06711.html#l00453">NL3D::CVertexBuffer::getNumVertices()</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l01536">swapBuffers()</a>.
+<p>
+<div class="fragment"><pre>00129 {
+00130 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLa2">activeVertexBuffer</a>(VB, 0, VB.getNumVertices());
+00131 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa3" doxytag="NL3D::CDriverGL::activeVertexBufferHard" ></a><p>
+<table class="mdTable" 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::CDriverGL::activeVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>VB</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+active a current VB Hard, for future <a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render()</a>.<p>
+NB: please make sure you have setuped / unsetuped the current vertex program BEFORE activate the vertex buffer.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLz104_0">activeVertexProgram</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00580">580</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00748">_LastVB</a>, <a class="el" href="a03695.html#NL3D_1_1IVertexBufferHardGLa1">NL3D::IVertexBufferHardGL::enable()</a>, <a class="el" href="a05653.html#l01319">fenceOnCurVBHardIfNeeded()</a>, <a class="el" href="a06713.html#l00054">NL3D::IVertexBufferHard::getNumVertices()</a>, <a class="el" href="a06713.html#l00052">NL3D::IVertexBufferHard::getVertexFormat()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05653.html#l01033">setupGlArrays()</a>, <a class="el" href="a05653.html#l01111">NL3D::CVertexBufferInfo::setupVertexBufferHard()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00581 {
+00582 <span class="comment">// NB: must duplicate changes in activeVertexBuffer()</span>
+00583
+00584 <a class="code" href="a04199.html#a6">nlassert</a>(iVB);
+00585 IVertexBufferHardGL *VB= safe_cast&lt;IVertexBufferHardGL*&gt;(iVB);
+00586
+00587 <a class="code" href="a04558.html#a11">uint32</a> flags;
+00588
+00589 <span class="keywordflow">if</span> (VB-&gt;getNumVertices()==0)
+00590 <span class="keywordflow">return</span>;
+00591
+00592 <span class="comment">// Get VB flags, to setup matrixes and arrays.</span>
+00593 flags=VB-&gt;getVertexFormat();
+00594
+00595
+00596 <span class="comment">// 2. Setup Arrays.</span>
+00597 <span class="comment">//===================</span>
+00598
+00599 <span class="comment">// Fence mgt.</span>
+00600 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_0">fenceOnCurVBHardIfNeeded</a>(VB);
+00601
+00602 <span class="comment">// For MultiPass Material.</span>
+00603 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr18">_LastVB</a>.setupVertexBufferHard(*VB);
+00604
+00605 <span class="comment">// Enable the vertexArrayRange of this array.</span>
+00606 VB-&gt;enable();
+00607
+00608 <span class="comment">// Setup the OpenGL arrays.</span>
+00609 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd19">setupGlArrays</a>(_LastVB);
+00610
+00611 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_0" doxytag="NL3D::CDriverGL::activeVertexProgram" ></a><p>
+<table class="mdTable" 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::CDriverGL::activeVertexProgram </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03702.html">CVertexProgram</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>program</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Activate / disactivate a vertex program<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>program</em>&nbsp;</td><td>is a pointer on a vertex program. Can be NULL to disable the current vertex program.</td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if setup/unsetup successed, false else.</dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01220">1220</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05656.html#l01148">activeEXTVertexShader()</a>, <a class="el" href="a05656.html#l00079">activeNVVertexProgram()</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, and <a class="el" href="a05646.html#l00228">program</a>.
+<p>
+<div class="fragment"><pre>01221 {
+01222 <span class="comment">// Extension here ?</span>
+01223 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01224 {
+01225 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz106_1">activeNVVertexProgram</a>(program);
+01226 }
+01227 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01228 {
+01229 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz106_0">activeEXTVertexShader</a>(program);
+01230 }
+01231
+01232 <span class="comment">// Can't do anything</span>
+01233 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01234 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_0" doxytag="NL3D::CDriverGL::appendVBHardLockProfile" ></a><p>
+<table class="mdTable" 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::CDriverGL::appendVBHardLockProfile </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05378.html#a243">NLMISC::TTicks</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>time</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>vb</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l03131">3131</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00940">_CurVBHardLockCount</a>, <a class="el" href="a05643.html#l00939">_VBHardProfiles</a>, and <a class="el" href="a06553.html#l00048">NLMISC::TTicks</a>.
+<p>
+Referenced by <a class="el" href="a05654.html#l00304">NL3D::CVertexBufferHardGLNVidia::lock()</a>.
+<p>
+<div class="fragment"><pre>03132 {
+03133 <span class="comment">// must allocate a new place?</span>
+03134 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>&gt;=<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.size())
+03135 {
+03136 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.resize(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.size()+1);
+03137 <span class="comment">// set the original VBHard</span>
+03138 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>].VBHard= vb;
+03139 }
+03140
+03141 <span class="comment">// Accumulate.</span>
+03142 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>].AccumTime+= time;
+03143 <span class="comment">// if change of VBHard for this chrono place</span>
+03144 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>].VBHard != vb)
+03145 {
+03146 <span class="comment">// flag, and set new</span>
+03147 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>].VBHard= vb;
+03148 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>].Change= <span class="keyword">true</span>;
+03149 }
+03150
+03151 <span class="comment">// next!</span>
+03152 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>++;
+03153 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz98_0" doxytag="NL3D::CDriverGL::beginCloudMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginCloudMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000015">Todo:</a></b></dt><dd>Optimize the cloud multipass with register combiner</dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01726">1726</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00529">beginMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01727 {
+01728 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>-&gt;getShader() == CMaterial::Cloud);
+01729 <span class="keywordflow">return</span> 1;
+01730 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_0" doxytag="NL3D::CDriverGL::beginLightMapMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginLightMapMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00653">653</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00748">_LastVB</a>, <a class="el" href="a05643.html#l00766">_NLightMapPass</a>, <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, <a class="el" href="a05650.html#l00561">NL3D::CDriverGLStates::enableColorArray()</a>, <a class="el" href="a05650.html#l00212">NL3D::CDriverGLStates::enableLighting()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00529">beginMultiPass()</a>.
+<p>
+<div class="fragment"><pre>00654 {
+00655 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+00656
+00657 <span class="comment">// compute how many lightmap and pass we must process.</span>
+00658 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_1">computeLightMapInfos</a> (mat);
+00659
+00660 <span class="comment">// Too be sure, disable vertex coloring / lightmap.</span>
+00661 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableLighting(<span class="keyword">false</span>);
+00662 <span class="comment">// reset VertexColor array if necessary.</span>
+00663 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr18">_LastVB</a>.VertexFormat &amp; CVertexBuffer::PrimaryColorFlag)
+00664 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00665
+00666 <span class="comment">// Manage too if no lightmaps.</span>
+00667 <span class="keywordflow">return</span> std::max (_NLightMapPass, (<a class="code" href="a04558.html#a15">uint</a>)1);
+00668 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz80_0" doxytag="NL3D::CDriverGL::beginMaterialMultiPass" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a04558.html#a14">sint</a> NL3D::CDriverGL::beginMaterialMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+init multipass for _CurrentMaterial. return number of pass required to render this material.
+<p>
+NB: <a class="el" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial()</a> must be called before thoses methods. NB: This is intended to be use with the rendering of simple primitives. NB: Other render calls performs the needed setup automatically
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz139_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00506">506</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+<div class="fragment"><pre>00506 { <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a>(); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz87_0" doxytag="NL3D::CDriverGL::beginMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+init multipass for _CurrentMaterial. return number of pass required to render this material.
+<p>
+NB: <a class="el" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial()</a> must be called before thoses methods.
+<p>
+Definition at line <a class="el" href="a05648.html#l00529">529</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00654">_CurrentMaterialSupportedShader</a>, <a class="el" href="a05648.html#l01726">beginCloudMultiPass()</a>, <a class="el" href="a05648.html#l00653">beginLightMapMultiPass()</a>, <a class="el" href="a05648.html#l01367">beginPPLMultiPass()</a>, <a class="el" href="a05648.html#l01552">beginPPLNoSpecMultiPass()</a>, <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, <a class="el" href="a05648.html#l01866">beginWaterMultiPass()</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a05643.html#l00506">beginMaterialMultiPass()</a>, <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, and <a class="el" href="a05653.html#l00187">renderTriangles()</a>.
+<p>
+<div class="fragment"><pre>00530 {
+00531 <span class="comment">// Depending on material type and hardware, return number of pass required to draw this material.</span>
+00532 <span class="keywordflow">switch</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_4">_CurrentMaterialSupportedShader</a>)
+00533 {
+00534 <span class="keywordflow">case</span> CMaterial::LightMap:
+00535 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_0">beginLightMapMultiPass</a>();
+00536 <span class="keywordflow">case</span> CMaterial::Specular:
+00537 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_0">beginSpecularMultiPass</a>();
+00538 <span class="keywordflow">case</span> CMaterial::Water:
+00539 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz93_0">beginWaterMultiPass</a>();
+00540 <span class="keywordflow">case</span> CMaterial::PerPixelLighting:
+00541 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_2">beginPPLMultiPass</a>();
+00542 <span class="keywordflow">case</span> CMaterial::PerPixelLightingNoSpec:
+00543 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_3">beginPPLNoSpecMultiPass</a>();
+00544 <span class="comment">/* case CMaterial::Caustics:</span>
+00545 <span class="comment"> return beginCausticsMultiPass(); */</span>
+00546 <span class="keywordflow">case</span> CMaterial::Cloud:
+00547 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz98_0">beginCloudMultiPass</a>();
+00548
+00549 <span class="comment">// All others materials require just 1 pass.</span>
+00550 <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 1;
+00551 }
+00552 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_2" doxytag="NL3D::CDriverGL::beginPPLMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginPPLMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01367">1367</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05642.html#l02445">supportPerPixelLighting()</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00529">beginMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01368 {
+01369 <span class="preprocessor"> #ifdef NL_DEBUG</span>
+01370 <span class="preprocessor"></span> <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLa101">supportPerPixelLighting</a>(<span class="keyword">true</span>)); <span class="comment">// make sure the hardware can do that</span>
+01371 <span class="preprocessor"> #endif</span>
+01372 <span class="preprocessor"></span> <span class="keywordflow">return</span> 1;
+01373 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_3" doxytag="NL3D::CDriverGL::beginPPLNoSpecMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginPPLNoSpecMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01552">1552</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05642.html#l02445">supportPerPixelLighting()</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00529">beginMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01553 {
+01554 <span class="preprocessor"> #ifdef NL_DEBUG</span>
+01555 <span class="preprocessor"></span> <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLa101">supportPerPixelLighting</a>(<span class="keyword">false</span>)); <span class="comment">// make sure the hardware can do that</span>
+01556 <span class="preprocessor"> #endif</span>
+01557 <span class="preprocessor"></span> <span class="keywordflow">return</span> 1;
+01558 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz91_0" doxytag="NL3D::CDriverGL::beginSpecularMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginSpecularMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01035">1035</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00789">_SpecularBatchOn</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05645.html#l00081">NL3D::CGlExtensions::ARBTextureCubeMap</a>, <a class="el" href="a05645.html#l00102">NL3D::CGlExtensions::ATIXTextureEnvCombine3</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, <a class="el" href="a05648.html#l00985">setupSpecularBegin()</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="a05648.html#l00529">beginMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01036 {
+01037 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+01038
+01039 <span class="comment">// activate the 2 textures here</span>
+01040 <a class="code" href="a04558.html#a15">uint</a> stage;
+01041 <a class="code" href="a04558.html#a15">uint</a> numStages= <a class="code" href="a04061.html#a0">std::min</a>(2, <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>());
+01042 <span class="keywordflow">for</span>(stage=0 ; stage&lt;numStages; stage++)
+01043 {
+01044 ITexture *text= mat.getTexture(stage);
+01045
+01046 <span class="comment">// activate the texture, or disable texturing if NULL.</span>
+01047 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage,text);
+01048 }
+01049
+01050 <span class="comment">// End specular , only if not Batching mode.</span>
+01051 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_5">_SpecularBatchOn</a>)
+01052 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_2">setupSpecularBegin</a>();
+01053
+01054 <span class="comment">// Manage the rare case when the SpecularMap is not provided (fault of graphist).</span>
+01055 <span class="keywordflow">if</span>(mat.getTexture(1)==NULL)
+01056 <span class="keywordflow">return</span> 1;
+01057
+01058 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBTextureCubeMap)
+01059 <span class="keywordflow">return</span> 1;
+01060
+01061 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvCombine3) <span class="comment">// NVidia or ATI optimization</span>
+01062 <span class="keywordflow">return</span> 1;
+01063 <span class="keywordflow">else</span>
+01064 <span class="keywordflow">return</span> 2;
+01065 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz93_0" doxytag="NL3D::CDriverGL::beginWaterMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::beginWaterMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01866">1866</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00529">beginMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01867 {
+01868 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>-&gt;getShader() == CMaterial::Water);
+01869 <span class="keywordflow">return</span> 1;
+01870 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz83_0" doxytag="NL3D::CDriverGL::checkForPerPixelLightingSupport" ></a><p>
+<table class="mdTable" 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::CDriverGL::checkForPerPixelLightingSupport </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02427">2427</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00628">_SupportPerPixelShader</a>, <a class="el" href="a05643.html#l00629">_SupportPerPixelShaderNoSpec</a>, <a class="el" href="a05645.html#l00081">NL3D::CGlExtensions::ARBTextureCubeMap</a>, <a class="el" href="a05645.html#l00102">NL3D::CGlExtensions::ATIXTextureEnvCombine3</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05645.html#l00070">NL3D::CGlExtensions::NbTextureStages</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, and <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>.
+<p>
+<div class="fragment"><pre>02428 {
+02429 <span class="comment">// we need at least 3 texture stages and cube map support + EnvCombine4 or 3 support </span>
+02430 <span class="comment">// TODO : support for EnvCombine3</span>
+02431 <span class="comment">// TODO : support for less than 3 stages</span>
+02432
+02433 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_5">_SupportPerPixelShaderNoSpec</a> = (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvCombine3)
+02434 &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBTextureCubeMap
+02435 &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NbTextureStages &gt;= 3
+02436 &amp;&amp; (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader);
+02437
+02438 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_4">_SupportPerPixelShader</a> = (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvCombine3)
+02439 &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBTextureCubeMap
+02440 &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NbTextureStages &gt;= 2
+02441 &amp;&amp; (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader);
+02442 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd4" doxytag="NL3D::CDriverGL::cleanLightSetup" ></a><p>
+<table class="mdTable" 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::CDriverGL::cleanLightSetup </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05647.html#l00179">179</a> of file <a class="el" href="a05647.html">driver_opengl_light.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00623">_LightDirty</a>, <a class="el" href="a05643.html#l00619">_LightEnable</a>, <a class="el" href="a05643.html#l00620">_LightMode</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00618">_MaxDriverLight</a>, <a class="el" href="a05643.html#l00600">_PZBCameraPos</a>, <a class="el" href="a05643.html#l00596">_ViewMtx</a>, <a class="el" href="a05643.html#l00622">_WorldLightDirection</a>, <a class="el" href="a05643.html#l00621">_WorldLightPos</a>, <a class="el" href="a05972.html#l00443">NLMISC::CMatrix::get()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</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>
+Referenced by <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>.
+<p>
+<div class="fragment"><pre>00180 {
+00181 <span class="comment">// Should be dirty</span>
+00182 <a class="code" href="a04199.html#a6">nlassert</a> (_LightSetupDirty);
+00183
+00184 <span class="comment">// First light</span>
+00185 <span class="keywordtype">bool</span> first=<span class="keyword">true</span>;
+00186
+00187 <span class="comment">// For each lights</span>
+00188 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>; i++)
+00189 {
+00190 <span class="comment">// Is this light enabled and dirty?</span>
+00191 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr20">_LightEnable</a>[i] &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a>[i])
+00192 {
+00193 <span class="comment">// If first light</span>
+00194 <span class="keywordflow">if</span> (first)
+00195 {
+00196 first=<span class="keyword">false</span>;
+00197
+00198 <span class="comment">// Push the matrix</span>
+00199 glPushMatrix ();
+00200
+00201 <span class="comment">// Load the view matrix</span>
+00202 glLoadMatrixf (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>.get());
+00203 }
+00204
+00205 <span class="comment">// Light is directionnal ?</span>
+00206 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr21">_LightMode</a>[i]==(<a class="code" href="a04558.html#a15">uint</a>)CLight::DirectionalLight)
+00207 {
+00208 <span class="comment">// GL vector</span>
+00209 GLfloat vectorGL[4];
+00210
+00211 <span class="comment">// Set the GL array</span>
+00212 vectorGL[0]=-<a class="code" href="a02433.html#NL3D_1_1CDriverGLr38">_WorldLightDirection</a>[i].x;
+00213 vectorGL[1]=-<a class="code" href="a02433.html#NL3D_1_1CDriverGLr38">_WorldLightDirection</a>[i].y;
+00214 vectorGL[2]=-<a class="code" href="a02433.html#NL3D_1_1CDriverGLr38">_WorldLightDirection</a>[i].z;
+00215 vectorGL[3]=0.f;
+00216
+00217 <span class="comment">// Set it</span>
+00218 glLightfv ((GLenum)(GL_LIGHT0+i), (GLenum)GL_POSITION, vectorGL);
+00219 }
+00220
+00221 <span class="comment">// Spotlight ?</span>
+00222 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr21">_LightMode</a>[i]==(<a class="code" href="a04558.html#a15">uint</a>)CLight::SpotLight)
+00223 {
+00224 <span class="comment">// GL vector</span>
+00225 GLfloat vectorGL[4];
+00226
+00227 <span class="comment">// Set the GL array</span>
+00228 vectorGL[0]=<a class="code" href="a02433.html#NL3D_1_1CDriverGLr38">_WorldLightDirection</a>[i].x;
+00229 vectorGL[1]=_WorldLightDirection[i].y;
+00230 vectorGL[2]=_WorldLightDirection[i].z;
+00231
+00232 <span class="comment">// Set it</span>
+00233 glLightfv ((GLenum)(GL_LIGHT0+i), (GLenum)GL_SPOT_DIRECTION, vectorGL);
+00234 }
+00235
+00236 <span class="comment">// Position </span>
+00237 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr21">_LightMode</a>[i]!=(<a class="code" href="a04558.html#a15">uint</a>)CLight::DirectionalLight)
+00238 {
+00239 <span class="comment">// GL vector</span>
+00240 GLfloat vectorGL[4];
+00241
+00242 <span class="comment">// Set the GL array</span>
+00243 <span class="comment">// Must Substract CameraPos, because ViewMtx may not be the exact view.</span>
+00244 vectorGL[0]=<a class="code" href="a02433.html#NL3D_1_1CDriverGLr39">_WorldLightPos</a>[i].x - <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>.x;
+00245 vectorGL[1]=_WorldLightPos[i].y - <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>.y;
+00246 vectorGL[2]=_WorldLightPos[i].z - <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>.z;
+00247 vectorGL[3]=1.f;
+00248
+00249 <span class="comment">// Set it</span>
+00250 glLightfv ((GLenum)(GL_LIGHT0+i), (GLenum)GL_POSITION, vectorGL);
+00251 }
+00252
+00253 <span class="comment">// Cleaned!</span>
+00254 _LightDirty[i]= <span class="keyword">false</span>;
+00255 }
+00256 }
+00257
+00258 <span class="comment">// Pop old matrix</span>
+00259 <span class="keywordflow">if</span> (!first)
+00260 glPopMatrix ();
+00261
+00262 <span class="comment">// Clean flag</span>
+00263 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>=<span class="keyword">false</span>;
+00264 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa5" doxytag="NL3D::CDriverGL::clear2D" ></a><p>
+<table class="mdTable" 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::CDriverGL::clear2D </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03337.html">CRGBA</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>rgba</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera4">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01511">1511</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, and <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>.
+<p>
+<div class="fragment"><pre>01512 {
+01513 glClearColor((<span class="keywordtype">float</span>)rgba.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>/255.0f,(<span class="keywordtype">float</span>)rgba.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>/255.0f,(<span class="keywordtype">float</span>)rgba.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>/255.0f,(<span class="keywordtype">float</span>)rgba.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>/255.0f);
+01514 glClear(GL_COLOR_BUFFER_BIT);
+01515 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01516 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa6" doxytag="NL3D::CDriverGL::clearZBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::clearZBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>zval</em> = 1 </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera5">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01520">1520</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, and <a class="el" href="a05650.html#l00231">NL3D::CDriverGLStates::enableZWrite()</a>.
+<p>
+<div class="fragment"><pre>01521 {
+01522 glClearDepth(zval);
+01523 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableZWrite(<span class="keyword">true</span>);
+01524 glClear(GL_DEPTH_BUFFER_BIT);
+01525 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01526 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd5" doxytag="NL3D::CDriverGL::clipRect" ></a><p>
+<table class="mdTable" 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::CDriverGL::clipRect </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03319.html">NLMISC::CRect</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>rect</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02111">2111</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a06320.html#l00089">NLMISC::CRect::bottom()</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a05642.html#l01989">getWindowSize()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a06320.html#l00077">NLMISC::CRect::right()</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>, <a class="el" href="a05646.html#l01013">width</a>, <a class="el" href="a06320.html#l00107">NLMISC::CRect::X</a>, and <a class="el" href="a06320.html#l00110">NLMISC::CRect::Y</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02131">getBufferPart()</a>, and <a class="el" href="a05642.html#l02143">getZBufferPart()</a>.
+<p>
+<div class="fragment"><pre>02112 {
+02113 <span class="comment">// Clip the wanted rectangle with window.</span>
+02114 <a class="code" href="a04558.html#a11">uint32</a> <a class="code" href="a04223.html#a632">width</a>, <a class="code" href="a04223.html#a633">height</a>;
+02115 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa52">getWindowSize</a>(width, height);
+02116
+02117 <a class="code" href="a04558.html#a10">sint32</a> xr=rect.<a class="code" href="a03319.html#NLMISC_1_1CRecta8">right</a>() ,yr=rect.<a class="code" href="a03319.html#NLMISC_1_1CRecta0">bottom</a>();
+02118
+02119 <a class="code" href="a05378.html#a374">clamp</a>((<a class="code" href="a04558.html#a10">sint32</a>&amp;)rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>, (<a class="code" href="a04558.html#a10">sint32</a>)0, (<a class="code" href="a04558.html#a10">sint32</a>)width);
+02120 <a class="code" href="a05378.html#a374">clamp</a>((<a class="code" href="a04558.html#a10">sint32</a>&amp;)rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>, (<a class="code" href="a04558.html#a10">sint32</a>)0, (<a class="code" href="a04558.html#a10">sint32</a>)height);
+02121 <a class="code" href="a05378.html#a374">clamp</a>((<a class="code" href="a04558.html#a10">sint32</a>&amp;)xr, (<a class="code" href="a04558.html#a10">sint32</a>)rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>, (<a class="code" href="a04558.html#a10">sint32</a>)width);
+02122 <a class="code" href="a05378.html#a374">clamp</a>((<a class="code" href="a04558.html#a10">sint32</a>&amp;)yr, (<a class="code" href="a04558.html#a10">sint32</a>)rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>, (<a class="code" href="a04558.html#a10">sint32</a>)height);
+02123 rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>= xr-rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>;
+02124 rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>= yr-rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>;
+02125
+02126 <span class="keywordflow">return</span> rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>&gt;0 &amp;&amp; rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>&gt;0;
+02127 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_1" doxytag="NL3D::CDriverGL::computeLightMapInfos" ></a><p>
+<table class="mdTable" 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::CDriverGL::computeLightMapInfos </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mat</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00619">619</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00768">_LightMapLUT</a>, <a class="el" href="a05969.html#l00610">NL3D::CMaterial::_LightMaps</a>, <a class="el" href="a05643.html#l00766">_NLightMapPass</a>, <a class="el" href="a05643.html#l00765">_NLightMapPerPass</a>, <a class="el" href="a05643.html#l00764">_NLightMaps</a>, <a class="el" href="a05645.html#l00102">NL3D::CGlExtensions::ATIXTextureEnvCombine3</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05643.html#l00085">NL3D_DRV_MAX_LIGHTMAP</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</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="a05648.html#l00653">beginLightMapMultiPass()</a>.
+<p>
+<div class="fragment"><pre>00620 {
+00621 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a04558.html#a11">uint32</a> RGBMaskPacked = <a class="code" href="a03337.html">CRGBA</a>(255,255,255,0).getPacked();
+00622
+00623 <span class="comment">// For optimisation consideration, suppose there is not too much lightmap.</span>
+00624 <a class="code" href="a04199.html#a6">nlassert</a>(mat._LightMaps.size()&lt;=<a class="code" href="a04220.html#a1">NL3D_DRV_MAX_LIGHTMAP</a>);
+00625
+00626 <span class="comment">// Compute number of lightmaps really used (ie factor not NULL), and build the LUT.</span>
+00627 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_11">_NLightMaps</a> = 0;
+00628 <span class="comment">// For all lightmaps of the material.</span>
+00629 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i = 0; i &lt; mat._LightMaps.size(); ++i)
+00630 {
+00631 <span class="comment">// If the lightmap's factor is not null.</span>
+00632 <span class="keywordflow">if</span> (mat._LightMaps[i].Factor.getPacked() &amp; RGBMaskPacked)
+00633 {
+00634 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_7">_LightMapLUT</a>[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_11">_NLightMaps</a>] = i;
+00635 ++<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_11">_NLightMaps</a>;
+00636 }
+00637 }
+00638
+00639 <span class="comment">// Compute how many pass, according to driver caps.</span>
+00640 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a> = <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>()-1;
+00641 <span class="comment">// Can do more than 2 texture stages only if NVTextureEnvCombine4 or ATIXTextureEnvCombine3</span>
+00642 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvCombine3)
+00643 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a> = 1;
+00644
+00645 <span class="comment">// Number of pass.</span>
+00646 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_9">_NLightMapPass</a> = (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_11">_NLightMaps</a> + <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a>-1)/(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a>);
+00647
+00648 <span class="comment">// NB: _NLightMaps==0 means there is no lightmaps at all.</span>
+00649 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_1" doxytag="NL3D::CDriverGL::computeMipMapMemoryUsage" ></a><p>
+<table class="mdTable" 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::CDriverGL::computeMipMapMemoryUsage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>GLint&nbsp;</td>
+ <td class="mdname" nowrap> <em>glfmt</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const<code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+???
+<p>
+Definition at line <a class="el" href="a05652.html#l00215">215</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05646.html#l00444">GL_DSDT_NV</a>, <a class="el" href="a05646.html#l00679">GL_DU8DV8_ATI</a>, <a class="el" href="a05622.html#l00416">nlstop</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05646.html#l00236">w</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00361">setupTextureEx()</a>.
+<p>
+<div class="fragment"><pre>00216 {
+00217 <span class="keywordflow">switch</span>(glfmt)
+00218 {
+00219 <span class="keywordflow">case</span> GL_RGBA8: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 4;
+00220 <span class="comment">// Well this is ugly, but simple :). GeForce 888 is stored as 32 bits.</span>
+00221 <span class="keywordflow">case</span> GL_RGB8: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 4;
+00222 <span class="keywordflow">case</span> GL_RGBA4: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 2;
+00223 <span class="keywordflow">case</span> GL_RGB5_A1: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 2;
+00224 <span class="keywordflow">case</span> GL_RGB5: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 2;
+00225 <span class="keywordflow">case</span> GL_LUMINANCE8: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 1;
+00226 <span class="keywordflow">case</span> GL_ALPHA8: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 1;
+00227 <span class="keywordflow">case</span> GL_LUMINANCE8_ALPHA8: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 2;
+00228 <span class="keywordflow">case</span> GL_COMPRESSED_RGB_S3TC_DXT1_EXT: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h /2;
+00229 <span class="keywordflow">case</span> GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h /2;
+00230 <span class="keywordflow">case</span> GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 1;
+00231 <span class="keywordflow">case</span> GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 1;
+00232 <span class="keywordflow">case</span> <a class="code" href="a04223.html#a374">GL_DU8DV8_ATI</a>:
+00233 <span class="keywordflow">case</span> <a class="code" href="a04223.html#a203">GL_DSDT_NV</a>: <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 2;
+00234 };
+00235
+00236 <span class="comment">// One format has not been coded.</span>
+00237 <a class="code" href="a04199.html#a12">nlstop</a>;
+00238
+00240 <span class="keywordflow">return</span> <a class="code" href="a04223.html#a575">w</a>*h* 4;
+00241 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa7" doxytag="NL3D::CDriverGL::copyFrameBufferToTexture" ></a><p>
+<table class="mdTable" 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::CDriverGL::copyFrameBufferToTexture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>level</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>offsetx</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>offsety</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>height</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Copy a portion of the FrameBuffer into a texture. The texture must have been right sized before the call. This mark the texture as valid, but doesn't copy data to system memory. This also mean that regenerating texture datas will erase what has been copied before in the device memory. This doesn't work with compressed textures. Ideally, the FrameBuffer should have the same format than the texture. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>tex</em>&nbsp;</td><td>the texture to copy to. </td></tr>
+ <tr><td valign=top><em>level</em>&nbsp;</td><td>the mipmap to copy texture to. </td></tr>
+ <tr><td valign=top><em>xoffset</em>&nbsp;</td><td>x position within the destination texture </td></tr>
+ <tr><td valign=top><em>yoffset</em>&nbsp;</td><td>y position within the destination texture </td></tr>
+ <tr><td valign=top><em>x</em>&nbsp;</td><td>x position widthin the framebuffer </td></tr>
+ <tr><td valign=top><em>y</em>&nbsp;</td><td>y position widthin the framebuffer </td></tr>
+ <tr><td valign=top><em>width</em>&nbsp;</td><td>width of the area to be copied. </td></tr>
+ <tr><td valign=top><em>height</em>&nbsp;</td><td>height of the area to be copied.</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera6">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02185">2185</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00658">_CurrentTexture</a>, <a class="el" href="a05643.html#l00660">_CurrentTextureInfoGL</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05652.html#l00099">getGlTextureFormat()</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a05643.html#l00108">NL3D::CTextureDrvInfosGL::ID</a>, <a class="el" href="a06506.html#l00376">NL3D::ITexture::isTextureCube()</a>, <a class="el" href="a05646.html#l01013">level</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05650.html#l00473">NL3D::CDriverGLStates::setTextureMode()</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, <a class="el" href="a06506.html#l00416">NL3D::ITexture::TextureDrvShare</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05646.html#l01013">width</a>, <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>02194 {
+02195 <a class="code" href="a04199.html#a6">nlassert</a>(!tex-&gt;isTextureCube());
+02196 <span class="keywordtype">bool</span> compressed = <span class="keyword">false</span>;
+02197 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd12">getGlTextureFormat</a>(*tex, compressed);
+02198 <a class="code" href="a04199.html#a6">nlassert</a>(!compressed);
+02199 <span class="comment">// first, mark the texture as valid, and make sure there is a corresponding texture in the device memory </span>
+02200 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+02201 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>* gltext = (<a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>*)(<a class="code" href="a02434.html#NL3D_1_1IDrivern3">ITextureDrvInfos</a>*)(tex-&gt;TextureDrvShare-&gt;DrvTexture);
+02202 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+02203 <span class="comment">// setup texture mode, after activeTextureARB()</span>
+02204 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::Texture2D);
+02205 glBindTexture(GL_TEXTURE_2D, gltext-&gt;ID);
+02206 glCopyTexSubImage2D(GL_TEXTURE_2D, level, offsetx, offsety, x, y, width, height);
+02207 <span class="comment">// disable texturing.</span>
+02208 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::TextureDisabled);
+02209 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[0] = NULL;
+02210 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[0] = NULL;
+02211 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivera7" doxytag="NL3D::CDriverGL::createVertexBufferHard" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a03694.html">IVertexBufferHard</a>* NL3D::IDriver::createVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>typeArray</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numVertices</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverw39">TVBHardType</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>vbType</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>uvRouting</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [pure virtual, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+create a <a class="el" href="a03694.html">IVertexBufferHard</a>. delete it with deleteVertexBufferHard. NB: user should (must) keep a CRefPtr&lt;&gt; on this ptr, because if driver is deleted (for any reason) the pointer will be no longer valid.<p>
+NB: return NULL if driver do not support the requested VertexBufferHard.Reason for failures are:<ul>
+<li>Driver do not support VertexBufferHard at all. ie <a class="el" href="a02434.html#NL3D_1_1IDrivera78">supportVertexBufferHard()</a> return false.</li><li>Driver do not support the vbType wanted or the vertexFormat for vertexBufferHard</li><li>Driver do not support the numVertices wanted.</li><li>Driver can't allocate any more ressource.</li></ul>
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>vertexFormat</em>&nbsp;</td><td>see <a class="el" href="a03692.html#NL3D_1_1CVertexBufferz1143_30">CVertexBuffer::setVertexFormat()</a>. </td></tr>
+ <tr><td valign=top><em>numVertices</em>&nbsp;</td><td>the number of vertices to be created. </td></tr>
+ <tr><td valign=top><em>vbType</em>&nbsp;</td><td>kind of RAM shere the VB will be allocated. </td></tr>
+ <tr><td valign=top><em>uvRouting</em>&nbsp;</td><td>is the uv routing table. If NULL, set the default routing table. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>a vertexBufferHard interface.</dd></dl>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa9" doxytag="NL3D::CDriverGL::createVertexBufferHard" ></a><p>
+<table class="mdTable" 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="a03694.html">IVertexBufferHard</a> * NL3D::CDriverGL::createVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertexFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>typeArray</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numVertices</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverw39">IDriver::TVBHardType</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>vbType</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>uvRouting</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00516">516</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00900">_AGPVertexArrayRange</a>, <a class="el" href="a05643.html#l00897">_MaxVerticesByVBHard</a>, <a class="el" href="a05643.html#l00878">_VertexBufferHardSet</a>, <a class="el" href="a05643.html#l00902">_VRAMVertexArrayRange</a>, <a class="el" href="a03689.html#NL3D_1_1IVertexArrayRangea1">NL3D::IVertexArrayRange::createVBHardGL()</a>, <a class="el" href="a06290.html#l00064">NL3D::CPtrSet&lt; IVertexBufferHardGL &gt;::insert()</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>00517 {
+00518 <span class="comment">// choose the VertexArrayRange of good type</span>
+00519 IVertexArrayRange *vertexArrayRange= NULL;
+00520 <span class="keywordflow">switch</span>(vbType)
+00521 {
+00522 <span class="keywordflow">case</span> IDriver::VBHardAGP:
+00523 vertexArrayRange= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>;
+00524 <span class="keywordflow">break</span>;
+00525 <span class="keywordflow">case</span> IDriver::VBHardVRAM:
+00526 vertexArrayRange= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>;
+00527 <span class="keywordflow">break</span>;
+00528 };
+00529
+00530 <span class="comment">// If this one at least created (an extension support it).</span>
+00531 <span class="keywordflow">if</span>( !vertexArrayRange )
+00532 <span class="keywordflow">return</span> NULL;
+00533 <span class="keywordflow">else</span>
+00534 {
+00535 <span class="comment">// check max vertex</span>
+00536 <span class="keywordflow">if</span>(numVertices &gt; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>)
+00537 <span class="keywordflow">return</span> NULL;
+00538
+00539 <span class="comment">// Create a CVertexBufferHardGL</span>
+00540 IVertexBufferHardGL *vb;
+00541 <span class="comment">// let the VAR create the vbhard.</span>
+00542 vb= vertexArrayRange-&gt;createVBHardGL(vertexFormat, typeArray, numVertices, uvRouting);
+00543 <span class="comment">// if fails</span>
+00544 <span class="keywordflow">if</span>(!vb)
+00545 {
+00546 <span class="keywordflow">return</span> NULL;
+00547 }
+00548 <span class="keywordflow">else</span>
+00549 {
+00550 <span class="comment">// insert in list.</span>
+00551 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.insert(vb);
+00552 }
+00553 }
+00554 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_0" doxytag="NL3D::CDriverGL::deleteARBFragmentPrograms" ></a><p>
+<table class="mdTable" 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::CDriverGL::deleteARBFragmentPrograms </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02996">2996</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01063">ARBWaterShader</a>, <a class="el" href="a04223.html#a701">GLuint()</a>, <a class="el" href="a05645.html#l00450">nglDeleteProgramsARB</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l03011">deleteFragmentShaders()</a>, and <a class="el" href="a05642.html#l02920">initFragmentShaders()</a>.
+<p>
+<div class="fragment"><pre>02997 {
+02998 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; 4; ++k)
+02999 {
+03000 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[k])
+03001 {
+03002 <a class="code" href="a04223.html#a701">GLuint</a> progId = (<a class="code" href="a04223.html#a701">GLuint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[k];
+03003 <a class="code" href="a04222.html#a202">nglDeleteProgramsARB</a>(1, &amp;progId);
+03004 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[k] = 0;
+03005 }
+03006 }
+03007
+03008 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_1" doxytag="NL3D::CDriverGL::deleteFragmentShaders" ></a><p>
+<table class="mdTable" 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::CDriverGL::deleteFragmentShaders </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l03011">3011</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01061">ATIWaterShaderHandle</a>, <a class="el" href="a05643.html#l01060">ATIWaterShaderHandleNoDiffuseMap</a>, <a class="el" href="a05642.html#l02996">deleteARBFragmentPrograms()</a>, <a class="el" href="a04223.html#a701">GLuint()</a>, and <a class="el" href="a05645.html#l00431">nglDeleteFragmentShaderATI</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l01667">release()</a>.
+<p>
+<div class="fragment"><pre>03012 {
+03013 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_0">deleteARBFragmentPrograms</a>();
+03014 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a>)
+03015 {
+03016 <a class="code" href="a04222.html#a188">nglDeleteFragmentShaderATI</a>((GLuint) ATIWaterShaderHandleNoDiffuseMap);
+03017 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a> = 0;
+03018 }
+03019 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a>)
+03020 {
+03021 <a class="code" href="a04222.html#a188">nglDeleteFragmentShaderATI</a>((GLuint) ATIWaterShaderHandle);
+03022 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a> = 0;
+03023 }
+03024 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa10" doxytag="NL3D::CDriverGL::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::CDriverGL::deleteVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03694.html">IVertexBufferHard</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>VB</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+delete a <a class="el" href="a03694.html">IVertexBufferHard</a>. NB: VertexBufferHard are automatically deleted at <a class="el" href="a02434.html#NL3D_1_1IDrivera50">IDriver::release()</a>;
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera8">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00558">558</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00878">_VertexBufferHardSet</a>, <a class="el" href="a03695.html#NL3D_1_1IVertexBufferHardGLa0">NL3D::IVertexBufferHardGL::disable()</a>, <a class="el" href="a06290.html#l00072">NL3D::CPtrSet&lt; IVertexBufferHardGL &gt;::erase()</a>, <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_0">NL3D::IVertexBufferHard::lock()</a>, and <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_3">NL3D::IVertexBufferHard::unlock()</a>.
+<p>
+<div class="fragment"><pre>00559 {
+00560 <span class="comment">// If one _CurrentVertexBufferHard enabled, first End its drawning, and disable it.</span>
+00561 <span class="comment">// This is very important, because after deletion, the space is free. </span>
+00562 <span class="comment">// If the GPU has not finisehd his drawing, and if any allocation occurs on this free space, and if </span>
+00563 <span class="comment">// the user locks to fill this space (feww!) Then some data crash may results....</span>
+00564 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00565 {
+00566 <span class="comment">// Must ensure it has ended any drawing</span>
+00567 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;lock();
+00568 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;unlock();
+00569 <span class="comment">// disable the VBHard.</span>
+00570 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;disable();
+00571 }
+00572
+00573 <span class="comment">// Then just delete the VBuffer hard from list.</span>
+00574 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.erase(safe_cast&lt;IVertexBufferHardGL*&gt;(VB));
+00575 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa11" doxytag="NL3D::CDriverGL::disableHardwareTextureShader" ></a><p>
+<table class="mdTable" 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::CDriverGL::disableHardwareTextureShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz137_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l00392">392</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00116">NL3D::CGlExtensions::DisableHardwareTextureShader</a>.
+<p>
+<div class="fragment"><pre>00393 {
+00394 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.DisableHardwareTextureShader= <span class="keyword">true</span>;
+00395 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa12" doxytag="NL3D::CDriverGL::disableHardwareVertexArrayAGP" ></a><p>
+<table class="mdTable" 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::CDriverGL::disableHardwareVertexArrayAGP </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz137_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l00387">387</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00115">NL3D::CGlExtensions::DisableHardwareVertexArrayAGP</a>.
+<p>
+<div class="fragment"><pre>00388 {
+00389 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.DisableHardwareVertexArrayAGP= <span class="keyword">true</span>;
+00390 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa13" doxytag="NL3D::CDriverGL::disableHardwareVertexProgram" ></a><p>
+<table class="mdTable" 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::CDriverGL::disableHardwareVertexProgram </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Disable some Feature that may be supported by the Hardware Call before <a class="el" href="a02433.html#NL3D_1_1CDriverGLa78">setDisplay()</a> to work properly
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz137_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l00382">382</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00114">NL3D::CGlExtensions::DisableHardwareVertexProgram</a>.
+<p>
+<div class="fragment"><pre>00383 {
+00384 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.DisableHardwareVertexProgram= <span class="keyword">true</span>;
+00385 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa14" doxytag="NL3D::CDriverGL::disableUserTextureMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::disableUserTextureMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+disable all texture matrix
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00197">197</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l01000">_UserTexMatEnabled</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00257">setupMaterial()</a>.
+<p>
+<div class="fragment"><pre>00198 {
+00199 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> != 0)
+00200 {
+00201 glMatrixMode(GL_TEXTURE);
+00202 <a class="code" href="a04558.html#a15">uint</a> k = 0;
+00203 <span class="keywordflow">do</span>
+00204 {
+00205 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> &amp; (1 &lt;&lt; k)) <span class="comment">// user matrix for this stage</span>
+00206 {
+00207 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(k);
+00208 glLoadIdentity();
+00209 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> &amp;= ~ (1 &lt;&lt; k);
+00210
+00211 }
+00212 ++k;
+00213 }
+00214 <span class="keywordflow">while</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> != 0);
+00215 glMatrixMode(GL_MODELVIEW);
+00216 }
+00217 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd6" doxytag="NL3D::CDriverGL::doRefreshRenderSetup" ></a><p>
+<table class="mdTable" 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::CDriverGL::doRefreshRenderSetup </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05649.html#l00156">156</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00572">_ForceNormalize</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00606">_ModelViewMatrix</a>, <a class="el" href="a05643.html#l00578">_ModelViewMatrixDirty</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, <a class="el" href="a05643.html#l00852">enableGlNormalize()</a>, <a class="el" href="a05972.html#l00443">NLMISC::CMatrix::get()</a>, <a class="el" href="a05972.html#l00092">NLMISC::CMatrix::hasScalePart()</a>, and <a class="el" href="a05622.html#l00290">nlassert</a>.
+<p>
+Referenced by <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>.
+<p>
+<div class="fragment"><pre>00157 {
+00158 <span class="comment">// Check if the light setup has been modified first</span>
+00159 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>)
+00160 <span class="comment">// Recompute light setup</span>
+00161 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd4">cleanLightSetup</a> ();
+00162
+00163 <span class="comment">// Check light setup is good</span>
+00164 <a class="code" href="a04199.html#a6">nlassert</a> (_LightSetupDirty==<span class="keyword">false</span>);
+00165
+00166
+00167 <span class="comment">// Check if must update the modelViewMatrix</span>
+00168 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a> )
+00169 {
+00170 <span class="comment">// By default, the first model matrix is active</span>
+00171 glLoadMatrixf( <a class="code" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a>.get() );
+00172 <span class="comment">// enable normalize if matrix has scale.</span>
+00173 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd7">enableGlNormalize</a>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a>.hasScalePart() || <a class="code" href="a02433.html#NL3D_1_1CDriverGLr11">_ForceNormalize</a> );
+00174 <span class="comment">// clear.</span>
+00175 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a>= <span class="keyword">false</span>;
+00176 }
+00177
+00178 <span class="comment">// render setup is cleaned.</span>
+00179 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">false</span>;
+00180 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz72_0" doxytag="NL3D::CDriverGL::enableFog" ></a><p>
+<table class="mdTable" 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::CDriverGL::enableFog </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>enable</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz143_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02239">2239</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00609">_FogEnabled</a>, and <a class="el" href="a05650.html#l00695">NL3D::CDriverGLStates::enableFog()</a>.
+<p>
+<div class="fragment"><pre>02240 {
+02241 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableFog(enable);
+02242 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr7">_FogEnabled</a>= enable;
+02243 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd7" doxytag="NL3D::CDriverGL::enableGlNormalize" ></a><p>
+<table class="mdTable" 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::CDriverGL::enableGlNormalize </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>normalize</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Test/activate normalisation of normal.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00852">852</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00684">_CurrentGlNormalize</a>.
+<p>
+Referenced by <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>, and <a class="el" href="a05643.html#l00298">forceNormalize()</a>.
+<p>
+<div class="fragment"><pre>00853 {
+00854 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr4">_CurrentGlNormalize</a>!=normalize)
+00855 {
+00856 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr4">_CurrentGlNormalize</a>= normalize;
+00857 <span class="keywordflow">if</span>(normalize)
+00858 glEnable(GL_NORMALIZE);
+00859 <span class="keywordflow">else</span>
+00860 glDisable(GL_NORMALIZE);
+00861 }
+00862 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa15" doxytag="NL3D::CDriverGL::enableLight" ></a><p>
+<table class="mdTable" 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::CDriverGL::enableLight </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>num</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>enable</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Enable / disable light.<p>
+You must call <a class="el" href="a02433.html#NL3D_1_1CDriverGLa80">setLight()</a> if you active the ligth.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>num</em>&nbsp;</td><td>is the number of the light to enable / disable. </td></tr>
+ <tr><td valign=top><em>enable</em>&nbsp;</td><td>is true to enable the light, false to disable it. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLa80">setLight()</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera9">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05647.html#l00135">135</a> of file <a class="el" href="a05647.html">driver_opengl_light.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00623">_LightDirty</a>, <a class="el" href="a05643.html#l00619">_LightEnable</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00618">_MaxDriverLight</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05646.html#l01124">num</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>00136 {
+00137 <span class="comment">// Check light count is good</span>
+00138 <span class="comment">// nlassert (num&lt;_MaxDriverLight);</span>
+00139
+00140 <span class="comment">// Enable glLight</span>
+00141 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a653">num</a>&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>)
+00142 {
+00143 <span class="comment">// Enable the light</span>
+00144 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr20">_LightEnable</a>[<a class="code" href="a04223.html#a653">num</a>]=enable;
+00145
+00146 <span class="comment">// Enable GL</span>
+00147 <span class="keywordflow">if</span> (enable)
+00148 {
+00149 glEnable ((GLenum)(GL_LIGHT0+num));
+00150 <span class="comment">// If this light is dirty, and reenabled, then it must be refresh at next render =&gt; set the global flag.</span>
+00151 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a>[<a class="code" href="a04223.html#a653">num</a>])
+00152 {
+00153 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>= <span class="keyword">true</span>;
+00154 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">true</span>;
+00155 }
+00156 }
+00157 <span class="keywordflow">else</span>
+00158 glDisable ((GLenum)(GL_LIGHT0+num));
+00159 }
+00160 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa16" doxytag="NL3D::CDriverGL::enableLowLevelKeyboard" ></a><p>
+<table class="mdTable" 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="a03860.html">NLMISC::IKeyboardDevice</a> * NL3D::CDriverGL::enableLowLevelKeyboard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>enable</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Enable / disable a low level keyboard. Such a keyboard can only send KeyDown and KeyUp event. It just consider the keyboard as a gamepad with lots of buttons... This returns a interface to some parameters when it is supported, or NULL otherwise. The interface pointer is valid as long as the low level keyboard is enabled. A call to disable the keyboard returns NULL, and restore the default keyboard behaviour
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02487">2487</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>02488 {
+02489 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02490 <span class="preprocessor"></span> <span class="keywordflow">if</span> (_EventEmitter.getNumEmitters() &lt; 2) <span class="keywordflow">return</span> NULL;
+02491 NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast&lt;NLMISC::CDIEventEmitter *&gt;(_EventEmitter.getEmitter(1));
+02492 <span class="keywordflow">if</span> (enable)
+02493 {
+02494 <span class="keywordflow">try</span>
+02495 {
+02496 <a class="code" href="a03860.html">NLMISC::IKeyboardDevice</a> *md = diee-&gt;getKeyboardDevice();
+02497 <span class="keywordflow">return</span> md;
+02498 }
+02499 <span class="keywordflow">catch</span> (EDirectInput &amp;)
+02500 {
+02501 <span class="keywordflow">return</span> NULL;
+02502 }
+02503 }
+02504 <span class="keywordflow">else</span>
+02505 {
+02506 diee-&gt;releaseKeyboard();
+02507 <span class="keywordflow">return</span> NULL;
+02508 }
+02509 <span class="preprocessor">#else</span>
+02510 <span class="preprocessor"></span> <span class="keywordflow">return</span> NULL;
+02511 <span class="preprocessor">#endif</span>
+02512 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa17" doxytag="NL3D::CDriverGL::enableLowLevelMouse" ></a><p>
+<table class="mdTable" 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="a03867.html">NLMISC::IMouseDevice</a> * NL3D::CDriverGL::enableLowLevelMouse </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>enable</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>exclusive</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Enable / disable low level mouse. This allow to take advantage of some options (speed of the mouse, automatic wrapping) It returns a interface to these parameters when it is supported, or NULL otherwise The interface pointer is valid as long as the low level mouse is enabled. A call to disable the mouse returns NULL, and restore the default mouse behaviour NB : - In this mode the mouse cursor isn't drawn.<ul>
+<li>Calls to showCursor have no effects<ul>
+<li>Calls to setCapture have no effects</li></ul>
+</li></ul>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02459">2459</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>02460 {
+02461 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02462 <span class="preprocessor"></span> <span class="keywordflow">if</span> (_EventEmitter.getNumEmitters() &lt; 2) <span class="keywordflow">return</span> NULL;
+02463 NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast&lt;CDIEventEmitter *&gt;(_EventEmitter.getEmitter(1));
+02464 <span class="keywordflow">if</span> (enable)
+02465 {
+02466 <span class="keywordflow">try</span>
+02467 {
+02468 <a class="code" href="a03867.html">NLMISC::IMouseDevice</a> *md = diee-&gt;getMouseDevice(exclusive);
+02469 <span class="keywordflow">return</span> md;
+02470 }
+02471 <span class="keywordflow">catch</span> (EDirectInput &amp;)
+02472 {
+02473 <span class="keywordflow">return</span> NULL;
+02474 }
+02475 }
+02476 <span class="keywordflow">else</span>
+02477 {
+02478 diee-&gt;releaseMouse();
+02479 <span class="keywordflow">return</span> NULL;
+02480 }
+02481 <span class="preprocessor">#else</span>
+02482 <span class="preprocessor"></span> <span class="keywordflow">return</span> NULL;
+02483 <span class="preprocessor">#endif</span>
+02484 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd8" doxytag="NL3D::CDriverGL::enableNVTextureShader" ></a><p>
+<table class="mdTable" 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::CDriverGL::enableNVTextureShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>enabled</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+nv texture shaders. Should be used only if this caps is present!
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02409">2409</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00673">_NVTextureShaderEnabled</a>, and <a class="el" href="a05646.html#l00419">GL_TEXTURE_SHADER_NV</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00257">setupMaterial()</a>, and <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>.
+<p>
+<div class="fragment"><pre>02410 {
+02411 <span class="keywordflow">if</span> (enabled != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a>)
+02412 {
+02413
+02414 <span class="keywordflow">if</span> (enabled)
+02415 {
+02416 glEnable(GL_TEXTURE_SHADER_NV);
+02417 }
+02418 <span class="keywordflow">else</span>
+02419 {
+02420 glDisable(GL_TEXTURE_SHADER_NV);
+02421 }
+02422 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a> = enabled;
+02423 }
+02424 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_0" doxytag="NL3D::CDriverGL::enablePolygonSmoothing" ></a><p>
+<table class="mdTable" 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::CDriverGL::enablePolygonSmoothing </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>smooth</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Use AntiAliasing For polygons (GL_POLYGON_SMOOTH like, not the FSAA). See GL_POLYGON_SMOOTH help, and GL_SRC_ALPHA_SATURATE OpenGL doc (not yet implemented now since used only for alpha part in ShadowMap gen)
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz153_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03061">3061</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01076">_PolygonSmooth</a>.
+<p>
+<div class="fragment"><pre>03062 {
+03063 <span class="keywordflow">if</span>(smooth)
+03064 glEnable(GL_POLYGON_SMOOTH);
+03065 <span class="keywordflow">else</span>
+03066 glDisable(GL_POLYGON_SMOOTH);
+03067 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr28">_PolygonSmooth</a>= smooth;
+03068 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa18" doxytag="NL3D::CDriverGL::enableUsedTextureMemorySum" ></a><p>
+<table class="mdTable" 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::CDriverGL::enableUsedTextureMemorySum </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>enable</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Enable the sum of texture memory used since last <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> call. To retrieve the memory used call <a class="el" href="a02433.html#NL3D_1_1CDriverGLa46">getUsedTextureMemory()</a>.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02334">2334</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00920">_SumTextureMemoryUsed</a>, and <a class="el" href="a05622.html#l00111">nlinfo</a>.
+<p>
+<div class="fragment"><pre>02335 {
+02336 <span class="keywordflow">if</span> (enable)
+02337 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"PERFORMANCE INFO: enableUsedTextureMemorySum has been set to true in CDriverGL\n"</span>);
+02338 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_9">_SumTextureMemoryUsed</a>=enable;
+02339 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_1" doxytag="NL3D::CDriverGL::enableVertexProgramDoubleSidedColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::enableVertexProgramDoubleSidedColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>doubleSided</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Activate VertexProgram 2Sided Color mode. In 2Sided mode, the BackFace (if material 2Sided enabled) read the result from o[BFC0], and not o[COL0]. default is false. you should reset to false after use. NB: no-op if not supporte by driver
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01427">1427</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05646.html#l00096">GL_VERTEX_PROGRAM_TWO_SIDE_NV</a>, and <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>.
+<p>
+<div class="fragment"><pre>01428 {
+01429 <span class="comment">// Vertex program exist ?</span>
+01430 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01431 {
+01432 <span class="comment">// change mode (not cached because supposed to be rare)</span>
+01433 <span class="keywordflow">if</span>(doubleSided)
+01434 glEnable (GL_VERTEX_PROGRAM_TWO_SIDE_NV);
+01435 <span class="keywordflow">else</span>
+01436 glDisable (GL_VERTEX_PROGRAM_TWO_SIDE_NV);
+01437 }
+01438 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz98_1" doxytag="NL3D::CDriverGL::endCloudMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endCloudMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000015">Todo:</a></b></dt><dd>Optimize the cloud multipass with register combiner</dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01859">1859</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, and <a class="el" href="a05622.html#l00290">nlassert</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01860 {
+01861 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>-&gt;getShader() == CMaterial::Cloud);
+01862 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_2" doxytag="NL3D::CDriverGL::endLightMapMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endLightMapMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00920">920</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00611">_CurrentFogColor</a>, <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00609">_FogEnabled</a>, <a class="el" href="a05643.html#l00774">_LastVertexSetupIsLightMap</a>, <a class="el" href="a05969.html#l00611">NL3D::CMaterial::_LightMapsMulx2</a>, <a class="el" href="a05643.html#l00766">_NLightMapPass</a>, <a class="el" href="a05643.html#l00765">_NLightMapPerPass</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>00921 {
+00922 <span class="comment">// Cache it. reseted in setupGLArrays(), and setupMaterial()</span>
+00923 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a>= <span class="keyword">true</span>;
+00924
+00925 <span class="comment">// If multi-pass, then must reset the fog color</span>
+00926 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_9">_NLightMapPass</a>&gt;=2 &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLr7">_FogEnabled</a>)
+00927 {
+00928 glFogfv(GL_FOG_COLOR, _CurrentFogColor);
+00929 }
+00930
+00931 <span class="comment">// nothing to do with blending/lighting, since always setuped in activeMaterial().</span>
+00932 <span class="comment">// If material is the same, then it is still a lightmap material (if changed =&gt; touched =&gt; different!)</span>
+00933 <span class="comment">// So no need to reset lighting/blending here.</span>
+00934
+00935 <span class="comment">// Clean up all stage for Multiply x 2</span>
+00936 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>-&gt;_LightMapsMulx2)
+00937 {
+00938 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a11">uint32</a> i = 0; i &lt; (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a>+1); ++i)
+00939 {
+00940 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(i);
+00941 glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1);
+00942 }
+00943 }
+00944 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz80_1" doxytag="NL3D::CDriverGL::endMaterialMultiPass" ></a><p>
+<table class="mdTable" 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 void NL3D::CDriverGL::endMaterialMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+end multipass for this material.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz139_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00510">510</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>00510 { <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a>(); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz87_1" doxytag="NL3D::CDriverGL::endMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+end multipass for this material.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00587">587</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00654">_CurrentMaterialSupportedShader</a>, <a class="el" href="a05648.html#l01859">endCloudMultiPass()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, <a class="el" href="a05648.html#l01545">endPPLMultiPass()</a>, <a class="el" href="a05648.html#l01638">endPPLNoSpecMultiPass()</a>, <a class="el" href="a05648.html#l01236">endSpecularMultiPass()</a>, and <a class="el" href="a05648.html#l02179">endWaterMultiPass()</a>.
+<p>
+Referenced by <a class="el" href="a05643.html#l00510">endMaterialMultiPass()</a>, <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, and <a class="el" href="a05653.html#l00187">renderTriangles()</a>.
+<p>
+<div class="fragment"><pre>00588 {
+00589 <span class="keywordflow">switch</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_4">_CurrentMaterialSupportedShader</a>)
+00590 {
+00591 <span class="keywordflow">case</span> CMaterial::LightMap:
+00592 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_2">endLightMapMultiPass</a>();
+00593 <span class="keywordflow">break</span>;
+00594 <span class="keywordflow">case</span> CMaterial::Specular:
+00595 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_1">endSpecularMultiPass</a>();
+00596 <span class="keywordflow">break</span>;
+00597 <span class="keywordflow">case</span> CMaterial::Water:
+00598 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz93_1">endWaterMultiPass</a>();
+00599 <span class="keywordflow">return</span>;
+00600 <span class="keywordflow">case</span> CMaterial::PerPixelLighting:
+00601 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_4">endPPLMultiPass</a>();
+00602 <span class="keywordflow">break</span>;
+00603 <span class="keywordflow">case</span> CMaterial::PerPixelLightingNoSpec:
+00604 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_5">endPPLNoSpecMultiPass</a>();
+00605 <span class="keywordflow">break</span>;
+00606 <span class="comment">/* case CMaterial::Caustics:</span>
+00607 <span class="comment"> endCausticsMultiPass();</span>
+00608 <span class="comment"> break; */</span>
+00609 <span class="keywordflow">case</span> CMaterial::Cloud:
+00610 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz98_1">endCloudMultiPass</a>();
+00611 <span class="keywordflow">break</span>;
+00612 <span class="comment">// All others materials do not require multi pass.</span>
+00613 <span class="keywordflow">default</span>: <span class="keywordflow">return</span>;
+00614 }
+00615 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_4" doxytag="NL3D::CDriverGL::endPPLMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endPPLMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01545">1545</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01546 {
+01547 <span class="comment">// nothing to do there ...</span>
+01548 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_5" doxytag="NL3D::CDriverGL::endPPLNoSpecMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endPPLNoSpecMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01638">1638</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01639 {
+01640 <span class="comment">// nothing to do there ...</span>
+01641 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa19" doxytag="NL3D::CDriverGL::endProfileVBHardLock" ></a><p>
+<table class="mdTable" 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::CDriverGL::endProfileVBHardLock </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; std::string &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>result</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+If the driver support it, stop profile VBHard locks, and "print" result No-Op if already profiling NB: The results are the Locks in Chronogical time (since last swapBuffers). Since multiple frame are summed, an "*" is marked againts the VBHard name to show if it was not always this one (ptr test and not name test) in the chronogical order. NB: if the driver does not support VBHard or VBHard profiling (like ATI VBHard), result is empty. NB: ???? string is displayed if the VBHard has no name or if was just deleted.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03093">3093</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00941">_NumVBHardProfileFrame</a>, <a class="el" href="a05643.html#l00939">_VBHardProfiles</a>, <a class="el" href="a05643.html#l00938">_VBHardProfiling</a>, <a class="el" href="a05643.html#l00928">NL3D::CDriverGL::CVBHardProfile::AccumTime</a>, <a class="el" href="a05643.html#l00930">NL3D::CDriverGL::CVBHardProfile::Change</a>, <a class="el" href="a05586.html#l00161">NLMISC::smprintf()</a>, <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05643.html#l00927">NL3D::CDriverGL::CVBHardProfile::VBHard</a>.
+<p>
+<div class="fragment"><pre>03094 {
+03095 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a>)
+03096 <span class="keywordflow">return</span>;
+03097
+03098 <span class="comment">// Fill infos.</span>
+03099 result.clear();
+03100 result.resize(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.size() + 1);
+03101 <span class="keywordtype">float</span> total= 0;
+03102 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.size();i++)
+03103 {
+03104 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> tmpSize= 256;
+03105 <span class="keywordtype">char</span> tmp[tmpSize];
+03106 CVBHardProfile &amp;vbProf= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>[i];
+03107 <span class="keyword">const</span> <span class="keywordtype">char</span> *vbName;
+03108 <span class="keywordflow">if</span>(vbProf.VBHard &amp;&amp; !vbProf.VBHard-&gt;getName().empty())
+03109 {
+03110 vbName= vbProf.VBHard-&gt;getName().c_str();
+03111 }
+03112 <span class="keywordflow">else</span>
+03113 {
+03114 vbName= <span class="stringliteral">"????"</span>;
+03115 }
+03116 <span class="comment">// Display in ms.</span>
+03117 <span class="keywordtype">float</span> timeLock= (<span class="keywordtype">float</span>)CTime::ticksToSecond(vbProf.AccumTime)*1000 / max(_NumVBHardProfileFrame,1U);
+03118 <a class="code" href="a05378.html#a259">smprintf</a>(tmp, tmpSize, <span class="stringliteral">"%16s%c: %2.3f ms"</span>, vbName, vbProf.Change?<span class="charliteral">'*'</span>:<span class="charliteral">' '</span>, timeLock );
+03119 total+= timeLock;
+03120
+03121 result[i]= tmp;
+03122 }
+03123 result[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.size()]= <a class="code" href="a05378.html#a244">toString</a>(<span class="stringliteral">"Total: %2.3f"</span>, total);
+03124
+03125 <span class="comment">// clear.</span>
+03126 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a>= <span class="keyword">false</span>;
+03127 <a class="code" href="a05378.html#a381">contReset</a>(_VBHardProfiles);
+03128 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa20" doxytag="NL3D::CDriverGL::endSpecularBatch" ></a><p>
+<table class="mdTable" 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::CDriverGL::endSpecularBatch </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera10">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05648.html#l00977">977</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00789">_SpecularBatchOn</a>, and <a class="el" href="a05648.html#l01022">setupSpecularEnd()</a>.
+<p>
+<div class="fragment"><pre>00978 {
+00979 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_5">_SpecularBatchOn</a>= <span class="keyword">false</span>;
+00980
+00981 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_3">setupSpecularEnd</a>();
+00982 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz91_1" doxytag="NL3D::CDriverGL::endSpecularMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endSpecularMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01236">1236</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00789">_SpecularBatchOn</a>, and <a class="el" href="a05648.html#l01022">setupSpecularEnd()</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01237 {
+01238 <span class="comment">// End specular , only if not Batching mode.</span>
+01239 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_5">_SpecularBatchOn</a>)
+01240 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_3">setupSpecularEnd</a>();
+01241 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz93_1" doxytag="NL3D::CDriverGL::endWaterMultiPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::endWaterMultiPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l02179">2179</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l01063">ARBWaterShader</a>, <a class="el" href="a05643.html#l01060">ATIWaterShaderHandleNoDiffuseMap</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05646.html#l00859">GL_FRAGMENT_PROGRAM_ARB</a>, <a class="el" href="a05646.html#l00697">GL_FRAGMENT_SHADER_ATI</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00587">endMultiPass()</a>.
+<p>
+<div class="fragment"><pre>02180 {
+02181 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>-&gt;getShader() == CMaterial::Water);
+02182 <span class="comment">// NB : as fragment shaders / programms bypass the texture envs, no special env enum is added (c.f CTexEnvSpecial)</span>
+02183 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader) <span class="keywordflow">return</span>;
+02184 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[0])
+02185 {
+02186 glDisable(GL_FRAGMENT_PROGRAM_ARB);
+02187 }
+02188 <span class="keywordflow">else</span>
+02189 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a>)
+02190 {
+02191 glDisable(GL_FRAGMENT_SHADER_ATI);
+02192 }
+02196 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa21" doxytag="NL3D::CDriverGL::enumModes" ></a><p>
+<table class="mdTable" 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="a05363.html#a19">ModeList</a> NL3D::CDriverGL::enumModes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera11">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l00358">358</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00088">NL3D::GfxMode::Depth</a>, <a class="el" href="a05640.html#l00087">NL3D::GfxMode::Height</a>, <a class="el" href="a05640.html#l00103">NL3D::ModeList</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05640.html#l00086">NL3D::GfxMode::Width</a>, and <a class="el" href="a05640.html#l00085">NL3D::GfxMode::Windowed</a>.
+<p>
+<div class="fragment"><pre>00359 {
+00360 <a class="code" href="a05363.html#a19">ModeList</a> ML;
+00361 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00362 <span class="preprocessor"></span> DEVMODE devmode;
+00363 <a class="code" href="a04558.html#a14">sint</a> n;
+00364 GfxMode Mode;
+00365
+00366 n=0;
+00367 <span class="keywordflow">while</span>( EnumDisplaySettings(NULL, n, &amp;devmode) )
+00368 {
+00369 Mode.Windowed=<span class="keyword">false</span>;
+00370 Mode.Width=(<a class="code" href="a04558.html#a9">uint16</a>)devmode.dmPelsWidth;
+00371 Mode.Height=(<a class="code" href="a04558.html#a9">uint16</a>)devmode.dmPelsHeight;
+00372 Mode.Depth=(<a class="code" href="a04558.html#a7">uint8</a>)devmode.dmBitsPerPel;
+00373 ML.push_back(Mode);
+00374 n++;
+00375 }
+00376 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+00377 <span class="preprocessor"></span> <span class="keywordflow">return</span> ML;
+00378 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_0" doxytag="NL3D::CDriverGL::fenceOnCurVBHardIfNeeded" ></a><p>
+<table class="mdTable" 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::CDriverGL::fenceOnCurVBHardIfNeeded </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03695.html">IVertexBufferHardGL</a> *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>newVBHard</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l01319">1319</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05655.html#l00207">NL3D::CVertexBufferHardGLNVidia::getLockHintStatic()</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a05654.html#l00384">NL3D::CVertexBufferHardGLNVidia::setFence()</a>, and <a class="el" href="a05655.html#l00097">NL3D::IVertexBufferHardGL::VBType</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00087">activeVertexBuffer()</a>, and <a class="el" href="a05653.html#l00580">activeVertexBufferHard()</a>.
+<p>
+<div class="fragment"><pre>01320 {
+01321 <span class="comment">// If old is not a VBHard, or if not a NVidia VBHard, no-op.</span>
+01322 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>==NULL || !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;VBType == IVertexBufferHardGL::NVidiaVB)
+01323 <span class="keywordflow">return</span>;
+01324
+01325 <span class="comment">// if we do not activate the same (NB: newVBHard==NULL if not a VBHard).</span>
+01326 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>!=newVBHard)
+01327 {
+01328 <span class="comment">// get NVidia interface</span>
+01329 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_17">CVertexBufferHardGLNVidia</a> *vbHardNV= static_cast&lt;CVertexBufferHardGLNVidia*&gt;(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>);
+01330
+01331 <span class="comment">// If some render() have been done with this VB.</span>
+01332 <span class="keywordflow">if</span>( vbHardNV-&gt;GPURenderingAfterFence )
+01333 {
+01334 <span class="comment">/*</span>
+01335 <span class="comment"> Since we won't work with this VB for a long time, we set a fence.</span>
+01336 <span class="comment"></span>
+01337 <span class="comment"> NB: if the fence was previously set. NV_Fence Specification says that the new ONE replaces it.</span>
+01338 <span class="comment"> This is EXACTLY what we wants, since the old one is no more interesting.</span>
+01339 <span class="comment"></span>
+01340 <span class="comment"> NB: never insert a fence for said "Static Lock" VBHard. Those VBHard are said to be "static"</span>
+01341 <span class="comment"> therefore, user should never modify them (else lock() is much slower...)</span>
+01342 <span class="comment"> */</span>
+01343 <span class="keywordflow">if</span>( !vbHardNV-&gt;getLockHintStatic() )
+01344 vbHardNV-&gt;setFence();
+01345 <span class="comment">// Since we have set a new Fence, we won't need to do it at next vbHardNV-&gt;lock()</span>
+01346 vbHardNV-&gt;GPURenderingAfterFence= <span class="keyword">false</span>;
+01347 }
+01348 }
+01349 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa22" doxytag="NL3D::CDriverGL::fillBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::fillBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02268.html">CBitmap</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>bitmap</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+fill the RGBA back buffer<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>bitmap</em>&nbsp;</td><td>will be written in the buffer. no-op if bad size. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if success</dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera12">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02171">2171</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05486.html#l01388">NLMISC::CBitmap::getHeight()</a>, <a class="el" href="a05487.html#l00335">NLMISC::CBitmap::getPixelFormat()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a05486.html#l01363">NLMISC::CBitmap::getWidth()</a>, <a class="el" href="a05642.html#l01989">getWindowSize()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, and <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>.
+<p>
+<div class="fragment"><pre>02172 {
+02173 <a class="code" href="a03319.html">CRect</a> rect(0,0);
+02174 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa52">getWindowSize</a>(rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>);
+02175 <span class="keywordflow">if</span>( rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>!=bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturea20">getWidth</a>() || rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>!=bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturea12">getHeight</a>() || bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturea15">getPixelFormat</a>()!=CBitmap::RGBA )
+02176 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02177
+02178 glPixelStorei(GL_UNPACK_ALIGNMENT,1);
+02179 glDrawPixels (rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>, GL_RGBA, GL_UNSIGNED_BYTE, &amp;(bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>()[0]) );
+02180
+02181 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+02182 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_1" doxytag="NL3D::CDriverGL::finish" ></a><p>
+<table class="mdTable" 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::CDriverGL::finish </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+force the driver to flush all command. glFinish() in opengl. Interesting only for debug and profiling purpose.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz153_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03028">3028</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>03029 {
+03030 glFinish();
+03031 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz72_1" doxytag="NL3D::CDriverGL::fogEnabled" ></a><p>
+<table class="mdTable" 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::CDriverGL::fogEnabled </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz143_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02234">2234</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00609">_FogEnabled</a>.
+<p>
+<div class="fragment"><pre>02235 {
+02236 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr7">_FogEnabled</a>;
+02237 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd9" doxytag="NL3D::CDriverGL::forceActivateTexEnvColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::forceActivateTexEnvColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>env</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00712">712</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a05643.html#l00699">forceActivateTexEnvColor()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00713 {
+00714 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd10">forceActivateTexEnvColor</a>(stage, env.ConstantColor);
+00715 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd10" doxytag="NL3D::CDriverGL::forceActivateTexEnvColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::forceActivateTexEnvColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>col</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00699">699</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00661">_CurrentTexEnv</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l01137">activateTexEnvColor()</a>, <a class="el" href="a05643.html#l00712">forceActivateTexEnvColor()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>.
+<p>
+<div class="fragment"><pre>00700 {
+00701 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> OO255= 1.0f/255;
+00702 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_6">_CurrentTexEnv</a>[stage].ConstantColor= col;
+00703 <span class="comment">// Setup the gl cte color.</span>
+00704 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00705 GLfloat glcol[4];
+00706 glcol[0]= col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>*OO255;
+00707 glcol[1]= col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>*OO255;
+00708 glcol[2]= col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>*OO255;
+00709 glcol[3]= col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>*OO255;
+00710 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, glcol);
+00711 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd11" doxytag="NL3D::CDriverGL::forceActivateTexEnvMode" ></a><p>
+<table class="mdTable" 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::CDriverGL::forceActivateTexEnvMode </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02842.html">CMaterial::CTexEnv</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>env</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05652.html#l01054">1054</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00661">_CurrentTexEnv</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a05969.html#l00504">NL3D::CMaterial::CTexEnv::EnvPacked</a>, <a class="el" href="a05645.html#l00071">NL3D::CGlExtensions::EXTTextureEnvCombine</a>, <a class="el" href="a05646.html#l00680">GL_BUMP_ENVMAP_ATI</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>.
+<p>
+<div class="fragment"><pre>01055 {
+01056 <span class="comment">// This maps the CMaterial::TTexOperator</span>
+01057 <span class="keyword">static</span> <span class="keyword">const</span> GLenum operatorLUT[9]= { GL_REPLACE, GL_MODULATE, GL_ADD, GL_ADD_SIGNED_EXT,
+01058 GL_INTERPOLATE_EXT, GL_INTERPOLATE_EXT, GL_INTERPOLATE_EXT, GL_INTERPOLATE_EXT, <a class="code" href="a04223.html#a375">GL_BUMP_ENVMAP_ATI</a> };
+01059
+01060 <span class="comment">// This maps the CMaterial::TTexSource</span>
+01061 <span class="keyword">static</span> <span class="keyword">const</span> GLenum sourceLUT[4]= { GL_TEXTURE, GL_PREVIOUS_EXT, GL_PRIMARY_COLOR_EXT, GL_CONSTANT_EXT };
+01062
+01063 <span class="comment">// This maps the CMaterial::TTexOperand</span>
+01064 <span class="keyword">static</span> <span class="keyword">const</span> GLenum operandLUT[4]= { GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA };
+01065
+01066 <span class="comment">// This maps the CMaterial::TTexOperator, used for openGL Arg2 setup.</span>
+01067 <span class="keyword">static</span> <span class="keyword">const</span> GLenum interpolateSrcLUT[8]= { GL_TEXTURE, GL_TEXTURE, GL_TEXTURE, GL_TEXTURE,
+01068 GL_TEXTURE, GL_PREVIOUS_EXT, GL_PRIMARY_COLOR_EXT, GL_CONSTANT_EXT };
+01069
+01070
+01071
+01072 <span class="comment">// cache mgt.</span>
+01073 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_6">_CurrentTexEnv</a>[stage].EnvPacked= env.EnvPacked;
+01074 <span class="comment">// Disable Special tex env f().</span>
+01075 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[stage]= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a>;
+01076
+01077
+01078 <span class="comment">// Setup the gl env mode.</span>
+01079 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+01080 <span class="comment">// "Normal drivers", setup EnvCombine.</span>
+01081 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTTextureEnvCombine)
+01082 {
+01083 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01084
+01085
+01086 <span class="comment">// RGB.</span>
+01087 <span class="comment">//=====</span>
+01088 <span class="comment">// Operator.</span>
+01089 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, operatorLUT[env.Env.OpRGB] );
+01090 <span class="comment">// Arg0.</span>
+01091 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, sourceLUT[env.Env.SrcArg0RGB] );
+01092 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, operandLUT[env.Env.OpArg0RGB]);
+01093 <span class="comment">// Arg1.</span>
+01094 <span class="keywordflow">if</span>(env.Env.OpRGB &gt; CMaterial::Replace)
+01095 {
+01096 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, sourceLUT[env.Env.SrcArg1RGB] );
+01097 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, operandLUT[env.Env.OpArg1RGB]);
+01098 <span class="comment">// Arg2.</span>
+01099 <span class="keywordflow">if</span>(env.Env.OpRGB &gt;= CMaterial::InterpolateTexture )
+01100 {
+01101 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, interpolateSrcLUT[env.Env.OpRGB] );
+01102 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA);
+01103 }
+01104 }
+01105
+01106
+01107 <span class="comment">// Alpha.</span>
+01108 <span class="comment">//=====</span>
+01109 <span class="comment">// Operator.</span>
+01110 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, operatorLUT[env.Env.OpAlpha] );
+01111 <span class="comment">// Arg0.</span>
+01112 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, sourceLUT[env.Env.SrcArg0Alpha] );
+01113 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, operandLUT[env.Env.OpArg0Alpha]);
+01114 <span class="comment">// Arg1.</span>
+01115 <span class="keywordflow">if</span>(env.Env.OpAlpha &gt; CMaterial::Replace)
+01116 {
+01117 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, sourceLUT[env.Env.SrcArg1Alpha] );
+01118 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, operandLUT[env.Env.OpArg1Alpha]);
+01119 <span class="comment">// Arg2.</span>
+01120 <span class="keywordflow">if</span>(env.Env.OpAlpha &gt;= CMaterial::InterpolateTexture )
+01121 {
+01122 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, interpolateSrcLUT[env.Env.OpAlpha] );
+01123 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_SRC_ALPHA);
+01124 }
+01125 }
+01126 }
+01127 <span class="comment">// Very Bad drivers.</span>
+01128 <span class="keywordflow">else</span>
+01129 {
+01130 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+01131 }
+01132
+01133 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa23" doxytag="NL3D::CDriverGL::forceDXTCCompression" ></a><p>
+<table class="mdTable" 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::CDriverGL::forceDXTCCompression </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>dxtcComp</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+if true force all the uncompressed RGBA 32 bits and RGBA 24 bits texture to be DXTC5 compressed. Do this only during upload if <a class="el" href="a03487.html#NL3D_1_1ITexturea0">ITexture::allowDegradation()</a> is true and if ITexture::UploadFormat is "Automatic" and if bitmap format is RGBA.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera13">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l01169">1169</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00993">_ForceDXTCCompression</a>.
+<p>
+<div class="fragment"><pre>01170 {
+01171 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr10">_ForceDXTCCompression</a>= dxtcComp;
+01172 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa24" doxytag="NL3D::CDriverGL::forceNormalize" ></a><p>
+<table class="mdTable" 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 void NL3D::CDriverGL::forceNormalize </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>normalize</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Force input normal to be normalized by the driver. default is false. NB: driver force the normalisation himself if:<ul>
+<li>current Model matrix has a scale.</li></ul>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera14">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00298">298</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00572">_ForceNormalize</a>, and <a class="el" href="a05643.html#l00852">enableGlNormalize()</a>.
+<p>
+<div class="fragment"><pre>00299 {
+00300 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr11">_ForceNormalize</a>= normalize;
+00301 <span class="comment">// if ForceNormalize, must enable GLNormalize now.</span>
+00302 <span class="keywordflow">if</span>(normalize)
+00303 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd7">enableGlNormalize</a>(<span class="keyword">true</span>);
+00304 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa25" doxytag="NL3D::CDriverGL::forceTextureResize" ></a><p>
+<table class="mdTable" 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::CDriverGL::forceTextureResize </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>divisor</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..) to be divided by Divisor (2, 4, 8...) Default is 1. NB: this is done only on TextureFile
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera15">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l01175">1175</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00995">_ForceTextureResizePower</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a05586.html#l00358">NLMISC::getPowerOf2()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01176 {
+01177 <a class="code" href="a05378.html#a374">clamp</a>(divisor, 1U, 256U);
+01178
+01179 <span class="comment">// 16 -&gt; 4.</span>
+01180 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>= <a class="code" href="a05378.html#a263">getPowerOf2</a>(divisor);
+01181 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa26" doxytag="NL3D::CDriverGL::getAvailableVertexAGPMemory" ></a><p>
+<table class="mdTable" 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::CDriverGL::getAvailableVertexAGPMemory </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return the amount of AGP memory allocated by <a class="el" href="a02433.html#NL3D_1_1CDriverGLa56">initVertexArrayRange()</a> to store vertices.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera16">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l01299">1299</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00900">_AGPVertexArrayRange</a>, <a class="el" href="a03689.html#NL3D_1_1IVertexArrayRangea4">NL3D::IVertexArrayRange::sizeAllocated()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l03157">profileVBHardAllocation()</a>.
+<p>
+<div class="fragment"><pre>01300 {
+01301 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>)
+01302 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>-&gt;sizeAllocated();
+01303 <span class="keywordflow">else</span>
+01304 <span class="keywordflow">return</span> 0;
+01305 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa27" doxytag="NL3D::CDriverGL::getAvailableVertexVRAMMemory" ></a><p>
+<table class="mdTable" 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::CDriverGL::getAvailableVertexVRAMMemory </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return the amount of video memory allocated by <a class="el" href="a02433.html#NL3D_1_1CDriverGLa56">initVertexArrayRange()</a> to store vertices.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera17">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l01309">1309</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00902">_VRAMVertexArrayRange</a>, <a class="el" href="a03689.html#NL3D_1_1IVertexArrayRangea4">NL3D::IVertexArrayRange::sizeAllocated()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l03157">profileVBHardAllocation()</a>.
+<p>
+<div class="fragment"><pre>01310 {
+01311 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>)
+01312 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>-&gt;sizeAllocated();
+01313 <span class="keywordflow">else</span>
+01314 <span class="keywordflow">return</span> 0;
+01315 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa28" doxytag="NL3D::CDriverGL::getBitPerPixel" ></a><p>
+<table class="mdTable" 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> NL3D::CDriverGL::getBitPerPixel </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return the depth of the driver after <a class="el" href="a02433.html#NL3D_1_1CDriverGLa55">init()</a>.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera18">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02054">2054</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>02055 {
+02056 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>;
+02057 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_2" doxytag="NL3D::CDriverGL::getBlendConstantColor" ></a><p>
+<table class="mdTable" 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="a03337.html">NLMISC::CRGBA</a> NL3D::CDriverGL::getBlendConstantColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+see <a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_6">supportBlendConstantColor()</a>. Get the current Blend Constant Color.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz153_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02576">2576</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01020">_CurrentBlendConstantColor</a>.
+<p>
+<div class="fragment"><pre>02577 {
+02578 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr2">_CurrentBlendConstantColor</a>;
+02579 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa29" doxytag="NL3D::CDriverGL::getBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::getBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02268.html">CBitmap</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>bitmap</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the RGBA back buffer<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>bitmap</em>&nbsp;</td><td>the buffer will be written in this bitmap</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera19">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02164">2164</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05642.html#l02131">getBufferPart()</a>, <a class="el" href="a05642.html#l01989">getWindowSize()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, and <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>.
+<p>
+<div class="fragment"><pre>02165 {
+02166 <a class="code" href="a03319.html">CRect</a> rect(0,0);
+02167 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa52">getWindowSize</a>(rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>);
+02168 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa30">getBufferPart</a>(bitmap, rect);
+02169 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa30" doxytag="NL3D::CDriverGL::getBufferPart" ></a><p>
+<table class="mdTable" 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::CDriverGL::getBufferPart </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02268.html">CBitmap</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>bitmap</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03319.html">NLMISC::CRect</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rect</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get a part of the RGBA back buffer NB: 0,0 is the bottom left corner of the screen.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>bitmap</em>&nbsp;</td><td>the buffer will be written in this bitmap </td></tr>
+ <tr><td valign=top><em>rect</em>&nbsp;</td><td>the in/out (wanted/clipped) part of Color buffer to retrieve.</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera20">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02131">2131</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05642.html#l02111">clipRect()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a06116.html#l00195">NLMISC::CObjectVector&lt; uint8 &gt;::getPtr()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, <a class="el" href="a05486.html#l01599">NLMISC::CBitmap::reset()</a>, <a class="el" href="a05486.html#l01545">NLMISC::CBitmap::resize()</a>, <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>, <a class="el" href="a06320.html#l00107">NLMISC::CRect::X</a>, and <a class="el" href="a06320.html#l00110">NLMISC::CRect::Y</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02164">getBuffer()</a>.
+<p>
+<div class="fragment"><pre>02132 {
+02133 bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturea32">reset</a>();
+02134
+02135 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLd5">clipRect</a>(rect))
+02136 {
+02137 bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturea33">resize</a>(rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>, CBitmap::RGBA);
+02138 glReadPixels (rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>, GL_RGBA, GL_UNSIGNED_BYTE, bitmap.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a> ().<a class="code" href="a03000.html#NLMISC_1_1CObjectVectorz1984_1">getPtr</a>());
+02139 }
+02140 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_6" doxytag="NL3D::CDriverGL::getDiffuseCubeMap" ></a><p>
+<table class="mdTable" 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="a03492.html">CTextureCube</a>* NL3D::CDriverGL::getDiffuseCubeMap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00821">821</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05648.html#l01266">getSpecularCubeMap()</a>.
+<p>
+<div class="fragment"><pre>00821 { <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_7">getSpecularCubeMap</a>(1); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa31" doxytag="NL3D::CDriverGL::getDisplay" ></a><p>
+<table class="mdTable" 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 void* NL3D::CDriverGL::getDisplay </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera21">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00229">229</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+<div class="fragment"><pre>00230 {
+00231 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00232 <span class="preprocessor"></span> <span class="keywordflow">return</span> (<span class="keywordtype">void</span>*)_hWnd;
+00233 <span class="preprocessor">#else // NL_OS_WINDOWS</span>
+00234 <span class="preprocessor"></span> <span class="keywordflow">return</span> NULL;
+00235 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+00236 <span class="preprocessor"></span> }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa32" doxytag="NL3D::CDriverGL::getDoubleClickDelay" ></a><p>
+<table class="mdTable" 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::CDriverGL::getDoubleClickDelay </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>hardwareMouse</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the delay in ms for mouse double clicks.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02527">2527</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a03867.html#NLMISC_1_1IMouseDevicea1">NLMISC::IMouseDevice::getDoubleClickDelay()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02528 {
+02529 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02530 <span class="preprocessor"></span> <a class="code" href="a03867.html">NLMISC::IMouseDevice</a> *md = NULL;
+02531 <span class="keywordflow">if</span> (_EventEmitter.getNumEmitters() &gt;= 2)
+02532 {
+02533 NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast&lt;CDIEventEmitter *&gt;(_EventEmitter.getEmitter(1));
+02534 <span class="keywordflow">if</span> (diee-&gt;isMouseCreated())
+02535 {
+02536 <span class="keywordflow">try</span>
+02537 {
+02538 md = diee-&gt;getMouseDevice(hardwareMouse);
+02539 }
+02540 <span class="keywordflow">catch</span> (EDirectInput &amp;)
+02541 {
+02542 <span class="comment">// could not get device .. </span>
+02543 }
+02544 }
+02545 }
+02546 <span class="keywordflow">if</span> (md)
+02547 {
+02548 <span class="keywordflow">return</span> md-&gt;<a class="code" href="a03867.html#NLMISC_1_1IMouseDevicea1">getDoubleClickDelay</a>();
+02549 }
+02550 <span class="comment">// try to read the good value from windows</span>
+02551 return ::GetDoubleClickTime();
+02552 <span class="preprocessor">#else</span>
+02553 <span class="preprocessor"></span> <span class="comment">// FIXME: FAKE FIX</span>
+02554 <span class="keywordflow">return</span> 250;
+02555 <span class="preprocessor">#endif</span>
+02556 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa33" doxytag="NL3D::CDriverGL::getDriverInformation" ></a><p>
+<table class="mdTable" 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 const char* NL3D::CDriverGL::getDriverInformation </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get driver informations. get the nel name of the driver (ex: "Opengl 1.2 NeL Driver")
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera22">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00389">389</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+<div class="fragment"><pre>00390 {
+00391 <span class="keywordflow">return</span> <span class="stringliteral">"Opengl 1.2 NeL Driver"</span>;
+00392 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa34" doxytag="NL3D::CDriverGL::getEventEmitter" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a03852.html">NLMISC::IEventEmitter</a>* NL3D::CDriverGL::getEventEmitter </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera23">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00249">249</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+<div class="fragment"><pre>00249 { <span class="keywordflow">return</span>&amp;_EventEmitter; };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz72_2" doxytag="NL3D::CDriverGL::getFogColor" ></a><p>
+<table class="mdTable" 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="a03337.html">CRGBA</a> NL3D::CDriverGL::getFogColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz143_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02293">2293</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00611">_CurrentFogColor</a>, <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>02294 {
+02295 <a class="code" href="a03337.html">CRGBA</a> ret;
+02296 ret.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>= (<a class="code" href="a04558.html#a7">uint8</a>)(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[0]*255);
+02297 ret.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>= (<a class="code" href="a04558.html#a7">uint8</a>)(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[1]*255);
+02298 ret.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>= (<a class="code" href="a04558.html#a7">uint8</a>)(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[2]*255);
+02299 ret.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>= (<a class="code" href="a04558.html#a7">uint8</a>)(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[3]*255);
+02300 <span class="keywordflow">return</span> ret;
+02301 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz72_3" doxytag="NL3D::CDriverGL::getFogEnd" ></a><p>
+<table class="mdTable" 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::CDriverGL::getFogEnd </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz143_3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02287">2287</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00610">_FogEnd</a>.
+<p>
+<div class="fragment"><pre>02288 {
+02289 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr8">_FogEnd</a>;
+02290 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz72_4" doxytag="NL3D::CDriverGL::getFogStart" ></a><p>
+<table class="mdTable" 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::CDriverGL::getFogStart </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz143_4">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02281">2281</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00610">_FogStart</a>.
+<p>
+<div class="fragment"><pre>02282 {
+02283 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr9">_FogStart</a>;
+02284 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd12" doxytag="NL3D::CDriverGL::getGlTextureFormat" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLint NL3D::CDriverGL::getGlTextureFormat </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>compressed</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05652.html#l00099">99</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00993">_ForceDXTCCompression</a>, <a class="el" href="a06506.html#l00352">NL3D::ITexture::allowDegradation()</a>, <a class="el" href="a05645.html#l00103">NL3D::CGlExtensions::ATIEnvMapBumpMap</a>, <a class="el" href="a05645.html#l00077">NL3D::CGlExtensions::EXTTextureCompressionS3TC</a>, <a class="el" href="a05487.html#l00335">NLMISC::CBitmap::getPixelFormat()</a>, <a class="el" href="a06506.html#l00212">NL3D::ITexture::getUploadFormat()</a>, <a class="el" href="a05646.html#l00444">GL_DSDT_NV</a>, <a class="el" href="a05646.html#l00679">GL_DU8DV8_ATI</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02185">copyFrameBufferToTexture()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, and <a class="el" href="a05652.html#l00807">uploadTexture()</a>.
+<p>
+<div class="fragment"><pre>00100 {
+00101 ITexture::TUploadFormat texfmt= tex.getUploadFormat();
+00102
+00103 <span class="comment">// If auto, retrieve the pixel format of the bitmap.</span>
+00104 <span class="keywordflow">if</span>(texfmt== ITexture::Auto)
+00105 {
+00106 <span class="keywordflow">switch</span>(tex.getPixelFormat())
+00107 {
+00108 <span class="keywordflow">case</span> CBitmap::RGBA:
+00109 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr10">_ForceDXTCCompression</a> &amp;&amp; tex.allowDegradation() )
+00110 texfmt= ITexture::DXTC5;
+00111 <span class="keywordflow">else</span>
+00112 texfmt= ITexture::RGBA8888;
+00113 <span class="keywordflow">break</span>;
+00114 <span class="keywordflow">case</span> CBitmap::DXTC1: texfmt= ITexture::DXTC1; <span class="keywordflow">break</span>;
+00115 <span class="keywordflow">case</span> CBitmap::DXTC1Alpha: texfmt= ITexture::DXTC1Alpha; <span class="keywordflow">break</span>;
+00116 <span class="keywordflow">case</span> CBitmap::DXTC3: texfmt= ITexture::DXTC3; <span class="keywordflow">break</span>;
+00117 <span class="keywordflow">case</span> CBitmap::DXTC5: texfmt= ITexture::DXTC5; <span class="keywordflow">break</span>;
+00118 <span class="keywordflow">case</span> CBitmap::Luminance: texfmt= ITexture::Luminance; <span class="keywordflow">break</span>;
+00119 <span class="keywordflow">case</span> CBitmap::Alpha: texfmt= ITexture::Alpha; <span class="keywordflow">break</span>;
+00120 <span class="keywordflow">case</span> CBitmap::AlphaLuminance: texfmt= ITexture::AlphaLuminance; <span class="keywordflow">break</span>;
+00121 <span class="keywordflow">case</span> CBitmap::DsDt: texfmt= ITexture::DsDt; <span class="keywordflow">break</span>;
+00122 <span class="keywordflow">default</span>: texfmt= ITexture::RGBA8888; <span class="keywordflow">break</span>;
+00123 }
+00124 }
+00125
+00126
+00127 <span class="comment">// Get gl tex format, try S3TC compressed ones.</span>
+00128 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTTextureCompressionS3TC)
+00129 {
+00130 compressed= <span class="keyword">true</span>;
+00131 <span class="comment">// Try Compressed ones.</span>
+00132 <span class="keywordflow">switch</span>(texfmt)
+00133 {
+00134 <span class="keywordflow">case</span> ITexture::DXTC1: <span class="keywordflow">return</span> GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
+00135 <span class="keywordflow">case</span> ITexture::DXTC1Alpha: <span class="keywordflow">return</span> GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+00136 <span class="keywordflow">case</span> ITexture::DXTC3: <span class="keywordflow">return</span> GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
+00137 <span class="keywordflow">case</span> ITexture::DXTC5: <span class="keywordflow">return</span> GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+00138 <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;
+00139 }
+00140 }
+00141
+00142
+00143 <span class="comment">// Get standard gl tex format.</span>
+00144 compressed= <span class="keyword">false</span>;
+00145 <span class="keywordflow">switch</span>(texfmt)
+00146 {
+00147 <span class="keywordflow">case</span> ITexture::RGBA8888: <span class="keywordflow">return</span> GL_RGBA8;
+00148 <span class="keywordflow">case</span> ITexture::RGBA4444: <span class="keywordflow">return</span> GL_RGBA4;
+00149 <span class="keywordflow">case</span> ITexture::RGBA5551: <span class="keywordflow">return</span> GL_RGB5_A1;
+00150 <span class="keywordflow">case</span> ITexture::RGB888: <span class="keywordflow">return</span> GL_RGB8;
+00151 <span class="keywordflow">case</span> ITexture::RGB565: <span class="keywordflow">return</span> GL_RGB5;
+00152 <span class="keywordflow">case</span> ITexture::Luminance: <span class="keywordflow">return</span> GL_LUMINANCE8;
+00153 <span class="keywordflow">case</span> ITexture::Alpha: <span class="keywordflow">return</span> GL_ALPHA8;
+00154 <span class="keywordflow">case</span> ITexture::AlphaLuminance: <span class="keywordflow">return</span> GL_LUMINANCE8_ALPHA8;
+00155 <span class="keywordflow">case</span> ITexture::DsDt:
+00156 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader) <span class="keywordflow">return</span> <a class="code" href="a04223.html#a203">GL_DSDT_NV</a>;
+00157 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIEnvMapBumpMap) <span class="keywordflow">return</span> <a class="code" href="a04223.html#a374">GL_DU8DV8_ATI</a>;
+00158 <span class="keywordflow">else</span>
+00159 {
+00160 <a class="code" href="a04199.html#a6">nlassert</a>(0);
+00161 <span class="keywordflow">return</span> 0;
+00162 }
+00163 <span class="keywordflow">break</span>;
+00164 <span class="keywordflow">default</span>: <span class="keywordflow">return</span> GL_RGBA8;
+00165 }
+00166 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa35" doxytag="NL3D::CDriverGL::getHwnd" ></a><p>
+<table class="mdTable" 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::CDriverGL::getHwnd </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00205">205</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00206 {
+00207 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00208 <span class="preprocessor"></span> <span class="keywordflow">return</span> (<a class="code" href="a04558.html#a11">uint32</a>)_hWnd;
+00209 <span class="preprocessor">#else // NL_OS_WINDOWS</span>
+00210 <span class="preprocessor"></span> <span class="keywordflow">return</span> 0;
+00211 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+00212 <span class="preprocessor"></span> }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa36" doxytag="NL3D::CDriverGL::getImplementationVersion" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a04558.html#a11">uint32</a> NL3D::CDriverGL::getImplementationVersion </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the driver version. Not the same than interface version. Incremented at each implementation change.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02434.html#NL3D_1_1IDrivers0">InterfaceVersion</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera24">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00384">384</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05642.html#l00096">ReleaseVersion</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00385 {
+00386 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLv5">ReleaseVersion</a>;
+00387 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa37" doxytag="NL3D::CDriverGL::getLowLevelInputDeviceManager" ></a><p>
+<table class="mdTable" 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="a03858.html">NLMISC::IInputDeviceManager</a> * NL3D::CDriverGL::getLowLevelInputDeviceManager </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Check wether there is a low level device manager available, and get its interface. Return NULL if not available From this interface you can deal with mouse and keyboard as above, but you can also manage game device (joysticks, joypads ...)
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02515">2515</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>02516 {
+02517 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02518 <span class="preprocessor"></span> <span class="keywordflow">if</span> (_EventEmitter.getNumEmitters() &lt; 2) <span class="keywordflow">return</span> NULL;
+02519 NLMISC::CDIEventEmitter *diee = NLMISC::safe_cast&lt;NLMISC::CDIEventEmitter *&gt;(_EventEmitter.getEmitter(1));
+02520 <span class="keywordflow">return</span> diee;
+02521 <span class="preprocessor">#else</span>
+02522 <span class="preprocessor"></span> <span class="keywordflow">return</span> NULL;
+02523 <span class="preprocessor">#endif</span>
+02524 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa38" doxytag="NL3D::CDriverGL::getMaxLight" ></a><p>
+<table class="mdTable" 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::CDriverGL::getMaxLight </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return the number of light supported by driver. typically 8.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLa15">enableLight()</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLa80">setLight()</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera25">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05647.html#l00035">35</a> of file <a class="el" href="a05647.html">driver_opengl_light.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00618">_MaxDriverLight</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00036 {
+00037 <span class="comment">// return min(maxLight supported by openGL, MaxLight=8).</span>
+00038 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>;
+00039 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa39" doxytag="NL3D::CDriverGL::getMaxVerticesByVertexBufferHard" ></a><p>
+<table class="mdTable" 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::CDriverGL::getMaxVerticesByVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return How many vertices VertexBufferHard support
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera26">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00509">509</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00897">_MaxVerticesByVBHard</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00510 {
+00511 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>;
+00512 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa40" doxytag="NL3D::CDriverGL::getModes" ></a><p>
+<table class="mdTable" 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::CDriverGL::getModes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="a03831.html">GfxMode</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>modes</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera27">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01412">1412</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00088">NL3D::GfxMode::Depth</a>, <a class="el" href="a05640.html#l00089">NL3D::GfxMode::Frequency</a>, <a class="el" href="a05640.html#l00087">NL3D::GfxMode::Height</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00096">uint8</a>, and <a class="el" href="a05640.html#l00086">NL3D::GfxMode::Width</a>.
+<p>
+<div class="fragment"><pre>01413 {
+01414 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01415 <span class="preprocessor"></span> <a class="code" href="a04558.html#a14">sint</a> modeIndex = 0;
+01416 DEVMODE devMode;
+01417 <span class="keywordflow">while</span> (EnumDisplaySettings (NULL, modeIndex, &amp;devMode))
+01418 {
+01419 <span class="comment">// Keep only 16 and 32 bits</span>
+01420 <span class="keywordflow">if</span> ((devMode.dmBitsPerPel == 16 ) || (devMode.dmBitsPerPel == 32))
+01421 {
+01422 <span class="comment">// Add this mode</span>
+01423 GfxMode mode;
+01424 mode.Width = (<a class="code" href="a04558.html#a9">uint16</a>)devMode.dmPelsWidth;
+01425 mode.Height = (<a class="code" href="a04558.html#a9">uint16</a>)devMode.dmPelsHeight;
+01426 mode.Depth = (<a class="code" href="a04558.html#a7">uint8</a>)devMode.dmBitsPerPel;
+01427 mode.Frequency = devMode.dmDisplayFrequency;
+01428 modes.push_back (mode);
+01429 }
+01430
+01431 <span class="comment">// Mode index</span>
+01432 modeIndex++;
+01433 }
+01434 <span class="preprocessor">#endif</span>
+01435 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01436 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa41" doxytag="NL3D::CDriverGL::getNbTextureStages" ></a><p>
+<table class="mdTable" 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::CDriverGL::getNbTextureStages </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the number of texture stage avaliable, for multitexturing (Normal material shaders). Valid only after <a class="el" href="a02433.html#NL3D_1_1CDriverGLa78">setDisplay()</a>.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera28">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02582">2582</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+<div class="fragment"><pre>02583 {
+02584 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>();
+02585 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivera29" doxytag="NL3D::CDriverGL::getPolygonMode" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a> NL3D::IDriver::getPolygonMode </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the global polygon mode.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>polygon</em>&nbsp;</td><td>mode choose in this driver. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02434.html#NL3D_1_1IDrivera65">setPolygonMode()</a>, <a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a></dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00817">817</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+References <a class="el" href="a05640.html#l00165">NL3D::IDriver::_PolygonMode</a>, and <a class="el" href="a05640.html#l00140">NL3D::IDriver::TPolygonMode</a>.
+<p>
+Referenced by <a class="el" href="a05657.html#l01114">NL3D::CDriverUser::getPolygonMode()</a>.
+<p>
+<div class="fragment"><pre>00818 {
+00819 <span class="keywordflow">return</span> <a class="code" href="a02434.html#NL3D_1_1IDriverp0">_PolygonMode</a>;
+00820 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLGEORGES_1_1UTypea8" doxytag="NL3D::CDriverGL::getRefCount" ></a><p>
+<table class="mdTable" 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="a04558.html#a14">sint</a>&amp; NLMISC::CRefCount::getRefCount </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00070">70</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00079">NLMISC::CRefCount::crefs</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+<div class="fragment"><pre>00071 {
+00072 <span class="keywordflow">return</span> <a class="code" href="a02209.html#NLGEORGES_1_1UTypeo0">crefs</a>;
+00073 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_7" doxytag="NL3D::CDriverGL::getSpecularCubeMap" ></a><p>
+<table class="mdTable" 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="a03492.html">CTextureCube</a> * NL3D::CDriverGL::getSpecularCubeMap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>exp</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get (and if necessary, build) a cube map used for specular lighting. The range for exponent is limited, and only the best fit is used
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01266">1266</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00814">_SpecularTextureCubes</a>, <a class="el" href="a05619.html#l00099">NL3D::BuildCubeMap()</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a06514.html#l00062">NL3D::CTextureCube::getTexture()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06505.html#l00088">NL3D::ITexture::setUploadFormat()</a>, <a class="el" href="a05586.html#l00161">NLMISC::smprintf()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00098">uint16</a>.
+<p>
+Referenced by <a class="el" href="a05643.html#l00821">getDiffuseCubeMap()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, and <a class="el" href="a05648.html#l01376">setupPPLPass()</a>.
+<p>
+<div class="fragment"><pre>01267 {
+01268 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> DiffuseMapSize = 64;
+01269 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> SpecularMapSize = 32;
+01270 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> SpecularMapSizeHighExponent = 64;
+01271 <span class="keyword">const</span> <span class="keywordtype">float</span> HighExponent = 128.f;
+01272 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> MaxExponent = 512;
+01273 <span class="comment">// this gives the cube map to use given an exponent (from 0 to 128)</span>
+01274 <span class="keyword">static</span> <a class="code" href="a04558.html#a9">uint16</a> expToCubeMap[MaxExponent];
+01275 <span class="comment">// this gives the exponent used by a given cube map (not necessarily ordered)</span>
+01276 <span class="keyword">static</span> <span class="keywordtype">float</span> cubeMapExp[] =
+01277 {
+01278 1.f, 4.f, 8.f, 24.f, 48.f, 128.f, 256.f, 511.f
+01279 };
+01280 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> numCubeMap = <span class="keyword">sizeof</span>(expToCubeMap) / <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>);
+01281 <span class="keyword">static</span> <span class="keywordtype">bool</span> tableBuilt = <span class="keyword">false</span>;
+01282
+01283 <span class="keywordflow">if</span> (!tableBuilt)
+01284 {
+01285 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; MaxExponent; ++k)
+01286 {
+01287 <a class="code" href="a04558.html#a15">uint</a> nearest = 0;
+01288 <span class="keywordtype">float</span> diff = (<span class="keywordtype">float</span>) MaxExponent;
+01289 <span class="comment">// look for the nearest exponent</span>
+01290 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05373.html#a2">l</a> = 0; <a class="code" href="a05373.html#a2">l</a> &lt; numCubeMap; ++<a class="code" href="a05373.html#a2">l</a>)
+01291 {
+01292 <span class="keywordtype">float</span> newDiff = ::fabsf(k - cubeMapExp[<a class="code" href="a05373.html#a2">l</a>]);
+01293 <span class="keywordflow">if</span> (newDiff &lt; diff)
+01294 {
+01295 diff = newDiff;
+01296 nearest = <a class="code" href="a05373.html#a2">l</a>;
+01297 }
+01298 }
+01299 expToCubeMap[k] = nearest;
+01300 }
+01301 tableBuilt = <span class="keyword">true</span>;
+01302 }
+01303
+01304 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_10">_SpecularTextureCubes</a>.empty())
+01305 {
+01306 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_10">_SpecularTextureCubes</a>.resize(MaxExponent);
+01307 }
+01308
+01309
+01310 <a class="code" href="a05378.html#a374">NLMISC::clamp</a>(exp, 1u, (MaxExponent - 1));
+01311
+01312
+01313 <a class="code" href="a04558.html#a15">uint</a> cubeMapIndex = expToCubeMap[(<a class="code" href="a04558.html#a15">uint</a>) exp];
+01314 <a class="code" href="a04199.html#a6">nlassert</a>(cubeMapIndex &lt; numCubeMap);
+01315
+01316
+01317 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_10">_SpecularTextureCubes</a>[cubeMapIndex] != NULL) <span class="comment">// has the cube map already been cted ?</span>
+01318 {
+01319 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_10">_SpecularTextureCubes</a>[cubeMapIndex];
+01320 }
+01321 <span class="keywordflow">else</span> <span class="comment">// build the cube map</span>
+01322 {
+01323 <span class="keywordtype">float</span> exponent = cubeMapExp[cubeMapIndex];
+01324 CSpecCubeMapFunctor scmf(exponent);
+01325 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> bufSize = 128;
+01326 <span class="keywordtype">char</span> name[bufSize];
+01327 <a class="code" href="a05378.html#a259">NLMISC::smprintf</a>(name, bufSize, <span class="stringliteral">"#SM%d"</span>, cubeMapIndex);
+01328 CTextureCube *tc;
+01329 <span class="keywordflow">if</span> (exponent == 1)
+01330 {
+01331 tc = <a class="code" href="a05363.html#a374">BuildCubeMap</a>(DiffuseMapSize, scmf, <span class="keyword">false</span>, name);
+01332 }
+01333 <span class="keywordflow">else</span>
+01334 {
+01335 tc = <a class="code" href="a05363.html#a374">BuildCubeMap</a>(exponent &gt;= HighExponent ? SpecularMapSizeHighExponent
+01336 : SpecularMapSize,
+01337 scmf,
+01338 <span class="keyword">false</span>,
+01339 name);
+01340 }
+01341
+01342 <span class="keyword">static</span> <span class="keyword">const</span> CTextureCube::TFace numToFace[] =
+01343 { CTextureCube::positive_x,
+01344 CTextureCube::negative_x,
+01345 CTextureCube::positive_y,
+01346 CTextureCube::negative_y,
+01347 CTextureCube::positive_z,
+01348 CTextureCube::negative_z
+01349 };
+01350
+01351 <span class="keywordflow">if</span> (exponent != 1.f)
+01352 {
+01353 <span class="comment">// force 16 bit for specular part, 32 bit if exponent is 1 (diffuse part)</span>
+01354 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; 6; ++k)
+01355 {
+01356 <a class="code" href="a04199.html#a6">nlassert</a>(tc-&gt;getTexture(numToFace[k]));
+01357 tc-&gt;getTexture(numToFace[k])-&gt;setUploadFormat(ITexture::RGB565);
+01358 }
+01359 }
+01360
+01361 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_10">_SpecularTextureCubes</a>[cubeMapIndex] = tc;
+01362 <span class="keywordflow">return</span> tc;
+01363 }
+01364 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz107_0" doxytag="NL3D::CDriverGL::getSupportedShader" ></a><p>
+<table class="mdTable" 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="a02839.html#NL3D_1_1CMaterialw65">CMaterial::TShader</a> NL3D::CDriverGL::getSupportedShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html#NL3D_1_1CMaterialw65">CMaterial::TShader</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>shader</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+test wether the given shader is supported, and gives back a supported shader
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00221">221</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00628">_SupportPerPixelShader</a>, <a class="el" href="a05643.html#l00629">_SupportPerPixelShaderNoSpec</a>, and <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00257">setupMaterial()</a>.
+<p>
+<div class="fragment"><pre>00222 {
+00223 <span class="keywordflow">switch</span> (shader)
+00224 {
+00225 <span class="keywordflow">case</span> CMaterial::PerPixelLighting: <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_4">_SupportPerPixelShader</a> ? CMaterial::PerPixelLighting : CMaterial::Normal;
+00226 <span class="keywordflow">case</span> CMaterial::PerPixelLightingNoSpec: <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_5">_SupportPerPixelShaderNoSpec</a> ? CMaterial::PerPixelLightingNoSpec : CMaterial::Normal;
+00227 <span class="comment">// Lightmap and Specular work only if at least 2 text stages.</span>
+00228 <span class="keywordflow">case</span> CMaterial::LightMap: <span class="keywordflow">return</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>()&gt;=2) ? CMaterial::LightMap : CMaterial::Normal;
+00229 <span class="keywordflow">case</span> CMaterial::Specular: <span class="keywordflow">return</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>()&gt;=2) ? CMaterial::Specular : CMaterial::Normal;
+00230 <span class="keywordflow">default</span>: <span class="keywordflow">return</span> shader;
+00231 }
+00232 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa44" doxytag="NL3D::CDriverGL::getSwapVBLInterval" ></a><p>
+<table class="mdTable" 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::CDriverGL::getSwapVBLInterval </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the number of VBL wait when a <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> is issued. 0 means no synchronisation to the VBL
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera31">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03046">3046</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05645.html#l00097">NL3D::CGlExtensions::WGLEXTSwapControl</a>.
+<p>
+<div class="fragment"><pre>03047 {
+03048 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+03049 <span class="preprocessor"></span> <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.WGLEXTSwapControl)
+03050 {
+03051 <span class="keywordflow">return</span> wglGetSwapIntervalEXT();
+03052 }
+03053 <span class="keywordflow">else</span>
+03054 <span class="keywordflow">return</span> 0;
+03055 <span class="preprocessor">#else</span>
+03056 <span class="preprocessor"></span> <span class="keywordflow">return</span> 0;
+03057 <span class="preprocessor">#endif</span>
+03058 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa45" doxytag="NL3D::CDriverGL::getTextureHandle" ></a><p>
+<table class="mdTable" 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::CDriverGL::getTextureHandle </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>tex</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Advanced usage. Get the texture Handle. Usefull for texture sorting for instance NB: if the texture is not setuped in the driver, 0 is returned. NB: if implementation does not support it, 0 may be returned. OpenGL ones return the Texture ID. NB: unlike <a class="el" href="a02433.html#NL3D_1_1CDriverGLa60">isTextureExist()</a>, this method is not thread safe.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera32">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l01217">1217</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00108">NL3D::CTextureDrvInfosGL::ID</a>, <a class="el" href="a06506.html#l00416">NL3D::ITexture::TextureDrvShare</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01218 {
+01219 <span class="comment">// If DrvShare not setuped</span>
+01220 <span class="keywordflow">if</span>(!tex.TextureDrvShare)
+01221 <span class="keywordflow">return</span> 0;
+01222
+01223 <span class="comment">// If DrvInfo not setuped</span>
+01224 <span class="keyword">const</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a> *t0= (<span class="keyword">const</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>*)(<span class="keyword">const</span> <a class="code" href="a02434.html#NL3D_1_1IDrivern3">ITextureDrvInfos</a>*)(tex.TextureDrvShare-&gt;DrvTexture);
+01225 <span class="keywordflow">if</span>(!t0)
+01226 <span class="keywordflow">return</span> 0;
+01227
+01228 <span class="keywordflow">return</span> t0-&gt;ID;
+01229 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivere0" doxytag="NL3D::CDriverGL::getTextureShareName" ></a><p>
+<table class="mdTable" 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::IDriver::getTextureShareName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::string &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>output</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the driver share texture name
+<p>
+Definition at line <a class="el" href="a05639.html#l00277">277</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a06506.html#l00338">NL3D::ITexture::getShareName()</a>, <a class="el" href="a06506.html#l00212">NL3D::ITexture::getUploadFormat()</a>, <a class="el" href="a06506.html#l00217">NL3D::ITexture::mipMapOn()</a>, <a class="el" href="a05586.html#l00161">NLMISC::smprintf()</a>, <a class="el" href="a05586.html#l00536">NLMISC::strlwr()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05639.html#l00243">NL3D::IDriver::invalidateShareTexture()</a>, <a class="el" href="a05642.html#l01493">isTextureExist()</a>, and <a class="el" href="a05652.html#l00361">setupTextureEx()</a>.
+<p>
+<div class="fragment"><pre>00278 {
+00279 <span class="comment">// Create the shared Name.</span>
+00280 output= <a class="code" href="a05378.html#a273">strlwr</a>(tex.getShareName());
+00281
+00282 <span class="comment">// append format Id of the texture.</span>
+00283 <span class="keyword">static</span> <span class="keywordtype">char</span> fmt[256];
+00284 <a class="code" href="a05378.html#a259">smprintf</a>(fmt, 256, <span class="stringliteral">"@Fmt:%d"</span>, (<a class="code" href="a04558.html#a11">uint32</a>)tex.getUploadFormat());
+00285 output+= fmt;
+00286
+00287 <span class="comment">// append mipmap info</span>
+00288 <span class="keywordflow">if</span>(tex.mipMapOn())
+00289 output+= <span class="stringliteral">"@MMp:On"</span>;
+00290 <span class="keywordflow">else</span>
+00291 output+= <span class="stringliteral">"@MMp:Off"</span>;
+00292 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa46" doxytag="NL3D::CDriverGL::getUsedTextureMemory" ></a><p>
+<table class="mdTable" 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::CDriverGL::getUsedTextureMemory </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return the amount of texture video memory used since last <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> call. Before use this method, you should enable the sum with <a class="el" href="a02433.html#NL3D_1_1CDriverGLa18">enableUsedTextureMemorySum()</a>.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02343">2343</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00921">_TextureUsed</a>, <a class="el" href="a05643.html#l00115">NL3D::CTextureDrvInfosGL::TextureMemory</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>02344 {
+02345 <span class="comment">// Sum memory used</span>
+02346 <a class="code" href="a04558.html#a11">uint32</a> memory=0;
+02347
+02348 <span class="comment">// For each texture used</span>
+02349 set&lt;CTextureDrvInfosGL*&gt;::iterator ite=<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_10">_TextureUsed</a>.begin();
+02350 <span class="keywordflow">while</span> (ite!=<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_10">_TextureUsed</a>.end())
+02351 {
+02352 <span class="comment">// Get the gl texture</span>
+02353 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>* gltext;
+02354 gltext= (*ite);
+02355
+02356 <span class="comment">// Sum the memory used by this texture</span>
+02357 memory+=gltext-&gt;TextureMemory;
+02358
+02359 <span class="comment">// Next texture</span>
+02360 ite++;
+02361 }
+02362
+02363 <span class="comment">// Return the count</span>
+02364 <span class="keywordflow">return</span> memory;
+02365 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa47" doxytag="NL3D::CDriverGL::getVideocardInformation" ></a><p>
+<table class="mdTable" 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 char * NL3D::CDriverGL::getVideocardInformation </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get videocard informations. get the official name of the driver
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera33">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02059">2059</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00559">_Initialized</a>, and <a class="el" href="a05586.html#l00161">NLMISC::smprintf()</a>.
+<p>
+<div class="fragment"><pre>02060 {
+02061 <span class="keyword">static</span> <span class="keywordtype">char</span> name[1024];
+02062
+02063 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr15">_Initialized</a>) <span class="keywordflow">return</span> <span class="stringliteral">"OpenGL isn't initialized"</span>;
+02064
+02065 <span class="keyword">const</span> <span class="keywordtype">char</span> *vendor = (<span class="keyword">const</span> <span class="keywordtype">char</span> *) glGetString (GL_VENDOR);
+02066 <span class="keyword">const</span> <span class="keywordtype">char</span> *renderer = (<span class="keyword">const</span> <span class="keywordtype">char</span> *) glGetString (GL_RENDERER);
+02067 <span class="keyword">const</span> <span class="keywordtype">char</span> *version = (<span class="keyword">const</span> <span class="keywordtype">char</span> *) glGetString (GL_VERSION);
+02068
+02069 <a class="code" href="a05378.html#a259">smprintf</a>(name, 1024, <span class="stringliteral">"%s / %s / %s"</span>, vendor, renderer, version);
+02070 <span class="keywordflow">return</span> name;
+02071 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa48" doxytag="NL3D::CDriverGL::getViewMatrix" ></a><p>
+<table class="mdTable" 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="a02851.html">CMatrix</a> NL3D::CDriverGL::getViewMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera34">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05649.html#l00118">118</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00593">_UserViewMtx</a>.
+<p>
+<div class="fragment"><pre>00119 {
+00120 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr35">_UserViewMtx</a>;
+00121 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa49" doxytag="NL3D::CDriverGL::getViewport" ></a><p>
+<table class="mdTable" 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::CDriverGL::getViewport </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03704.html">CViewport</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>viewport</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the current viewport
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera35">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01866">1866</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00614">_CurrViewport</a>.
+<p>
+<div class="fragment"><pre>01867 {
+01868 viewport = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr5">_CurrViewport</a>;
+01869 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa50" doxytag="NL3D::CDriverGL::getWindowPos" ></a><p>
+<table class="mdTable" 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::CDriverGL::getWindowPos </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>x</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> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>y</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the position of the window always (0,0) in fullscreen.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera36">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02017">2017</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00524">_OffScreen</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>02018 {
+02019 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02020 <span class="preprocessor"></span> <span class="comment">// Off-srceen rendering ?</span>
+02021 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a>)
+02022 {
+02023 <span class="keywordflow">if</span> (_PBuffer)
+02024 {
+02025 <a class="code" href="a04223.html#a572">x</a> = <a class="code" href="a04223.html#a573">y</a> = 0;
+02026 }
+02027 }
+02028 <span class="keywordflow">else</span>
+02029 {
+02030 <span class="keywordflow">if</span> (_hWnd)
+02031 {
+02032 <a class="code" href="a04223.html#a572">x</a> = (<a class="code" href="a04558.html#a11">uint32</a>)(_WindowX);
+02033 <a class="code" href="a04223.html#a573">y</a> = (<a class="code" href="a04558.html#a11">uint32</a>)(_WindowY);
+02034 }
+02035 }
+02036 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+02037 <span class="preprocessor"></span> <a class="code" href="a04223.html#a572">x</a> = <a class="code" href="a04223.html#a573">y</a> = 0;
+02038 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+02039 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa51" doxytag="NL3D::CDriverGL::getWindowProc" ></a><p>
+<table class="mdTable" 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="a05363.html#a20">emptyProc</a> NL3D::CDriverGL::getWindowProc </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera37">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01462">1462</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00114">NL3D::emptyProc</a>.
+<p>
+<div class="fragment"><pre>01463 {
+01464 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01465 <span class="preprocessor"></span> <span class="keywordflow">return</span> (<a class="code" href="a05363.html#a20">emptyProc</a>)GlWndProc;
+01466 <span class="preprocessor">#else // NL_OS_WINDOWS</span>
+01467 <span class="preprocessor"></span> <span class="keywordflow">return</span> NULL;
+01468 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+01469 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa52" doxytag="NL3D::CDriverGL::getWindowSize" ></a><p>
+<table class="mdTable" 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::CDriverGL::getWindowSize </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>width</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> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>height</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the width and the height of the window.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera38">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01989">1989</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00524">_OffScreen</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05646.html#l00347">WGL_PBUFFER_HEIGHT_ARB</a>, <a class="el" href="a05646.html#l00346">WGL_PBUFFER_WIDTH_ARB</a>, and <a class="el" href="a05646.html#l01013">width</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02111">clipRect()</a>, <a class="el" href="a05642.html#l02171">fillBuffer()</a>, <a class="el" href="a05642.html#l02164">getBuffer()</a>, and <a class="el" href="a05642.html#l02157">getZBuffer()</a>.
+<p>
+<div class="fragment"><pre>01990 {
+01991 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01992 <span class="preprocessor"></span> <span class="comment">// Off-srceen rendering ?</span>
+01993 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a>)
+01994 {
+01995 <span class="keywordflow">if</span> (_PBuffer)
+01996 {
+01997 wglQueryPbufferARB( _PBuffer, WGL_PBUFFER_WIDTH_ARB, (<span class="keywordtype">int</span>*)&amp;width );
+01998 wglQueryPbufferARB( _PBuffer, WGL_PBUFFER_HEIGHT_ARB, (<span class="keywordtype">int</span>*)&amp;height );
+01999 }
+02000 }
+02001 <span class="keywordflow">else</span>
+02002 {
+02003 <span class="keywordflow">if</span> (_hWnd)
+02004 {
+02005 <a class="code" href="a04223.html#a632">width</a> = (<a class="code" href="a04558.html#a11">uint32</a>)(_WindowWidth);
+02006 <a class="code" href="a04223.html#a633">height</a> = (<a class="code" href="a04558.html#a11">uint32</a>)(_WindowHeight);
+02007 }
+02008 }
+02009 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+02010 <span class="preprocessor"></span> XWindowAttributes xwa;
+02011 XGetWindowAttributes (dpy, win, &amp;xwa);
+02012 <a class="code" href="a04223.html#a632">width</a> = (<a class="code" href="a04558.html#a11">uint32</a>) xwa.width;
+02013 <a class="code" href="a04223.html#a633">height</a> = (<a class="code" href="a04558.html#a11">uint32</a>) xwa.height;
+02014 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+02015 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa53" doxytag="NL3D::CDriverGL::getZBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::getZBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; float &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>zbuffer</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get the ZBuffer (back buffer).<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>zbuffer</em>&nbsp;</td><td>the returned array of Z. size of <a class="el" href="a02433.html#NL3D_1_1CDriverGLa52">getWindowSize()</a> .</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera39">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02157">2157</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05642.html#l01989">getWindowSize()</a>, <a class="el" href="a05642.html#l02143">getZBufferPart()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, and <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>.
+<p>
+<div class="fragment"><pre>02158 {
+02159 <a class="code" href="a03319.html">CRect</a> rect(0,0);
+02160 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa52">getWindowSize</a>(rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>);
+02161 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa54">getZBufferPart</a>(zbuffer, rect);
+02162 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa54" doxytag="NL3D::CDriverGL::getZBufferPart" ></a><p>
+<table class="mdTable" 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::CDriverGL::getZBufferPart </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; float &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>zbuffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03319.html">NLMISC::CRect</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rect</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get a part of the ZBuffer (back buffer). NB: 0,0 is the bottom left corner of the screen.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>zbuffer</em>&nbsp;</td><td>the returned array of Z. size of rec.Width*rec.Height. </td></tr>
+ <tr><td valign=top><em>rect</em>&nbsp;</td><td>the in/out (wanted/clipped) part of ZBuffer to retrieve.</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera40">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02143">2143</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05642.html#l02111">clipRect()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>, <a class="el" href="a06320.html#l00107">NLMISC::CRect::X</a>, and <a class="el" href="a06320.html#l00110">NLMISC::CRect::Y</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02157">getZBuffer()</a>.
+<p>
+<div class="fragment"><pre>02144 {
+02145 zbuffer.clear();
+02146
+02147 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLd5">clipRect</a>(rect))
+02148 {
+02149 zbuffer.resize(rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>*rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>);
+02150 glPixelTransferf(GL_DEPTH_SCALE, 1.0f) ;
+02151 glPixelTransferf(GL_DEPTH_BIAS, 0.f) ;
+02152 glReadPixels (rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>, rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>, GL_DEPTH_COMPONENT , GL_FLOAT, &amp;(zbuffer[0]));
+02153 }
+02154 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa55" doxytag="NL3D::CDriverGL::init" ></a><p>
+<table class="mdTable" 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::CDriverGL::init </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>windowIcon</em> = 0 </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera42">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l00310">310</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05642.html#l03199">retrieveATIDriverVersion()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00311 {
+00312 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00313 <span class="preprocessor"></span> WNDCLASS wc;
+00314
+00315 <span class="keywordflow">if</span> (!_Registered)
+00316 {
+00317 memset(&amp;wc,0,<span class="keyword">sizeof</span>(wc));
+00318 wc.style = CS_HREDRAW | CS_VREDRAW ;<span class="comment">//| CS_DBLCLKS;</span>
+00319 wc.lpfnWndProc = (WNDPROC)WndProc;
+00320 wc.cbClsExtra = 0;
+00321 wc.cbWndExtra = 0;
+00322 wc.hInstance = GetModuleHandle(NULL);
+00323 wc.hIcon = (HICON)windowIcon;
+00324 wc.hCursor = LoadCursor(NULL,IDC_ARROW);
+00325 wc.hbrBackground = WHITE_BRUSH;
+00326 wc.lpszClassName = <span class="stringliteral">"NLClass"</span>;
+00327 wc.lpszMenuName = NULL;
+00328 <span class="keywordflow">if</span> ( !RegisterClass(&amp;wc) )
+00329 {
+00330 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00331 }
+00332 _Registered=1;
+00333 }
+00334
+00335 <span class="comment">// Backup monitor color parameters</span>
+00336 HDC dc = CreateDC (<span class="stringliteral">"DISPLAY"</span>, NULL, NULL, NULL);
+00337 <span class="keywordflow">if</span> (dc)
+00338 {
+00339 _NeedToRestaureGammaRamp = GetDeviceGammaRamp (dc, _GammaRampBackuped) != FALSE;
+00340
+00341 <span class="comment">// Release the DC</span>
+00342 ReleaseDC (NULL, dc);
+00343 }
+00344 <span class="keywordflow">else</span>
+00345 {
+00346 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"(CDriverGL::init): can't create DC"</span>);
+00347 }
+00348
+00349 <span class="comment">// ati specific : try to retrieve driver version</span>
+00350 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd18">retrieveATIDriverVersion</a>();
+00351
+00352 <span class="preprocessor">#endif</span>
+00353 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00354 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz109_1" doxytag="NL3D::CDriverGL::initCausticCubeMap" ></a><p>
+<table class="mdTable" 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::CDriverGL::initCausticCubeMap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [static, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd13" doxytag="NL3D::CDriverGL::initEMBM" ></a><p>
+<table class="mdTable" 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::CDriverGL::initEMBM </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02686">2686</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00675">_StageSupportEMBM</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05645.html#l00103">NL3D::CGlExtensions::ATIEnvMapBumpMap</a>, <a class="el" href="a05646.html#l00676">GL_BUMP_NUM_TEX_UNITS_ATI</a>, <a class="el" href="a05646.html#l00681">GL_BUMP_TARGET_ATI</a>, <a class="el" href="a05646.html#l00677">GL_BUMP_TEX_UNITS_ATI</a>, <a class="el" href="a05969.html#l00047">NL3D::IDRV_MAT_MAXTEXTURES</a>, <a class="el" href="a05645.html#l00374">nglGetTexBumpParameterivATI</a>, <a class="el" href="a05642.html#l02657">supportEMBM()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02687 {
+02688 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz76_2">supportEMBM</a>())
+02689 {
+02690 std::fill(_StageSupportEMBM, _StageSupportEMBM + IDRV_MAT_MAXTEXTURES, <span class="keyword">false</span>);
+02691 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIEnvMapBumpMap)
+02692 {
+02693 <span class="comment">// Test which stage support EMBM</span>
+02694 GLint numEMBMUnits;
+02695 <a class="code" href="a04222.html#a152">nglGetTexBumpParameterivATI</a>(GL_BUMP_NUM_TEX_UNITS_ATI, &amp;numEMBMUnits);
+02696 std::vector&lt;GLint&gt; EMBMUnits(numEMBMUnits);
+02697 <span class="comment">// get array of units that supports EMBM</span>
+02698 <a class="code" href="a04222.html#a152">nglGetTexBumpParameterivATI</a>(GL_BUMP_TEX_UNITS_ATI, &amp;EMBMUnits[0]);
+02699 <a class="code" href="a04558.html#a15">uint</a> k;
+02700 <span class="keywordflow">for</span>(k = 0; k &lt; (EMBMUnits.size() - 1); ++k)
+02701 {
+02702 <a class="code" href="a04558.html#a15">uint</a> stage = EMBMUnits[k] - GL_TEXTURE0_ARB;
+02703 <span class="keywordflow">if</span> (stage &lt; (<a class="code" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a> - 1))
+02704 {
+02705 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_13">_StageSupportEMBM</a>[k] = <span class="keyword">true</span>;
+02706 }
+02707 }
+02708 <span class="comment">// setup each stage to apply the bump map to the next stage</span>
+02709 <span class="keywordflow">for</span>(k = 0; k &lt; <a class="code" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a> - 1; ++k)
+02710 {
+02711 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_13">_StageSupportEMBM</a>[k])
+02712 {
+02713 <span class="comment">// setup each stage so that it apply EMBM on the next stage</span>
+02714 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(k);
+02715 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+02716 glTexEnvi(GL_TEXTURE_ENV, GL_BUMP_TARGET_ATI, GL_TEXTURE0_ARB + k + 1);
+02717 }
+02718 }
+02719 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+02720 }
+02721 }
+02722 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_2" doxytag="NL3D::CDriverGL::initFragmentShaders" ></a><p>
+<table class="mdTable" 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::CDriverGL::initFragmentShaders </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02920">2920</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00108">NL3D::CGlExtensions::ARBFragmentProgram</a>, <a class="el" href="a05643.html#l01063">ARBWaterShader</a>, <a class="el" href="a05645.html#l00104">NL3D::CGlExtensions::ATIFragmentShader</a>, <a class="el" href="a05643.html#l01061">ATIWaterShaderHandle</a>, <a class="el" href="a05643.html#l01060">ATIWaterShaderHandleNoDiffuseMap</a>, <a class="el" href="a05642.html#l02996">deleteARBFragmentPrograms()</a>, <a class="el" href="a05642.html#l02897">NL3D::fetchPerturbedEnvMapR200()</a>, <a class="el" href="a05646.html#l00762">GL_MOV_ATI</a>, <a class="el" href="a05646.html#l00764">GL_MUL_ATI</a>, <a class="el" href="a05646.html#l00698">GL_REG_0_ATI</a>, <a class="el" href="a05646.html#l00700">GL_REG_2_ATI</a>, <a class="el" href="a05646.html#l00701">GL_REG_3_ATI</a>, <a class="el" href="a05646.html#l00782">GL_SWIZZLE_STR_ATI</a>, <a class="el" href="a05642.html#l02865">NL3D::loadARBFragmentProgramStringNative()</a>, <a class="el" href="a05645.html#l00439">nglAlphaFragmentOp1ATI</a>, <a class="el" href="a05645.html#l00440">nglAlphaFragmentOp2ATI</a>, <a class="el" href="a05645.html#l00432">nglBeginFragmentShaderATI</a>, <a class="el" href="a05645.html#l00430">nglBindFragmentShaderATI</a>, <a class="el" href="a05645.html#l00436">nglColorFragmentOp1ATI</a>, <a class="el" href="a05645.html#l00437">nglColorFragmentOp2ATI</a>, <a class="el" href="a05645.html#l00433">nglEndFragmentShaderATI</a>, <a class="el" href="a05645.html#l00429">nglGenFragmentShadersATI</a>, <a class="el" href="a05645.html#l00435">nglSampleMapATI</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#l00105">uint</a>, <a class="el" href="a05642.html#l02793">NL3D::WaterCodeForARBFragmentProgram</a>, <a class="el" href="a05642.html#l02730">NL3D::WaterCodeNoDiffuseForARBFragmentProgram</a>, <a class="el" href="a05642.html#l02755">NL3D::WaterCodeNoDiffuseWithFogForARBFragmentProgram</a>, and <a class="el" href="a05642.html#l02825">NL3D::WaterCodeWithFogForARBFragmentProgram</a>.
+<p>
+<div class="fragment"><pre>02921 {
+02923 <span class="comment">// WATER SHADERS //</span>
+02925 <span class="comment"></span>
+02926 <span class="comment">// the ARB_fragment_program is prioritary over other extensions when present</span>
+02927 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBFragmentProgram)
+02928 {
+02929
+02930 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[0] = <a class="code" href="a05363.html#a376">loadARBFragmentProgramStringNative</a>(WaterCodeNoDiffuseForARBFragmentProgram);
+02931 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[1] = <a class="code" href="a05363.html#a376">loadARBFragmentProgramStringNative</a>(WaterCodeNoDiffuseWithFogForARBFragmentProgram);
+02932 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[2] = <a class="code" href="a05363.html#a376">loadARBFragmentProgramStringNative</a>(WaterCodeForARBFragmentProgram);
+02933 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[3] = <a class="code" href="a05363.html#a376">loadARBFragmentProgramStringNative</a>(WaterCodeWithFogForARBFragmentProgram);
+02934 <span class="keywordtype">bool</span> ok = <span class="keyword">true</span>;
+02935 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; 4; ++k)
+02936 {
+02937 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[k])
+02938 {
+02939 ok = <span class="keyword">false</span>;
+02940 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_0">deleteARBFragmentPrograms</a>();
+02941 <span class="keywordflow">break</span>;
+02942 }
+02943 }
+02944 <span class="keywordflow">if</span> (ok) <span class="keywordflow">return</span>;
+02945 }
+02946
+02947 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIFragmentShader)
+02948 {
+02949 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a> = <a class="code" href="a04222.html#a186">nglGenFragmentShadersATI</a>(1);
+02950 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a> = <a class="code" href="a04222.html#a186">nglGenFragmentShadersATI</a>(1);
+02951 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a> || !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a>)
+02952 {
+02953 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a> = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_7">ATIWaterShaderHandle</a> = 0;
+02954 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Couldn't generate water shader using ATI_fragment_shader !"</span>);
+02955 <span class="keywordflow">return</span>;
+02956 }
+02957 <span class="keywordflow">else</span>
+02958 {
+02959
+02960 glGetError();
+02961 <span class="comment">// Water shader for R200 : we just add the 2 bump map contributions (du, dv). We then use this contribution to perturbate the envmap</span>
+02962 <a class="code" href="a04222.html#a187">nglBindFragmentShaderATI</a>(ATIWaterShaderHandleNoDiffuseMap);
+02963 <a class="code" href="a04222.html#a189">nglBeginFragmentShaderATI</a>();
+02964 <span class="comment">//</span>
+02965 <a class="code" href="a05363.html#a377">fetchPerturbedEnvMapR200</a>();
+02966 <a class="code" href="a04222.html#a193">nglColorFragmentOp1ATI</a>(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_2_ATI, GL_NONE, GL_NONE);
+02967 <a class="code" href="a04222.html#a196">nglAlphaFragmentOp1ATI</a>(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_REG_2_ATI, GL_NONE, GL_NONE);
+02968 <span class="comment">// </span>
+02969 <a class="code" href="a04222.html#a190">nglEndFragmentShaderATI</a>();
+02970 GLenum error = glGetError();
+02971 <a class="code" href="a04199.html#a6">nlassert</a>(error == GL_NONE);
+02972
+02973 <span class="comment">// The same but with a diffuse map added</span>
+02974 <a class="code" href="a04222.html#a187">nglBindFragmentShaderATI</a>(ATIWaterShaderHandle);
+02975 <a class="code" href="a04222.html#a189">nglBeginFragmentShaderATI</a>();
+02976 <span class="comment">//</span>
+02977 <a class="code" href="a05363.html#a377">fetchPerturbedEnvMapR200</a>();
+02978
+02979 <a class="code" href="a04222.html#a192">nglSampleMapATI</a>(GL_REG_3_ATI, GL_TEXTURE3_ARB, GL_SWIZZLE_STR_ATI); <span class="comment">// fetch envmap at perturbed texcoords</span>
+02980 <a class="code" href="a04222.html#a194">nglColorFragmentOp2ATI</a>(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_3_ATI, GL_NONE, GL_NONE, GL_REG_2_ATI, GL_NONE, GL_NONE); <span class="comment">// scale bumpmap 1 &amp; add envmap coords</span>
+02981 <a class="code" href="a04222.html#a197">nglAlphaFragmentOp2ATI</a>(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, GL_REG_3_ATI, GL_NONE, GL_NONE, GL_REG_2_ATI, GL_NONE, GL_NONE);
+02982
+02983
+02984 <a class="code" href="a04222.html#a190">nglEndFragmentShaderATI</a>();
+02985 error = glGetError();
+02986 <a class="code" href="a04199.html#a6">nlassert</a>(error == GL_NONE);
+02987 <a class="code" href="a04222.html#a187">nglBindFragmentShaderATI</a>(0);
+02988 }
+02989 }
+02990
+02991 <span class="comment">// if none of the previous programs worked, fallback on NV_texture_shader, or (todo) simpler shader</span>
+02992
+02993 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa56" doxytag="NL3D::CDriverGL::initVertexArrayRange" ></a><p>
+<table class="mdTable" 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::CDriverGL::initVertexArrayRange </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>agpMem</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>vramMem</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Allocate the initial VertexArray Memory. (no-op if !supportVertexBufferHard()). VertexArrayRange is first reseted, so any VBhard created before will be deleted. NB: call it after <a class="el" href="a02433.html#NL3D_1_1CDriverGLa78">setDisplay()</a>. But <a class="el" href="a02433.html#NL3D_1_1CDriverGLa78">setDisplay()</a> by default call initVertexArrayRange(16Mo, 0); so this is not necessary. NB: If allocation fails, mem/=2, and retry, until mem &lt; 500K. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>agpMem</em>&nbsp;</td><td>ammount of AGP Memory required. if 0, reseted. </td></tr>
+ <tr><td valign=top><em>vramMem</em>&nbsp;</td><td>ammount of VRAM Memory required. if 0, reseted. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>false if one the Buffer has not been allocated (at least at 500K).</dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera43">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l01229">1229</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00900">_AGPVertexArrayRange</a>, <a class="el" href="a05643.html#l00897">_MaxVerticesByVBHard</a>, <a class="el" href="a05643.html#l00902">_VRAMVertexArrayRange</a>, <a class="el" href="a03689.html#NL3D_1_1IVertexArrayRangea0">NL3D::IVertexArrayRange::allocate()</a>, <a class="el" href="a05653.html#l00050">NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05653.html#l01207">resetVertexArrayRange()</a>, <a class="el" href="a05653.html#l00495">supportVertexBufferHard()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01230 {
+01231 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLa102">supportVertexBufferHard</a>())
+01232 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01233
+01234 <span class="comment">// must be supported</span>
+01235 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a> || !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>)
+01236 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01237
+01238 <span class="comment">// First, reset any VBHard created.</span>
+01239 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_1">resetVertexArrayRange</a>();
+01240 <span class="keywordtype">bool</span> ok= <span class="keyword">true</span>;
+01241
+01242 <span class="comment">// Try to allocate AGPMemory.</span>
+01243 <span class="keywordflow">if</span>(agpMem&gt;0)
+01244 {
+01245 agpMem&amp;= ~15; <span class="comment">// ensure 16-bytes aligned mem count (maybe usefull :) ).</span>
+01246 agpMem= max(agpMem, (<a class="code" href="a04558.html#a15">uint</a>)NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE);
+01247 <span class="keywordflow">while</span>(agpMem&gt;= <a class="code" href="a04230.html#a3">NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE</a>)
+01248 {
+01249 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>-&gt;allocate(agpMem, IDriver::VBHardAGP))
+01250 {
+01251 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"VAR: %.d vertices supported"</span>, _MaxVerticesByVBHard);
+01252 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"VAR: Success to allocate %.1f Mo of AGP VAR Ram"</span>, agpMem / 1000000.f);
+01253 <span class="keywordflow">break</span>;
+01254 }
+01255 <span class="keywordflow">else</span>
+01256 {
+01257 agpMem/=2;
+01258 agpMem &amp;=~15;
+01259 }
+01260 }
+01261
+01262 <span class="keywordflow">if</span>(agpMem&lt; <a class="code" href="a04230.html#a3">NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE</a>)
+01263 {
+01264 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"VAR: %.d vertices supported"</span>, _MaxVerticesByVBHard);
+01265 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"VAR: Failed to allocate %.1f Mo of AGP VAR Ram"</span>, NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE / 1000000.f);
+01266 ok= <span class="keyword">false</span>;
+01267 }
+01268 }
+01269
+01270
+01271 <span class="comment">// Try to allocate VRAMMemory.</span>
+01272 <span class="keywordflow">if</span>(vramMem&gt;0)
+01273 {
+01274 vramMem&amp;= ~15; <span class="comment">// ensure 16-bytes aligned mem count (maybe usefull :) ).</span>
+01275 vramMem= max(vramMem, (<a class="code" href="a04558.html#a15">uint</a>)NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE);
+01276 <span class="keywordflow">while</span>(vramMem&gt;= <a class="code" href="a04230.html#a3">NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE</a>)
+01277 {
+01278 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>-&gt;allocate(vramMem, IDriver::VBHardVRAM))
+01279 <span class="keywordflow">break</span>;
+01280 <span class="keywordflow">else</span>
+01281 {
+01282 vramMem/=2;
+01283 vramMem &amp;=~15;
+01284 }
+01285 }
+01286
+01287 <span class="keywordflow">if</span>(vramMem&lt; <a class="code" href="a04230.html#a3">NL3D_DRV_VERTEXARRAY_MINIMUM_SIZE</a>)
+01288 {
+01289 ok= <span class="keyword">false</span>;
+01290 }
+01291 }
+01292
+01293
+01294 <span class="keywordflow">return</span> ok;
+01295 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd14" doxytag="NL3D::CDriverGL::inlGetNumTextStages" ></a><p>
+<table class="mdTable" 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::CDriverGL::inlGetNumTextStages </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Same as <a class="el" href="a02433.html#NL3D_1_1CDriverGLa41">getNbTextureStages()</a>, but faster because inline, and not virtual!!
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01017">1017</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00070">NL3D::CGlExtensions::NbTextureStages</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, <a class="el" href="a05642.html#l02582">getNbTextureStages()</a>, <a class="el" href="a05648.html#l00221">getSupportedShader()</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, <a class="el" href="a05642.html#l01440">resetTextureShaders()</a>, <a class="el" href="a05642.html#l02398">setMatrix2DForTextureOffsetAddrMode()</a>, <a class="el" href="a05653.html#l00676">setupGlArraysStd()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l00985">setupSpecularBegin()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>, <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>, <a class="el" href="a05648.html#l01876">setupWaterPassR200()</a>, <a class="el" href="a05642.html#l01536">swapBuffers()</a>, <a class="el" href="a05652.html#l01185">swapTextureHandle()</a>, <a class="el" href="a05653.html#l00792">toggleGlArraysForEXTVertexShader()</a>, and <a class="el" href="a05653.html#l00748">toggleGlArraysForNVVertexProgram()</a>.
+<p>
+<div class="fragment"><pre>01017 {<span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NbTextureStages;}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivera44" doxytag="NL3D::CDriverGL::invalidateShareTexture" ></a><p>
+<table class="mdTable" 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::IDriver::invalidateShareTexture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Invalidate shared texture
+<p>
+Definition at line <a class="el" href="a05639.html#l00243">243</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00160">NL3D::IDriver::_SyncTexDrvInfos</a>, <a class="el" href="a05640.html#l00162">NL3D::IDriver::_TexDrvShares</a>, and <a class="el" href="a05639.html#l00277">NL3D::IDriver::getTextureShareName()</a>.
+<p>
+<div class="fragment"><pre>00244 {
+00245 <span class="comment">// Create the shared Name.</span>
+00246 std::string name;
+00247 <a class="code" href="a02434.html#NL3D_1_1IDrivere0">getTextureShareName</a> (texture, name);
+00248
+00249 <span class="comment">// Look for the driver info for this share name</span>
+00250 CSynchronized&lt;TTexDrvInfoPtrMap&gt;::CAccessor access(&amp;_SyncTexDrvInfos);
+00251 TTexDrvInfoPtrMap &amp;rTexDrvInfos = access.value();
+00252 TTexDrvInfoPtrMap::iterator iteDrvInfo = rTexDrvInfos.find (name);
+00253 <span class="keywordflow">if</span> (iteDrvInfo != rTexDrvInfos.end())
+00254 {
+00255 <span class="comment">// Now parse all shared info</span>
+00256 TTexDrvSharePtrList::iterator shareIte = <a class="code" href="a02434.html#NL3D_1_1IDriverp3">_TexDrvShares</a>.begin ();
+00257 <span class="keywordflow">while</span> (shareIte != <a class="code" href="a02434.html#NL3D_1_1IDriverp3">_TexDrvShares</a>.end ())
+00258 {
+00259 <span class="comment">// Good one ?</span>
+00260 <span class="keywordflow">if</span> ((*shareIte)-&gt;DrvTexture == iteDrvInfo-&gt;second)
+00261 {
+00262 <span class="comment">// Remove this one</span>
+00263 TTexDrvSharePtrList::iterator toRemove = shareIte;
+00264 shareIte++;
+00265 <span class="keyword">delete</span> (*toRemove);
+00266 }
+00267 <span class="keywordflow">else</span>
+00268 shareIte++;
+00269 }
+00270
+00271 <span class="comment">// Ok</span>
+00272 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00273 }
+00274 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00275 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa58" doxytag="NL3D::CDriverGL::isActive" ></a><p>
+<table class="mdTable" 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::CDriverGL::isActive </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return true if driver is still active. Return false else. If he user close the window, must return false.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera45">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02045">2045</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>02046 {
+02047 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02048 <span class="preprocessor"></span> <span class="keywordflow">return</span> (IsWindow(_hWnd) != 0);
+02049 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+02050 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
+02051 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+02052 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz76_0" doxytag="NL3D::CDriverGL::isEMBMSupportedAtStage" ></a><p>
+<table class="mdTable" 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::CDriverGL::isEMBMSupportedAtStage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>stage</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz151_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02664">2664</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00675">_StageSupportEMBM</a>, <a class="el" href="a05969.html#l00047">NL3D::IDRV_MAT_MAXTEXTURES</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05642.html#l02657">supportEMBM()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02665 {
+02666 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz76_2">supportEMBM</a>());
+02667 <a class="code" href="a04199.html#a6">nlassert</a>(stage &lt; IDRV_MAT_MAXTEXTURES);
+02668 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_13">_StageSupportEMBM</a>[stage];
+02669
+02670 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa59" doxytag="NL3D::CDriverGL::isForceNormalize" ></a><p>
+<table class="mdTable" 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::CDriverGL::isForceNormalize </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return the <a class="el" href="a02433.html#NL3D_1_1CDriverGLa24">forceNormalize()</a> state.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera46">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00306">306</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00572">_ForceNormalize</a>.
+<p>
+<div class="fragment"><pre>00307 {
+00308 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr11">_ForceNormalize</a>;
+00309 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_3" doxytag="NL3D::CDriverGL::isPolygonSmoothingEnabled" ></a><p>
+<table class="mdTable" 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::CDriverGL::isPolygonSmoothingEnabled </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+see <a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_0">enablePolygonSmoothing()</a>
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz153_3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03071">3071</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01076">_PolygonSmooth</a>.
+<p>
+<div class="fragment"><pre>03072 {
+03073 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr28">_PolygonSmooth</a>;
+03074 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz74_0" doxytag="NL3D::CDriverGL::isTextureAddrModeSupported" ></a><p>
+<table class="mdTable" 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::CDriverGL::isTextureAddrModeSupported </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html#NL3D_1_1CMaterialz360_0">CMaterial::TTexAddressingMode</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mode</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+test wether a texture addressing mode is supported
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz149_0">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02384">2384</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>.
+<p>
+<div class="fragment"><pre>02385 {
+02386 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader)
+02387 {
+02388 <span class="comment">// all the given addessing mode are supported with this extension</span>
+02389 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+02390 }
+02391 <span class="keywordflow">else</span>
+02392 {
+02393 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02394 }
+02395 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa60" doxytag="NL3D::CDriverGL::isTextureExist" ></a><p>
+<table class="mdTable" 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::CDriverGL::isTextureExist </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>tex</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+is the texture is set up in the driver NB: this method is thread safe.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera47">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01493">1493</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05639.html#l00277">NL3D::IDriver::getTextureShareName()</a>.
+<p>
+<div class="fragment"><pre>01494 {
+01495 <span class="keywordtype">bool</span> result;
+01496
+01497 <span class="comment">// Create the shared Name.</span>
+01498 std::string name;
+01499 <a class="code" href="a02434.html#NL3D_1_1IDrivere0">getTextureShareName</a> (tex, name);
+01500
+01501 {
+01502 CSynchronized&lt;TTexDrvInfoPtrMap&gt;::CAccessor access(&amp;_SyncTexDrvInfos);
+01503 TTexDrvInfoPtrMap &amp;rTexDrvInfos = access.value();
+01504 result = (rTexDrvInfos.find(name) != rTexDrvInfos.end());
+01505 }
+01506 <span class="keywordflow">return</span> result;
+01507 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_2" doxytag="NL3D::CDriverGL::isVertexProgramEmulated" ></a><p>
+<table class="mdTable" 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::CDriverGL::isVertexProgramEmulated </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Does the driver supports vertex program, but emulated by CPU ?
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_4">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l00071">71</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00086">NL3D::CGlExtensions::NVVertexProgramEmulated</a>.
+<p>
+<div class="fragment"><pre>00072 {
+00073 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgramEmulated;
+00074 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd15" doxytag="NL3D::CDriverGL::isVertexProgramEnabled" ></a><p>
+<table class="mdTable" 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::CDriverGL::isVertexProgramEnabled </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00979">979</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00986">_VertexProgramEnabled</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01033">setupGlArrays()</a>, <a class="el" href="a05653.html#l00792">toggleGlArraysForEXTVertexShader()</a>, and <a class="el" href="a05653.html#l00748">toggleGlArraysForNVVertexProgram()</a>.
+<p>
+<div class="fragment"><pre>00980 {
+00981 <span class="comment">// Don't use glIsEnabled, too slow.</span>
+00982 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a>;
+00983 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_3" doxytag="NL3D::CDriverGL::isVertexProgramSupported" ></a><p>
+<table class="mdTable" 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::CDriverGL::isVertexProgramSupported </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Does the driver supports vertex programs ?
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_5">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l00065">65</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, and <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>.
+<p>
+<div class="fragment"><pre>00066 {
+00067 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader;
+00068 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz74_1" doxytag="NL3D::CDriverGL::isWaterShaderSupported" ></a><p>
+<table class="mdTable" 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::CDriverGL::isWaterShaderSupported </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+test wether a texture addressing mode is supported
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz149_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02376">2376</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00108">NL3D::CGlExtensions::ARBFragmentProgram</a>, <a class="el" href="a05645.html#l00104">NL3D::CGlExtensions::ATIFragmentShader</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>, and <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>.
+<p>
+<div class="fragment"><pre>02377 {
+02378 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram) <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// should support vertex programms</span>
+02379 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIFragmentShader &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBFragmentProgram) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02380 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+02381 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa61" doxytag="NL3D::CDriverGL::mapTextureStageToUV" ></a><p>
+<table class="mdTable" 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::CDriverGL::mapTextureStageToUV </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>uv</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Say what Texture Stage use what UV coord. by default activeVertexBuffer*() methods map all stage i to UV i. You can change this behavior, after calling activeVertexBuffer*(), by using this method.<p>
+eg: mapTextureStageToUV(0,2) will force the 0th texture stage to use the 2th UV.<p>
+Warning! This DOESN'T work with VertexProgram enabled!! (assert)<p>
+Warning!: some <a class="el" href="a02839.html">CMaterial</a> Shader may change automatically this behavior too when <a class="el" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial()</a> (and so render*()) is called. But Normal shader doesn't do it.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera48">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00479">479</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00748">_LastVB</a>, <a class="el" href="a05653.html#l00449">setupUVPtr()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00480 {
+00481 <span class="comment">// Just call it for last VertexBuffer setuped.</span>
+00482 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd23">setupUVPtr</a>(stage, _LastVB, uv);
+00483 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa62" doxytag="NL3D::CDriverGL::multiplyModelMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::multiplyModelMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02851.html">CMatrix</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mtx</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+multipliy the model matrix. NB: you must use <a class="el" href="a02433.html#NL3D_1_1CDriverGLa62">multiplyModelMatrix()</a> AFTER <a class="el" href="a02433.html#NL3D_1_1CDriverGLa88">setupModelMatrix()</a> (and so <a class="el" href="a02433.html#NL3D_1_1CDriverGLa93">setupViewMatrix()</a>) or an other <a class="el" href="a02433.html#NL3D_1_1CDriverGLa62">multiplyModelMatrix()</a>, or else undefined results.<p>
+Using of <a class="el" href="a02433.html#NL3D_1_1CDriverGLa62">multiplyModelMatrix()</a> instead of just one <a class="el" href="a02433.html#NL3D_1_1CDriverGLa88">setupModelMatrix()</a> may be usefull for precision consideration.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera49">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05649.html#l00143">143</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00606">_ModelViewMatrix</a>, <a class="el" href="a05643.html#l00578">_ModelViewMatrixDirty</a>, and <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>.
+<p>
+<div class="fragment"><pre>00144 {
+00145 <span class="comment">// Dirt flags.</span>
+00146 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a>= <span class="keyword">true</span>;
+00147 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">true</span>;
+00148
+00149
+00150 <span class="comment">// multiply this modelMatrix with the _ModelViewMatrix.</span>
+00151 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a>= <a class="code" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a>*mtx;
+00152 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa63" doxytag="NL3D::CDriverGL::profileAllocatedTextureMemory" ></a><p>
+<table class="mdTable" 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::CDriverGL::profileAllocatedTextureMemory </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return the amount of Texture memory requested. taking mipmap, compression, texture format, etc... into account. NB: because of GeForce*, RGB888 is considered to be 32 bits. So it may be false for others cards :).
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02313">2313</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00917">_AllocatedTextureMemory</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>02314 {
+02315 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_2">_AllocatedTextureMemory</a>;
+02316 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa64" doxytag="NL3D::CDriverGL::profileRenderedPrimitives" ></a><p>
+<table class="mdTable" 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::CDriverGL::profileRenderedPrimitives </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03116.html">CPrimitiveProfile</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>pIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03116.html">CPrimitiveProfile</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>pOut</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the number of primitives rendered from the last <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> call. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>pIn</em>&nbsp;</td><td>the number of requested rendered primitive. </td></tr>
+ <tr><td valign=top><em>pOut</em>&nbsp;</td><td>the number of effective rendered primitive. pOut==pIn if no multi-pass material is used (Lightmap, Specular ...).</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_4">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02305">2305</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, and <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>.
+<p>
+<div class="fragment"><pre>02306 {
+02307 pIn= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>;
+02308 pOut= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>;
+02309 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa65" doxytag="NL3D::CDriverGL::profileSetupedMaterials" ></a><p>
+<table class="mdTable" 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::CDriverGL::profileSetupedMaterials </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the number of material setuped from the last <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> call.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_5">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02320">2320</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00918">_NbSetupMaterialCall</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>02321 {
+02322 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_4">_NbSetupMaterialCall</a>;
+02323 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa66" doxytag="NL3D::CDriverGL::profileSetupedModelMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::profileSetupedModelMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the number of matrix setuped from the last <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> call.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_6">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02327">2327</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00919">_NbSetupModelMatrixCall</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>02328 {
+02329 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_5">_NbSetupModelMatrixCall</a>;
+02330 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa67" doxytag="NL3D::CDriverGL::profileVBHardAllocation" ></a><p>
+<table class="mdTable" 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::CDriverGL::profileVBHardAllocation </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; std::string &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>result</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+display VBhards allocated
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_7">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03157">3157</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00878">_VertexBufferHardSet</a>, <a class="el" href="a05653.html#l01299">getAvailableVertexAGPMemory()</a>, <a class="el" href="a05653.html#l01309">getAvailableVertexVRAMMemory()</a>, <a class="el" href="a06713.html#l00120">NL3D::IVertexBufferHard::getName()</a>, <a class="el" href="a06713.html#l00054">NL3D::IVertexBufferHard::getNumVertices()</a>, <a class="el" href="a06713.html#l00053">NL3D::IVertexBufferHard::getVertexSize()</a>, <a class="el" href="a06290.html#l00049">NL3D::CPtrSet&lt; IVertexBufferHardGL &gt;::Set</a>, <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>03158 {
+03159 result.clear();
+03160 result.reserve(1000);
+03161 result.push_back(<a class="code" href="a05378.html#a244">toString</a>(<span class="stringliteral">"Memory Allocated: %4d Ko in AGP / %4df Ko in VRAM"</span>,
+03162 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa26">getAvailableVertexAGPMemory</a>()/1000, <a class="code" href="a02433.html#NL3D_1_1CDriverGLa27">getAvailableVertexVRAMMemory</a>()/1000 ));
+03163 result.push_back(<a class="code" href="a05378.html#a244">toString</a>(<span class="stringliteral">"Num VBHard: %d"</span>, <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.size()));
+03164
+03165 <a class="code" href="a04558.html#a15">uint</a> totalMemUsed= 0;
+03166 set&lt;IVertexBufferHardGL*&gt;::iterator it;
+03167 <span class="keywordflow">for</span>(it= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.begin(); it!=<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.end(); it++)
+03168 {
+03169 IVertexBufferHardGL *vbHard= *it;
+03170 <span class="keywordflow">if</span>(vbHard)
+03171 {
+03172 <a class="code" href="a04558.html#a15">uint</a> vSize= vbHard-&gt;getVertexSize();
+03173 <a class="code" href="a04558.html#a15">uint</a> numVerts= vbHard-&gt;getNumVertices();
+03174 totalMemUsed+= vSize*numVerts;
+03175 }
+03176 }
+03177 result.push_back(<a class="code" href="a05378.html#a244">toString</a>(<span class="stringliteral">"Mem Used: %4d Ko"</span>, totalMemUsed/1000) );
+03178
+03179 <span class="keywordflow">for</span>(it= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.begin(); it!=<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.end(); it++)
+03180 {
+03181 IVertexBufferHardGL *vbHard= *it;
+03182 <span class="keywordflow">if</span>(vbHard)
+03183 {
+03184 <a class="code" href="a04558.html#a15">uint</a> vSize= vbHard-&gt;getVertexSize();
+03185 <a class="code" href="a04558.html#a15">uint</a> numVerts= vbHard-&gt;getNumVertices();
+03186 result.push_back(<a class="code" href="a05378.html#a244">toString</a>(<span class="stringliteral">" %16s: %4d ko (format: %d / numVerts: %d)"</span>,
+03187 vbHard-&gt;getName().c_str(), vSize*numVerts/1000, vSize, numVerts ));
+03188 }
+03189 }
+03190 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd16" doxytag="NL3D::CDriverGL::refreshProjMatrixFromGL" ></a><p>
+<table class="mdTable" 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::CDriverGL::refreshProjMatrixFromGL </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l02589">2589</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00584">_GLProjMat</a>, <a class="el" href="a05643.html#l00581">_ProjMatDirty</a>, and <a class="el" href="a05972.html#l00320">NLMISC::CMatrix::set()</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>.
+<p>
+<div class="fragment"><pre>02590 {
+02591 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr29">_ProjMatDirty</a>) <span class="keywordflow">return</span>;
+02592 <span class="keywordtype">float</span> mat[16];
+02593 glGetFloatv(GL_PROJECTION_MATRIX, mat);
+02594 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr14">_GLProjMat</a>.<a class="code" href="a02851.html#NLMISC_1_1CMatrixz1961_3">set</a>(mat);
+02595 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr29">_ProjMatDirty</a> = <span class="keyword">false</span>;
+02596 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd17" doxytag="NL3D::CDriverGL::refreshRenderSetup" ></a><p>
+<table class="mdTable" 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::CDriverGL::refreshRenderSetup </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00865">865</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, and <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, <a class="el" href="a05653.html#l00226">renderSimpleTriangles()</a>, <a class="el" href="a05653.html#l00187">renderTriangles()</a>, and <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>.
+<p>
+<div class="fragment"><pre>00866 {
+00867 <span class="comment">// check if something to change.</span>
+00868 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>)
+00869 {
+00870 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd6">doRefreshRenderSetup</a>();
+00871 }
+00872 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa68" doxytag="NL3D::CDriverGL::release" ></a><p>
+<table class="mdTable" 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::CDriverGL::release </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Deriver should calls <a class="el" href="a02434.html#NL3D_1_1IDrivera50">IDriver::release()</a> first, to destroy all driver components (textures, shaders, VBuffers).
+<p>
+
+<p>
+Reimplemented from <a class="el" href="a02434.html#NL3D_1_1IDrivera50">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01667">1667</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00900">_AGPVertexArrayRange</a>, <a class="el" href="a05643.html#l00523">_FullScreen</a>, <a class="el" href="a05643.html#l00559">_Initialized</a>, <a class="el" href="a05643.html#l00524">_OffScreen</a>, <a class="el" href="a05643.html#l00902">_VRAMVertexArrayRange</a>, <a class="el" href="a05642.html#l03011">deleteFragmentShaders()</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, and <a class="el" href="a05653.html#l01207">resetVertexArrayRange()</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00304">~CDriverGL()</a>.
+<p>
+<div class="fragment"><pre>01668 {
+01669 <span class="comment">// release only if the driver was initialized</span>
+01670 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr15">_Initialized</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01671
+01672 <span class="comment">// Call IDriver::release() before, to destroy textures, shaders and VBs...</span>
+01673 IDriver::release();
+01674
+01675
+01676 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_1">deleteFragmentShaders</a>();
+01677
+01678 <span class="comment">// release caustic cube map</span>
+01679 <span class="comment">// _CauticCubeMap = NULL;</span>
+01680
+01681 <span class="comment">// Reset VertexArrayRange.</span>
+01682 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_1">resetVertexArrayRange</a>();
+01683
+01684 <span class="comment">// delete containers</span>
+01685 <span class="keyword">delete</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>;
+01686 <span class="keyword">delete</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>;
+01687 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>= NULL;
+01688 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>= NULL;
+01689
+01690 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01691 <span class="preprocessor"></span> <span class="comment">// Then delete.</span>
+01692 <span class="comment">// wglMakeCurrent(NULL,NULL);</span>
+01693
+01694 <span class="comment">// Off-screen rendering ?</span>
+01695 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a>)
+01696 {
+01697 <span class="keywordflow">if</span> (_PBuffer)
+01698 {
+01699 wglDeleteContext( _hRC );
+01700 wglReleasePbufferDCARB( _PBuffer, _hDC );
+01701 wglDestroyPbufferARB( _PBuffer );
+01702 }
+01703 }
+01704 <span class="keywordflow">else</span>
+01705 {
+01706 <span class="keywordflow">if</span> (_hRC)
+01707 wglDeleteContext(_hRC);
+01708 <span class="keywordflow">if</span> (_hWnd&amp;&amp;_hDC)
+01709 {
+01710 ReleaseDC(_hWnd,_hDC);
+01711 <span class="keywordflow">if</span> (_DestroyWindow)
+01712 DestroyWindow (_hWnd);
+01713 }
+01714
+01715 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>)
+01716 {
+01717 ChangeDisplaySettings(&amp;_OldScreenMode, 0);
+01718 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>= <span class="keyword">false</span>;
+01719 }
+01720 }
+01721
+01722 _hRC=NULL;
+01723 _hDC=NULL;
+01724 _hWnd=NULL;
+01725 _PBuffer = NULL;
+01726
+01727 <span class="comment">// Restaure monitor color parameters</span>
+01728 <span class="keywordflow">if</span> (_NeedToRestaureGammaRamp)
+01729 {
+01730 HDC dc = CreateDC (<span class="stringliteral">"DISPLAY"</span>, NULL, NULL, NULL);
+01731 <span class="keywordflow">if</span> (dc)
+01732 {
+01733 <span class="keywordflow">if</span> (!SetDeviceGammaRamp (dc, _GammaRampBackuped))
+01734 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"(CDriverGL::release): SetDeviceGammaRamp failed"</span>);
+01735
+01736 <span class="comment">// Release the DC</span>
+01737 ReleaseDC (NULL, dc);
+01738 }
+01739 <span class="keywordflow">else</span>
+01740 {
+01741 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"(CDriverGL::release): can't create DC"</span>);
+01742 }
+01743 }
+01744
+01745 <span class="preprocessor">#elif defined (NL_OS_UNIX)// NL_OS_WINDOWS</span>
+01746 <span class="preprocessor"></span>
+01747 <span class="preprocessor">#ifdef XF86VIDMODE</span>
+01748 <span class="preprocessor"></span> <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>)
+01749 {
+01750 XF86VidModeModeInfo info;
+01751 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"Switching back to original mode \n"</span>);
+01752
+01753 <span class="comment">// This is a bit ugly - a quick hack to copy the ModeLine structure </span>
+01754 <span class="comment">// into the modeInfo structure.</span>
+01755 memcpy((XF86VidModeModeLine *)((<span class="keywordtype">char</span> *)&amp;info + <span class="keyword">sizeof</span>(info.dotclock)),&amp;_OldScreenMode, <span class="keyword">sizeof</span>(XF86VidModeModeLine));
+01756 info.dotclock = _OldDotClock;
+01757
+01758 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"Mode is %dx%d,\n"</span>,info.hdisplay,info.vdisplay);
+01759 XF86VidModeSwitchToMode(dpy,DefaultScreen(dpy),&amp;info);
+01760 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"Switching viewporr to %d,%d,\n"</span>,_OldX, _OldY);
+01761 XF86VidModeSetViewPort(dpy,DefaultScreen(dpy),_OldX,_OldY);
+01762 <span class="comment">// Ungrab the keyboard (probably not necessary);</span>
+01763 XUngrabKeyboard(dpy, CurrentTime);
+01764 }
+01765 <span class="preprocessor">#endif // XF86VIDMODE</span>
+01766 <span class="preprocessor"></span>
+01767 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+01768 <span class="preprocessor"></span>
+01769
+01770 <span class="comment">// released</span>
+01771 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr15">_Initialized</a>= <span class="keyword">false</span>;
+01772
+01773 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01774 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverb0" doxytag="NL3D::CDriverGL::removeShaderPtr" ></a><p>
+<table class="mdTable" 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::IDriver::removeShaderPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05363.html#a287">ItShaderPtrList</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>shaderIt</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [protected, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05639.html#l00232">232</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00163">NL3D::IDriver::_Shaders</a>, and <a class="el" href="a06369.html#l00056">NL3D::ItShaderPtrList</a>.
+<p>
+Referenced by <a class="el" href="a06368.html#l00036">NL3D::IShader::~IShader()</a>.
+<p>
+<div class="fragment"><pre>00233 {
+00234 <a class="code" href="a02434.html#NL3D_1_1IDriverp1">_Shaders</a>.erase(shaderIt);
+00235 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverb1" doxytag="NL3D::CDriverGL::removeTextureDrvInfoPtr" ></a><p>
+<table class="mdTable" 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::IDriver::removeTextureDrvInfoPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05363.html#a297">ItTexDrvInfoPtrMap</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>texDrvInfoIt</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [protected, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05639.html#l00219">219</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00160">NL3D::IDriver::_SyncTexDrvInfos</a>, and <a class="el" href="a06506.html#l00058">NL3D::ItTexDrvInfoPtrMap</a>.
+<p>
+Referenced by <a class="el" href="a06505.html#l00123">NL3D::ITextureDrvInfos::~ITextureDrvInfos()</a>.
+<p>
+<div class="fragment"><pre>00220 {
+00221 CSynchronized&lt;TTexDrvInfoPtrMap&gt;::CAccessor access(&amp;_SyncTexDrvInfos);
+00222 TTexDrvInfoPtrMap &amp;rTexDrvInfos = access.value();
+00223
+00224 rTexDrvInfos.erase(texDrvInfoIt);
+00225 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverb2" doxytag="NL3D::CDriverGL::removeTextureDrvSharePtr" ></a><p>
+<table class="mdTable" 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::IDriver::removeTextureDrvSharePtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05363.html#a298">ItTexDrvSharePtrList</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>texDrvShareIt</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [protected, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05639.html#l00227">227</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00162">NL3D::IDriver::_TexDrvShares</a>, and <a class="el" href="a06506.html#l00059">NL3D::ItTexDrvSharePtrList</a>.
+<p>
+Referenced by <a class="el" href="a06505.html#l00118">NL3D::CTextureDrvShare::~CTextureDrvShare()</a>.
+<p>
+<div class="fragment"><pre>00228 {
+00229 <a class="code" href="a02434.html#NL3D_1_1IDriverp3">_TexDrvShares</a>.erase(texDrvShareIt);
+00230 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverb3" doxytag="NL3D::CDriverGL::removeVBDrvInfoPtr" ></a><p>
+<table class="mdTable" 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::IDriver::removeVBDrvInfoPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05363.html#a343">ItVBDrvInfoPtrList</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>vbDrvInfoIt</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [protected, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+remove ptr from the lists in the driver.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05639.html#l00214">214</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00164">NL3D::IDriver::_VBDrvInfos</a>, and <a class="el" href="a06711.html#l00064">NL3D::ItVBDrvInfoPtrList</a>.
+<p>
+Referenced by <a class="el" href="a06710.html#l01067">NL3D::IVBDrvInfos::~IVBDrvInfos()</a>.
+<p>
+<div class="fragment"><pre>00215 {
+00216 <a class="code" href="a02434.html#NL3D_1_1IDriverp4">_VBDrvInfos</a>.erase(vbDrvInfoIt);
+00217 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverb4" doxytag="NL3D::CDriverGL::removeVtxPrgDrvInfoPtr" ></a><p>
+<table class="mdTable" 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::IDriver::removeVtxPrgDrvInfoPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05363.html#a345">ItVtxPrgDrvInfoPtrList</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>vtxPrgDrvInfoIt</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [protected, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05639.html#l00237">237</a> of file <a class="el" href="a05639.html">driver.cpp</a>.
+<p>
+References <a class="el" href="a05640.html#l00166">NL3D::IDriver::_VtxPrgDrvInfos</a>, and <a class="el" href="a06717.html#l00041">NL3D::ItVtxPrgDrvInfoPtrList</a>.
+<p>
+Referenced by <a class="el" href="a06716.html#l00046">NL3D::IVertexProgramDrvInfos::~IVertexProgramDrvInfos()</a>.
+<p>
+<div class="fragment"><pre>00238 {
+00239 <a class="code" href="a02434.html#NL3D_1_1IDriverp5">_VtxPrgDrvInfos</a>.erase(vtxPrgDrvInfoIt);
+00240 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa69" doxytag="NL3D::CDriverGL::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"> bool NL3D::CDriverGL::render </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03105.html">CPrimitiveBlock</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>PB</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>Mat</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+render a block of primitive with previously setuped VertexBuffer / Matrixes.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera51">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00135">135</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, <a class="el" href="a05648.html#l00587">endMultiPass()</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="a06197.html#l00149">NL3D::CPrimitiveBlock::getQuadPointer()</a>, <a class="el" href="a06197.html#l00091">NL3D::CPrimitiveBlock::getTriPointer()</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a06206.html#l00047">NL3D::CPrimitiveProfile::NLines</a>, <a class="el" href="a06206.html#l00049">NL3D::CPrimitiveProfile::NQuads</a>, <a class="el" href="a06206.html#l00048">NL3D::CPrimitiveProfile::NTriangles</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l00554">setupPass()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00136 {
+00137 <span class="comment">// update matrix and Light in OpenGL if needed</span>
+00138 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+00139
+00140 <span class="comment">// setup material</span>
+00141 <span class="keywordflow">if</span> ( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial</a>(Mat) )
+00142 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00143
+00144
+00145
+00146 <span class="comment">// render primitives.</span>
+00147 <span class="comment">//==============================</span>
+00148 <span class="comment">// start multipass.</span>
+00149 <a class="code" href="a04558.html#a15">uint</a> nPass;
+00150 nPass= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a>();
+00151 <span class="comment">// draw all passes.</span>
+00152 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> pass=0;pass&lt;nPass; pass++)
+00153 {
+00154 <span class="comment">// setup the pass.</span>
+00155 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a>(pass);
+00156 <span class="comment">// draw the primitives.</span>
+00157 <span class="keywordflow">if</span>(PB.getNumTri()!=0)
+00158 glDrawElements(GL_TRIANGLES,3*PB.getNumTri(),GL_UNSIGNED_INT,PB.getTriPointer());
+00159 <span class="keywordflow">if</span>(PB.getNumQuad()!=0)
+00160 glDrawElements(GL_QUADS,4*PB.getNumQuad(),GL_UNSIGNED_INT,PB.getQuadPointer());
+00161 <span class="keywordflow">if</span>(PB.getNumLine()!=0)
+00162 glDrawElements(GL_LINES,2*PB.getNumLine(),GL_UNSIGNED_INT,PB.getLinePointer());
+00163 }
+00164 <span class="comment">// end multipass.</span>
+00165 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a>();
+00166
+00167
+00168 <span class="comment">// Profiling.</span>
+00169 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NLines+= PB.getNumLine();
+00170 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NTriangles+= PB.getNumTri();
+00171 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NQuads+= PB.getNumQuad();
+00172 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NLines+= PB.getNumLine() * nPass;
+00173 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NTriangles+= PB.getNumTri() * nPass;
+00174 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NQuads+= PB.getNumQuad() * nPass;
+00175
+00176 <span class="comment">// We have render some prims. inform the VBHard.</span>
+00177 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00178 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;GPURenderingAfterFence= <span class="keyword">true</span>;
+00179
+00180 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00181
+00182
+00183 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa70" doxytag="NL3D::CDriverGL::renderOrientedQuads" ></a><p>
+<table class="mdTable" 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::CDriverGL::renderOrientedQuads </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>startIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numQuads</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Render quads with previously setuped VertexBuffer / Matrixes. There's a garanty for the orientation of its diagonal, which is drawn as follow :<p>
+3----2 | / | | / | |/ | 0----1<p>
+The rendering may be slower than with 'renderQuads', however This orientation is not garanteed with renderQuads, and depends on the hardware
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera52">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00291">291</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, <a class="el" href="a05648.html#l00587">endMultiPass()</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a06206.html#l00049">NL3D::CPrimitiveProfile::NQuads</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l00554">setupPass()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00292 {
+00293 <span class="keywordflow">if</span> (!numQuads) <span class="keywordflow">return</span>;
+00294
+00295 <span class="comment">// update matrix and Light in OpenGL if needed</span>
+00296 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+00297
+00298 <span class="comment">// setup material</span>
+00299 <span class="keywordflow">if</span> ( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial</a>(mat) )
+00300 <span class="keywordflow">return</span>;
+00301
+00302 <span class="keyword">const</span> <a class="code" href="a04558.html#a11">uint32</a> QUAD_BATCH_SIZE = 2048;
+00303 <span class="keyword">static</span> GLshort defaultIndices[QUAD_BATCH_SIZE * 6];
+00304 <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLa55">init</a> = <span class="keyword">false</span>;
+00305 <span class="keywordflow">if</span> (!init)
+00306 {
+00307 <span class="comment">// setup the base index buffer</span>
+00308 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; QUAD_BATCH_SIZE; ++k)
+00309 {
+00310 <span class="comment">// first tri</span>
+00311 defaultIndices[k * 6] = (GLshort) (k * 4);
+00312 defaultIndices[k * 6 + 1] = (GLshort) (k * 4 + 2);
+00313 defaultIndices[k * 6 + 2] = (GLshort) (k * 4 + 1);
+00314 <span class="comment">// second tri</span>
+00315 defaultIndices[k * 6 + 3] = (GLshort) (k * 4);
+00316 defaultIndices[k * 6 + 4] = (GLshort) (k * 4 + 2);
+00317 defaultIndices[k * 6 + 5] = (GLshort) (k * 4 + 3);
+00318 }
+00319 init = <span class="keyword">true</span>;
+00320 }
+00321
+00322 <span class="comment">// render primitives.</span>
+00323 <span class="comment">//==============================</span>
+00324 <span class="comment">// start multipass.</span>
+00325 <a class="code" href="a04558.html#a15">uint</a> nPass;
+00326 nPass= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a>();
+00327 <span class="comment">// draw all passes.</span>
+00328 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> pass=0;pass&lt;nPass; pass++)
+00329 {
+00330 <span class="comment">// setup the pass.</span>
+00331 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a>(pass);
+00332
+00333 <a class="code" href="a04558.html#a11">uint32</a> currIndex = startIndex;
+00334 <a class="code" href="a04558.html#a11">uint32</a> numLeftQuads = numQuads;
+00335
+00336 <span class="comment">// draw first batch of quads using the static setupped array</span>
+00337 <span class="keywordflow">if</span> (startIndex &lt; QUAD_BATCH_SIZE)
+00338 {
+00339 <span class="comment">// draw first quads (as pair of tri to have guaranteed orientation)</span>
+00340 <a class="code" href="a04558.html#a15">uint</a> numQuadsToDraw = <a class="code" href="a04061.html#a0">std::min</a>(QUAD_BATCH_SIZE - startIndex, numQuads);
+00341 glDrawElements(GL_TRIANGLES, 6 * numQuadsToDraw, GL_UNSIGNED_SHORT, defaultIndices + 6 * startIndex);
+00342 numLeftQuads -= numQuadsToDraw;
+00343 currIndex += 4 * numQuadsToDraw;
+00344 }
+00345
+00346 <span class="comment">// draw remaining quads</span>
+00347 <span class="keywordflow">while</span> (numLeftQuads)
+00348 {
+00349 <span class="comment">// TODO : resetting vertex pointer would avoid the need to rebuild indices each times</span>
+00350 <a class="code" href="a04558.html#a11">uint32</a> numQuadsToDraw = <a class="code" href="a04061.html#a0">std::min</a>(numLeftQuads, QUAD_BATCH_SIZE);
+00351 <span class="comment">// draw all quads</span>
+00352 <span class="keywordflow">if</span> (4 * numQuadsToDraw + currIndex &lt;= (1 &lt;&lt; 16))
+00353 {
+00354 <span class="comment">// indices fits on 16 bits</span>
+00355 GLshort indices[QUAD_BATCH_SIZE * 6];
+00356 GLshort *curr = indices;
+00357 GLshort *end = indices + 6 * numQuadsToDraw;
+00358 <a class="code" href="a04558.html#a9">uint16</a> vertexIndex = (<a class="code" href="a04558.html#a9">uint16</a>) currIndex;
+00359 <span class="keywordflow">do</span>
+00360 {
+00361 *curr++ = vertexIndex;
+00362 *curr++ = vertexIndex + 2;
+00363 *curr++ = vertexIndex + 1;
+00364 *curr++ = vertexIndex;
+00365 *curr++ = vertexIndex + 2;
+00366 *curr++ = vertexIndex + 3;
+00367 vertexIndex += 4;
+00368 }
+00369 <span class="keywordflow">while</span>(curr != end);
+00370 glDrawElements(GL_TRIANGLES, 6 * numQuadsToDraw, GL_UNSIGNED_SHORT, indices);
+00371 }
+00372 <span class="keywordflow">else</span>
+00373 {
+00374 <span class="comment">// indices fits on 32 bits</span>
+00375 GLint indices[QUAD_BATCH_SIZE];
+00376 GLint *curr = indices;
+00377 GLint *end = indices + 6 * numQuadsToDraw;
+00378 <a class="code" href="a04558.html#a11">uint32</a> vertexIndex = currIndex;
+00379 <span class="keywordflow">do</span>
+00380 {
+00381 *curr++ = vertexIndex;
+00382 *curr++ = vertexIndex + 2;
+00383 *curr++ = vertexIndex + 1;
+00384 *curr++ = vertexIndex;
+00385 *curr++ = vertexIndex + 2;
+00386 *curr++ = vertexIndex + 3;
+00387 vertexIndex += 4;
+00388 }
+00389 <span class="keywordflow">while</span>(curr != end);
+00390 glDrawElements(GL_TRIANGLES, 6 * numQuadsToDraw, GL_UNSIGNED_INT, indices);
+00391 }
+00392 numLeftQuads -= numQuadsToDraw;
+00393 currIndex += 4 * numQuadsToDraw;
+00394 }
+00395 }
+00396 <span class="comment">// end multipass.</span>
+00397 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a>();
+00398
+00399
+00400 <span class="comment">// Profiling.</span>
+00401 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NQuads += numQuads ;
+00402 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NQuads += numQuads * nPass;
+00403
+00404 <span class="comment">// We have render some prims. inform the VBHard.</span>
+00405 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00406 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;GPURenderingAfterFence= <span class="keyword">true</span>;
+00407 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa71" doxytag="NL3D::CDriverGL::renderPoints" ></a><p>
+<table class="mdTable" 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::CDriverGL::renderPoints </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>Mat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numPoints</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+render points with previously setuped VertexBuffer / Matrixes.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera53">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00253">253</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, <a class="el" href="a05648.html#l00587">endMultiPass()</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a06206.html#l00046">NL3D::CPrimitiveProfile::NPoints</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l00554">setupPass()</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>00254 {
+00255 <span class="comment">// update matrix and Light in OpenGL if needed</span>
+00256 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+00257
+00258 <span class="comment">// setup material</span>
+00259 <span class="keywordflow">if</span> ( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial</a>(Mat) )
+00260 <span class="keywordflow">return</span>;
+00261
+00262
+00263 <span class="comment">// render primitives.</span>
+00264 <span class="comment">//==============================</span>
+00265 <span class="comment">// start multipass.</span>
+00266 <a class="code" href="a04558.html#a15">uint</a> nPass;
+00267 nPass= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a>();
+00268 <span class="comment">// draw all passes.</span>
+00269 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> pass=0;pass&lt;nPass; pass++)
+00270 {
+00271 <span class="comment">// setup the pass.</span>
+00272 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a>(pass);
+00273 <span class="comment">// draw the primitives.</span>
+00274 <span class="keywordflow">if</span>(numPoints)
+00275 glDrawArrays(GL_POINTS,0, numPoints);
+00276 }
+00277 <span class="comment">// end multipass.</span>
+00278 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a>();
+00279
+00280
+00281 <span class="comment">// Profiling.</span>
+00282 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NPoints+= numPoints;
+00283 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NPoints+= numPoints * nPass;
+00284
+00285 <span class="comment">// We have render some prims. inform the VBHard.</span>
+00286 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00287 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;GPURenderingAfterFence= <span class="keyword">true</span>;
+00288 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa72" doxytag="NL3D::CDriverGL::renderQuads" ></a><p>
+<table class="mdTable" 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::CDriverGL::renderQuads </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>Mat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>startIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numQuads</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+render quads with previously setuped VertexBuffer / Matrixes. Quads are stored as a sequence in the vertex buffer.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera54">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00410">410</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, <a class="el" href="a05648.html#l00587">endMultiPass()</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a06206.html#l00049">NL3D::CPrimitiveProfile::NQuads</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l00554">setupPass()</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>00411 {
+00412 <span class="comment">// update matrix and Light in OpenGL if needed</span>
+00413 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+00414
+00415 <span class="comment">// setup material</span>
+00416 <span class="keywordflow">if</span> ( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial</a>(Mat) )
+00417 <span class="keywordflow">return</span>;
+00418
+00419
+00420 <span class="comment">// render primitives.</span>
+00421 <span class="comment">//==============================</span>
+00422 <span class="comment">// start multipass.</span>
+00423 <a class="code" href="a04558.html#a15">uint</a> nPass;
+00424 nPass= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a>();
+00425 <span class="comment">// draw all passes.</span>
+00426 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> pass=0;pass&lt;nPass; pass++)
+00427 {
+00428 <span class="comment">// setup the pass.</span>
+00429 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a>(pass);
+00430 <span class="comment">// draw the primitives.</span>
+00431 <span class="keywordflow">if</span>(numQuads)
+00432 glDrawArrays(GL_QUADS, startIndex &lt;&lt; 2, numQuads &lt;&lt; 2) ;
+00433 }
+00434 <span class="comment">// end multipass.</span>
+00435 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a>();
+00436
+00437
+00438 <span class="comment">// Profiling.</span>
+00439 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NQuads += numQuads ;
+00440 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NQuads += numQuads * nPass;
+00441
+00442 <span class="comment">// We have render some prims. inform the VBHard.</span>
+00443 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00444 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;GPURenderingAfterFence= <span class="keyword">true</span>;
+00445 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa73" doxytag="NL3D::CDriverGL::renderSimpleTriangles" ></a><p>
+<table class="mdTable" 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::CDriverGL::renderSimpleTriangles </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>tri</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>ntris</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+render a list of triangles with previously setuped VertexBuffer / Matrixes, AND previously setuped MATERIAL!! This use the last material setuped. It should be a "Normal shader" material, because no multi-pass is allowed with this method. Actually, it is like a straight drawTriangles() in OpenGL. NB: <a class="el" href="a04199.html#a6">nlassert()</a> if ntris is 0!!!! this is unlike other <a class="el" href="a02433.html#NL3D_1_1CDriverGLa69">render()</a> call methods. For optimisation concern. NB: this is usefull for landscape....
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera55">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00226">226</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06206.html#l00048">NL3D::CPrimitiveProfile::NTriangles</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00227 {
+00228 <a class="code" href="a04199.html#a6">nlassert</a>(ntris&gt;0);
+00229
+00230 <span class="comment">// update matrix and Light in OpenGL if needed</span>
+00231 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+00232
+00233
+00234 <span class="comment">// Don't setup any material here.</span>
+00235
+00236 <span class="comment">// render primitives.</span>
+00237 <span class="comment">//==============================</span>
+00238 <span class="comment">// NO MULTIPASS HERE!!</span>
+00239 <span class="comment">// draw the primitives. (nb: ntrsi&gt;0).</span>
+00240 glDrawElements(GL_TRIANGLES,3*ntris,GL_UNSIGNED_INT, tri);
+00241
+00242 <span class="comment">// Profiling.</span>
+00243 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NTriangles+= ntris;
+00244 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NTriangles+= ntris;
+00245
+00246 <span class="comment">// We have render some prims. inform the VBHard.</span>
+00247 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00248 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;GPURenderingAfterFence= <span class="keyword">true</span>;
+00249 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa74" doxytag="NL3D::CDriverGL::renderTriangles" ></a><p>
+<table class="mdTable" 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::CDriverGL::renderTriangles </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>Mat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>tri</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>ntris</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+render a list of triangles with previously setuped VertexBuffer / Matrixes. NB: this "was" usefull for landscape....
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera56">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00187">187</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, <a class="el" href="a05648.html#l00587">endMultiPass()</a>, <a class="el" href="a05655.html#l00099">NL3D::IVertexBufferHardGL::GPURenderingAfterFence</a>, <a class="el" href="a06206.html#l00048">NL3D::CPrimitiveProfile::NTriangles</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l00554">setupPass()</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>00188 {
+00189 <span class="comment">// update matrix and Light in OpenGL if needed</span>
+00190 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+00191
+00192 <span class="comment">// setup material</span>
+00193 <span class="keywordflow">if</span> ( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa87">setupMaterial</a>(Mat) )
+00194 <span class="keywordflow">return</span>;
+00195
+00196
+00197 <span class="comment">// render primitives.</span>
+00198 <span class="comment">//==============================</span>
+00199 <span class="comment">// start multipass.</span>
+00200 <a class="code" href="a04558.html#a15">uint</a> nPass;
+00201 nPass= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_0">beginMultiPass</a>();
+00202 <span class="comment">// draw all passes.</span>
+00203 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> pass=0;pass&lt;nPass; pass++)
+00204 {
+00205 <span class="comment">// setup the pass.</span>
+00206 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a>(pass);
+00207 <span class="comment">// draw the primitives.</span>
+00208 <span class="keywordflow">if</span>(ntris!=0)
+00209 glDrawElements(GL_TRIANGLES,3*ntris,GL_UNSIGNED_INT, tri);
+00210 }
+00211 <span class="comment">// end multipass.</span>
+00212 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_1">endMultiPass</a>();
+00213
+00214
+00215 <span class="comment">// Profiling.</span>
+00216 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.NTriangles+= ntris;
+00217 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.NTriangles+= ntris * nPass;
+00218
+00219 <span class="comment">// We have render some prims. inform the VBHard.</span>
+00220 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+00221 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;GPURenderingAfterFence= <span class="keyword">true</span>;
+00222 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_3" doxytag="NL3D::CDriverGL::resetLightMapVertexSetup" ></a><p>
+<table class="mdTable" 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::CDriverGL::resetLightMapVertexSetup </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00948">948</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00748">_LastVB</a>, <a class="el" href="a05643.html#l00774">_LastVertexSetupIsLightMap</a>, <a class="el" href="a05643.html#l00775">_LightMapUVMap</a>, <a class="el" href="a05650.html#l00561">NL3D::CDriverGLStates::enableColorArray()</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05653.html#l00449">setupUVPtr()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00257">setupMaterial()</a>.
+<p>
+<div class="fragment"><pre>00949 {
+00950 <span class="comment">// special for all stage, std UV behavior.</span>
+00951 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0; i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); i++)
+00952 {
+00953 <span class="comment">// normal behavior: each texture has its own UV.</span>
+00954 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd23">setupUVPtr</a>(i, _LastVB, i);
+00955 <span class="comment">// reset cache</span>
+00956 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a>[i]= -1;
+00957 }
+00958
+00959 <span class="comment">// pop VertexColor array if necessary.</span>
+00960 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr18">_LastVB</a>.VertexFormat &amp; CVertexBuffer::PrimaryColorFlag)
+00961 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">true</span>);
+00962
+00963 <span class="comment">// flag</span>
+00964 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a>= <span class="keyword">false</span>;
+00965 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_1" doxytag="NL3D::CDriverGL::resetTextureShaders" ></a><p>
+<table class="mdTable" 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::CDriverGL::resetTextureShaders </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l01440">1440</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00665">_CurrentTexAddrMode</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00673">_NVTextureShaderEnabled</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05646.html#l00428">GL_PREVIOUS_TEXTURE_INPUT_NV</a>, <a class="el" href="a05646.html#l00420">GL_SHADER_OPERATION_NV</a>, <a class="el" href="a05646.html#l00419">GL_TEXTURE_SHADER_NV</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01441 {
+01442 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader)
+01443 {
+01444 glEnable(GL_TEXTURE_SHADER_NV);
+01445 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> stage = 0; stage &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); ++stage)
+01446 {
+01447 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+01448 <span class="keywordflow">if</span> (stage != 0)
+01449 {
+01450 glTexEnvi(GL_TEXTURE_SHADER_NV, GL_PREVIOUS_TEXTURE_INPUT_NV, GL_TEXTURE0_ARB + stage - 1);
+01451 }
+01452 glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, GL_NONE);
+01453 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_5">_CurrentTexAddrMode</a>[stage] = GL_NONE;
+01454 }
+01455 glDisable(GL_TEXTURE_SHADER_NV);
+01456 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a> = <span class="keyword">false</span>;
+01457 }
+01458 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_1" doxytag="NL3D::CDriverGL::resetVertexArrayRange" ></a><p>
+<table class="mdTable" 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::CDriverGL::resetVertexArrayRange </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l01207">1207</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00900">_AGPVertexArrayRange</a>, <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00878">_VertexBufferHardSet</a>, <a class="el" href="a05643.html#l00902">_VRAMVertexArrayRange</a>, <a class="el" href="a06290.html#l00083">NL3D::CPtrSet&lt; IVertexBufferHardGL &gt;::clear()</a>, <a class="el" href="a03695.html#NL3D_1_1IVertexBufferHardGLa0">NL3D::IVertexBufferHardGL::disable()</a>, <a class="el" href="a03689.html#NL3D_1_1IVertexArrayRangea2">NL3D::IVertexArrayRange::free()</a>, <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_0">NL3D::IVertexBufferHard::lock()</a>, and <a class="el" href="a03694.html#NL3D_1_1IVertexBufferHardGLz1154_3">NL3D::IVertexBufferHard::unlock()</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01229">initVertexArrayRange()</a>, and <a class="el" href="a05642.html#l01667">release()</a>.
+<p>
+<div class="fragment"><pre>01208 {
+01209 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>)
+01210 {
+01211 <span class="comment">// Must ensure it has ended any drawing</span>
+01212 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;lock();
+01213 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;unlock();
+01214 <span class="comment">// disable it</span>
+01215 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>-&gt;disable();
+01216 }
+01217 <span class="comment">// Clear any VertexBufferHard created.</span>
+01218 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.clear();
+01219
+01220 <span class="comment">// After, Clear the 2 vertexArrayRange, if any.</span>
+01221 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>)
+01222 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>-&gt;free();
+01223 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>)
+01224 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>-&gt;free();
+01225 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd18" doxytag="NL3D::CDriverGL::retrieveATIDriverVersion" ></a><p>
+<table class="mdTable" 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::CDriverGL::retrieveATIDriverVersion </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l03199">3199</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01079">_ATIDriverVersion</a>, <a class="el" href="a05643.html#l01080">_ATIFogRangeFixed</a>, <a class="el" href="a05586.html#l00536">NLMISC::strlwr()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00310">init()</a>.
+<p>
+<div class="fragment"><pre>03200 {
+03201 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr0">_ATIDriverVersion</a> = 0;
+03202 <span class="comment">// we may need this driver version to fix flaws of previous ati drivers version (fog issue with V.P)</span>
+03203 <span class="preprocessor"> #ifdef NL_OS_WINDOWS</span>
+03204 <span class="preprocessor"></span> <span class="comment">// get from the registry</span>
+03205 HKEY parentKey;
+03206 <span class="comment">// open key about current video card</span>
+03207 LONG result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, <span class="stringliteral">"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}"</span>, 0, KEY_READ, &amp;parentKey);
+03208 <span class="keywordflow">if</span> (result == ERROR_SUCCESS)
+03209 {
+03210 <span class="comment">// find last config</span>
+03211 DWORD keyIndex = 0;
+03212 <a class="code" href="a04558.html#a15">uint</a> latestConfigVersion = 0;
+03213 <span class="keywordtype">char</span> subKeyName[256];
+03214 <span class="keywordtype">char</span> latestSubKeyName[256] = <span class="stringliteral">""</span>;
+03215 DWORD nameBufferSize = <span class="keyword">sizeof</span>(subKeyName) / <span class="keyword">sizeof</span>(subKeyName[0]);
+03216 FILETIME lastWriteTime;
+03217 <span class="keywordtype">bool</span> configFound = <span class="keyword">false</span>;
+03218 <span class="keywordflow">for</span>(;;)
+03219 {
+03220 nameBufferSize = <span class="keyword">sizeof</span>(subKeyName) / <span class="keyword">sizeof</span>(subKeyName[0]);
+03221 result = RegEnumKeyEx(parentKey, keyIndex, subKeyName, &amp;nameBufferSize, NULL, NULL, NULL, &amp;lastWriteTime);
+03222 <span class="keywordflow">if</span> (result == ERROR_NO_MORE_ITEMS) <span class="keywordflow">break</span>;
+03223 <span class="keywordflow">if</span> (result == ERROR_SUCCESS)
+03224 {
+03225 <span class="comment">// see if the name is numerical.</span>
+03226 <span class="keywordtype">bool</span> isNumerical = <span class="keyword">true</span>;
+03227 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; nameBufferSize; ++k)
+03228 {
+03229 <span class="keywordflow">if</span> (!isdigit(subKeyName[k]))
+03230 {
+03231 isNumerical = <span class="keyword">false</span>;
+03232 <span class="keywordflow">break</span>;
+03233 }
+03234 }
+03235 <span class="keywordflow">if</span> (isNumerical)
+03236 {
+03237 <a class="code" href="a04558.html#a15">uint</a> configVersion = atoi(subKeyName);
+03238 <span class="keywordflow">if</span> (configVersion &gt;= latestConfigVersion)
+03239 {
+03240 configFound = <span class="keyword">true</span>;
+03241 latestConfigVersion = configVersion;
+03242 strcpy(latestSubKeyName, subKeyName);
+03243 }
+03244 }
+03245 ++ keyIndex;
+03246 }
+03247 <span class="keywordflow">else</span>
+03248 {
+03249 RegCloseKey(parentKey);
+03250 <span class="keywordflow">return</span>;
+03251 }
+03252 }
+03253 <span class="keywordflow">if</span> (configFound)
+03254 {
+03255 HKEY subKey;
+03256 result = RegOpenKeyEx(parentKey, latestSubKeyName, 0, KEY_READ, &amp;subKey);
+03257 <span class="keywordflow">if</span> (result == ERROR_SUCCESS)
+03258 {
+03259 <span class="comment">// see if it is a radeon card</span>
+03260 DWORD valueType;
+03261 <span class="keywordtype">char</span> driverDesc[256];
+03262 DWORD driverDescBufSize = <span class="keyword">sizeof</span>(driverDesc) / <span class="keyword">sizeof</span>(driverDesc[0]);
+03263 result = RegQueryValueEx(subKey, <span class="stringliteral">"DriverDesc"</span>, NULL, &amp;valueType, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) driverDesc, &amp;driverDescBufSize);
+03264 <span class="keywordflow">if</span> (result == ERROR_SUCCESS &amp;&amp; valueType == REG_SZ)
+03265 {
+03266 <a class="code" href="a05378.html#a273">NLMISC::strlwr</a>(driverDesc);
+03267 <span class="keywordflow">if</span> (strstr(driverDesc, <span class="stringliteral">"radeon"</span>)) <span class="comment">// is it a radeon card ?</span>
+03268 {
+03269 <span class="keywordtype">char</span> driverVersion[256];
+03270 DWORD driverVersionBufSize = <span class="keyword">sizeof</span>(driverVersion) / <span class="keyword">sizeof</span>(driverVersion[0]);
+03271 result = RegQueryValueEx(subKey, <span class="stringliteral">"DriverVersion"</span>, NULL, &amp;valueType, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) driverVersion, &amp;driverVersionBufSize);
+03272 <span class="keywordflow">if</span> (result == ERROR_SUCCESS &amp;&amp; valueType == REG_SZ)
+03273 {
+03274 <span class="keywordtype">int</span> subVersionNumber[4];
+03275 <span class="keywordflow">if</span> (sscanf(driverVersion, <span class="stringliteral">"%d.%d.%d.%d"</span>, &amp;subVersionNumber[0], &amp;subVersionNumber[1], &amp;subVersionNumber[2], &amp;subVersionNumber[3]) == 4)
+03276 {
+03277 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr0">_ATIDriverVersion</a> = (<a class="code" href="a04558.html#a15">uint</a>) subVersionNumber[3];
+03282 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr0">_ATIDriverVersion</a> &lt; 6343)
+03283 {
+03284 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a> = <span class="keyword">false</span>;
+03285 }
+03286 }
+03287 }
+03288 }
+03289 }
+03290 }
+03291 RegCloseKey(subKey);
+03292 }
+03293 RegCloseKey(parentKey);
+03294 }
+03295 <span class="preprocessor"> #endif </span>
+03296 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa75" doxytag="NL3D::CDriverGL::setAmbientColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::setAmbientColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03337.html">CRGBA</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>color</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set ambiant.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>color</em>&nbsp;</td><td>is the new global ambiant color for the scene. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLa80">setLight()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLa15">enableLight()</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera57">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05647.html#l00164">164</a> of file <a class="el" href="a05647.html">driver_opengl_light.cpp</a>.
+<p>
+References <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, and <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>.
+<p>
+<div class="fragment"><pre>00165 {
+00166 <span class="comment">// Gl array</span>
+00167 GLfloat array[4];
+00168 array[0]=(<span class="keywordtype">float</span>)color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>/255.f;
+00169 array[1]=(<span class="keywordtype">float</span>)color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>/255.f;
+00170 array[2]=(<span class="keywordtype">float</span>)color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>/255.f;
+00171 array[3]=1.f;
+00172
+00173 <span class="comment">// Set the color</span>
+00174 glLightModelfv (GL_LIGHT_MODEL_AMBIENT, array);
+00175 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_4" doxytag="NL3D::CDriverGL::setBlendConstantColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::setBlendConstantColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03337.html">NLMISC::CRGBA</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>col</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+see <a class="el" href="a02433.html#NL3D_1_1CDriverGLz78_6">supportBlendConstantColor()</a>. Set the current Blend Constant Color.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz153_4">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02564">2564</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01020">_CurrentBlendConstantColor</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00088">NL3D::CGlExtensions::EXTBlendColor</a>, and <a class="el" href="a05645.html#l00401">nglBlendColorEXT</a>.
+<p>
+<div class="fragment"><pre>02565 {
+02566 <span class="comment">// bkup</span>
+02567 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr2">_CurrentBlendConstantColor</a>= col;
+02568
+02569 <span class="comment">// update GL</span>
+02570 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTBlendColor)
+02571 <span class="keywordflow">return</span>;
+02572 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> OO255= 1.0f/255;
+02573 <a class="code" href="a04222.html#a171">nglBlendColorEXT</a>(col.R*OO255, col.G*OO255, col.B*OO255, col.A*OO255);
+02574 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa76" doxytag="NL3D::CDriverGL::setCapture" ></a><p>
+<table class="mdTable" 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::CDriverGL::setCapture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>b</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+If true, capture the mouse to force it to stay under the window. NB : this has no effects if a low level mouse is used
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_4">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02074">2074</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>02075 {
+02076 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02077 <span class="preprocessor"></span>
+02078 <span class="keywordflow">if</span> (b)
+02079 {
+02080 RECT client;
+02081 GetClientRect (_hWnd, &amp;client);
+02082 POINT pt1,pt2;
+02083 pt1.x = client.left;
+02084 pt1.y = client.top;
+02085 ClientToScreen (_hWnd, &amp;pt1);
+02086 pt2.x = client.right;
+02087 pt2.y = client.bottom;
+02088 ClientToScreen (_hWnd, &amp;pt2);
+02089 client.bottom = pt2.y;
+02090 client.top = pt1.y;
+02091 client.left = pt1.x;
+02092 client.right = pt2.x;
+02093 ClipCursor (&amp;client);
+02094 }
+02095 <span class="keywordflow">else</span>
+02096 ClipCursor (NULL);
+02097
+02098 <span class="comment">/*</span>
+02099 <span class="comment"> if (b)</span>
+02100 <span class="comment"> SetCapture (_hWnd);</span>
+02101 <span class="comment"> else</span>
+02102 <span class="comment"> ReleaseCapture ();</span>
+02103 <span class="comment"> */</span>
+02104
+02105 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+02106 <span class="preprocessor"></span>
+02107 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+02108 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa77" doxytag="NL3D::CDriverGL::setColorMask" ></a><p>
+<table class="mdTable" 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::CDriverGL::setColorMask </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>bRed</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>bGreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>bBlue</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>bAlpha</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the color mask filter through where the operation done will pass.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera58">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01530">1530</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>01531 {
+01532 glColorMask (bRed, bGreen, bBlue, bAlpha);
+01533 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_4" doxytag="NL3D::CDriverGL::setConstant" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstant </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>num</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const double *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup several 4 double csts taken from the given tab
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_6">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01327">1327</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05645.html#l00288">nglProgramParameters4dvNV</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05646.html#l01124">num</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a05646.html#l01124">src</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01328 {
+01329 <span class="comment">// Vertex program exist ?</span>
+01330 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01331 {
+01332 <a class="code" href="a04222.html#a73">nglProgramParameters4dvNV</a>(GL_VERTEX_PROGRAM_NV, index, num, src);
+01333 }
+01334 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01335 {
+01336 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; <a class="code" href="a04223.html#a653">num</a>; ++k)
+01337 {
+01338 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index + k, GL_DOUBLE, (<span class="keywordtype">void</span> *) (src + 4 * k));
+01339 }
+01340 }
+01341 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_5" doxytag="NL3D::CDriverGL::setConstant" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstant </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>num</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const float *&nbsp;</td>
+ <td class="mdname" nowrap> <em>src</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup several 4 float csts taken from the given tab
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_7">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01310">1310</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05645.html#l00289">nglProgramParameters4fvNV</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05646.html#l01124">num</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a05646.html#l01124">src</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01311 {
+01312 <span class="comment">// Vertex program exist ?</span>
+01313 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01314 {
+01315 <a class="code" href="a04222.html#a74">nglProgramParameters4fvNV</a>(GL_VERTEX_PROGRAM_NV, index, num, src);
+01316 }
+01317 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01318 {
+01319 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; <a class="code" href="a04223.html#a653">num</a>; ++k)
+01320 {
+01321 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index + k, GL_FLOAT, (<span class="keywordtype">void</span> *) (src + 4 * k));
+01322 }
+01323 }
+01324 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_6" doxytag="NL3D::CDriverGL::setConstant" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstant </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indexStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03664.html">NLMISC::CVectorD</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>value</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_8">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01293">1293</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05645.html#l00284">nglProgramParameter4dNV</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05646.html#l01132">value</a>.
+<p>
+<div class="fragment"><pre>01294 {
+01295 <span class="comment">// Vertex program exist ?</span>
+01296 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01297 {
+01298 <span class="comment">// Setup constant</span>
+01299 <a class="code" href="a04222.html#a69">nglProgramParameter4dNV</a> (GL_VERTEX_PROGRAM_NV, index, <a class="code" href="a04223.html#a658">value</a>.x, <a class="code" href="a04223.html#a658">value</a>.y, <a class="code" href="a04223.html#a658">value</a>.z, 0);
+01300 }
+01301 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01302 {
+01303 <span class="keywordtype">double</span> datas[] = { <a class="code" href="a04223.html#a658">value</a>.x, <a class="code" href="a04223.html#a658">value</a>.y, <a class="code" href="a04223.html#a658">value</a>.z, 0 };
+01304 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index, GL_DOUBLE, datas);
+01305 }
+01306 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_7" doxytag="NL3D::CDriverGL::setConstant" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstant </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indexStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>value</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_9">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01275">1275</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05645.html#l00286">nglProgramParameter4fNV</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05646.html#l01132">value</a>.
+<p>
+<div class="fragment"><pre>01276 {
+01277 <span class="comment">// Vertex program exist ?</span>
+01278 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01279 {
+01280 <span class="comment">// Setup constant</span>
+01281 <a class="code" href="a04222.html#a71">nglProgramParameter4fNV</a> (GL_VERTEX_PROGRAM_NV, index, <a class="code" href="a04223.html#a658">value</a>.x, <a class="code" href="a04223.html#a658">value</a>.y, <a class="code" href="a04223.html#a658">value</a>.z, 0);
+01282 }
+01283 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01284 {
+01285 <span class="keywordtype">float</span> datas[] = { <a class="code" href="a04223.html#a658">value</a>.x, <a class="code" href="a04223.html#a658">value</a>.y, <a class="code" href="a04223.html#a658">value</a>.z, 0 };
+01286 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index, GL_FLOAT, datas);
+01287 }
+01288 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_8" doxytag="NL3D::CDriverGL::setConstant" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstant </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>double&nbsp;</td>
+ <td class="mdname" nowrap>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>double&nbsp;</td>
+ <td class="mdname" nowrap>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>double&nbsp;</td>
+ <td class="mdname" nowrap>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>double&nbsp;</td>
+ <td class="mdname" nowrap></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_10">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01257">1257</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05645.html#l00284">nglProgramParameter4dNV</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01258 {
+01259 <span class="comment">// Vertex program exist ?</span>
+01260 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01261 {
+01262 <span class="comment">// Setup constant</span>
+01263 <a class="code" href="a04222.html#a69">nglProgramParameter4dNV</a> (GL_VERTEX_PROGRAM_NV, index, d0, d1, d2, d3);
+01264 }
+01265 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01266 {
+01267 <span class="keywordtype">double</span> datas[] = { d0, d1, d2, d3 };
+01268 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index, GL_DOUBLE, datas);
+01269 }
+01270 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_9" doxytag="NL3D::CDriverGL::setConstant" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstant </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup constant values.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_11">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01239">1239</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05645.html#l00286">nglProgramParameter4fNV</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02245">setupFog()</a>.
+<p>
+<div class="fragment"><pre>01240 {
+01241 <span class="comment">// Vertex program exist ?</span>
+01242 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01243 {
+01244 <span class="comment">// Setup constant</span>
+01245 <a class="code" href="a04222.html#a71">nglProgramParameter4fNV</a> (GL_VERTEX_PROGRAM_NV, index, f0, f1, f2, f3);
+01246 }
+01247 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01248 {
+01249 <span class="keywordtype">float</span> datas[] = { f0, f1, f2, f3 };
+01250 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index, GL_FLOAT, datas);
+01251 }
+01252 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverz147_12" doxytag="NL3D::CDriverGL::setConstantMatrix" ></a><p>
+<table class="mdTable" 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 void NL3D::IDriver::setConstantMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverz147_0">TMatrix</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>matrix</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverz147_1">TTransform</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>transform</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [pure virtual, inherited]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup constants with a current matrix.<p>
+This call must be done after <a class="el" href="a02434.html#NL3D_1_1IDrivera60">setFrustum()</a>, <a class="el" href="a02434.html#NL3D_1_1IDrivera72">setupViewMatrix()</a> or <a class="el" href="a02434.html#NL3D_1_1IDrivera68">setupModelMatrix()</a> to get correct results.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>index</em>&nbsp;</td><td>is the base constant index where to store the matrix. This index must be a multiple of 4. </td></tr>
+ <tr><td valign=top><em>matrix</em>&nbsp;</td><td>is the matrix id to store in the constants </td></tr>
+ <tr><td valign=top><em>transform</em>&nbsp;</td><td>is the transformation to apply to the matrix before store it in the constants.</td></tr>
+ </table>
+</dl>
+
+<p>
+Referenced by <a class="el" href="a06022.html#l00433">NL3D::CMeshVPPerPixelLight::begin()</a>, <a class="el" href="a05862.html#l00939">NL3D::CLandscape::render()</a>, <a class="el" href="a06737.html#l00831">NL3D::CWaterModel::setupMaterialNVertexShader()</a>, <a class="el" href="a06024.html#l00228">NL3D::CMeshVPWindTree::setupPerInstanceConstants()</a>, and <a class="el" href="a06698.html#l01664">NL3D::CVegetableManager::setupVertexProgramConstants()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_10" doxytag="NL3D::CDriverGL::setConstantMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::setConstantMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverz147_0">IDriver::TMatrix</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>matrix</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverz147_1">IDriver::TTransform</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>transform</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05656.html#l01366">1366</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00584">_GLProjMat</a>, <a class="el" href="a05643.html#l00606">_ModelViewMatrix</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05972.html#l00443">NLMISC::CMatrix::get()</a>, <a class="el" href="a05646.html#l00079">GL_IDENTITY_NV</a>, <a class="el" href="a05646.html#l00070">GL_VERTEX_PROGRAM_NV</a>, <a class="el" href="a05656.html#l01345">GLMatrix</a>, <a class="el" href="a05656.html#l01355">GLTransform</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05972.html#l00914">NLMISC::CMatrix::invert()</a>, <a class="el" href="a05646.html#l00243">matrix</a>, <a class="el" href="a05645.html#l00347">nglSetInvariantEXT</a>, <a class="el" href="a05645.html#l00291">nglTrackMatrixNV</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a05642.html#l02589">refreshProjMatrixFromGL()</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05646.html#l00243">transform</a>, <a class="el" href="a05972.html#l00935">NLMISC::CMatrix::transpose()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>01367 {
+01368 <span class="comment">// Vertex program exist ?</span>
+01369 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+01370 {
+01371 <span class="comment">// First, ensure that the render setup is correclty setuped.</span>
+01372 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+01373
+01374 <span class="comment">// Track the matrix</span>
+01375 <a class="code" href="a04222.html#a76">nglTrackMatrixNV</a> (GL_VERTEX_PROGRAM_NV, index, GLMatrix[matrix], GLTransform[transform]);
+01376 <span class="comment">// Release Track =&gt; matrix data is copied.</span>
+01377 <a class="code" href="a04222.html#a76">nglTrackMatrixNV</a> (GL_VERTEX_PROGRAM_NV, index, GL_NONE, GL_IDENTITY_NV);
+01378 }
+01379 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01380 {
+01381 <span class="comment">// First, ensure that the render setup is correctly setuped.</span>
+01382 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd17">refreshRenderSetup</a>();
+01383 CMatrix mat;
+01384 <span class="keywordflow">switch</span> (<a class="code" href="a04223.html#a578">matrix</a>)
+01385 {
+01386 <span class="keywordflow">case</span> IDriver::ModelView:
+01387 mat = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a>;
+01388 <span class="keywordflow">break</span>;
+01389 <span class="keywordflow">case</span> IDriver::Projection:
+01390 {
+01391 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd16">refreshProjMatrixFromGL</a>();
+01392 mat = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr14">_GLProjMat</a>;
+01393 }
+01394 <span class="keywordflow">break</span>;
+01395 <span class="keywordflow">case</span> IDriver::ModelViewProjection:
+01396 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd16">refreshProjMatrixFromGL</a>();
+01397 mat = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr14">_GLProjMat</a> * _ModelViewMatrix;
+01398 <span class="keywordflow">break</span>;
+01399 }
+01400
+01401 <span class="keywordflow">switch</span>(<a class="code" href="a04223.html#a579">transform</a>)
+01402 {
+01403 <span class="keywordflow">case</span> IDriver::Identity: <span class="keywordflow">break</span>;
+01404 <span class="keywordflow">case</span> IDriver::Inverse:
+01405 mat.<a class="code" href="a02851.html#NLMISC_1_1CMatrixz1967_0">invert</a>();
+01406 <span class="keywordflow">break</span>;
+01407 <span class="keywordflow">case</span> IDriver::Transpose:
+01408 mat.transpose();
+01409 <span class="keywordflow">break</span>;
+01410 <span class="keywordflow">case</span> IDriver::InverseTranspose:
+01411 mat.invert();
+01412 mat.transpose();
+01413 <span class="keywordflow">break</span>;
+01414 }
+01415 mat.transpose();
+01416 <span class="keywordtype">float</span> matDatas[16];
+01417 mat.get(matDatas);
+01418 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index, GL_FLOAT, matDatas);
+01419 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index + 1, GL_FLOAT, matDatas + 4);
+01420 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index + 2, GL_FLOAT, matDatas + 8);
+01421 <a class="code" href="a04222.html#a129">nglSetInvariantEXT</a>(_EVSConstantHandle + index + 3, GL_FLOAT, matDatas + 12);
+01422 }
+01423 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa78" doxytag="NL3D::CDriverGL::setDisplay" ></a><p>
+<table class="mdTable" 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::CDriverGL::setDisplay </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void *&nbsp;</td>
+ <td class="mdname" nowrap> <em>wnd</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03831.html">GfxMode</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>show</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> throw (<a class="el" href="a03775.html">EBadDisplay</a>)<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera59">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l00399">399</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a05646.html#l00600">GL_CURRENT_VERTEX_EXT</a>, <a class="el" href="a05646.html#l00599">GL_FULL_RANGE_EXT</a>, <a class="el" href="a05646.html#l00567">GL_INVARIANT_EXT</a>, <a class="el" href="a05646.html#l00564">GL_VECTOR_EXT</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a05645.html#l00356">nglBindParameterEXT</a>, <a class="el" href="a05645.html#l00355">nglBindTextureUnitParameterEXT</a>, <a class="el" href="a05645.html#l00346">nglGenSymbolsEXT</a>, <a class="el" href="a05642.html#l00069">NL3D_DRV_VERTEXARRAY_AGP_INIT_SIZE</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05646.html#l00223">params</a>, <a class="el" href="a05644.html#l00915">NL3D::registerGlExtensions()</a>, <a class="el" href="a05646.html#l01119">res</a>, <a class="el" href="a06339.html#l00066">NLMISC::CRGBA::set()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05646.html#l00319">WGL_ALPHA_BITS_ARB</a>, <a class="el" href="a05646.html#l00317">WGL_BLUE_BITS_ARB</a>, <a class="el" href="a05646.html#l00326">WGL_DEPTH_BITS_ARB</a>, <a class="el" href="a05646.html#l00341">WGL_DRAW_TO_PBUFFER_ARB</a>, <a class="el" href="a05646.html#l00315">WGL_GREEN_BITS_ARB</a>, <a class="el" href="a05646.html#l00347">WGL_PBUFFER_HEIGHT_ARB</a>, <a class="el" href="a05646.html#l00346">WGL_PBUFFER_WIDTH_ARB</a>, <a class="el" href="a05646.html#l00313">WGL_RED_BITS_ARB</a>, and <a class="el" href="a05646.html#l01013">width</a>.
+<p>
+<div class="fragment"><pre>00400 {
+00401
+00402 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a632">width</a> = mode.Width;
+00403 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a633">height</a> = mode.Height;
+00404
+00405
+00406 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00407 <span class="preprocessor"></span>
+00408 <span class="comment">// Driver caps.</span>
+00409 <span class="comment">//=============</span>
+00410 <span class="comment">// Retrieve the WGL extensions before init the driver.</span>
+00411 <span class="keywordtype">int</span> pf;
+00412
+00413 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a> = mode.OffScreen;
+00414
+00415 <span class="comment">// Init pointers</span>
+00416 _PBuffer = NULL;
+00417 _hWnd = NULL;
+00418 _WindowWidth = _WindowHeight = _WindowX = _WindowY = 0;
+00419 _hRC = NULL;
+00420 _hDC = NULL;
+00421
+00422 <span class="comment">// Offscreen mode ?</span>
+00423 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr26">_OffScreen</a>)
+00424 {
+00425 <span class="comment">// Get a hdc</span>
+00426
+00427 ULONG WndFlags=WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS;
+00428 WndFlags&amp;=~WS_VISIBLE;
+00429 RECT WndRect;
+00430 WndRect.left=0;
+00431 WndRect.top=0;
+00432 WndRect.right=<a class="code" href="a04223.html#a632">width</a>;
+00433 WndRect.bottom=<a class="code" href="a04223.html#a633">height</a>;
+00434 AdjustWindowRect(&amp;WndRect,WndFlags,FALSE);
+00435 HWND tmpHWND = CreateWindow( <span class="stringliteral">"NLClass"</span>,
+00436 <span class="stringliteral">""</span>,
+00437 WndFlags,
+00438 CW_USEDEFAULT,CW_USEDEFAULT,
+00439 WndRect.right,WndRect.bottom,
+00440 NULL,
+00441 NULL,
+00442 GetModuleHandle(NULL),
+00443 NULL);
+00444 <span class="keywordflow">if</span> (!tmpHWND)
+00445 {
+00446 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: CreateWindow failed"</span>);
+00447 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00448 }
+00449
+00450 <span class="comment">// resize the window</span>
+00451 RECT rc;
+00452 SetRect (&amp;rc, 0, 0, width, height);
+00453 _WindowWidth = <a class="code" href="a04223.html#a632">width</a>;
+00454 _WindowHeight = <a class="code" href="a04223.html#a633">height</a>;
+00455 AdjustWindowRectEx (&amp;rc, GetWindowStyle (_hWnd), GetMenu (_hWnd) != NULL, GetWindowExStyle (_hWnd));
+00456 SetWindowPos (_hWnd, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
+00457
+00458 <span class="comment">// Get the </span>
+00459 HDC tempHDC = GetDC(tmpHWND);
+00460
+00461 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>=GetDeviceCaps(tempHDC,BITSPIXEL);
+00462
+00463 <span class="comment">// ---</span>
+00464 memset(&amp;_pfd,0,<span class="keyword">sizeof</span>(_pfd));
+00465 _pfd.nSize = <span class="keyword">sizeof</span>(_pfd);
+00466 _pfd.nVersion = 1;
+00467 _pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
+00468 _pfd.iPixelType = PFD_TYPE_RGBA;
+00469 _pfd.cColorBits = (<span class="keywordtype">char</span>)<a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>;
+00470
+00471 <span class="comment">// Choose best suited Depth Buffer.</span>
+00472 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>&lt;=16)
+00473 {
+00474 _pfd.cDepthBits = 16;
+00475 }
+00476 <span class="keywordflow">else</span>
+00477 {
+00478 _pfd.cDepthBits = 24;
+00479 _pfd.cAlphaBits = 8;
+00480 }
+00481 _pfd.iLayerType = PFD_MAIN_PLANE;
+00482 pf=ChoosePixelFormat(tempHDC,&amp;_pfd);
+00483 <span class="keywordflow">if</span> (!pf)
+00484 {
+00485 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: ChoosePixelFormat failed"</span>);
+00486 DestroyWindow (tmpHWND);
+00487 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00488 }
+00489 <span class="keywordflow">if</span> ( !SetPixelFormat(tempHDC,pf,&amp;_pfd) )
+00490 {
+00491 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: SetPixelFormat failed"</span>);
+00492 DestroyWindow (tmpHWND);
+00493 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00494 }
+00495
+00496 <span class="comment">// Create gl context</span>
+00497 HGLRC tempGLRC = wglCreateContext(tempHDC);
+00498 <span class="keywordflow">if</span> (tempGLRC == NULL)
+00499 {
+00500 DWORD error = GetLastError ();
+00501 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglCreateContext failed: 0x%x"</span>, error);
+00502 DestroyWindow (tmpHWND);
+00503 _PBuffer = NULL;
+00504 _hWnd = NULL;
+00505 _hRC = NULL;
+00506 _hDC = NULL;
+00507 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00508 }
+00509
+00510 <span class="comment">// Make the context current</span>
+00511 <span class="keywordflow">if</span> (!wglMakeCurrent(tempHDC,tempGLRC))
+00512 {
+00513 DWORD error = GetLastError ();
+00514 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglMakeCurrent failed: 0x%x"</span>, error);
+00515 wglDeleteContext (tempGLRC);
+00516 DestroyWindow (tmpHWND);
+00517 _PBuffer = NULL;
+00518 _hWnd = NULL;
+00519 _hRC = NULL;
+00520 _hDC = NULL;
+00521 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00522 }
+00523
+00524 <span class="comment">// Register WGL functions</span>
+00525 registerWGlExtensions (_Extensions, tempHDC);
+00526
+00527 HDC hdc = wglGetCurrentDC ();
+00528 <span class="keywordflow">if</span> (hdc == NULL)
+00529 {
+00530 DWORD error = GetLastError ();
+00531 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglGetCurrentDC failed: 0x%x"</span>, error);
+00532 DestroyWindow (tmpHWND);
+00533 _PBuffer = NULL;
+00534 _hWnd = NULL;
+00535 _hRC = NULL;
+00536 _hDC = NULL;
+00537 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00538 }
+00539
+00540 <span class="comment">// Get ready to query for a suitable pixel format that meets our</span>
+00541 <span class="comment">// minimum requirements.</span>
+00542 <span class="keywordtype">int</span> iattributes[2*20];
+00543 <span class="keywordtype">float</span> fattributes[2*20];
+00544 <span class="keywordtype">int</span> nfattribs = 0;
+00545 <span class="keywordtype">int</span> niattribs = 0;
+00546
+00547 <span class="comment">// Attribute arrays must be “0” terminated – for simplicity, first</span>
+00548 <span class="comment">// just zero-out the array then fill from left to right.</span>
+00549 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> a = 0; a &lt; 2*20; a++ )
+00550 {
+00551 iattributes[a] = 0;
+00552 fattributes[a] = 0;
+00553 }
+00554
+00555 <span class="comment">// Since we are trying to create a pbuffer, the pixel format we</span>
+00556 <span class="comment">// request (and subsequently use) must be “p-buffer capable”.</span>
+00557 iattributes[2*niattribs ] = <a class="code" href="a04223.html#a135">WGL_DRAW_TO_PBUFFER_ARB</a>;
+00558 iattributes[2*niattribs+1] = <span class="keyword">true</span>;
+00559 niattribs++;
+00560
+00561 <span class="comment">// We require a minimum of 24-bit depth.</span>
+00562 iattributes[2*niattribs ] = <a class="code" href="a04223.html#a123">WGL_DEPTH_BITS_ARB</a>;
+00563 iattributes[2*niattribs+1] = 24;
+00564 niattribs++;
+00565
+00566 <span class="comment">// We require a minimum of 8-bits for each R, G, B, and A.</span>
+00567 iattributes[2*niattribs ] = <a class="code" href="a04223.html#a110">WGL_RED_BITS_ARB</a>;
+00568 iattributes[2*niattribs+1] = 8;
+00569 niattribs++;
+00570 iattributes[2*niattribs ] = <a class="code" href="a04223.html#a112">WGL_GREEN_BITS_ARB</a>;
+00571 iattributes[2*niattribs+1] = 8;
+00572 niattribs++;
+00573 iattributes[2*niattribs ] = <a class="code" href="a04223.html#a114">WGL_BLUE_BITS_ARB</a>;
+00574 iattributes[2*niattribs+1] = 8;
+00575 niattribs++;
+00576 iattributes[2*niattribs ] = <a class="code" href="a04223.html#a116">WGL_ALPHA_BITS_ARB</a>;
+00577 iattributes[2*niattribs+1] = 8;
+00578 niattribs++;
+00579
+00580 <span class="comment">// Now obtain a list of pixel formats that meet these minimum</span>
+00581 <span class="comment">// requirements.</span>
+00582 <span class="keywordtype">int</span> pformat[20];
+00583 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nformats;
+00584 <span class="keywordflow">if</span> ( !wglChoosePixelFormatARB ( hdc, iattributes, fattributes,
+00585 20, pformat, &amp;nformats ) )
+00586 {
+00587 <a class="code" href="a04199.html#a2">nlwarning</a> ( <span class="stringliteral">"pbuffer creation error: Couldn't find a suitable pixel format.\n"</span> );
+00588 wglDeleteContext (tempGLRC);
+00589 DestroyWindow (tmpHWND);
+00590 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00591 }
+00592
+00593 <span class="comment">/* After determining a compatible pixel format, the next step is to create a pbuffer of the</span>
+00594 <span class="comment"> chosen format. Fortunately this step is fairly easy, as you merely select one of the formats</span>
+00595 <span class="comment"> returned in the list in step #2 and call the function: */</span>
+00596 <span class="keywordtype">int</span> iattributes2[1] = {0};
+00597 <span class="comment">// int iattributes2[] = {WGL_PBUFFER_LARGEST_ARB, 1, 0};</span>
+00598 _PBuffer = wglCreatePbufferARB( hdc, pformat[0], width, height, iattributes2 );
+00599 <span class="keywordflow">if</span> (_PBuffer == NULL)
+00600 {
+00601 DWORD error = GetLastError ();
+00602 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglCreatePbufferARB failed: 0x%x"</span>, error);
+00603 wglDeleteContext (tempGLRC);
+00604 DestroyWindow (tmpHWND);
+00605 _PBuffer = NULL;
+00606 _hWnd = NULL;
+00607 _hRC = NULL;
+00608 _hDC = NULL;
+00609 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00610 }
+00611
+00612 <span class="comment">/* After creating a pbuffer, you may use this functions to determine the dimensions of the pbuffer actually created. */</span>
+00613 <span class="keywordflow">if</span> ( !wglQueryPbufferARB( _PBuffer, WGL_PBUFFER_WIDTH_ARB, (<span class="keywordtype">int</span>*)&amp;width ) )
+00614 {
+00615 DWORD error = GetLastError ();
+00616 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglQueryPbufferARB failed: 0x%x"</span>, error);
+00617 wglDeleteContext (tempGLRC);
+00618 DestroyWindow (tmpHWND);
+00619 _PBuffer = NULL;
+00620 _hWnd = NULL;
+00621 _hRC = NULL;
+00622 _hDC = NULL;
+00623 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00624 }
+00625 <span class="keywordflow">if</span> ( !wglQueryPbufferARB( _PBuffer, WGL_PBUFFER_HEIGHT_ARB, (<span class="keywordtype">int</span>*)&amp;height ) )
+00626 {
+00627 DWORD error = GetLastError ();
+00628 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglQueryPbufferARB failed: 0x%x"</span>, error);
+00629 wglDeleteContext (tempGLRC);
+00630 DestroyWindow (tmpHWND);
+00631 _PBuffer = NULL;
+00632 _hWnd = NULL;
+00633 _hRC = NULL;
+00634 _hDC = NULL;
+00635 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00636 }
+00637 _WindowWidth = <a class="code" href="a04223.html#a632">width</a>;
+00638 _WindowHeight = <a class="code" href="a04223.html#a633">height</a>;
+00639
+00640 <span class="comment">/* The next step is to create a device context for the newly created pbuffer. To do this,</span>
+00641 <span class="comment"> call the the function: */</span>
+00642 _hDC = wglGetPbufferDCARB( _PBuffer );
+00643 <span class="keywordflow">if</span> (_hDC == NULL)
+00644 {
+00645 DWORD error = GetLastError ();
+00646 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglGetPbufferDCARB failed: 0x%x"</span>, error);
+00647 wglDestroyPbufferARB( _PBuffer );
+00648 wglDeleteContext (tempGLRC);
+00649 DestroyWindow (tmpHWND);
+00650 _PBuffer = NULL;
+00651 _hWnd = NULL;
+00652 _hRC = NULL;
+00653 _hDC = NULL;
+00654 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00655 }
+00656
+00657
+00658 <span class="comment">/* The final step of pbuffer creation is to create an OpenGL rendering context and</span>
+00659 <span class="comment"> associate it with the handle for the pbuffer’s device context created in step #4. This is done as follows */</span>
+00660 _hRC = wglCreateContext( _hDC );
+00661 <span class="keywordflow">if</span> (_hRC == NULL)
+00662 {
+00663 DWORD error = GetLastError ();
+00664 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglCreateContext failed: 0x%x"</span>, error);
+00665 wglReleasePbufferDCARB( _PBuffer, _hDC );
+00666 wglDestroyPbufferARB( _PBuffer );
+00667 wglDeleteContext (tempGLRC);
+00668 DestroyWindow (tmpHWND);
+00669 _PBuffer = NULL;
+00670 _hWnd = NULL;
+00671 _hRC = NULL;
+00672 _hDC = NULL;
+00673 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00674 }
+00675
+00676 <span class="comment">// Get the depth</span>
+00677 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a> = GetDeviceCaps (_hDC, BITSPIXEL);
+00678
+00679 <span class="comment">// Destroy the temp gl context</span>
+00680 <span class="keywordflow">if</span> (!wglDeleteContext (tempGLRC))
+00681 {
+00682 DWORD error = GetLastError ();
+00683 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglDeleteContext failed: 0x%x"</span>, error);
+00684 }
+00685
+00686 <span class="comment">// Destroy the temp windows</span>
+00687 <span class="keywordflow">if</span> (!DestroyWindow (tmpHWND))
+00688 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: DestroyWindow failed"</span>);
+00689
+00690 <span class="comment">/* After a pbuffer has been successfully created you can use it for off-screen rendering. To do</span>
+00691 <span class="comment"> so, you’ll first need to bind the pbuffer, or more precisely, make its GL rendering context</span>
+00692 <span class="comment"> the current context that will interpret all OpenGL commands and state changes. */</span>
+00693 <span class="keywordflow">if</span> (!wglMakeCurrent(_hDC,_hRC))
+00694 {
+00695 DWORD error = GetLastError ();
+00696 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setDisplay: wglMakeCurrent failed: 0x%x"</span>, error);
+00697 wglDeleteContext (_hRC);
+00698 wglReleasePbufferDCARB( _PBuffer, _hDC );
+00699 wglDestroyPbufferARB( _PBuffer );
+00700 DestroyWindow (tmpHWND);
+00701 _PBuffer = NULL;
+00702 _hWnd = NULL;
+00703 _hRC = NULL;
+00704 _hDC = NULL;
+00705 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00706 }
+00707 }
+00708 <span class="keywordflow">else</span>
+00709 {
+00710 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>= <span class="keyword">false</span>;
+00711 <span class="keywordflow">if</span> (wnd)
+00712 {
+00713 _hWnd=(HWND)wnd;
+00714 _DestroyWindow=<span class="keyword">false</span>;
+00715 }
+00716 <span class="keywordflow">else</span>
+00717 {
+00718 ULONG WndFlags;
+00719 RECT WndRect;
+00720
+00721 <span class="comment">// Must destroy this window</span>
+00722 _DestroyWindow=<span class="keyword">true</span>;
+00723
+00724 <span class="keywordflow">if</span>(mode.Windowed)
+00725 WndFlags=WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS;
+00726 <span class="keywordflow">else</span>
+00727 {
+00728 WndFlags=WS_POPUP;
+00729
+00730 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>= <span class="keyword">true</span>;
+00731 DEVMODE devMode;
+00732 _OldScreenMode.dmSize= <span class="keyword">sizeof</span>(DEVMODE);
+00733 _OldScreenMode.dmDriverExtra= 0;
+00734 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &amp;_OldScreenMode);
+00735 _OldScreenMode.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY ;
+00736
+00737 devMode.dmSize= <span class="keyword">sizeof</span>(DEVMODE);
+00738 devMode.dmDriverExtra= 0;
+00739 devMode.dmFields= DM_PELSWIDTH | DM_PELSHEIGHT;
+00740 devMode.dmPelsWidth= <a class="code" href="a04223.html#a632">width</a>;
+00741 devMode.dmPelsHeight= <a class="code" href="a04223.html#a633">height</a>;
+00742
+00743 <span class="keywordflow">if</span>(mode.Depth &gt; 0)
+00744 {
+00745 devMode.dmBitsPerPel= mode.Depth;
+00746 devMode.dmFields |= DM_BITSPERPEL;
+00747 }
+00748
+00749 <span class="keywordflow">if</span>(mode.Frequency &gt; 0)
+00750 {
+00751 devMode.dmDisplayFrequency= mode.Frequency;
+00752 devMode.dmFields |= DM_DISPLAYFREQUENCY;
+00753 }
+00754
+00755 <span class="keywordflow">if</span> (ChangeDisplaySettings(&amp;devMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
+00756 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00757 }
+00758 WndRect.left=0;
+00759 WndRect.top=0;
+00760 WndRect.right=<a class="code" href="a04223.html#a632">width</a>;
+00761 WndRect.bottom=<a class="code" href="a04223.html#a633">height</a>;
+00762 AdjustWindowRect(&amp;WndRect,WndFlags,FALSE);
+00763 _hWnd = CreateWindow( <span class="stringliteral">"NLClass"</span>,
+00764 <span class="stringliteral">""</span>,
+00765 WndFlags,
+00766 CW_USEDEFAULT,CW_USEDEFAULT,
+00767 WndRect.right,WndRect.bottom,
+00768 NULL,
+00769 NULL,
+00770 GetModuleHandle(NULL),
+00771 NULL);
+00772 <span class="keywordflow">if</span> (_hWnd == NULL)
+00773 {
+00774 DWORD <a class="code" href="a04223.html#a643">res</a> = GetLastError();
+00775 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"CreateWindow failed: %u"</span>, res);
+00776 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00777 }
+00778
+00779 SetWindowLong (_hWnd, GWL_USERDATA, (LONG)<span class="keyword">this</span>);
+00780
+00781 <span class="comment">// resize the window</span>
+00782 RECT rc;
+00783 SetRect (&amp;rc, 0, 0, width, height);
+00784 AdjustWindowRectEx (&amp;rc, GetWindowStyle (_hWnd), GetMenu (_hWnd) != NULL, GetWindowExStyle (_hWnd));
+00785 SetWindowPos (_hWnd, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
+00786
+00787 <span class="keywordflow">if</span> (show || <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>)
+00788 ShowWindow(_hWnd,SW_SHOW);
+00789 }
+00790
+00791 <span class="comment">// Init Window Width and Height</span>
+00792 RECT clientRect;
+00793 GetClientRect (_hWnd, &amp;clientRect);
+00794 _WindowWidth = clientRect.right-clientRect.left;
+00795 _WindowHeight = clientRect.bottom-clientRect.top;
+00796 _WindowX = clientRect.left;
+00797 _WindowY = clientRect.top;
+00798
+00799 _hDC=GetDC(_hWnd);
+00800 wglMakeCurrent(_hDC,NULL);
+00801 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>=GetDeviceCaps(_hDC,BITSPIXEL);
+00802 <span class="comment">// ---</span>
+00803 memset(&amp;_pfd,0,<span class="keyword">sizeof</span>(_pfd));
+00804 _pfd.nSize = <span class="keyword">sizeof</span>(_pfd);
+00805 _pfd.nVersion = 1;
+00806 _pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
+00807 _pfd.iPixelType = PFD_TYPE_RGBA;
+00808 _pfd.cColorBits = (<span class="keywordtype">char</span>)<a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>;
+00809 <span class="comment">// Choose best suited Depth Buffer.</span>
+00810 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>&lt;=16)
+00811 {
+00812 _pfd.cDepthBits = 16;
+00813 }
+00814 <span class="keywordflow">else</span>
+00815 {
+00816 _pfd.cDepthBits = 24;
+00817 _pfd.cAlphaBits = 8;
+00818 }
+00819 _pfd.iLayerType = PFD_MAIN_PLANE;
+00820 pf=ChoosePixelFormat(_hDC,&amp;_pfd);
+00821 <span class="keywordflow">if</span> (!pf)
+00822 {
+00823 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00824 }
+00825
+00826 <span class="keywordflow">if</span> ( !SetPixelFormat(_hDC,pf,&amp;_pfd) )
+00827 {
+00828 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00829 }
+00830 _hRC=wglCreateContext(_hDC);
+00831 wglMakeCurrent(_hDC,_hRC);
+00832 }
+00833
+00835 <span class="keywordflow">while</span> (_EventEmitter.getNumEmitters() != 0)
+00836 {
+00837 _EventEmitter.removeEmitter(_EventEmitter.getEmitter(_EventEmitter.getNumEmitters() - 1));
+00838 }
+00839 NLMISC::CWinEventEmitter *we = <span class="keyword">new</span> NLMISC::CWinEventEmitter;
+00840 <span class="comment">// setup the event emitter, and try to retrieve a direct input interface</span>
+00841 _EventEmitter.addEmitter(we, <span class="keyword">true</span> <span class="comment">/*must delete*/</span>); <span class="comment">// the main emitter</span>
+00843 <span class="comment"></span> <span class="keywordflow">try</span>
+00844 {
+00845 NLMISC::CDIEventEmitter *diee = NLMISC::CDIEventEmitter::create(GetModuleHandle(NULL), _hWnd, we);
+00846 <span class="keywordflow">if</span> (diee)
+00847 {
+00848 _EventEmitter.addEmitter(diee, <span class="keyword">true</span>);
+00849 }
+00850 }
+00851 <span class="keywordflow">catch</span>(EDirectInput &amp;e)
+00852 {
+00853 <a class="code" href="a04199.html#a1">nlinfo</a>(e.what());
+00854 }
+00855
+00856 <span class="preprocessor">#elif defined(NL_OS_UNIX) // NL_OS_WINDOWS</span>
+00857 <span class="preprocessor"></span>
+00858 dpy = XOpenDisplay(NULL);
+00859 <span class="keywordflow">if</span> (dpy == NULL)
+00860 {
+00861 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"XOpenDisplay failed on '%s'"</span>,getenv(<span class="stringliteral">"DISPLAY"</span>));
+00862 }
+00863 <span class="keywordflow">else</span>
+00864 {
+00865 <a class="code" href="a04199.html#a0">nldebug</a>(<span class="stringliteral">"XOpenDisplay on '%s' OK"</span>, getenv(<span class="stringliteral">"DISPLAY"</span>));
+00866 }
+00867
+00868 <span class="keywordtype">int</span> sAttribList[] =
+00869 {
+00870 GLX_RGBA,
+00871 GLX_DOUBLEBUFFER,
+00872 <span class="comment">//GLX_BUFFER_SIZE, 16,</span>
+00873 GLX_DEPTH_SIZE, 16,
+00874 GLX_RED_SIZE, 4,
+00875 GLX_GREEN_SIZE, 4,
+00876 GLX_BLUE_SIZE, 4,
+00877 <span class="comment">//GLX_ALPHA_SIZE, 8,</span>
+00878 None
+00879 };
+00880 <span class="comment">/*</span>
+00881 <span class="comment"> int sAttribList[] =</span>
+00882 <span class="comment"> {</span>
+00883 <span class="comment"> GLX_RGBA,</span>
+00884 <span class="comment"> GLX_DOUBLEBUFFER,</span>
+00885 <span class="comment"> //GLX_BUFFER_SIZE, 32,</span>
+00886 <span class="comment"> GLX_DEPTH_SIZE, 32,</span>
+00887 <span class="comment"> GLX_RED_SIZE, 8,</span>
+00888 <span class="comment"> GLX_GREEN_SIZE, 8,</span>
+00889 <span class="comment"> GLX_BLUE_SIZE, 8,</span>
+00890 <span class="comment"> GLX_ALPHA_SIZE, 8,</span>
+00891 <span class="comment"> None</span>
+00892 <span class="comment"> };</span>
+00893 <span class="comment"> */</span>
+00894 XVisualInfo *visual_info = glXChooseVisual (dpy, DefaultScreen(dpy), sAttribList);
+00895
+00896 <span class="keywordflow">if</span>(visual_info == NULL)
+00897 {
+00898 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"glXChooseVisual() failed"</span>);
+00899 }
+00900 <span class="keywordflow">else</span>
+00901 {
+00902 <a class="code" href="a04199.html#a0">nldebug</a>(<span class="stringliteral">"glXChooseVisual OK"</span>);
+00903 }
+00904
+00905 ctx = glXCreateContext (dpy, visual_info, None, GL_TRUE);
+00906
+00907 <span class="keywordflow">if</span>(ctx == NULL)
+00908 {
+00909 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"glXCreateContext() failed"</span>);
+00910 }
+00911 <span class="keywordflow">else</span>
+00912 {
+00913 <a class="code" href="a04199.html#a0">nldebug</a>(<span class="stringliteral">"glXCreateContext() OK"</span>);
+00914 }
+00915
+00916 Colormap cmap = XCreateColormap (dpy, RootWindow(dpy, DefaultScreen(dpy)), visual_info-&gt;visual, AllocNone);
+00917
+00918 XSetWindowAttributes attr;
+00919 attr.colormap = cmap;
+00920 attr.background_pixel = BlackPixel(dpy, DefaultScreen(dpy));
+00921
+00922 <span class="preprocessor">#ifdef XF86VIDMODE</span>
+00923 <span class="preprocessor"></span> <span class="comment">// If we're going to attempt fullscreen, we need to set redirect to True,</span>
+00924 <span class="comment">// This basically places the window with no borders in the top left </span>
+00925 <span class="comment">// corner of the screen.</span>
+00926 <span class="keywordflow">if</span> (mode.Windowed)
+00927 {
+00928 attr.override_redirect = False;
+00929 }
+00930 <span class="keywordflow">else</span>
+00931 {
+00932 attr.override_redirect = True;
+00933 }
+00934 <span class="preprocessor">#else</span>
+00935 <span class="preprocessor"></span> attr.override_redirect = False;
+00936 <span class="preprocessor">#endif</span>
+00937 <span class="preprocessor"></span>
+00938 <span class="keywordtype">int</span> attr_flags = CWOverrideRedirect | CWColormap | CWBackPixel;
+00939
+00940 win = XCreateWindow (dpy, RootWindow(dpy, DefaultScreen(dpy)), 0, 0, width, height, 0, visual_info-&gt;depth, InputOutput, visual_info-&gt;visual, attr_flags, &amp;attr);
+00941
+00942 <span class="keywordflow">if</span>(!win)
+00943 {
+00944 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"XCreateWindow() failed"</span>);
+00945 }
+00946 <span class="keywordflow">else</span>
+00947 {
+00948 <a class="code" href="a04199.html#a0">nldebug</a>(<span class="stringliteral">"XCreateWindow() OK"</span>);
+00949 }
+00950
+00951 XSizeHints size_hints;
+00952 size_hints.x = 0;
+00953 size_hints.y = 0;
+00954 size_hints.width = <a class="code" href="a04223.html#a632">width</a>;
+00955 size_hints.height = <a class="code" href="a04223.html#a633">height</a>;
+00956 size_hints.flags = PSize | PMinSize | PMaxSize;
+00957 size_hints.min_width = <a class="code" href="a04223.html#a632">width</a>;
+00958 size_hints.min_height = <a class="code" href="a04223.html#a633">height</a>;
+00959 size_hints.max_width = <a class="code" href="a04223.html#a632">width</a>;
+00960 size_hints.max_height = <a class="code" href="a04223.html#a633">height</a>;
+00961
+00962 XTextProperty text_property;
+00963 <span class="keywordtype">char</span> *title=<span class="stringliteral">"NeL window"</span>;
+00964 XStringListToTextProperty(&amp;title, 1, &amp;text_property);
+00965
+00966 XSetWMProperties (dpy, win, &amp;text_property, &amp;text_property, 0, 0, &amp;size_hints, 0, 0);
+00967 glXMakeCurrent (dpy, win, ctx);
+00968 XMapRaised (dpy, win);
+00969
+00970 XSelectInput (dpy, win,
+00971 KeyPressMask|
+00972 KeyReleaseMask|
+00973 ButtonPressMask|
+00974 ButtonReleaseMask|
+00975 PointerMotionMask
+00976 );
+00977
+00978 XMapWindow(dpy, win);
+00979
+00980 _EventEmitter.init (dpy, win);
+00981
+00982 <span class="comment">// XEvent event;</span>
+00983 <span class="comment">// XIfEvent(dpy, &amp;event, WaitForNotify, (char *)this);</span>
+00984
+00985 <span class="preprocessor">#ifdef XF86VIDMODE</span>
+00986 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!mode.Windowed)
+00987 {
+00988
+00989 <span class="comment">// Set window to the right size, map it to the display, and raise it</span>
+00990 <span class="comment">// to the front</span>
+00991 XResizeWindow(dpy,win,width,height);
+00992 XMapRaised(dpy,win);
+00993 XRaiseWindow(dpy, win);
+00994
+00995 <span class="comment">// grab the mouse and keyboard on the fullscreen window </span>
+00996 <span class="keywordflow">if</span> ((XGrabPointer(dpy, win, True, 0,
+00997 GrabModeAsync, GrabModeAsync,
+00998 win, None, CurrentTime) != GrabSuccess) ||
+00999 (XGrabKeyboard(dpy, win, True,
+01000 GrabModeAsync, GrabModeAsync, CurrentTime) != 0) )
+01001 {
+01002 <span class="comment">// Until I work out how to deal with this nicely, it just gives</span>
+01003 <span class="comment">// an error and exits the prorgam.</span>
+01004 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Unable to grab keyboard and mouse\n"</span>);
+01005 }
+01006 <span class="keywordflow">else</span>
+01007 {
+01008 <span class="comment">// Save the old screen mode and dotclock</span>
+01009 memset(&amp;_OldScreenMode, 0, <span class="keyword">sizeof</span>(_OldScreenMode));
+01010 XF86VidModeGetModeLine(dpy,
+01011 DefaultScreen(dpy),
+01012 &amp;_OldDotClock,
+01013 &amp;_OldScreenMode);
+01014 <span class="comment">// Save the old viewport</span>
+01015 XF86VidModeGetViewPort(dpy,
+01016 DefaultScreen(dpy),
+01017 &amp;_OldX,
+01018 &amp;_OldY);
+01019
+01020 <span class="comment">// get a list of modes, search for an appropriate one.</span>
+01021 XF86VidModeModeInfo **modes;
+01022 <span class="keywordtype">int</span> nmodes;
+01023 <span class="keywordflow">if</span> (XF86VidModeGetAllModeLines(dpy,
+01024 DefaultScreen(dpy),
+01025 &amp;nmodes,&amp;modes))
+01026 {
+01027 <span class="keywordtype">int</span> mode_index = -1; <span class="comment">// Gah, magic numbers all bad. </span>
+01028 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; nmodes; i++)
+01029 {
+01030 <a class="code" href="a04199.html#a0">nldebug</a>(<span class="stringliteral">"Available mode - %dx%d\n"</span>,width,height);
+01031 <span class="keywordflow">if</span>( (modes[i]-&gt;hdisplay == <a class="code" href="a04223.html#a632">width</a>) &amp;&amp;
+01032 (modes[i]-&gt;vdisplay == <a class="code" href="a04223.html#a633">height</a>))
+01033 {
+01034 mode_index = i;
+01035 }
+01036 }
+01037 <span class="comment">// Switch to the mode</span>
+01038 <span class="keywordflow">if</span> (mode_index != -1)
+01039 {
+01040 <span class="keywordflow">if</span>(XF86VidModeSwitchToMode(dpy,
+01041 DefaultScreen(dpy),
+01042 modes[mode_index]))
+01043 {
+01044 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"Switching to mode %dx%d,\n"</span>,width,
+01045 height);
+01046 XF86VidModeSetViewPort(dpy,DefaultScreen(dpy),0, 0);
+01047 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a> = <span class="keyword">true</span>;
+01048 }
+01049 }
+01050 <span class="keywordflow">else</span>
+01051 {
+01052 <span class="comment">// This is a problem, since we've nuked the border from </span>
+01053 <span class="comment">// window in the setup stage, until I work out how</span>
+01054 <span class="comment">// to get it back (recreate window? seems excessive)</span>
+01055 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Couldn't find an appropriate mode %dx%d\n"</span>,
+01056 width,
+01057 height);
+01058 }
+01059 }
+01060 }
+01061 }
+01062
+01063 <span class="preprocessor">#endif // XF86VIDMODE</span>
+01064 <span class="preprocessor"></span>
+01065 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+01066 <span class="preprocessor"></span>
+01067
+01068 <span class="comment">// Driver caps.</span>
+01069 <span class="comment">//=============</span>
+01070 <span class="comment">// Retrieve the extensions for the current context.</span>
+01071 <a class="code" href="a05363.html#a401">NL3D::registerGlExtensions</a> (_Extensions);
+01072 <span class="comment">//</span>
+01073 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01074 <span class="preprocessor"></span> NL3D::registerWGlExtensions (_Extensions, _hDC);
+01075 <span class="preprocessor">#endif // ifdef NL_OS_WINDOWS</span>
+01076 <span class="preprocessor"></span>
+01077 <span class="comment">// Check required extensions!!</span>
+01078 <span class="comment">// ARBMultiTexture is a opengl 1.2 required extension.</span>
+01079 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBMultiTexture)
+01080 {
+01081 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Missing Required GL extension: GL_ARB_multitexture. Update your driver"</span>);
+01082 <span class="keywordflow">throw</span> EBadDisplay(<span class="stringliteral">"Missing Required GL extension: GL_ARB_multitexture. Update your driver"</span>);
+01083 }
+01084 <span class="keywordflow">if</span>(!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTTextureEnvCombine)
+01085 {
+01086 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Missing Important GL extension: GL_EXT_texture_env_combine =&gt; All envcombine are setup to GL_MODULATE!!!"</span>);
+01087 }
+01088
+01089
+01090 <span class="comment">// init _DriverGLStates</span>
+01091 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.init(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBTextureCubeMap);
+01092
+01093
+01094 <span class="comment">// Init OpenGL/Driver defaults.</span>
+01095 <span class="comment">//=============================</span>
+01096 glViewport(0,0,width,height);
+01097 glMatrixMode(GL_PROJECTION);
+01098 glLoadIdentity();
+01099 glOrtho(0,width,height,0,-1.0f,1.0f);
+01100 glMatrixMode(GL_MODELVIEW);
+01101 glLoadIdentity();
+01102 glDisable(GL_AUTO_NORMAL);
+01103 glDisable(GL_COLOR_MATERIAL);
+01104 glEnable(GL_DITHER);
+01105 glDisable(GL_FOG);
+01106 glDisable(GL_LINE_SMOOTH);
+01107 glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
+01108 glEnable(GL_DEPTH_TEST);
+01109 glDisable(GL_NORMALIZE);
+01110 glDisable(GL_COLOR_SUM_EXT);
+01111 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr5">_CurrViewport</a>.init(0.f, 0.f, 1.f, 1.f);
+01112 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr4">_CurrentGlNormalize</a>= <span class="keyword">false</span>;
+01113 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr11">_ForceNormalize</a>= <span class="keyword">false</span>;
+01114 <span class="comment">// Setup defaults for blend, lighting ...</span>
+01115 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.forceDefaults(<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>());
+01116 <span class="comment">// Default delta camera pos.</span>
+01117 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>= CVector::Null;
+01118
+01119 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a>)
+01120 {
+01121 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd8">enableNVTextureShader</a>(<span class="keyword">false</span>);
+01122 }
+01123
+01124 <span class="comment">// Be always in EXTSeparateSpecularColor. </span>
+01125 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTSeparateSpecularColor)
+01126 {
+01127 glLightModeli((GLenum)GL_LIGHT_MODEL_COLOR_CONTROL_EXT, GL_SEPARATE_SPECULAR_COLOR_EXT);
+01128 }
+01129
+01130 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr36">_VertexProgramEnabled</a>= <span class="keyword">false</span>;
+01131 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a>= <span class="keyword">false</span>;
+01132
+01133
+01134 <span class="comment">// Init VertexArrayRange according to supported extenstion.</span>
+01135 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>= <span class="keyword">false</span>;
+01136 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_8">_SlowUnlockVBHard</a>= <span class="keyword">false</span>;
+01137 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>= 0;
+01138 <span class="comment">// Try with NVidia ext first.</span>
+01139 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexArrayRange)
+01140 {
+01141 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_14">CVertexArrayRangeNVidia</a>(<span class="keyword">this</span>);
+01142 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_14">CVertexArrayRangeNVidia</a>(<span class="keyword">this</span>);
+01143 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>= <span class="keyword">true</span>;
+01144 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexArrayRangeMaxVertex;
+01145 }
+01146 <span class="comment">// Else, try with ATI ext</span>
+01147 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIVertexArrayObject)
+01148 {
+01149 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIMapObjectBuffer)
+01150 {
+01151 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_12">CVertexArrayRangeATI</a>(<span class="keyword">this</span>);
+01152 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_12">CVertexArrayRangeATI</a>(<span class="keyword">this</span>);
+01153 <span class="comment">// BAD ATI extension scheme.</span>
+01154 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_8">_SlowUnlockVBHard</a>= <span class="keyword">true</span>;
+01155 }
+01156 <span class="keywordflow">else</span>
+01157 {
+01158 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_13">CVertexArrayRangeMapObjectATI</a>(<span class="keyword">this</span>);
+01159 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_13">CVertexArrayRangeMapObjectATI</a>(<span class="keyword">this</span>);
+01160 }
+01161 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>= <span class="keyword">true</span>;
+01162 <span class="comment">// _MaxVerticesByVBHard= 65535; // should always work with recent drivers. </span>
+01163 <span class="comment">// tmp fix for ati</span>
+01164 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>= 32267;
+01165 }
+01166
+01167 <span class="comment">// Reset VertexArrayRange.</span>
+01168 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_3">_CurrentVertexArrayRange</a>= NULL;
+01169 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_4">_CurrentVertexBufferHard</a>= NULL;
+01170 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_6">_NVCurrentVARPtr</a>= NULL;
+01171 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_7">_NVCurrentVARSize</a>= 0;
+01172 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>)
+01173 {
+01174 <span class="comment">// try to allocate 16Mo by default of AGP Ram.</span>
+01175 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa56">initVertexArrayRange</a>(NL3D_DRV_VERTEXARRAY_AGP_INIT_SIZE, 0);
+01176
+01177 <span class="comment">// If not success to allocate at least a minimum space in AGP, then disable completely VBHard feature</span>
+01178 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>-&gt;sizeAllocated()==0 )
+01179 {
+01180 <span class="comment">// reset any allocated VRAM space.</span>
+01181 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_1">resetVertexArrayRange</a>();
+01182
+01183 <span class="comment">// delete containers</span>
+01184 <span class="keyword">delete</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>;
+01185 <span class="keyword">delete</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>;
+01186 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_2">_AGPVertexArrayRange</a>= NULL;
+01187 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_11">_VRAMVertexArrayRange</a>= NULL;
+01188
+01189 <span class="comment">// disable.</span>
+01190 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>= <span class="keyword">false</span>;
+01191 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_8">_SlowUnlockVBHard</a>= <span class="keyword">false</span>;
+01192 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_5">_MaxVerticesByVBHard</a>= 0;
+01193 }
+01194 }
+01195
+01196 <span class="comment">// Init embm if present</span>
+01197 <span class="comment">//===========================================================</span>
+01198 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd13">initEMBM</a>();
+01199
+01200 <span class="comment">// Init fragment shaders if present</span>
+01201 <span class="comment">//===========================================================</span>
+01202 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_2">initFragmentShaders</a>();
+01203
+01204
+01205
+01206 <span class="comment">// Activate the default texture environnments for all stages.</span>
+01207 <span class="comment">//===========================================================</span>
+01208 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> stage=0;stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); stage++)
+01209 {
+01210 <span class="comment">// init no texture.</span>
+01211 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[stage]= NULL;
+01212 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage]= NULL;
+01213 <span class="comment">// texture are disabled in DriverGLStates.forceDefaults().</span>
+01214
+01215 <span class="comment">// init default env.</span>
+01216 CMaterial::CTexEnv env; <span class="comment">// envmode init to default.</span>
+01217 env.ConstantColor.set(255,255,255,255);
+01218 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd11">forceActivateTexEnvMode</a>(stage, env);
+01219 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd10">forceActivateTexEnvColor</a>(stage, env);
+01220
+01221 <span class="comment">// Not special TexEnv.</span>
+01222 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[stage]= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy2">TexEnvSpecialDisabled</a>;
+01223
+01224 <span class="comment">// set All TexGen by default to identity matrix (prefer use the textureMatrix scheme)</span>
+01225 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+01226 GLfloat <a class="code" href="a04223.html#a565">params</a>[4];
+01227 <a class="code" href="a04223.html#a565">params</a>[0]=1; <a class="code" href="a04223.html#a565">params</a>[1]=0; <a class="code" href="a04223.html#a565">params</a>[2]=0; <a class="code" href="a04223.html#a565">params</a>[3]=0;
+01228 glTexGenfv(GL_S, GL_OBJECT_PLANE, params);
+01229 glTexGenfv(GL_S, GL_EYE_PLANE, params);
+01230 <a class="code" href="a04223.html#a565">params</a>[0]=0; <a class="code" href="a04223.html#a565">params</a>[1]=1; <a class="code" href="a04223.html#a565">params</a>[2]=0; <a class="code" href="a04223.html#a565">params</a>[3]=0;
+01231 glTexGenfv(GL_T, GL_OBJECT_PLANE, params);
+01232 glTexGenfv(GL_T, GL_EYE_PLANE, params);
+01233 <a class="code" href="a04223.html#a565">params</a>[0]=0; <a class="code" href="a04223.html#a565">params</a>[1]=0; <a class="code" href="a04223.html#a565">params</a>[2]=1; <a class="code" href="a04223.html#a565">params</a>[3]=0;
+01234 glTexGenfv(GL_R, GL_OBJECT_PLANE, params);
+01235 glTexGenfv(GL_R, GL_EYE_PLANE, params);
+01236 <a class="code" href="a04223.html#a565">params</a>[0]=0; <a class="code" href="a04223.html#a565">params</a>[1]=0; <a class="code" href="a04223.html#a565">params</a>[2]=0; <a class="code" href="a04223.html#a565">params</a>[3]=1;
+01237 glTexGenfv(GL_Q, GL_OBJECT_PLANE, params);
+01238 glTexGenfv(GL_Q, GL_EYE_PLANE, params);
+01239 }
+01240 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_1">resetTextureShaders</a>();
+01241
+01242 <span class="comment">// Get num of light for this driver</span>
+01243 <span class="keywordtype">int</span> numLight;
+01244 glGetIntegerv (GL_MAX_LIGHTS, &amp;numLight);
+01245 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>=(<a class="code" href="a04558.html#a15">uint</a>)numLight;
+01246 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>&gt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>)
+01247 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>=<a class="code" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>;
+01248
+01249 <span class="comment">// Reset the lights position flags</span>
+01250 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;MaxLight; i++)
+01251 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr20">_LightEnable</a>[i]=<span class="keyword">false</span>;
+01252
+01253
+01254 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_1">_PPLExponent</a> = 1.f;
+01255 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_2">_PPLightDiffuseColor</a> = <a class="code" href="a03337.html#NLMISC_1_1CRGBAs6">NLMISC::CRGBA::White</a>;
+01256 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_3">_PPLightSpecularColor</a> = <a class="code" href="a03337.html#NLMISC_1_1CRGBAs6">NLMISC::CRGBA::White</a>;
+01257
+01258 <span class="comment">// Backward compatibility: default lighting is Light0 default openGL</span>
+01259 <span class="comment">// meaning that light direction is always (0,1,0) in eye-space</span>
+01260 <span class="comment">// use enableLighting(0....), to get normal behaviour</span>
+01261 glEnable(GL_LIGHT0);
+01262
+01263 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr15">_Initialized</a> = <span class="keyword">true</span>;
+01264
+01265 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr10">_ForceDXTCCompression</a>= <span class="keyword">false</span>;
+01266 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>= 0;
+01267
+01268 <span class="comment">// Reset profiling.</span>
+01269 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_2">_AllocatedTextureMemory</a>= 0;
+01270 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_10">_TextureUsed</a>.clear();
+01271 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.reset();
+01272 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.reset();
+01273 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_4">_NbSetupMaterialCall</a>= 0;
+01274 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_5">_NbSetupModelMatrixCall</a>= 0;
+01275
+01276 <span class="comment">// check wether per pixel lighting shader is supported</span>
+01277 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_0">checkForPerPixelLightingSupport</a>();
+01278
+01279 <span class="comment">// if EXTVertexShader is used, bind the standard GL arrays, and allocate constant</span>
+01280 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01281 {
+01282 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_5">_EVSPositionHandle</a> = <a class="code" href="a04222.html#a138">nglBindParameterEXT</a>(GL_CURRENT_VERTEX_EXT);
+01283 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_4">_EVSNormalHandle</a> = <a class="code" href="a04222.html#a138">nglBindParameterEXT</a>(GL_CURRENT_NORMAL);
+01284 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_2">_EVSColorHandle</a> = <a class="code" href="a04222.html#a138">nglBindParameterEXT</a>(GL_CURRENT_COLOR);
+01285 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_5">_EVSPositionHandle</a> || !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_4">_EVSNormalHandle</a> || !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_2">_EVSColorHandle</a>)
+01286 {
+01287 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to bind input parameters for use with EXT_vertex_shader, vertex program support is disabled"</span>);
+01288 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader = <span class="keyword">false</span>;
+01289 }
+01290 <span class="keywordflow">else</span>
+01291 {
+01292 <span class="comment">// bind texture units</span>
+01293 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; 8; ++k)
+01294 {
+01295 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_6">_EVSTexHandle</a>[k] = <a class="code" href="a04222.html#a137">nglBindTextureUnitParameterEXT</a>(GL_TEXTURE0_ARB + k, GL_CURRENT_TEXTURE_COORDS);
+01296 }
+01297 <span class="comment">// Other attributes are managed using variant pointers :</span>
+01298 <span class="comment">// Secondary color</span>
+01299 <span class="comment">// Fog Coords</span>
+01300 <span class="comment">// Skin Weight</span>
+01301 <span class="comment">// Skin palette</span>
+01302 <span class="comment">// This mean that they must have 4 components</span>
+01303
+01304 <span class="comment">// Allocate invariants. One assitionnal variant is needed for fog coordinate if fog bug is not fixed in driver version</span>
+01305 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_3">_EVSConstantHandle</a> = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_INVARIANT_EXT, GL_FULL_RANGE_EXT, _EVSNumConstant + (_ATIFogRangeFixed ? 0 : 1));
+01306
+01307 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_3">_EVSConstantHandle</a> == 0)
+01308 {
+01309 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to allocate constants for EXT_vertex_shader, vertex program support is disabled"</span>);
+01310 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader = <span class="keyword">false</span>;
+01311 }
+01312 }
+01313 }
+01314
+01315 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01316 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz76_1" doxytag="NL3D::CDriverGL::setEMBMMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::setEMBMMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const float&nbsp;</td>
+ <td class="mdname" nowrap> <em>mat</em>[4]</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz151_1">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02673">2673</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05645.html#l00103">NL3D::CGlExtensions::ATIEnvMapBumpMap</a>, <a class="el" href="a05646.html#l00674">GL_BUMP_ROT_MATRIX_ATI</a>, <a class="el" href="a05969.html#l00047">NL3D::IDRV_MAT_MAXTEXTURES</a>, <a class="el" href="a05645.html#l00373">nglTexBumpParameterfvATI</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05642.html#l02657">supportEMBM()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02674 {
+02675 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz76_2">supportEMBM</a>());
+02676 <a class="code" href="a04199.html#a6">nlassert</a>(stage &lt; IDRV_MAT_MAXTEXTURES);
+02677 <span class="comment">// </span>
+02678 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIEnvMapBumpMap)
+02679 {
+02680 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+02681 <a class="code" href="a04222.html#a151">nglTexBumpParameterfvATI</a>(GL_BUMP_ROT_MATRIX_ATI, const_cast&lt;float *&gt;(mat));
+02682 }
+02683 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa79" doxytag="NL3D::CDriverGL::setFrustum" ></a><p>
+<table class="mdTable" 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::CDriverGL::setFrustum </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname" nowrap> <em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>znear</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>zfar</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>perspective</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera60">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05649.html#l00031">31</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00590">_OODeltaZ</a>, and <a class="el" href="a05643.html#l00581">_ProjMatDirty</a>.
+<p>
+<div class="fragment"><pre>00032 {
+00033 glMatrixMode(GL_PROJECTION);
+00034 glLoadIdentity();
+00035 <span class="keywordflow">if</span> (perspective)
+00036 {
+00037 glFrustum(left,right,bottom,top,znear,zfar);
+00038 }
+00039 <span class="keywordflow">else</span>
+00040 {
+00041 glOrtho(left,right,bottom,top,znear,zfar);
+00042 }
+00043 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr29">_ProjMatDirty</a> = <span class="keyword">true</span>;
+00044
+00045 <span class="comment">// Backup znear and zfar for zbias setup</span>
+00046 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr27">_OODeltaZ</a> = 1 / (zfar - znear);
+00047
+00048 glMatrixMode(GL_MODELVIEW);
+00049 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa80" doxytag="NL3D::CDriverGL::setLight" ></a><p>
+<table class="mdTable" 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::CDriverGL::setLight </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>num</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02743.html">CLight</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>light</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup a light.<p>
+You must call <a class="el" href="a02433.html#NL3D_1_1CDriverGLa15">enableLight()</a> to active the ligth.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>num</em>&nbsp;</td><td>is the number of the light to set. </td></tr>
+ <tr><td valign=top><em>light</em>&nbsp;</td><td>is a light to set in this slot. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02433.html#NL3D_1_1CDriverGLa15">enableLight()</a></dd></dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera61">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05647.html#l00043">43</a> of file <a class="el" href="a05647.html">driver_opengl_light.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00623">_LightDirty</a>, <a class="el" href="a05643.html#l00620">_LightMode</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00618">_MaxDriverLight</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05643.html#l00622">_WorldLightDirection</a>, <a class="el" href="a05643.html#l00621">_WorldLightPos</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a05892.html#l00232">NL3D::CLight::getAmbiant()</a>, <a class="el" href="a05892.html#l00292">NL3D::CLight::getConstantAttenuation()</a>, <a class="el" href="a05892.html#l00280">NL3D::CLight::getCutoff()</a>, <a class="el" href="a05892.html#l00240">NL3D::CLight::getDiffuse()</a>, <a class="el" href="a05892.html#l00264">NL3D::CLight::getDirection()</a>, <a class="el" href="a05892.html#l00272">NL3D::CLight::getExponent()</a>, <a class="el" href="a05892.html#l00304">NL3D::CLight::getLinearAttenuation()</a>, <a class="el" href="a05892.html#l00224">NL3D::CLight::getMode()</a>, <a class="el" href="a05892.html#l00256">NL3D::CLight::getPosition()</a>, <a class="el" href="a05892.html#l00316">NL3D::CLight::getQuadraticAttenuation()</a>, <a class="el" href="a05892.html#l00248">NL3D::CLight::getSpecular()</a>, <a class="el" href="a05646.html#l01124">num</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>00044 {
+00045 <span class="comment">// Check light count is good</span>
+00046 <span class="comment">// nlassert (num&lt;_MaxDriverLight);</span>
+00047
+00048 <span class="comment">// Set the light</span>
+00049 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a653">num</a>&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLr23">_MaxDriverLight</a>)
+00050 {
+00051 <span class="comment">// GL light number</span>
+00052 GLenum lightNum=(GLenum)(GL_LIGHT0+<a class="code" href="a04223.html#a653">num</a>);
+00053
+00054 <span class="comment">// Get light mode</span>
+00055 CLight::TLightMode mode=light.getMode ();
+00056
+00057 <span class="comment">// Copy the mode</span>
+00058 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr21">_LightMode</a>[<a class="code" href="a04223.html#a653">num</a>]=mode;
+00059
+00060 <span class="comment">// Set the ambiant color</span>
+00061 GLfloat colorGL[4];
+00062 <a class="code" href="a03337.html">CRGBA</a> colorNeL=light.getAmbiant ();
+00063 colorGL[0]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>/255.f;
+00064 colorGL[1]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>/255.f;
+00065 colorGL[2]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>/255.f;
+00066 colorGL[3]=1.f;
+00067 glLightfv (lightNum, GL_AMBIENT, colorGL);
+00068
+00069 <span class="comment">// Set the diffuse color</span>
+00070 colorNeL=light.getDiffuse ();
+00071 colorGL[0]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>/255.f;
+00072 colorGL[1]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>/255.f;
+00073 colorGL[2]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>/255.f;
+00074 colorGL[3]=1.f;
+00075 glLightfv (lightNum, GL_DIFFUSE, colorGL);
+00076
+00077 <span class="comment">// Set the specular color</span>
+00078 colorNeL=light.getSpecular ();
+00079 colorGL[0]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>/255.f;
+00080 colorGL[1]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>/255.f;
+00081 colorGL[2]=(<span class="keywordtype">float</span>)colorNeL.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>/255.f;
+00082 colorGL[3]=1.f;
+00083 glLightfv (lightNum, GL_SPECULAR, colorGL);
+00084
+00085 <span class="comment">// Set light attenuation</span>
+00086 glLightf (lightNum, GL_CONSTANT_ATTENUATION, light.getConstantAttenuation());
+00087 glLightf (lightNum, GL_LINEAR_ATTENUATION, light.getLinearAttenuation());
+00088 glLightf (lightNum, GL_QUADRATIC_ATTENUATION, light.getQuadraticAttenuation());
+00089
+00090 <span class="comment">// Set the position</span>
+00091 <span class="keywordflow">if</span> ((mode==CLight::DirectionalLight)||(mode==CLight::SpotLight))
+00092 {
+00093 <span class="comment">// Get the direction of the light</span>
+00094 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr38">_WorldLightDirection</a>[<a class="code" href="a04223.html#a653">num</a>]=light.getDirection ();
+00095 }
+00096
+00097 <span class="keywordflow">if</span> (mode!=CLight::DirectionalLight)
+00098 {
+00099 <span class="comment">// Get the position of the light</span>
+00100 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr39">_WorldLightPos</a>[<a class="code" href="a04223.html#a653">num</a>]=light.getPosition ();
+00101 }
+00102
+00103 <span class="keywordflow">if</span> (mode==CLight::SpotLight)
+00104 {
+00105 <span class="comment">// Get the exponent of the spot</span>
+00106 <span class="keywordtype">float</span> exponent=light.getExponent ();
+00107
+00108 <span class="comment">// Set it</span>
+00109 glLightf (lightNum, GL_SPOT_EXPONENT, exponent);
+00110
+00111 <span class="comment">// Get the cutoff of the spot</span>
+00112 <span class="keywordtype">float</span> cutoff=180.f*(light.getCutoff ()/(<span class="keywordtype">float</span>)NLMISC::Pi);
+00113
+00114 <span class="comment">// Set it</span>
+00115 glLightf (lightNum, GL_SPOT_CUTOFF, cutoff);
+00116 }
+00117 <span class="keywordflow">else</span>
+00118 {
+00119 <span class="comment">// Disactive spot properties</span>
+00120 glLighti (lightNum, GL_SPOT_CUTOFF, 180);
+00121 glLighti (lightNum, GL_SPOT_EXPONENT, 0);
+00122 }
+00123
+00124 <span class="comment">// Flag this light as dirt.</span>
+00125 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a>[<a class="code" href="a04223.html#a653">num</a>]= <span class="keyword">true</span>;
+00126
+00127 <span class="comment">// dirt the lightSetup and hence the render setup</span>
+00128 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>= <span class="keyword">true</span>;
+00129 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>=<span class="keyword">true</span>;
+00130 }
+00131 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz74_2" doxytag="NL3D::CDriverGL::setMatrix2DForTextureOffsetAddrMode" ></a><p>
+<table class="mdTable" 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::CDriverGL::setMatrix2DForTextureOffsetAddrMode </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const float&nbsp;</td>
+ <td class="mdname" nowrap> <em>mat</em>[4]</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup the 2D matrix for the OffsetTexture, OffsetTextureScale and OffsetTexture addressing mode It should be stored as the following [a0 a1] [a2 a3]
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz149_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02398">2398</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05646.html#l00422">GL_OFFSET_TEXTURE_MATRIX_NV</a>, <a class="el" href="a05646.html#l00419">GL_TEXTURE_SHADER_NV</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05642.html#l02369">supportTextureShaders()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>02399 {
+02400 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz74_3">supportTextureShaders</a>()) <span class="keywordflow">return</span>;
+02401 <span class="comment">//nlassert(supportTextureShaders());</span>
+02402 <a class="code" href="a04199.html#a6">nlassert</a>(stage &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() );
+02403 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+02404 glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, mat);
+02405 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa81" doxytag="NL3D::CDriverGL::setMode" ></a><p>
+<table class="mdTable" 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::CDriverGL::setMode </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03831.html">GfxMode</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mode</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera62">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01333">1333</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00523">_FullScreen</a>, <a class="el" href="a05640.html#l00088">NL3D::GfxMode::Depth</a>, <a class="el" href="a05640.html#l00089">NL3D::GfxMode::Frequency</a>, <a class="el" href="a05640.html#l00087">NL3D::GfxMode::Height</a>, <a class="el" href="a05640.html#l00086">NL3D::GfxMode::Width</a>, and <a class="el" href="a05640.html#l00085">NL3D::GfxMode::Windowed</a>.
+<p>
+<div class="fragment"><pre>01334 {
+01335 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01336 <span class="preprocessor"></span> <span class="keywordflow">if</span> (mode.Windowed)
+01337 {
+01338 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>)
+01339 {
+01340 ChangeDisplaySettings (NULL,0);
+01341 modifyStyle(_hWnd, GWL_STYLE, WS_POPUP, WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS);
+01342 }
+01343 _WindowWidth = mode.Width;
+01344 _WindowHeight = mode.Height;
+01345
+01346 }
+01347 <span class="keywordflow">else</span>
+01348 {
+01349 _WindowWidth = mode.Width;
+01350 _WindowHeight = mode.Height;
+01351 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr6">_Depth</a>= mode.Depth;
+01352
+01353 DEVMODE devMode;
+01354 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>)
+01355 {
+01356 _OldScreenMode.dmSize= <span class="keyword">sizeof</span>(DEVMODE);
+01357 _OldScreenMode.dmDriverExtra= 0;
+01358 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &amp;_OldScreenMode);
+01359 _OldScreenMode.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY ;
+01360 }
+01361
+01362 devMode.dmSize= <span class="keyword">sizeof</span>(DEVMODE);
+01363 devMode.dmDriverExtra= 0;
+01364 devMode.dmFields= DM_PELSWIDTH | DM_PELSHEIGHT;
+01365 devMode.dmPelsWidth= _WindowWidth;
+01366 devMode.dmPelsHeight= _WindowHeight;
+01367
+01368 <span class="keywordflow">if</span>(mode.Depth &gt; 0)
+01369 {
+01370 devMode.dmBitsPerPel= mode.Depth;
+01371 devMode.dmFields |= DM_BITSPERPEL;
+01372 }
+01373
+01374 <span class="keywordflow">if</span>(mode.Frequency &gt; 0)
+01375 {
+01376 devMode.dmDisplayFrequency= mode.Frequency;
+01377 devMode.dmFields |= DM_DISPLAYFREQUENCY;
+01378 }
+01379
+01380 <span class="keywordflow">if</span> (ChangeDisplaySettings(&amp;devMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
+01381 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01382
+01383 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a>)
+01384 {
+01385 modifyStyle(_hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS, WS_POPUP);
+01386 }
+01387 }
+01388
+01389 <span class="comment">// Resize the window</span>
+01390 RECT rc;
+01391 SetRect (&amp;rc, 0, 0, _WindowWidth, _WindowHeight);
+01392 AdjustWindowRectEx (&amp;rc, GetWindowStyle (_hWnd), <span class="keyword">false</span>, GetWindowExStyle (_hWnd));
+01393 SetWindowPos (_hWnd, NULL, 0, 0, rc.right-rc.left, rc.bottom-rc.top, SWP_NOZORDER | SWP_NOACTIVATE );
+01394
+01395 ShowWindow(_hWnd, SW_SHOW);
+01396
+01397 <span class="comment">// Init Window Width and Height</span>
+01398 RECT clientRect;
+01399 GetClientRect (_hWnd, &amp;clientRect);
+01400 _WindowWidth = clientRect.right-clientRect.left;
+01401 _WindowHeight = clientRect.bottom-clientRect.top;
+01402 _WindowX = clientRect.left;
+01403 _WindowY = clientRect.top;
+01404 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr13">_FullScreen</a> = !mode.Windowed;
+01405 <span class="preprocessor">#else </span>
+01406 <span class="preprocessor"></span> <span class="comment">// TODO linux version !!!</span>
+01407 <span class="preprocessor">#endif</span>
+01408 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01409 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_5" doxytag="NL3D::CDriverGL::setMonitorColorProperties" ></a><p>
+<table class="mdTable" 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::CDriverGL::setMonitorColorProperties </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02935.html">CMonitorColorProperties</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>properties</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup monitor color properties.<p>
+Return false if setup failed.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera63">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02600">2600</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a06599.html#l00076">NL3D::CMonitorColorProperties::Contrast</a>, <a class="el" href="a06599.html#l00078">NL3D::CMonitorColorProperties::Gamma</a>, <a class="el" href="a06599.html#l00077">NL3D::CMonitorColorProperties::Luminosity</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05646.html#l01132">value</a>.
+<p>
+<div class="fragment"><pre>02601 {
+02602 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+02603 <span class="preprocessor"></span>
+02604 <span class="comment">// Get a DC</span>
+02605 HDC dc = CreateDC (<span class="stringliteral">"DISPLAY"</span>, NULL, NULL, NULL);
+02606 <span class="keywordflow">if</span> (dc)
+02607 {
+02608 <span class="comment">// The ramp</span>
+02609 WORD ramp[256*3];
+02610
+02611 <span class="comment">// For each composant</span>
+02612 <a class="code" href="a04558.html#a15">uint</a> c;
+02613 <span class="keywordflow">for</span>( c=0; c&lt;3; c++ )
+02614 {
+02615 <a class="code" href="a04558.html#a15">uint</a> i;
+02616 <span class="keywordflow">for</span>( i=0; i&lt;256; i++ )
+02617 {
+02618 <span class="comment">// Floating value</span>
+02619 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a658">value</a> = (<span class="keywordtype">float</span>)i / 256;
+02620
+02621 <span class="comment">// Contrast</span>
+02622 <a class="code" href="a04223.html#a658">value</a> = (<span class="keywordtype">float</span>) max (0.0f, (value-0.5f) * (<span class="keywordtype">float</span>) pow (3.f, properties.Contrast[c]) + 0.5f );
+02623
+02624 <span class="comment">// Gamma</span>
+02625 <a class="code" href="a04223.html#a658">value</a> = (<span class="keywordtype">float</span>) pow (value, (properties.Gamma[c]&gt;0) ? 1 - 3 * properties.Gamma[c] / 4 : 1 - properties.Gamma[c] );
+02626
+02627 <span class="comment">// Luminosity</span>
+02628 <a class="code" href="a04223.html#a658">value</a> = <a class="code" href="a04223.html#a658">value</a> + properties.Luminosity[c] / 2.f;
+02629 ramp[i+(c&lt;&lt;8)] = <a class="code" href="a04061.html#a0">min</a> (65535, max (0, (<span class="keywordtype">int</span>)(value * 65535)));
+02630 }
+02631 }
+02632
+02633 <span class="comment">// Set the ramp</span>
+02634 <span class="keywordtype">bool</span> result = SetDeviceGammaRamp (dc, ramp) != FALSE;
+02635
+02636 <span class="comment">// Release the DC</span>
+02637 ReleaseDC (NULL, dc);
+02638
+02639 <span class="comment">// Returns result</span>
+02640 <span class="keywordflow">return</span> result;
+02641 }
+02642 <span class="keywordflow">else</span>
+02643 {
+02644 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"(CDriverGL::setMonitorColorProperties): can't create DC"</span>);
+02645 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02646 }
+02647
+02648 <span class="preprocessor">#else</span>
+02649 <span class="preprocessor"></span>
+02650 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"CDriverGL::setMonitorColorProperties not implemented"</span>);
+02651 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+02652
+02653 <span class="preprocessor">#endif</span>
+02654 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa82" doxytag="NL3D::CDriverGL::setMousePos" ></a><p>
+<table class="mdTable" 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::CDriverGL::setMousePos </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname" nowrap> <em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>y</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+x and y must be between 0.0 and 1.0
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_5">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01967">1967</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>01968 {
+01969 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01970 <span class="preprocessor"></span> <span class="keywordflow">if</span> (_hWnd)
+01971 {
+01972 <span class="comment">// NeL window coordinate to MSWindows coordinates</span>
+01973 POINT pt;
+01974 pt.x = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)(_WindowWidth)*<a class="code" href="a04223.html#a572">x</a>);
+01975 pt.y = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)(_WindowHeight)*(1.0f-<a class="code" href="a04223.html#a573">y</a>));
+01976 ClientToScreen (_hWnd, &amp;pt);
+01977 SetCursorPos(pt.x, pt.y);
+01978 }
+01979 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+01980 <span class="preprocessor"></span> XWindowAttributes xwa;
+01981 XGetWindowAttributes (dpy, win, &amp;xwa);
+01982 <span class="keywordtype">int</span> x1 = (<span class="keywordtype">int</span>)(<a class="code" href="a04223.html#a572">x</a> * (<span class="keywordtype">float</span>) xwa.width);
+01983 <span class="keywordtype">int</span> y1 = (<span class="keywordtype">int</span>)((1.0f - <a class="code" href="a04223.html#a573">y</a>) * (<span class="keywordtype">float</span>) xwa.height);
+01984 XWarpPointer (dpy, None, win, None, None, None, None, x1, y1);
+01985 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+01986 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa83" doxytag="NL3D::CDriverGL::setPerPixelLightingLight" ></a><p>
+<table class="mdTable" 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::CDriverGL::setPerPixelLightingLight </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03337.html">CRGBA</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>diffuse</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03337.html">CRGBA</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>specular</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>shininess</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup the light used for per pixel lighting. The given values should have been modulated by the material diffuse and specular. This is only useful for material that have their shader set as 'PerPixelLighting' <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>the</em>&nbsp;</td><td>light used for per pixel lighting</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera64">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02451">2451</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00630">_PPLExponent</a>, <a class="el" href="a05643.html#l00631">_PPLightDiffuseColor</a>, and <a class="el" href="a05643.html#l00632">_PPLightSpecularColor</a>.
+<p>
+<div class="fragment"><pre>02452 {
+02453 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_1">_PPLExponent</a> = shininess;
+02454 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_2">_PPLightDiffuseColor</a> = diffuse;
+02455 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_3">_PPLightSpecularColor</a> = specular;
+02456 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa84" doxytag="NL3D::CDriverGL::setPolygonMode" ></a><p>
+<table class="mdTable" 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::CDriverGL::setPolygonMode </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mode</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the global polygon mode. Can be filled, line or point. The implementation driver must call <a class="el" href="a02434.html#NL3D_1_1IDrivera65">IDriver::setPolygonMode</a> and active this mode.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>polygon</em>&nbsp;</td><td>mode choose in this driver. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a02434.html#NL3D_1_1IDrivera29">getPolygonMode()</a>, <a class="el" href="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a></dd></dl>
+
+<p>
+Reimplemented from <a class="el" href="a02434.html#NL3D_1_1IDrivera65">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02214">2214</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>02215 {
+02216 IDriver::setPolygonMode (mode);
+02217
+02218 <span class="comment">// Set the polygon mode</span>
+02219 <span class="keywordflow">switch</span> (<a class="code" href="a02434.html#NL3D_1_1IDriverp0">_PolygonMode</a>)
+02220 {
+02221 <span class="keywordflow">case</span> <a class="code" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw7">Filled</a>:
+02222 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
+02223 <span class="keywordflow">break</span>;
+02224 <span class="keywordflow">case</span> <a class="code" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw16">Line</a>:
+02225 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
+02226 <span class="keywordflow">break</span>;
+02227 <span class="keywordflow">case</span> <a class="code" href="a02434.html#NL3D_1_1IDriverw37NL3D_1_1IDriverw27">Point</a>:
+02228 glPolygonMode (GL_FRONT_AND_BACK, GL_POINT);
+02229 <span class="keywordflow">break</span>;
+02230 }
+02231 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa85" doxytag="NL3D::CDriverGL::setSwapVBLInterval" ></a><p>
+<table class="mdTable" 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::CDriverGL::setSwapVBLInterval </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>interval</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+set the number of VBL wait when a <a class="el" href="a02433.html#NL3D_1_1CDriverGLa103">swapBuffers()</a> is issued. 0 means no synchronisation to the VBL Default depends of the 3D driver setup. Values &gt;1 may be clamped to 1 by the driver.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera66">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03035">3035</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05645.html#l00097">NL3D::CGlExtensions::WGLEXTSwapControl</a>.
+<p>
+<div class="fragment"><pre>03036 {
+03037 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+03038 <span class="preprocessor"></span> <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.WGLEXTSwapControl)
+03039 {
+03040 wglSwapIntervalEXT(interval);
+03041 }
+03042 <span class="preprocessor">#endif</span>
+03043 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa86" doxytag="NL3D::CDriverGL::setTextureEnvFunction" ></a><p>
+<table class="mdTable" 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::CDriverGL::setTextureEnvFunction </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mat</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup texture env functions. Used by setupMaterial.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00117">117</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05969.html#l00591">NL3D::CMaterial::_TexEnvs</a>, <a class="el" href="a05652.html#l01159">activateTexEnvColor()</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05641.html#l00298">NL3D::CMaterial::getTexCoordGen()</a>, <a class="el" href="a05969.html#l00420">NL3D::CMaterial::getTexCoordGenMode()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a06506.html#l00376">NL3D::ITexture::isTextureCube()</a>, <a class="el" href="a05650.html#l00414">NL3D::CDriverGLStates::setTexGenMode()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00257">setupMaterial()</a>.
+<p>
+<div class="fragment"><pre>00118 {
+00119 ITexture *text= mat.getTexture(stage);
+00120 <span class="keywordflow">if</span>(text)
+00121 {
+00122 CMaterial::CTexEnv &amp;env= mat._TexEnvs[stage];
+00123
+00124 <span class="comment">// Activate the env for this stage.</span>
+00125 <span class="comment">// NB: Thoses calls use caching.</span>
+00126 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(stage, env);
+00127 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a>(stage, env);
+00128
+00129 <span class="comment">// Activate texture generation mapping</span>
+00130 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00131 <span class="keywordflow">if</span> (mat.getTexCoordGen (stage))
+00132 {
+00133 <span class="comment">// set mode and enable.</span>
+00134 CMaterial::TTexCoordGenMode mode= mat.getTexCoordGenMode(stage);
+00135 <span class="keywordflow">if</span>(mode==CMaterial::TexCoordGenReflect)
+00136 {
+00137 <span class="comment">// Cubic or normal ?</span>
+00138 <span class="keywordflow">if</span> (text-&gt;isTextureCube ())
+00139 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode (stage, GL_REFLECTION_MAP_ARB);
+00140 <span class="keywordflow">else</span>
+00141 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode (stage, GL_SPHERE_MAP);
+00142 }
+00143 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mode==CMaterial::TexCoordGenObjectSpace)
+00144 {
+00145 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode (stage, GL_OBJECT_LINEAR);
+00146 }
+00147 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mode==CMaterial::TexCoordGenEyeSpace)
+00148 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode (stage, GL_EYE_LINEAR);
+00149 }
+00150 <span class="keywordflow">else</span>
+00151 {
+00152 <span class="comment">// Disable.</span>
+00153 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(stage, 0);
+00154 }
+00155 }
+00156 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_2" doxytag="NL3D::CDriverGL::setTextureShaders" ></a><p>
+<table class="mdTable" 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::CDriverGL::setTextureShaders </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>addressingModes</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt; <a class="el" href="a03487.html">ITexture</a> &gt; *&nbsp;</td>
+ <td class="mdname" nowrap> <em>textures</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+set texture shaders from stage 0 to stage IDRV_MAT_MAXTEXTURES - 1 textures are needed to setup the right kind of shader (cubic or 2d texture)
+<p>
+Definition at line <a class="el" href="a05648.html#l00238">238</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00665">_CurrentTexAddrMode</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05648.html#l00080">NL3D::convTexAddr()</a>, <a class="el" href="a05646.html#l00420">GL_SHADER_OPERATION_NV</a>, <a class="el" href="a05646.html#l00419">GL_TEXTURE_SHADER_NV</a>, <a class="el" href="a05969.html#l00047">NL3D::IDRV_MAT_MAXTEXTURES</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="a05648.html#l00257">setupMaterial()</a>, and <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>.
+<p>
+<div class="fragment"><pre>00239 {
+00240 GLenum glAddrMode;
+00241 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> stage = 0; stage &lt; <a class="code" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>; ++stage)
+00242 {
+00243 <a class="code" href="a05363.html#a406">convTexAddr</a>(textures[stage], (CMaterial::TTexAddressingMode) addressingModes[stage], glAddrMode);
+00244
+00245 <span class="keywordflow">if</span> (glAddrMode != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_5">_CurrentTexAddrMode</a>[stage]) <span class="comment">// addressing mode different from the one in the device?</span>
+00246
+00247 {
+00248 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00249 glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, glAddrMode);
+00250 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_5">_CurrentTexAddrMode</a>[stage] = glAddrMode;
+00251 }
+00252 }
+00253 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz98_2" doxytag="NL3D::CDriverGL::setupCloudPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupCloudPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000015">Todo:</a></b></dt><dd>Optimize the cloud multipass with register combiner</dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01733">1733</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05652.html#l01159">activateTexEnvColor()</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05969.html#l00376">NL3D::CMaterial::getColor()</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="a05622.html#l00290">nlassert</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy0">TexEnvSpecialCloudStage0</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy1">TexEnvSpecialCloudStage1</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00554">setupPass()</a>.
+<p>
+<div class="fragment"><pre>01734 {
+01735 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>-&gt;getShader() == CMaterial::Cloud);
+01736
+01737 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+01738
+01739 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0, mat.getTexture(0));
+01740 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(1, mat.getTexture(0));
+01741
+01742 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[0] != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy0">TexEnvSpecialCloudStage0</a>)
+01743 {
+01744 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[0] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy0">TexEnvSpecialCloudStage0</a>;
+01745 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[1] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy1">TexEnvSpecialCloudStage1</a>;
+01746
+01747 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4)
+01748 {
+01749 <span class="comment">// Setup 1st Stage</span>
+01750 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+01751 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+01752 <span class="comment">//== colors ==</span>
+01753 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);
+01754 <span class="comment">// Arg0 = 0</span>
+01755 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_ZERO);
+01756 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01757 <span class="comment">// Arg1 = 0</span>
+01758 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_ZERO);
+01759 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01760 <span class="comment">// Arg2 = 0</span>
+01761 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_ZERO);
+01762 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01763 <span class="comment">// Arg3 = 0</span>
+01764 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO);
+01765 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_SRC_COLOR);
+01766
+01767 <span class="comment">//== alpha ==</span>
+01768 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_ADD);
+01769 <span class="comment">// Arg0 = AT0</span>
+01770 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE0_ARB);
+01771 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA);
+01772 <span class="comment">// Arg1 = AWPOS</span>
+01773 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_PRIMARY_COLOR_EXT);
+01774 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA);
+01775 <span class="comment">// Arg2 = AT1</span>
+01776 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_TEXTURE1_ARB);
+01777 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_SRC_ALPHA);
+01778 <span class="comment">// Arg3 = 1-AWPOS</span>
+01779 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_ALPHA_NV, GL_PRIMARY_COLOR_EXT);
+01780 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_ALPHA_NV, GL_ONE_MINUS_SRC_ALPHA);
+01781
+01782 <span class="comment">// Setup 2nd Stage</span>
+01783 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01784 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+01785 <span class="comment">//== colors ==</span>
+01786 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);
+01787 <span class="comment">// Arg0 = 0</span>
+01788 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_ZERO);
+01789 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01790 <span class="comment">// Arg1 = 0</span>
+01791 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_ZERO);
+01792 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01793 <span class="comment">// Arg2 = 0</span>
+01794 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_ZERO);
+01795 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01796 <span class="comment">// Arg3 = 0</span>
+01797 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO);
+01798 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_SRC_COLOR);
+01799
+01800 <span class="comment">//== alpha ==</span>
+01801 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_ADD);
+01802 <span class="comment">// Arg0 = AT0*AWPOS+AT1*(1-AWPOS)</span>
+01803 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_EXT);
+01804 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA);
+01805 <span class="comment">// Arg1 = AINT</span>
+01806 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_CONSTANT_EXT);
+01807 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA);
+01808 <span class="comment">// Arg2 = 0</span>
+01809 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_ZERO);
+01810 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_SRC_ALPHA);
+01811 <span class="comment">// Arg3 = 0</span>
+01812 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_ALPHA_NV, GL_ZERO);
+01813 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_ALPHA_NV, GL_SRC_ALPHA);
+01814
+01815 }
+01816 <span class="keywordflow">else</span>
+01817 {
+01818 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+01819 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01820 <span class="comment">// Operator.</span>
+01821 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE_EXT);
+01822 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_INTERPOLATE_EXT);
+01823 <span class="comment">// Arg0.</span>
+01824 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_ZERO );
+01825 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01826 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE0_ARB );
+01827 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA);
+01828 <span class="comment">// Arg1.</span>
+01829 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_ZERO );
+01830 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01831 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_TEXTURE1_ARB );
+01832 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA);
+01833 <span class="comment">// Arg2.</span>
+01834 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_ZERO );
+01835 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01836 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_PRIMARY_COLOR_EXT );
+01837 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_SRC_ALPHA);
+01838 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01839 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01840 <span class="comment">// Operator.</span>
+01841 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
+01842 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE);
+01843 <span class="comment">// Arg0.</span>
+01844 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_ZERO );
+01845 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01846 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_EXT );
+01847 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA);
+01848 <span class="comment">// Arg1.</span>
+01849 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_ZERO );
+01850 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01851 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_CONSTANT_EXT );
+01852 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA);
+01853 }
+01854 }
+01855 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a> (1, mat.getColor());
+01856 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_1" doxytag="NL3D::CDriverGL::setupEXTVertexShader" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupEXTVertexShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03717.html#CVPParserw0">CVPParser::TProgram</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>program</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>GLuint&nbsp;</td>
+ <td class="mdname" nowrap> <em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>variants</em>[EVSNumVariants], </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a9">uint16</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>usedInputRegisters</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Setup a vertex shader from its parsed program
+<p>
+Don't know why, but on some implementation of EXT_vertex_shader, can't write a single components to the fog coordinate.. So we force the mask to 0xf (only the x coordinate is used anyway).
+<p>
+Definition at line <a class="el" href="a05656.html#l00372">372</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01080">_ATIFogRangeFixed</a>, <a class="el" href="a05643.html#l01036">_EVSColorHandle</a>, <a class="el" href="a05643.html#l01039">_EVSConstantHandle</a>, <a class="el" href="a05643.html#l01035">_EVSNormalHandle</a>, <a class="el" href="a05642.html#l00099">_EVSNumConstant</a>, <a class="el" href="a05643.html#l01034">_EVSPositionHandle</a>, <a class="el" href="a05643.html#l01037">_EVSTexHandle</a>, <a class="el" href="a06719.html#l00038">CVPSwizzle::Comp</a>, <a class="el" href="a05656.html#l00265">NL3D::convInputRegisterToVBFlag()</a>, <a class="el" href="a05656.html#l00230">NL3D::convOutputRegisterToEXTVertexShader()</a>, <a class="el" href="a05656.html#l00195">NL3D::convSwizzleToGLFormat()</a>, <a class="el" href="a05656.html#l00307">NL3D::doSwizzle()</a>, <a class="el" href="a05656.html#l00356">NL3D::doWriteMask()</a>, <a class="el" href="a05656.html#l00302">EVS_INFO</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a>, <a class="el" href="a05646.html#l00599">GL_FULL_RANGE_EXT</a>, <a class="el" href="a05646.html#l00568">GL_LOCAL_CONSTANT_EXT</a>, <a class="el" href="a05646.html#l00569">GL_LOCAL_EXT</a>, <a class="el" href="a05646.html#l00598">GL_NORMALIZED_RANGE_EXT</a>, <a class="el" href="a05646.html#l00596">GL_ONE_EXT</a>, <a class="el" href="a05646.html#l00508">GL_OP_ADD_EXT</a>, <a class="el" href="a05646.html#l00515">GL_OP_CLAMP_EXT</a>, <a class="el" href="a05646.html#l00505">GL_OP_DOT3_EXT</a>, <a class="el" href="a05646.html#l00506">GL_OP_DOT4_EXT</a>, <a class="el" href="a05646.html#l00518">GL_OP_EXP_BASE_2_EXT</a>, <a class="el" href="a05646.html#l00516">GL_OP_FLOOR_EXT</a>, <a class="el" href="a05646.html#l00510">GL_OP_FRAC_EXT</a>, <a class="el" href="a05646.html#l00503">GL_OP_INDEX_EXT</a>, <a class="el" href="a05646.html#l00519">GL_OP_LOG_BASE_2_EXT</a>, <a class="el" href="a05646.html#l00509">GL_OP_MADD_EXT</a>, <a class="el" href="a05646.html#l00511">GL_OP_MAX_EXT</a>, <a class="el" href="a05646.html#l00512">GL_OP_MIN_EXT</a>, <a class="el" href="a05646.html#l00526">GL_OP_MOV_EXT</a>, <a class="el" href="a05646.html#l00507">GL_OP_MUL_EXT</a>, <a class="el" href="a05646.html#l00504">GL_OP_NEGATE_EXT</a>, <a class="el" href="a05646.html#l00520">GL_OP_POWER_EXT</a>, <a class="el" href="a05646.html#l00521">GL_OP_RECIP_EXT</a>, <a class="el" href="a05646.html#l00522">GL_OP_RECIP_SQRT_EXT</a>, <a class="el" href="a05646.html#l00513">GL_OP_SET_GE_EXT</a>, <a class="el" href="a05646.html#l00514">GL_OP_SET_LT_EXT</a>, <a class="el" href="a05646.html#l00528">GL_OUTPUT_COLOR0_EXT</a>, <a class="el" href="a05646.html#l00529">GL_OUTPUT_COLOR1_EXT</a>, <a class="el" href="a05646.html#l00562">GL_OUTPUT_FOG_EXT</a>, <a class="el" href="a05646.html#l00530">GL_OUTPUT_TEXTURE_COORD0_EXT</a>, <a class="el" href="a05646.html#l00537">GL_OUTPUT_TEXTURE_COORD7_EXT</a>, <a class="el" href="a05646.html#l00563">GL_SCALAR_EXT</a>, <a class="el" href="a05646.html#l00566">GL_VARIANT_EXT</a>, <a class="el" href="a05646.html#l00564">GL_VECTOR_EXT</a>, <a class="el" href="a05646.html#l00586">GL_VERTEX_SHADER_OPTIMIZED_EXT</a>, <a class="el" href="a05646.html#l00590">GL_W_EXT</a>, <a class="el" href="a05646.html#l00587">GL_X_EXT</a>, <a class="el" href="a05646.html#l00588">GL_Y_EXT</a>, <a class="el" href="a05646.html#l00589">GL_Z_EXT</a>, <a class="el" href="a05646.html#l00595">GL_ZERO_EXT</a>, <a class="el" href="a04223.html#a699">GLboolean()</a>, <a class="el" href="a04223.html#a701">GLuint()</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a06719.html#l00129">CVPOperand::Indexed</a>, <a class="el" href="a06719.html#l00047">CVPSwizzle::isIdentity()</a>, <a class="el" href="a06718.html#l00893">CVPParser::isInputUsed()</a>, <a class="el" href="a06719.html#l00135">CVPOperand::Negate</a>, <a class="el" href="a05645.html#l00334">nglBeginVertexShaderEXT</a>, <a class="el" href="a05645.html#l00336">nglBindVertexShaderEXT</a>, <a class="el" href="a05645.html#l00335">nglEndVertexShaderEXT</a>, <a class="el" href="a05645.html#l00345">nglExtractComponentEXT</a>, <a class="el" href="a05645.html#l00346">nglGenSymbolsEXT</a>, <a class="el" href="a05645.html#l00344">nglInsertComponentEXT</a>, <a class="el" href="a05645.html#l00348">nglSetLocalConstantEXT</a>, <a class="el" href="a05645.html#l00339">nglShaderOp1EXT</a>, <a class="el" href="a05645.html#l00340">nglShaderOp2EXT</a>, <a class="el" href="a05645.html#l00341">nglShaderOp3EXT</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05622.html#l00416">nlstop</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05646.html#l00228">program</a>, <a class="el" href="a06719.html#l00136">CVPOperand::Swizzle</a>, <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>, <a class="el" href="a06719.html#l00194">CVPParser::TProgram</a>, <a class="el" href="a06719.html#l00118">CVPOperand::Type</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, and <a class="el" href="a03715.html#CVPOperando7">CVPOperand::Value</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01148">activeEXTVertexShader()</a>.
+<p>
+<div class="fragment"><pre>00373 {
+00374 <span class="comment">// counter to see what is generated</span>
+00375 <a class="code" href="a04558.html#a15">uint</a> numOp = 0;
+00376 <a class="code" href="a04558.html#a15">uint</a> numOpIndex = 0;
+00377 <a class="code" href="a04558.html#a15">uint</a> numSwizzle = 0;
+00378 <a class="code" href="a04558.html#a15">uint</a> numEC = 0; <span class="comment">// extract component</span>
+00379 <a class="code" href="a04558.html#a15">uint</a> numIC = 0; <span class="comment">// insert component</span>
+00380 <a class="code" href="a04558.html#a15">uint</a> numWM = 0; <span class="comment">// write maks</span>
+00381
+00382
+00383 <span class="preprocessor"> #ifdef DEBUG_SETUP_EXT_VERTEX_SHADER</span>
+00384 <span class="preprocessor"></span> <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"**********************************************************"</span>);
+00385 <span class="preprocessor"> #endif </span>
+00386 <span class="preprocessor"></span>
+00387 <span class="comment">// clear last error</span>
+00388 GLenum glError = glGetError();
+00389
+00390 <span class="comment">//variants[EVSSecondaryColorVariant] = nglGenSymbolsEXT(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_NORMALIZED_RANGE_EXT, 1);variants[EVSSecondaryColorVariant] = nglGenSymbolsEXT(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_NORMALIZED_RANGE_EXT, 1);</span>
+00391
+00392 <span class="comment">// allocate the symbols</span>
+00393 <a class="code" href="a04222.html#a118">nglBindVertexShaderEXT</a>(<span class="keywordtype">id</span>);
+00394 <a class="code" href="a04222.html#a116">nglBeginVertexShaderEXT</a>();
+00395 {
+00396
+00397 <span class="comment">// Allocate register and variant</span>
+00398
+00399 <span class="comment">// allocate registers</span>
+00400 <a class="code" href="a04223.html#a701">GLuint</a> firstRegister = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 12); <span class="comment">// 12 register</span>
+00401 <a class="code" href="a04223.html#a701">GLuint</a> firstTempRegister = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 4); <span class="comment">// 4 temp register used for swizzle &amp; indexing</span>
+00402 <a class="code" href="a04223.html#a701">GLuint</a> firstTempScalar = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 3); <span class="comment">// 3 temp scalars used for EXPP &amp; LOGG emulation</span>
+00403 <a class="code" href="a04223.html#a701">GLuint</a> firstAddressRegister = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
+00404
+00405 <span class="comment">// allocate needed variants </span>
+00406 <span class="keywordflow">if</span> (<a class="code" href="a03717.html#CVPParsere1">CVPParser::isInputUsed</a>(program, CVPOperand::ISecondaryColor))
+00407 {
+00408 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_NORMALIZED_RANGE_EXT, 1);variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_NORMALIZED_RANGE_EXT, 1);
+00409 <span class="keywordflow">if</span> (!variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>])
+00410 {
+00411 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"EXT_vertex_shader : can't allocate variant for secondary color"</span>);
+00412 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00413 }
+00414 }
+00415 <span class="keywordflow">else</span>
+00416 {
+00417 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>] = 0;
+00418 }
+00419 <span class="keywordflow">if</span> (<a class="code" href="a03717.html#CVPParsere1">CVPParser::isInputUsed</a>(program, CVPOperand::IFogCoord))
+00420 {
+00421 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_FULL_RANGE_EXT, 1);variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_FULL_RANGE_EXT, 1);
+00422 <span class="keywordflow">if</span> (!variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a>])
+00423 {
+00424 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"EXT_vertex_shader : can't allocate variant for fog coords"</span>);
+00425 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00426 }
+00427 }
+00428 <span class="keywordflow">else</span>
+00429 {
+00430 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a>] = 0;
+00431 }
+00432 <span class="keywordflow">if</span> (<a class="code" href="a03717.html#CVPParsere1">CVPParser::isInputUsed</a>(program, CVPOperand::IWeight))
+00433 {
+00434 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_FULL_RANGE_EXT, 1);variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_NORMALIZED_RANGE_EXT, 1);
+00435 <span class="keywordflow">if</span> (!variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a>])
+00436 {
+00437 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"EXT_vertex_shader : can't allocate variant for skin weight"</span>);
+00438 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00439 }
+00440 }
+00441 <span class="keywordflow">else</span>
+00442 {
+00443 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a>] = 0;
+00444 }
+00445 <span class="keywordflow">if</span> (<a class="code" href="a03717.html#CVPParsere1">CVPParser::isInputUsed</a>(program, CVPOperand::IPaletteSkin))
+00446 {
+00447 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_FULL_RANGE_EXT, 1);variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>] = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_VARIANT_EXT, GL_FULL_RANGE_EXT, 1);
+00448 <span class="keywordflow">if</span> (!variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a>])
+00449 {
+00450 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"EXT_vertex_shader : can't allocate variant for palette skin"</span>);
+00451 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00452 }
+00453 }
+00454 <span class="keywordflow">else</span>
+00455 {
+00456 variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a>] = 0;
+00457 }
+00458
+00459 <span class="comment">// allocate one temporary register for fog before conversion</span>
+00460 <a class="code" href="a04223.html#a701">GLuint</a> fogTemp;
+00461 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a>)
+00462 {
+00463 fogTemp = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
+00464 }
+00465
+00466
+00467 <span class="comment">// local constant : 0 and 1</span>
+00468 <a class="code" href="a04223.html#a701">GLuint</a> cteOne = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_SCALAR_EXT, GL_LOCAL_CONSTANT_EXT, GL_FULL_RANGE_EXT, 1);
+00469 <a class="code" href="a04223.html#a701">GLuint</a> cteZero = <a class="code" href="a04222.html#a128">nglGenSymbolsEXT</a>(GL_SCALAR_EXT, GL_LOCAL_CONSTANT_EXT, GL_FULL_RANGE_EXT, 1);
+00470
+00471
+00472 <span class="keywordtype">float</span> oneValue = 1.f;
+00473 <span class="keywordtype">float</span> zeroValue = 0.f;
+00474
+00475 <a class="code" href="a04222.html#a130">nglSetLocalConstantEXT</a>( cteOne, GL_FLOAT, &amp;oneValue);
+00476 <a class="code" href="a04222.html#a130">nglSetLocalConstantEXT</a>( cteZero, GL_FLOAT, &amp;zeroValue);
+00477
+00478
+00479
+00480 <span class="keywordflow">if</span> (firstRegister == 0)
+00481 {
+00482 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to allocate local registers for EXT_vertex_shader"</span>);
+00483 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00484 }
+00485 <span class="keywordflow">if</span> (firstTempRegister == 0)
+00486 {
+00487 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to allocate local temp registers for EXT_vertex_shader"</span>);
+00488 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00489 }
+00490 <span class="keywordflow">if</span> (firstTempScalar == 0)
+00491 {
+00492 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to allocate temp scalar registers for EXT_vertex_shader"</span>);
+00493 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00494 }
+00495 <span class="keywordflow">if</span> (firstAddressRegister == 0)
+00496 {
+00497 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Unable to allocate address register for EXT_vertex_shader"</span>);
+00498 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00499 }
+00500
+00501 <span class="comment">// Mask of output component that are being written</span>
+00502 <a class="code" href="a04558.html#a15">uint</a> componentWritten[16];
+00503 std::fill(componentWritten, componentWritten + 16, 0);
+00504
+00505 <span class="comment">//</span>
+00506 <a class="code" href="a04223.html#a701">GLuint</a> srcValue[3];
+00507 <span class="comment">//</span>
+00508 <a class="code" href="a04223.html#a701">GLuint</a> destValue;
+00509 <a class="code" href="a04223.html#a701">GLuint</a> maskedDestValue;
+00510
+00511
+00512 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05373.html#a2">l</a>;
+00513 <span class="comment">// convert each instruction of the vertex program</span>
+00514 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; <a class="code" href="a04223.html#a568">program</a>.size(); ++k)
+00515 {
+00516 <span class="comment">// get src values, eventually applying swizzle, negate, and index on them</span>
+00517 <a class="code" href="a04558.html#a15">uint</a> numSrc = <a class="code" href="a04223.html#a568">program</a>[k].getNumUsedSrc();
+00518 <span class="keywordflow">for</span>(<a class="code" href="a05373.html#a2">l</a> = 0; <a class="code" href="a05373.html#a2">l</a> &lt; numSrc; ++<a class="code" href="a05373.html#a2">l</a>)
+00519 {
+00520 <a class="code" href="a04233.html#a0">EVS_INFO</a>((<span class="stringliteral">"Build source "</span> + <a class="code" href="a05378.html#a244">toString</a>(l)).c_str());
+00521 <span class="keyword">const</span> <a class="code" href="a03715.html">CVPOperand</a> &amp;operand = <a class="code" href="a04223.html#a568">program</a>[k].getSrc(l);
+00522 <span class="keywordflow">switch</span> (operand.<a class="code" href="a03715.html#CVPOperando6">Type</a>)
+00523 {
+00524 <span class="keywordflow">case</span> <a class="code" href="a03715.html#CVPOperandw3CVPOperandw8">CVPOperand::InputRegister</a>:
+00525 {
+00526 <span class="keywordflow">switch</span>(operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.InputRegisterValue)
+00527 {
+00528 <span class="keywordflow">case</span> 0: srcValue[<a class="code" href="a05373.html#a2">l</a>] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_5">_EVSPositionHandle</a>; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = position"</span>); <span class="keywordflow">break</span>;
+00529 <span class="keywordflow">case</span> 1: srcValue[<a class="code" href="a05373.html#a2">l</a>] = variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw11">EVSSkinWeightVariant</a>]; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = skin weight"</span>); <span class="keywordflow">break</span>;
+00530 <span class="keywordflow">case</span> 2: srcValue[<a class="code" href="a05373.html#a2">l</a>] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_4">_EVSNormalHandle</a>; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = normal"</span>); <span class="keywordflow">break</span>;
+00531 <span class="keywordflow">case</span> 3: srcValue[<a class="code" href="a05373.html#a2">l</a>] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_2">_EVSColorHandle</a>; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = color 0"</span>); <span class="keywordflow">break</span>;
+00532 <span class="keywordflow">case</span> 4: srcValue[<a class="code" href="a05373.html#a2">l</a>] = variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw10">EVSSecondaryColorVariant</a>]; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = color 1"</span>); <span class="keywordflow">break</span>;
+00533 <span class="keywordflow">case</span> 5: srcValue[<a class="code" href="a05373.html#a2">l</a>] = variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw7">EVSFogCoordsVariant</a>]; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = fog coord"</span>); <span class="keywordflow">break</span>;
+00534 <span class="keywordflow">case</span> 6: srcValue[<a class="code" href="a05373.html#a2">l</a>] = variants[<a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_0NL3D_1_1CDriverGLw9">EVSPaletteSkinVariant</a>]; <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Src = palette skin"</span>); <span class="keywordflow">break</span>;
+00535 <span class="keywordflow">case</span> 7: <a class="code" href="a04199.html#a12">nlstop</a>; <span class="comment">// not supported</span>
+00536 <span class="keywordflow">case</span> 8:
+00537 <span class="keywordflow">case</span> 9:
+00538 <span class="keywordflow">case</span> 10:
+00539 <span class="keywordflow">case</span> 11:
+00540 <span class="keywordflow">case</span> 12:
+00541 <span class="keywordflow">case</span> 13:
+00542 <span class="keywordflow">case</span> 14:
+00543 <span class="keywordflow">case</span> 15:
+00544 {
+00545 <a class="code" href="a04233.html#a0">EVS_INFO</a>((<span class="stringliteral">"Src = Tex"</span> + <a class="code" href="a05378.html#a244">toString</a>(operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.InputRegisterValue - 8)).c_str());
+00546 srcValue[<a class="code" href="a05373.html#a2">l</a>] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_6">_EVSTexHandle</a>[operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.InputRegisterValue - 8];
+00547 <span class="keywordflow">if</span> (srcValue[<a class="code" href="a05373.html#a2">l</a>] == 0)
+00548 {
+00549 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Trying to read an unaccessible texture coords for the device when using EXT_vertex_shader, shader loading failed."</span>);
+00550 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00551 }
+00552 }
+00553 <span class="keywordflow">break</span>;
+00554 <span class="keywordflow">default</span>:
+00555 <a class="code" href="a04199.html#a12">nlstop</a>; <span class="comment">// invalid value</span>
+00556 <span class="keywordflow">break</span>;
+00557 }
+00558 }
+00559 <span class="keywordflow">break</span>;
+00560 <span class="keywordflow">case</span> <a class="code" href="a03715.html#CVPOperandw3CVPOperandw1">CVPOperand::Constant</a>:
+00561 <a class="code" href="a04199.html#a6">nlassert</a>(operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.ConstantValue &lt; _EVSNumConstant); <span class="comment">// constant index too high</span>
+00562 srcValue[<a class="code" href="a05373.html#a2">l</a>] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz111_3">_EVSConstantHandle</a> + operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.ConstantValue;
+00563 <a class="code" href="a04233.html#a0">EVS_INFO</a>((<span class="stringliteral">"Src = constant"</span> + <a class="code" href="a05378.html#a244">toString</a>(operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.ConstantValue)).c_str());
+00564 <span class="keywordflow">break</span>;
+00565 <span class="keywordflow">case</span> <a class="code" href="a03715.html#CVPOperandw3CVPOperandw42">CVPOperand::Variable</a>:
+00566 srcValue[<a class="code" href="a05373.html#a2">l</a>] = firstRegister + operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.VariableValue;
+00567 <a class="code" href="a04233.html#a0">EVS_INFO</a>((<span class="stringliteral">"Src = variable register"</span> + <a class="code" href="a05378.html#a244">toString</a>(operand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.VariableValue)).c_str());
+00568 <span class="keywordflow">break</span>;
+00569 <span class="keywordflow">default</span>:
+00570 <a class="code" href="a04199.html#a6">nlassert</a>(0);
+00571 <span class="keywordflow">break</span>;
+00572 }
+00573 <span class="comment">// test if indexed access is used (can be used on one register only)</span>
+00574 <span class="keywordflow">if</span> (operand.<a class="code" href="a03715.html#CVPOperando6">Type</a> == <a class="code" href="a03715.html#CVPOperandw3CVPOperandw1">CVPOperand::Constant</a> &amp;&amp; operand.<a class="code" href="a03715.html#CVPOperando1">Indexed</a>)
+00575 {
+00576 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_INDEX_EXT, firstTempRegister + 3, firstAddressRegister, srcValue[l]);
+00577 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_INDEX_EXT"</span>);
+00578 ++ numOpIndex;
+00579 srcValue[<a class="code" href="a05373.html#a2">l</a>] = firstTempRegister + 3;
+00580 glError = glGetError();
+00581 <a class="code" href="a04199.html#a6">nlassert</a>(glError == GL_NO_ERROR);
+00582 }
+00583
+00584 <span class="comment">// test if swizzle or negate is used</span>
+00585 <span class="keywordflow">if</span> (!operand.<a class="code" href="a03715.html#CVPOperando5">Swizzle</a>.<a class="code" href="a03718.html#CVPSwizzlea0">isIdentity</a>() || operand.<a class="code" href="a03715.html#CVPOperando3">Negate</a>)
+00586 {
+00587 <span class="comment">// if the instruction reads a scalar, no need for swizzle (except if negate is used)</span>
+00588 <span class="keywordflow">if</span> (!
+00589 (
+00590 (<a class="code" href="a04223.html#a568">program</a>[k].Opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw16">CVPInstruction::RSQ</a>
+00591 || <a class="code" href="a04223.html#a568">program</a>[k].Opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw15">CVPInstruction::RCP</a>
+00592 || <a class="code" href="a04223.html#a568">program</a>[k].Opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw8">CVPInstruction::LOG</a>
+00593 || <a class="code" href="a04223.html#a568">program</a>[k].Opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw6">CVPInstruction::EXPP</a>
+00594 )
+00595 &amp;&amp;
+00596 !operand.<a class="code" href="a03715.html#CVPOperando3">Negate</a>
+00597 )
+00598 )
+00599 {
+00600 <span class="comment">// need a temp register for swizzle and/or negate</span>
+00601 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister + l, srcValue[l],
+00602 <a class="code" href="a05363.html#a415">convSwizzleToGLFormat</a>(operand.<a class="code" href="a03715.html#CVPOperando5">Swizzle</a>.<a class="code" href="a03718.html#CVPSwizzleo0">Comp</a>[0], operand.<a class="code" href="a03715.html#CVPOperando3">Negate</a>),
+00603 <a class="code" href="a05363.html#a415">convSwizzleToGLFormat</a>(operand.<a class="code" href="a03715.html#CVPOperando5">Swizzle</a>.<a class="code" href="a03718.html#CVPSwizzleo0">Comp</a>[1], operand.<a class="code" href="a03715.html#CVPOperando3">Negate</a>),
+00604 <a class="code" href="a05363.html#a415">convSwizzleToGLFormat</a>(operand.<a class="code" href="a03715.html#CVPOperando5">Swizzle</a>.<a class="code" href="a03718.html#CVPSwizzleo0">Comp</a>[2], operand.<a class="code" href="a03715.html#CVPOperando3">Negate</a>),
+00605 <a class="code" href="a05363.html#a415">convSwizzleToGLFormat</a>(operand.<a class="code" href="a03715.html#CVPOperando5">Swizzle</a>.<a class="code" href="a03718.html#CVPSwizzleo0">Comp</a>[3], operand.<a class="code" href="a03715.html#CVPOperando3">Negate</a>));
+00606 ++numSwizzle;
+00607 srcValue[<a class="code" href="a05373.html#a2">l</a>] = firstTempRegister + <a class="code" href="a05373.html#a2">l</a>;
+00608 glError = glGetError();
+00609 <a class="code" href="a04199.html#a6">nlassert</a>(glError == GL_NO_ERROR);
+00610 }
+00611 }
+00612 }
+00613
+00614 <span class="comment">// get dest value</span>
+00615 <span class="keyword">const</span> <a class="code" href="a03715.html">CVPOperand</a> &amp;destOperand = <a class="code" href="a04223.html#a568">program</a>[k].Dest;
+00616 <span class="keywordflow">switch</span>(destOperand.<a class="code" href="a03715.html#CVPOperando6">Type</a>)
+00617 {
+00618 <span class="keywordflow">case</span> <a class="code" href="a03715.html#CVPOperandw3CVPOperandw42">CVPOperand::Variable</a>:
+00619 destValue = firstRegister + destOperand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.VariableValue;
+00620 <span class="keywordflow">break</span>;
+00621 <span class="keywordflow">case</span> <a class="code" href="a03715.html#CVPOperandw3CVPOperandw40">CVPOperand::OutputRegister</a>:
+00622 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a> || destOperand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.OutputRegisterValue != <a class="code" href="a03715.html#CVPOperandw4CVPOperandw26">CVPOperand::OFogCoord</a>)
+00623 {
+00624 destValue = <a class="code" href="a05363.html#a416">convOutputRegisterToEXTVertexShader</a>(destOperand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.OutputRegisterValue);
+00625 }
+00626 <span class="keywordflow">else</span>
+00627 {
+00628 destValue = fogTemp;
+00629 }
+00630 <span class="keywordflow">break</span>;
+00631 <span class="keywordflow">case</span> <a class="code" href="a03715.html#CVPOperandw3CVPOperandw0">CVPOperand::AddressRegister</a>:
+00632 destValue = firstAddressRegister;
+00633 <span class="keywordflow">break</span>;
+00634 <span class="keywordflow">default</span>:
+00635 <a class="code" href="a04199.html#a6">nlassert</a>(0);
+00636 <span class="keywordflow">break</span>;
+00637 }
+00638
+00639 <a class="code" href="a04558.html#a15">uint</a> writeMask = <a class="code" href="a04223.html#a568">program</a>[k].Dest.WriteMask;
+00640 <a class="code" href="a03714.html#CVPInstructionw5">CVPInstruction::EOpcode</a> opcode = <a class="code" href="a04223.html#a568">program</a>[k].Opcode;
+00641 <a class="code" href="a04558.html#a15">uint</a> outputRegisterIndex = 0;
+00642 <span class="keywordflow">if</span> (destOperand.<a class="code" href="a03715.html#CVPOperando6">Type</a> != <a class="code" href="a03715.html#CVPOperandw3CVPOperandw0">CVPOperand::AddressRegister</a>)
+00643 {
+00644 outputRegisterIndex = destOperand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.OutputRegisterValue;
+00645 <a class="code" href="a04199.html#a6">nlassert</a>(outputRegisterIndex &lt; 16);
+00646 }
+00647
+00648 <span class="comment">// Tells wether the output has already been written before the final write mask. This happens with instructions LOG, EXPP, LIT, RSQ and RCP,</span>
+00649 <span class="comment">// because they write their output component by components</span>
+00650 <span class="keywordtype">bool</span> outputWritten = <span class="keyword">false</span>;
+00651
+00652 <span class="comment">// test for write mask </span>
+00653 <span class="keywordflow">if</span> (writeMask != 0x0f)
+00654 {
+00658 <span class="keywordflow">if</span> (!(destOperand.<a class="code" href="a03715.html#CVPOperando6">Type</a> == <a class="code" href="a03715.html#CVPOperandw3CVPOperandw40">CVPOperand::OutputRegister</a> &amp;&amp; destOperand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.OutputRegisterValue == <a class="code" href="a03715.html#CVPOperandw4CVPOperandw26">CVPOperand::OFogCoord</a>))
+00659 {
+00660 <span class="comment">// For instructions that write their output components by components, we don't need an intermediary register</span>
+00661 <span class="keywordflow">if</span> (opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw8">CVPInstruction::LOG</a>
+00662 || opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw6">CVPInstruction::EXPP</a>
+00663 || opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw7">CVPInstruction::LIT</a>
+00664 || opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw16">CVPInstruction::RSQ</a>
+00665 || opcode == <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw15">CVPInstruction::RCP</a>
+00666 )
+00667 {
+00668 outputWritten = <span class="keyword">true</span>;
+00669 }
+00670 <span class="keywordflow">else</span>
+00671 {
+00672 maskedDestValue = destValue;
+00673 <span class="comment">// use a temp register before masking</span>
+00674 destValue = firstTempRegister;
+00675 }
+00676 }
+00677 <span class="keywordflow">else</span>
+00678 {
+00679 componentWritten[outputRegisterIndex] = 0xf;
+00680 }
+00681 }
+00682 <span class="keywordflow">else</span>
+00683 {
+00684 <span class="keywordflow">if</span> (destOperand.<a class="code" href="a03715.html#CVPOperando6">Type</a> == <a class="code" href="a03715.html#CVPOperandw3CVPOperandw40">CVPOperand::OutputRegister</a>)
+00685 {
+00686 componentWritten[outputRegisterIndex] = 0xf; <span class="comment">// say all components have been written for that output </span>
+00687 }
+00688 }
+00689
+00690 <span class="comment">// generate opcode</span>
+00691 <span class="keywordflow">switch</span> (opcode)
+00692 {
+00693 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw1">CVPInstruction::ARL</a>:
+00694 {
+00695 <a class="code" href="a04199.html#a6">nlassert</a>(program[k].Src1.Swizzle.isScalar());
+00696 <a class="code" href="a04223.html#a701">GLuint</a> <a class="code" href="a04223.html#a566">index</a> = <a class="code" href="a04223.html#a568">program</a>[k].Src1.Swizzle.Comp[0];
+00697 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstAddressRegister, srcValue[0], index);
+00698 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00699 ++numEC;
+00700 }
+00701 <span class="keywordflow">break</span>;
+00702 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw12">CVPInstruction::MOV</a>:
+00703 {
+00704 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_MOV_EXT, destValue, srcValue[0]);
+00705 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MOV_EXT"</span>);
+00706 ++numOp;
+00707 }
+00708 <span class="keywordflow">break</span>;
+00709 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw13">CVPInstruction::MUL</a>:
+00710 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_MUL_EXT, destValue, srcValue[0], srcValue[1]);
+00711 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MUL_EXT"</span>);
+00712 ++numOp;
+00713 <span class="keywordflow">break</span>;
+00714 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw0">CVPInstruction::ADD</a>:
+00715 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_ADD_EXT, destValue, srcValue[0], srcValue[1]);
+00716 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_ADD_EXT"</span>);
+00717 ++numOp;
+00718 <span class="keywordflow">break</span>;
+00719 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw9">CVPInstruction::MAD</a>:
+00720 <a class="code" href="a04222.html#a123">nglShaderOp3EXT</a>(GL_OP_MADD_EXT, destValue, srcValue[0], srcValue[1], srcValue[2]);
+00721 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MADD_EXT"</span>);
+00722 ++numOp;
+00723 <span class="keywordflow">break</span>;
+00724 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw16">CVPInstruction::RSQ</a>:
+00725 {
+00726 <a class="code" href="a04199.html#a6">nlassert</a>(program[k].Src1.Swizzle.isScalar());
+00727 <span class="comment">// extract the component we need</span>
+00728 <a class="code" href="a04223.html#a701">GLuint</a> <a class="code" href="a04223.html#a566">index</a> = <a class="code" href="a04223.html#a568">program</a>[k].Src1.Swizzle.Comp[0];
+00729 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar, srcValue[0], index);
+00730 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00731 ++numEC;
+00732 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_RECIP_SQRT_EXT, firstTempScalar + 1, firstTempScalar);
+00733 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_RECIP_SQRT_EXT"</span>);
+00734 ++numOp;
+00735 <span class="comment">// duplicate result in destination</span>
+00736 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05373.html#a2">l</a> = 0; <a class="code" href="a05373.html#a2">l</a> &lt; 4; ++<a class="code" href="a05373.html#a2">l</a>)
+00737 {
+00738 <span class="keywordflow">if</span> (writeMask &amp; (1 &lt;&lt; <a class="code" href="a05373.html#a2">l</a>))
+00739 {
+00740 <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar + 1, l);
+00741 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>);
+00742 <a class="code" href="a04199.html#a6">nlassert</a>(glGetError() == GL_NO_ERROR);
+00743 }
+00744 }
+00745 }
+00746 <span class="keywordflow">break</span>;
+00747 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw2">CVPInstruction::DP3</a>:
+00748 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_DOT3_EXT, destValue, srcValue[0], srcValue[1]);
+00749 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_DOT3_EXT"</span>);
+00750 ++numOp;
+00751 <span class="keywordflow">break</span>;
+00752 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw3">CVPInstruction::DP4</a>:
+00753 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_DOT4_EXT, destValue, srcValue[0], srcValue[1]);
+00754 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_DOT4_EXT"</span>);
+00755 ++numOp;
+00756 <span class="keywordflow">break</span>;
+00757 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw4">CVPInstruction::DST</a>:
+00758 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister, srcValue[0], GL_ONE_EXT, GL_Y_EXT, GL_Z_EXT, GL_ONE_EXT);
+00759 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_DOT4_EXT"</span>);
+00760 ++numOp;
+00761 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister + 1, srcValue[1], GL_ONE_EXT, GL_Y_EXT, GL_ONE_EXT, GL_W_EXT);
+00762 ++numSwizzle;
+00763 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_MUL_EXT, destValue, firstTempRegister, firstTempRegister + 1);
+00764 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MUL_EXT"</span>);
+00765 ++numOp;
+00766 <span class="keywordflow">break</span>;
+00767 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw7">CVPInstruction::LIT</a>:
+00768 {
+00769 <a class="code" href="a04558.html#a15">uint</a> writeMask = <a class="code" href="a04223.html#a568">program</a>[k].Dest.WriteMask;
+00770 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar, srcValue[0], 0); <span class="comment">// extract X from the source</span>
+00771 <span class="keywordflow">if</span> (writeMask &amp; 4)
+00772 {
+00773 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar + 1, srcValue[0], 1); <span class="comment">// extract Y from the source</span>
+00774 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00775 ++numEC;
+00776 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar + 2, srcValue[0], 3); <span class="comment">// extract W from the source</span>
+00777 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00778 ++numEC;
+00779 <span class="comment">// result = X &gt; 0 ? Y^W : 0 </span>
+00780 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_POWER_EXT, firstTempScalar + 2, firstTempScalar + 1, firstTempScalar + 2);
+00781 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_POWER_EXT"</span>);
+00782 ++numOp;
+00783 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_SET_GE_EXT, firstTempScalar + 1, firstTempScalar, cteZero);
+00784 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_SET_GE_EXT"</span>);
+00785 ++numOp;
+00786 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_MUL_EXT, firstTempScalar + 2, firstTempScalar + 2, firstTempScalar + 1);
+00787 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MUL_EXT"</span>);
+00788 ++numOp;
+00789 <span class="comment">// store result</span>
+00790 <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar + 2, 2);
+00791 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>);
+00792 ++numIC;
+00793 }
+00794 <span class="keywordflow">if</span> (writeMask &amp; 2)
+00795 {
+00796 <span class="comment">// clamp N.L to [0, 1]</span>
+00797 <a class="code" href="a04222.html#a123">nglShaderOp3EXT</a>(GL_OP_CLAMP_EXT, firstTempScalar, firstTempScalar, cteZero, cteOne);
+00798 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_CLAMP_EXT"</span>);
+00799 ++numOp;
+00800 <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar, 1);
+00801 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>);
+00802 ++numIC;
+00803 }
+00804 <span class="comment">// set x and w to 1 if they are not masked</span>
+00805 <span class="keywordflow">if</span> (writeMask &amp; (1 + 8))
+00806 {
+00807 <a class="code" href="a05363.html#a418">doSwizzle</a>(destValue, destValue,
+00808 (writeMask &amp; 1) ? GL_ONE_EXT : GL_X_EXT,
+00809 GL_Y_EXT,
+00810 GL_Z_EXT,
+00811 (writeMask &amp; 8) ? GL_ONE_EXT : GL_W_EXT);
+00812 ++numSwizzle;
+00813 }
+00814
+00815 }
+00816 <span class="keywordflow">break</span>;
+00817 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw11">CVPInstruction::MIN</a>:
+00818 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_MIN_EXT, destValue, srcValue[0], srcValue[1]);
+00819 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MIN_EXT"</span>);
+00820 ++numOp;
+00821 <span class="keywordflow">break</span>;
+00822 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw10">CVPInstruction::MAX</a>:
+00823 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_MAX_EXT, destValue, srcValue[0], srcValue[1]);
+00824 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MAX_EXT"</span>);
+00825 ++numOp;
+00826 <span class="keywordflow">break</span>;
+00827 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw18">CVPInstruction::SLT</a>:
+00828 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_SET_LT_EXT, destValue, srcValue[0], srcValue[1]);
+00829 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_SET_LT_EXT"</span>);
+00830 ++numOp;
+00831 <span class="keywordflow">break</span>;
+00832 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw17">CVPInstruction::SGE</a>:
+00833 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_SET_GE_EXT, destValue, srcValue[0], srcValue[1]);
+00834 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_SET_GE_EXT"</span>);
+00835 ++numOp;
+00836 <span class="keywordflow">break</span>;
+00837 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw6">CVPInstruction::EXPP</a>:
+00838 {
+00839 <a class="code" href="a04558.html#a15">uint</a> writeMask = <a class="code" href="a04223.html#a568">program</a>[k].Dest.WriteMask;
+00840 <a class="code" href="a04199.html#a6">nlassert</a>(program[k].Src1.Swizzle.isScalar());
+00841 <a class="code" href="a04223.html#a701">GLuint</a> compIndex = <a class="code" href="a04223.html#a568">program</a>[k].Src1.Swizzle.Comp[0];
+00842 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar + 2, srcValue[0], compIndex); <span class="comment">// extract W from the source</span>
+00843 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00844 ++numEC;
+00845 <span class="keywordflow">if</span> (writeMask &amp; 1)
+00846 {
+00847 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_FLOOR_EXT, firstTempScalar, firstTempScalar + 2); <span class="comment">// (int) W</span>
+00848 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_FLOOR_EXT"</span>);
+00849 ++numOp;
+00850 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_EXP_BASE_2_EXT, firstTempScalar, firstTempScalar); <span class="comment">// 2 ^ (int) W </span>
+00851 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_EXP_BASE_2_EXT"</span>);
+00852 ++numOp;
+00853 }
+00854 <span class="keywordflow">if</span> (writeMask &amp; 2)
+00855 {
+00856 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_FRAC_EXT, firstTempScalar + 1, firstTempScalar + 2); <span class="comment">// frac(W)</span>
+00857 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_FRAC_EXT"</span>);
+00858 ++numOp;
+00859 }
+00860 <span class="keywordflow">if</span> (writeMask &amp; 4) <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_EXP_BASE_2_EXT, firstTempScalar + 2, firstTempScalar + 2); <span class="comment">// 2 ^W</span>
+00861 <span class="comment">// store the results</span>
+00862 <span class="keywordflow">if</span> (writeMask &amp; 1) { <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar, 0); <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>); ++numIC; }
+00863 <span class="keywordflow">if</span> (writeMask &amp; 2) { <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar + 1, 1); <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>); ++numIC; }
+00864 <span class="keywordflow">if</span> (writeMask &amp; 4) { <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar + 2, 2); <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>); ++numIC; }
+00865 <span class="comment">// set W to 1 and leave other values unchanged</span>
+00866 <span class="keywordflow">if</span> (writeMask &amp; 8) { <a class="code" href="a05363.html#a418">doSwizzle</a>(destValue, destValue, GL_X_EXT, GL_Y_EXT, GL_Z_EXT, GL_ONE_EXT); ++numSwizzle; }
+00867 }
+00868 <span class="keywordflow">break</span>;
+00869 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw8">CVPInstruction::LOG</a>:
+00870 {
+00871 <a class="code" href="a04558.html#a15">uint</a> writeMask = <a class="code" href="a04223.html#a568">program</a>[k].Dest.WriteMask;
+00872 <a class="code" href="a04199.html#a6">nlassert</a>(program[k].Src1.Swizzle.isScalar());
+00873 <span class="comment">// extract the component we need</span>
+00874 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar, srcValue[0], (GLuint) program[k].Src1.Swizzle.Comp[0]);
+00875 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00876 ++numEC;
+00877 <span class="comment">// get abs(src) : abs(src) = max(src, -src)</span>
+00878 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_NEGATE_EXT, firstTempScalar + 1, firstTempScalar);
+00879 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_NEGATE_EXT"</span>);
+00880 ++numOp;
+00881 <a class="code" href="a04222.html#a122">nglShaderOp2EXT</a>(GL_OP_MAX_EXT, firstTempScalar, firstTempScalar, firstTempScalar + 1);
+00882 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_MAX_EXT"</span>);
+00883 ++numOp;
+00884 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_LOG_BASE_2_EXT, firstTempScalar, firstTempScalar); <span class="comment">// (int) W</span>
+00885 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_LOG_BASE_2_EXT"</span>);
+00886 ++numOp;
+00887 <span class="comment">// store the results</span>
+00888 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05373.html#a2">l</a> = 0; <a class="code" href="a05373.html#a2">l</a> &lt; 4; ++<a class="code" href="a05373.html#a2">l</a>)
+00889 {
+00890 <span class="keywordflow">if</span> (writeMask &amp; (1 &lt;&lt; <a class="code" href="a05373.html#a2">l</a>))
+00891 {
+00892 <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar, l);
+00893 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Insert component"</span>);
+00894 <a class="code" href="a04199.html#a6">nlassert</a>(glGetError() == GL_NO_ERROR);
+00895 }
+00896 }
+00897 }
+00898 <span class="keywordflow">break</span>;
+00899 <span class="keywordflow">case</span> <a class="code" href="a03714.html#CVPInstructionw5CVPInstructionw15">CVPInstruction::RCP</a>:
+00900 {
+00901 <a class="code" href="a04558.html#a15">uint</a> writeMask = <a class="code" href="a04223.html#a568">program</a>[k].Dest.WriteMask;
+00902 <a class="code" href="a04199.html#a6">nlassert</a>(program[k].Src1.Swizzle.isScalar());
+00903 <span class="comment">// extract the component we need</span>
+00904 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(firstTempScalar, srcValue[0], (GLuint) program[k].Src1.Swizzle.Comp[0]);
+00905 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component"</span>);
+00906 ++numEC;
+00907 <a class="code" href="a04222.html#a121">nglShaderOp1EXT</a>(GL_OP_RECIP_EXT, firstTempScalar + 1, firstTempScalar);
+00908 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"GL_OP_RECIP_EXT"</span>);
+00909 ++numOp;
+00910 <span class="comment">// duplicate result in destination</span>
+00911 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05373.html#a2">l</a> = 0; <a class="code" href="a05373.html#a2">l</a> &lt; 4; ++<a class="code" href="a05373.html#a2">l</a>)
+00912 {
+00913 <span class="keywordflow">if</span> (writeMask &amp; (1 &lt;&lt; <a class="code" href="a05373.html#a2">l</a>))
+00914 {
+00915 <a class="code" href="a04222.html#a126">nglInsertComponentEXT</a>(destValue, firstTempScalar + 1, l);
+00916 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"insert component"</span>);
+00917 ++numIC;
+00918 }
+00919 }
+00920 }
+00921 <span class="keywordflow">break</span>;
+00922 }
+00923
+00924 glError = glGetError();
+00925 <a class="code" href="a04199.html#a6">nlassert</a>(glError == GL_NO_ERROR);
+00926
+00927
+00928 <span class="comment">// apply write mask if any</span>
+00929 <span class="keywordflow">if</span> (writeMask != 0x0f)
+00930 {
+00931 <span class="keywordflow">if</span> ((destOperand.<a class="code" href="a03715.html#CVPOperando6">Type</a> == <a class="code" href="a03715.html#CVPOperandw3CVPOperandw40">CVPOperand::OutputRegister</a> &amp;&amp; destOperand.<a class="code" href="a03715.html#CVPOperando7">Value</a>.OutputRegisterValue != <a class="code" href="a03715.html#CVPOperandw4CVPOperandw26">CVPOperand::OFogCoord</a>))
+00932 {
+00933 <a class="code" href="a04558.html#a15">uint</a> &amp;outputMask = componentWritten[outputRegisterIndex];
+00934 <span class="comment">// is a texture coordinate or a color being written ?</span>
+00935 <span class="keywordflow">if</span> ((maskedDestValue &gt;= <a class="code" href="a04223.html#a282">GL_OUTPUT_TEXTURE_COORD0_EXT</a> &amp;&amp; maskedDestValue &lt;= <a class="code" href="a04223.html#a289">GL_OUTPUT_TEXTURE_COORD7_EXT</a>)
+00936 || maskedDestValue == <a class="code" href="a04223.html#a280">GL_OUTPUT_COLOR0_EXT</a>
+00937 || maskedDestValue == <a class="code" href="a04223.html#a281">GL_OUTPUT_COLOR1_EXT</a>
+00938 )
+00939 {
+00940 <span class="comment">// test if this is the last time this output will be written</span>
+00941 <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
+00942 <span class="comment">// if this was the last write for this output, must set unfilled component</span>
+00943 <span class="comment">// NB : this loop could be optimized, but vertex program are rather short for now ..</span>
+00944 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> m = k + 1; m &lt; <a class="code" href="a04223.html#a568">program</a>.size(); ++m)
+00945 {
+00946 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a568">program</a>[m].Dest.Type == <a class="code" href="a03715.html#CVPOperandw3CVPOperandw40">CVPOperand::OutputRegister</a>) <span class="comment">// another output to this texture ?</span>
+00947 {
+00948 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a568">program</a>[m].Dest.Value.OutputRegisterValue == <a class="code" href="a04223.html#a568">program</a>[k].Dest.Value.OutputRegisterValue)
+00949 {
+00950 found = <span class="keyword">true</span>;
+00951 <span class="keywordflow">break</span>;
+00952 }
+00953 }
+00954 }
+00955
+00956 <span class="keywordflow">if</span> (found)
+00957 {
+00958 <span class="keywordflow">if</span> (!outputWritten)
+00959 {
+00960 <span class="comment">// write values</span>
+00961 <a class="code" href="a05363.html#a419">doWriteMask</a>(maskedDestValue, destValue,
+00962 writeMask &amp; 1 ? GL_TRUE : GL_FALSE,
+00963 writeMask &amp; 2 ? GL_TRUE : GL_FALSE,
+00964 writeMask &amp; 4 ? GL_TRUE : GL_FALSE,
+00965 writeMask &amp; 8 ? GL_TRUE : GL_FALSE);
+00966 ++numWM;
+00967 }
+00968 }
+00969 <span class="keywordflow">else</span> <span class="comment">// this is the last write, check if the mask is complete</span>
+00970 {
+00971 <span class="keywordflow">if</span> ((outputMask | writeMask) == 0xf)
+00972 {
+00973 <span class="keywordflow">if</span> (!outputWritten)
+00974 {
+00975 <span class="comment">// ok, after this call everything has been written</span>
+00976 <span class="comment">// write values</span>
+00977 <a class="code" href="a05363.html#a419">doWriteMask</a>(maskedDestValue, destValue,
+00978 writeMask &amp; 1 ? GL_TRUE : GL_FALSE,
+00979 writeMask &amp; 2 ? GL_TRUE : GL_FALSE,
+00980 writeMask &amp; 4 ? GL_TRUE : GL_FALSE,
+00981 writeMask &amp; 8 ? GL_TRUE : GL_FALSE);
+00982 ++numWM;
+00983 }
+00984 }
+00985 <span class="keywordflow">else</span>
+00986 {
+00987 <a class="code" href="a04558.html#a15">uint</a> prevMask = outputMask;
+00988 <a class="code" href="a04558.html#a15">uint</a> newMask = writeMask | outputMask;
+00989
+00990 <span class="comment">// complete unused entries</span>
+00991
+00992 <span class="comment">// if primary color is output, then the default color is white</span>
+00993 <span class="keywordflow">if</span> (maskedDestValue == <a class="code" href="a04223.html#a280">GL_OUTPUT_COLOR0_EXT</a>)
+00994 {
+00995 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister, destValue,
+00996 newMask &amp; 1 ? GL_X_EXT : GL_ONE_EXT,
+00997 newMask &amp; 2 ? GL_Y_EXT : GL_ONE_EXT,
+00998 newMask &amp; 4 ? GL_Z_EXT : GL_ONE_EXT,
+00999 newMask &amp; 8 ? GL_W_EXT : GL_ONE_EXT);
+01000 }
+01001 <span class="keywordflow">else</span>
+01002 {
+01003 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister, destValue,
+01004 newMask &amp; 1 ? GL_X_EXT : GL_ZERO_EXT,
+01005 newMask &amp; 2 ? GL_Y_EXT : GL_ZERO_EXT,
+01006 newMask &amp; 4 ? GL_Z_EXT : GL_ZERO_EXT,
+01007 newMask &amp; 8 ? GL_W_EXT : GL_ONE_EXT);
+01008 }
+01009 <span class="keywordflow">if</span> (!outputWritten)
+01010 {
+01011 ++numWM;
+01012 <a class="code" href="a05363.html#a419">doWriteMask</a>(maskedDestValue, firstTempRegister,
+01013 prevMask &amp; 1 ? GL_FALSE : GL_TRUE,
+01014 prevMask &amp; 2 ? GL_FALSE : GL_TRUE,
+01015 prevMask &amp; 4 ? GL_FALSE : GL_TRUE,
+01016 prevMask &amp; 8 ? GL_FALSE : GL_TRUE
+01017 );
+01018 ++numWM;
+01019 }
+01020 outputMask = 0xf;
+01021 }
+01022 }
+01023 }
+01024 <span class="keywordflow">else</span>
+01025 {
+01026 <span class="keywordflow">if</span> (!outputWritten)
+01027 {
+01028 <a class="code" href="a05363.html#a419">doWriteMask</a>(maskedDestValue, destValue,
+01029 writeMask &amp; 1 ? GL_TRUE : GL_FALSE,
+01030 writeMask &amp; 2 ? GL_TRUE : GL_FALSE,
+01031 writeMask &amp; 4 ? GL_TRUE : GL_FALSE,
+01032 writeMask &amp; 8 ? GL_TRUE : GL_FALSE);
+01033 ++numWM;
+01034 }
+01035 }
+01036 <span class="comment">// complete the mask </span>
+01037 outputMask |= writeMask;
+01038 }
+01039 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (destOperand.<a class="code" href="a03715.html#CVPOperando6">Type</a> != <a class="code" href="a03715.html#CVPOperandw3CVPOperandw40">CVPOperand::OutputRegister</a>)
+01040 {
+01041 <span class="keywordflow">if</span> (!outputWritten)
+01042 {
+01043 <a class="code" href="a05363.html#a419">doWriteMask</a>(maskedDestValue, destValue,
+01044 writeMask &amp; 1 ? GL_TRUE : GL_FALSE,
+01045 writeMask &amp; 2 ? GL_TRUE : GL_FALSE,
+01046 writeMask &amp; 4 ? GL_TRUE : GL_FALSE,
+01047 writeMask &amp; 8 ? GL_TRUE : GL_FALSE);
+01048 ++numWM;
+01049 }
+01050 }
+01051 }
+01052
+01053 glError = glGetError();
+01054 <a class="code" href="a04199.html#a6">nlassert</a>(glError == GL_NO_ERROR);
+01055 }
+01056
+01057
+01058
+01059 <span class="comment">// if color have not been written, write with default values </span>
+01060 <span class="keywordflow">if</span> (componentWritten[<a class="code" href="a03715.html#CVPOperandw4CVPOperandw30">CVPOperand::OPrimaryColor</a>] == 0)
+01061 {
+01062 <span class="comment">// we specify vertex coord has input for swizzle, but we don't read any component.. </span>
+01063 <a class="code" href="a05363.html#a418">doSwizzle</a>(GL_OUTPUT_COLOR0_EXT, _EVSPositionHandle, GL_ZERO_EXT, GL_ZERO_EXT, GL_ZERO_EXT, GL_ONE_EXT);
+01064 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Swizzle (Complete primary color)"</span>);
+01065 ++numSwizzle;
+01066 }
+01067 <span class="keywordflow">else</span>
+01068 {
+01069 <a class="code" href="a04199.html#a6">nlassert</a>(componentWritten[CVPOperand::OPrimaryColor] == 0xf);
+01070 }
+01071 <span class="keywordflow">if</span> (componentWritten[<a class="code" href="a03715.html#CVPOperandw4CVPOperandw31">CVPOperand::OSecondaryColor</a>] == 0)
+01072 {
+01073 <span class="comment">// we specify vertex coord has input for swizzle, but we don't read any component..</span>
+01074 <a class="code" href="a05363.html#a418">doSwizzle</a>(GL_OUTPUT_COLOR1_EXT, _EVSPositionHandle, GL_ZERO_EXT, GL_ZERO_EXT, GL_ZERO_EXT, GL_ONE_EXT);
+01075 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Swizzle (Complete secondary color)"</span>);
+01076 ++numSwizzle;
+01077 }
+01078 <span class="keywordflow">else</span>
+01079 {
+01080 <a class="code" href="a04199.html#a6">nlassert</a>(componentWritten[CVPOperand::OSecondaryColor] == 0xf);
+01081 }
+01082 <a class="code" href="a04199.html#a6">nlassert</a>(componentWritten[CVPOperand::OHPosition] == 0xf); <span class="comment">// should have written all component of position </span>
+01083
+01084 glError = glGetError();
+01085 <a class="code" href="a04199.html#a6">nlassert</a>(glError == GL_NO_ERROR);
+01086
+01087 <span class="comment">// if fog has been written, perform conversion (if there's no ATI driver fix)</span>
+01088 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a> &amp;&amp; componentWritten[<a class="code" href="a03715.html#CVPOperandw4CVPOperandw26">CVPOperand::OFogCoord</a>] == 0xf)
+01089 {
+01090 <span class="comment">// Well this could be avoided, but we should make 2 cases for each vertex program.. :(</span>
+01091 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister, _EVSConstantHandle + _EVSNumConstant, GL_X_EXT, GL_X_EXT, GL_X_EXT, GL_X_EXT);
+01092 <a class="code" href="a05363.html#a418">doSwizzle</a>(firstTempRegister + 1, _EVSConstantHandle + _EVSNumConstant, GL_Y_EXT, GL_Y_EXT, GL_Y_EXT, GL_Y_EXT);
+01093 <a class="code" href="a04222.html#a123">nglShaderOp3EXT</a>(GL_OP_MADD_EXT, firstTempRegister + 2, fogTemp, firstTempRegister, firstTempRegister + 1);
+01094 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Use MAD for fog conversion"</span>);
+01095 <a class="code" href="a04222.html#a127">nglExtractComponentEXT</a>(GL_OUTPUT_FOG_EXT, firstTempRegister + 2, 0);
+01096 <a class="code" href="a04233.html#a0">EVS_INFO</a>(<span class="stringliteral">"Extract component to fog"</span>);
+01097 }
+01098
+01099 glError = glGetError();
+01100 <a class="code" href="a04199.html#a6">nlassert</a>(glError == GL_NO_ERROR);
+01101 }
+01102 <a class="code" href="a04222.html#a117">nglEndVertexShaderEXT</a>();
+01103
+01104 <span class="comment">/*glError = glGetError();</span>
+01105 <span class="comment"> nlassert(glError == GL_NO_ERROR);*/</span>
+01106
+01107 <a class="code" href="a04223.html#a699">GLboolean</a> optimizedShader;
+01108 glGetBooleanv(GL_VERTEX_SHADER_OPTIMIZED_EXT, &amp;optimizedShader);
+01109 <span class="keywordflow">if</span> (!optimizedShader)
+01110 {
+01111 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"Failed to optimize a vertex program with the EXT_vertex_shader extension, this shader will be disabled"</span>);
+01112 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01113 }
+01114
+01115 <span class="comment">// see which input registers are used</span>
+01116 usedInputRegisters = 0;
+01117
+01118 <a class="code" href="a04558.html#a15">uint</a> k, <a class="code" href="a05373.html#a2">l</a>;
+01119 <span class="comment">// convert each instruction of the vertex program</span>
+01120 <span class="keywordflow">for</span>(k = 0; k &lt; <a class="code" href="a04223.html#a568">program</a>.size(); ++k)
+01121 {
+01122 <a class="code" href="a04558.html#a15">uint</a> numSrc = <a class="code" href="a04223.html#a568">program</a>[k].getNumUsedSrc();
+01123 <span class="keywordflow">for</span>(<a class="code" href="a05373.html#a2">l</a> = 0; <a class="code" href="a05373.html#a2">l</a> &lt; numSrc; ++<a class="code" href="a05373.html#a2">l</a>)
+01124 {
+01125 <span class="keyword">const</span> <a class="code" href="a03715.html">CVPOperand</a> &amp;op = <a class="code" href="a04223.html#a568">program</a>[k].getSrc(l);
+01126 <span class="keywordflow">if</span> (op.<a class="code" href="a03715.html#CVPOperando6">Type</a> == <a class="code" href="a03715.html#CVPOperandw3CVPOperandw8">CVPOperand::InputRegister</a>)
+01127 {
+01128 usedInputRegisters |= <a class="code" href="a05363.html#a417">convInputRegisterToVBFlag</a>(op.<a class="code" href="a03715.html#CVPOperando7">Value</a>.InputRegisterValue);
+01129 }
+01130 }
+01131 }
+01132
+01133 <span class="preprocessor">#ifdef DEBUG_SETUP_EXT_VERTEX_SHADER</span>
+01134 <span class="preprocessor"></span> <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"========================"</span>);
+01135 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"num Opcode = %d"</span>, numOp);
+01136 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"num Indexing = %d"</span>, numOpIndex);
+01137 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"num Swizzle = %d"</span>, numSwizzle);
+01138 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"num extract component = %d"</span>, numEC);
+01139 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"num insert component = %d"</span>, numIC);
+01140 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"num write mask = %d"</span>, numWM);
+01141 <span class="preprocessor">#endif</span>
+01142 <span class="preprocessor"></span>
+01143 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01144
+01145 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz72_5" doxytag="NL3D::CDriverGL::setupFog" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupFog </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">float&nbsp;</td>
+ <td class="mdname" nowrap> <em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>end</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03337.html">CRGBA</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>color</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup fog parameters. fog must enabled to see result. start and end are in [0,1] range.
+<p>
+
+<p>
+Special : with vertex program, using the extension EXT_vertex_shader, fog is emulated using 1 more constant to scale result to [0, 1]
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz143_5">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02245">2245</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01080">_ATIFogRangeFixed</a>, <a class="el" href="a05643.html#l00611">_CurrentFogColor</a>, <a class="el" href="a05642.html#l00099">_EVSNumConstant</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00610">_FogEnd</a>, <a class="el" href="a05643.html#l00610">_FogStart</a>, <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, and <a class="el" href="a05656.html#l01239">setConstant()</a>.
+<p>
+<div class="fragment"><pre>02246 {
+02247 glFogf(GL_FOG_MODE, GL_LINEAR);
+02248 glFogf(GL_FOG_START, start);
+02249 glFogf(GL_FOG_END, end);
+02250
+02251 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[0]= color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>/255.0f;
+02252 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[1]= color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>/255.0f;
+02253 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[2]= color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>/255.0f;
+02254 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr3">_CurrentFogColor</a>[3]= color.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>/255.0f;
+02255
+02256 glFogfv(GL_FOG_COLOR, _CurrentFogColor);
+02257
+02260 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram)
+02261 {
+02262 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a>)
+02263 {
+02264 <span class="comment">// last constant is used to store fog informations (fog must be rescaled to [0, 1], because of a driver bug)</span>
+02265 <span class="keywordflow">if</span> (start != end)
+02266 {
+02267 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz104_9">setConstant</a>(_EVSNumConstant, 1.f / (start - end), - end / (start - end), 0, 0);
+02268 }
+02269 <span class="keywordflow">else</span>
+02270 {
+02271 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz104_9">setConstant</a>(_EVSNumConstant, 0.f, 0, 0, 0);
+02272 }
+02273 }
+02274 }
+02275 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr9">_FogStart</a> = start;
+02276 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr8">_FogEnd</a> = end;
+02277 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd19" doxytag="NL3D::CDriverGL::setupGlArrays" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupGlArrays </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>vb</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup GL arrays, with a vb info.
+<p>
+
+<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000016">Todo:</a></b></dt><dd>yoyo, or nico: this code should change with ATI VertexProgram. For now, ATI VBHard is only coded for non-VertexProgram case. </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l01033">1033</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00774">_LastVertexSetupIsLightMap</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05643.html#l00979">isVertexProgramEnabled()</a>, <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>, <a class="el" href="a05653.html#l00920">setupGlArraysForEXTVertexShader()</a>, <a class="el" href="a05653.html#l00838">setupGlArraysForNVVertexProgram()</a>, <a class="el" href="a05653.html#l00676">setupGlArraysStd()</a>, <a class="el" href="a05653.html#l00792">toggleGlArraysForEXTVertexShader()</a>, <a class="el" href="a05653.html#l00748">toggleGlArraysForNVVertexProgram()</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00087">activeVertexBuffer()</a>, and <a class="el" href="a05653.html#l00580">activeVertexBufferHard()</a>.
+<p>
+<div class="fragment"><pre>01034 {
+01035 <a class="code" href="a04558.html#a11">uint32</a> flags= vb.VertexFormat;
+01036
+01041 <span class="comment">// Standard case (NVVertexProgram or no vertex program case)</span>
+01042 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram || !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader)
+01043 {
+01044 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd26">toggleGlArraysForNVVertexProgram</a>();
+01045 <span class="comment">// Use a vertex program ?</span>
+01046 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> ())
+01047 {
+01048 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd22">setupGlArraysStd</a>(vb);
+01049 }
+01050 <span class="keywordflow">else</span>
+01051 {
+01052 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd21">setupGlArraysForNVVertexProgram</a>(vb);
+01053 }
+01054 }
+01055 <span class="keywordflow">else</span> <span class="comment">// EXTVertexShader case</span>
+01056 {
+01057 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd25">toggleGlArraysForEXTVertexShader</a>();
+01058 <span class="comment">// Use a vertex program ?</span>
+01059 <span class="keywordflow">if</span> (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> ())
+01060 {
+01061 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd22">setupGlArraysStd</a>(vb);
+01062 }
+01063 <span class="keywordflow">else</span>
+01064 {
+01065 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd20">setupGlArraysForEXTVertexShader</a>(vb);
+01066 }
+01067 }
+01068
+01069 <span class="comment">// Reset specials flags.</span>
+01070 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a>= <span class="keyword">false</span>;
+01071 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd20" doxytag="NL3D::CDriverGL::setupGlArraysForEXTVertexShader" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupGlArraysForEXTVertexShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>vb</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00920">920</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a06717.html#l00111">NL3D::CVertexProgram::_DrvInfo</a>, <a class="el" href="a05643.html#l00991">_LastSetuppedVP</a>, <a class="el" href="a05643.html#l00187">NL3D::CVertexBufferInfo::ATIValueOffset</a>, <a class="el" href="a05643.html#l00183">NL3D::CVertexBufferInfo::ATIVBHardMode</a>, <a class="el" href="a05643.html#l00185">NL3D::CVertexBufferInfo::ATIVertexObjectId</a>, <a class="el" href="a05650.html#l00594">NL3D::CDriverGLStates::clientActiveTextureARB()</a>, <a class="el" href="a05650.html#l00631">NL3D::CDriverGLStates::enableVertexAttribArrayForEXTVertexShader()</a>, <a class="el" href="a05653.html#l00634">GLType</a>, <a class="el" href="a05653.html#l00653">GLVertexAttribIndex</a>, <a class="el" href="a05645.html#l00412">nglArrayObjectATI</a>, <a class="el" href="a05645.html#l00415">nglVariantArrayObjectATI</a>, <a class="el" href="a05645.html#l00349">nglVariantPointerEXT</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00416">nlstop</a>, <a class="el" href="a05653.html#l00615">NumCoordinatesType</a>, <a class="el" href="a05643.html#l00175">NL3D::CVertexBufferInfo::Type</a>, <a class="el" href="a05646.html#l00244">type</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05643.html#l01101">NL3D::CVertexProgamDrvInfosGL::UsedVertexComponents</a>, <a class="el" href="a05646.html#l01132">value</a>, <a class="el" href="a05643.html#l00179">NL3D::CVertexBufferInfo::ValuePtr</a>, <a class="el" href="a05643.html#l01096">NL3D::CVertexProgamDrvInfosGL::Variants</a>, <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>, and <a class="el" href="a05643.html#l00172">NL3D::CVertexBufferInfo::VertexSize</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01033">setupGlArrays()</a>.
+<p>
+<div class="fragment"><pre>00921 {
+00922
+00923 CVertexProgram *vp = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr17">_LastSetuppedVP</a>;
+00924 <span class="keywordflow">if</span> (!vp) <span class="keywordflow">return</span>;
+00925 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a> *drvInfo = NLMISC::safe_cast&lt;CVertexProgamDrvInfosGL *&gt;((<a class="code" href="a02434.html#NL3D_1_1IDrivern5">IVertexProgramDrvInfos</a> *) vp-&gt;_DrvInfo);
+00926 <span class="keywordflow">if</span> (!drvInfo) <span class="keywordflow">return</span>;
+00927
+00928 <a class="code" href="a04558.html#a11">uint32</a> flags= vb.VertexFormat;
+00929
+00930 <span class="comment">// For each value</span>
+00931 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a658">value</a>=0; <a class="code" href="a04223.html#a658">value</a>&lt;CVertexBuffer::NumValue; <a class="code" href="a04223.html#a658">value</a>++)
+00932 {
+00933 <span class="comment">// Flag</span>
+00934 <a class="code" href="a04558.html#a9">uint16</a> flag=1&lt;&lt;<a class="code" href="a04223.html#a658">value</a>;
+00935
+00936 <span class="comment">// Type</span>
+00937 CVertexBuffer::TType <a class="code" href="a04223.html#a581">type</a>=vb.Type[<a class="code" href="a04223.html#a658">value</a>];
+00938
+00939 <span class="comment">// Index</span>
+00940 <a class="code" href="a04558.html#a15">uint</a> glIndex=<a class="code" href="a02433.html#NL3D_1_1CDriverGLv3">GLVertexAttribIndex</a>[<a class="code" href="a04223.html#a658">value</a>];
+00941
+00942 <span class="comment">// Not setuped value and used</span>
+00943 <span class="keywordflow">if</span> (flags &amp; flag &amp; drvInfo-&gt;UsedVertexComponents)
+00944 {
+00945 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArrayForEXTVertexShader(glIndex, <span class="keyword">true</span>, drvInfo-&gt;Variants);
+00946 <span class="comment">// use variant or open gl standard array</span>
+00947 <span class="keywordflow">switch</span>(<a class="code" href="a04223.html#a658">value</a>)
+00948 {
+00949 <span class="keywordflow">case</span> CVertexBuffer::Position: <span class="comment">// position </span>
+00950 {
+00951 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] &gt;= 2);
+00952 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_VERTEX_ARRAY, NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::Position]);
+00953 <span class="keywordflow">else</span> glVertexPointer(NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00954 }
+00955 <span class="keywordflow">break</span>;
+00956 <span class="keywordflow">case</span> CVertexBuffer::Weight: <span class="comment">// skin weight</span>
+00957 {
+00958 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] == 4); <span class="comment">// variant, only 4 component supported</span>
+00959 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a181">nglVariantArrayObjectATI</a>(drvInfo-&gt;Variants[CDriverGL::EVSSkinWeightVariant], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::Weight]);
+00960 <span class="keywordflow">else</span> <a class="code" href="a04222.html#a131">nglVariantPointerEXT</a>(drvInfo-&gt;Variants[CDriverGL::EVSSkinWeightVariant], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00961 }
+00962 <span class="keywordflow">break</span>;
+00963 <span class="keywordflow">case</span> CVertexBuffer::Normal: <span class="comment">// normal</span>
+00964 {
+00965 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] == 3); <span class="comment">// must have 3 components for normals</span>
+00966 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_NORMAL_ARRAY, 3, GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[value]);
+00967 <span class="keywordflow">else</span> glNormalPointer(GLType[type], vb.VertexSize, vb.ValuePtr[CVertexBuffer::Normal]);
+00968 }
+00969 <span class="keywordflow">break</span>;
+00970 <span class="keywordflow">case</span> CVertexBuffer::PrimaryColor: <span class="comment">// color</span>
+00971 {
+00972 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] &gt;= 3); <span class="comment">// must have 3 or 4 components for primary color</span>
+00973 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_COLOR_ARRAY, NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::PrimaryColor]);
+00974 <span class="keywordflow">else</span> glColorPointer(NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00975 }
+00976 <span class="keywordflow">break</span>;
+00977 <span class="keywordflow">case</span> CVertexBuffer::SecondaryColor: <span class="comment">// secondary color</span>
+00978 {
+00979 <span class="comment">// implemented using a variant, as not available with EXTVertexShader</span>
+00980 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] == 4); <span class="comment">// variant, only 4 component supported</span>
+00981 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a181">nglVariantArrayObjectATI</a>(drvInfo-&gt;Variants[CDriverGL::EVSSecondaryColorVariant], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::SecondaryColor]);
+00982 <span class="keywordflow">else</span> <a class="code" href="a04222.html#a131">nglVariantPointerEXT</a>(drvInfo-&gt;Variants[CDriverGL::EVSSecondaryColorVariant], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00983 }
+00984 <span class="keywordflow">break</span>;
+00985 <span class="keywordflow">case</span> CVertexBuffer::Fog: <span class="comment">// fog coordinate</span>
+00986 {
+00987 <span class="comment">// implemented using a variant</span>
+00988 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] == 4); <span class="comment">// variant, only 4 component supported</span>
+00989 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a181">nglVariantArrayObjectATI</a>(drvInfo-&gt;Variants[CDriverGL::EVSFogCoordsVariant], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::Fog]);
+00990 <span class="keywordflow">else</span> <a class="code" href="a04222.html#a131">nglVariantPointerEXT</a>(drvInfo-&gt;Variants[CDriverGL::EVSFogCoordsVariant], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00991 }
+00992 <span class="keywordflow">break</span>;
+00993 <span class="keywordflow">case</span> CVertexBuffer::PaletteSkin: <span class="comment">// palette skin</span>
+00994 {
+00995 <span class="comment">// implemented using a variant</span>
+00996 <a class="code" href="a04199.html#a6">nlassert</a>(NumCoordinatesType[type] == 4); <span class="comment">// variant, only 4 component supported</span>
+00997 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a181">nglVariantArrayObjectATI</a>(drvInfo-&gt;Variants[CDriverGL::EVSPaletteSkinVariant], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::PaletteSkin]);
+00998 <span class="keywordflow">else</span> <a class="code" href="a04222.html#a131">nglVariantPointerEXT</a>(drvInfo-&gt;Variants[CDriverGL::EVSPaletteSkinVariant], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00999 }
+01000 <span class="keywordflow">break</span>;
+01001 <span class="keywordflow">case</span> CVertexBuffer::Empty: <span class="comment">// empty</span>
+01002 <a class="code" href="a04199.html#a12">nlstop</a>
+01003 <span class="keywordflow">break</span>;
+01004 <span class="keywordflow">case</span> CVertexBuffer::TexCoord0:
+01005 <span class="keywordflow">case</span> CVertexBuffer::TexCoord1:
+01006 <span class="keywordflow">case</span> CVertexBuffer::TexCoord2:
+01007 <span class="keywordflow">case</span> CVertexBuffer::TexCoord3:
+01008 <span class="keywordflow">case</span> CVertexBuffer::TexCoord4:
+01009 <span class="keywordflow">case</span> CVertexBuffer::TexCoord5:
+01010 <span class="keywordflow">case</span> CVertexBuffer::TexCoord6:
+01011 <span class="keywordflow">case</span> CVertexBuffer::TexCoord7:
+01012 {
+01013 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.clientActiveTextureARB(value - CVertexBuffer::TexCoord0);
+01014 <span class="keywordflow">if</span>(vb.ATIVBHardMode) <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_TEXTURE_COORD_ARRAY, NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ATIVertexObjectId, vb.ATIValueOffset[value]);
+01015 <span class="keywordflow">else</span> glTexCoordPointer(NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ValuePtr[value ]);
+01016 }
+01017 <span class="keywordflow">break</span>;
+01018 <span class="keywordflow">default</span>:
+01019 <a class="code" href="a04199.html#a12">nlstop</a>; <span class="comment">// invalid value</span>
+01020 <span class="keywordflow">break</span>;
+01021 }
+01022 }
+01023 <span class="keywordflow">else</span>
+01024 {
+01025 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArrayForEXTVertexShader(glIndex, <span class="keyword">false</span>, drvInfo-&gt;Variants);
+01026 }
+01027 }
+01028 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd21" doxytag="NL3D::CDriverGL::setupGlArraysForNVVertexProgram" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupGlArraysForNVVertexProgram </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>vb</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00838">838</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05650.html#l00561">NL3D::CDriverGLStates::enableColorArray()</a>, <a class="el" href="a05650.html#l00575">NL3D::CDriverGLStates::enableSecondaryColorArray()</a>, <a class="el" href="a05650.html#l00617">NL3D::CDriverGLStates::enableVertexAttribArray()</a>, <a class="el" href="a05653.html#l00634">GLType</a>, <a class="el" href="a05653.html#l00653">GLVertexAttribIndex</a>, <a class="el" href="a05645.html#l00396">nglSecondaryColorPointerEXT</a>, <a class="el" href="a05645.html#l00292">nglVertexAttribPointerNV</a>, <a class="el" href="a05653.html#l00615">NumCoordinatesType</a>, <a class="el" href="a05643.html#l00175">NL3D::CVertexBufferInfo::Type</a>, <a class="el" href="a05646.html#l00244">type</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05646.html#l01132">value</a>, <a class="el" href="a05643.html#l00179">NL3D::CVertexBufferInfo::ValuePtr</a>, <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>, and <a class="el" href="a05643.html#l00172">NL3D::CVertexBufferInfo::VertexSize</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01033">setupGlArrays()</a>.
+<p>
+<div class="fragment"><pre>00839 {
+00840 <a class="code" href="a04558.html#a11">uint32</a> flags= vb.VertexFormat;
+00841
+00842 <span class="comment">// For each value</span>
+00843 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a658">value</a>=0; <a class="code" href="a04223.html#a658">value</a>&lt;CVertexBuffer::NumValue; <a class="code" href="a04223.html#a658">value</a>++)
+00844 {
+00845 <span class="comment">// Flag</span>
+00846 <a class="code" href="a04558.html#a9">uint16</a> flag=1&lt;&lt;<a class="code" href="a04223.html#a658">value</a>;
+00847
+00848 <span class="comment">// Type</span>
+00849 CVertexBuffer::TType <a class="code" href="a04223.html#a581">type</a>=vb.Type[<a class="code" href="a04223.html#a658">value</a>];
+00850
+00851 <span class="comment">// Index</span>
+00852 <a class="code" href="a04558.html#a15">uint</a> glIndex=<a class="code" href="a02433.html#NL3D_1_1CDriverGLv3">GLVertexAttribIndex</a>[<a class="code" href="a04223.html#a658">value</a>];
+00853
+00854 <span class="comment">// Not setuped value and used</span>
+00855 <span class="keywordflow">if</span> (flags &amp; flag)
+00856 {
+00857 <span class="comment">/* OpenGL Driver Bug with VertexProgram, UChar4 type, and VertexArrayRange.</span>
+00858 <span class="comment"> Don't work and lead to very poor performance (1/10) (VAR is "disabled").</span>
+00859 <span class="comment"> */</span>
+00860 <span class="comment">// Test if can use glColorPointer() / glSecondaryColorPointerEXT() instead.</span>
+00861 <span class="keywordflow">if</span>( (glIndex==3 || glIndex==4) )
+00862 {
+00863 <span class="keywordflow">if</span>( <a class="code" href="a04223.html#a581">type</a> == CVertexBuffer::UChar4 )
+00864 {
+00865 <span class="comment">// Must disable VertexAttrib array.</span>
+00866 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArray(glIndex, <span class="keyword">false</span>);
+00867
+00868 <span class="comment">// Active this value, with standard gl calls</span>
+00869 <span class="keywordflow">if</span>(glIndex==3)
+00870 {
+00871 <span class="comment">// Primary color</span>
+00872 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">true</span>);
+00873 glColorPointer(4,GL_UNSIGNED_BYTE, vb.VertexSize, vb.ValuePtr[value]);
+00874 }
+00875 <span class="keywordflow">else</span>
+00876 {
+00877 <span class="comment">// Secondary color</span>
+00878 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableSecondaryColorArray(<span class="keyword">true</span>);
+00879 <a class="code" href="a04222.html#a170">nglSecondaryColorPointerEXT</a>(4,GL_UNSIGNED_BYTE, vb.VertexSize, vb.ValuePtr[value]);
+00880 }
+00881 }
+00882 <span class="keywordflow">else</span>
+00883 {
+00884 <span class="comment">// Can use normal VertexAttribArray.</span>
+00885 <span class="comment">// Disable first standard Color Array.</span>
+00886 <span class="keywordflow">if</span>(glIndex==3)
+00887 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00888 <span class="keywordflow">else</span>
+00889 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableSecondaryColorArray(<span class="keyword">false</span>);
+00890
+00891 <span class="comment">// Active this value</span>
+00892 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArray(glIndex, <span class="keyword">true</span>);
+00893 <a class="code" href="a04222.html#a77">nglVertexAttribPointerNV</a> (glIndex, NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00894 }
+00895 }
+00896 <span class="comment">// Else normal case, can't do anything for other values with UChar4....</span>
+00897 <span class="keywordflow">else</span>
+00898 {
+00899 <span class="comment">// Active this value</span>
+00900 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArray(glIndex, <span class="keyword">true</span>);
+00901 <a class="code" href="a04222.html#a77">nglVertexAttribPointerNV</a> (glIndex, NumCoordinatesType[type], GLType[type], vb.VertexSize, vb.ValuePtr[value]);
+00902 }
+00903 }
+00904 <span class="keywordflow">else</span>
+00905 {
+00906 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArray(glIndex, <span class="keyword">false</span>);
+00907 <span class="comment">/* OpenGL Driver Bug with VertexProgram, UChar4 type, and VertexArrayRange.</span>
+00908 <span class="comment"> Must also disable colorArray in standard gl calls.</span>
+00909 <span class="comment"> */</span>
+00910 <span class="keywordflow">if</span>(glIndex==3)
+00911 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00912 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(glIndex==4)
+00913 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableSecondaryColorArray(<span class="keyword">false</span>);
+00914 }
+00915 }
+00916 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd22" doxytag="NL3D::CDriverGL::setupGlArraysStd" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupGlArraysStd </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>vb</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Tools fct used by setupGLArrays.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00676">676</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00187">NL3D::CVertexBufferInfo::ATIValueOffset</a>, <a class="el" href="a05643.html#l00183">NL3D::CVertexBufferInfo::ATIVBHardMode</a>, <a class="el" href="a05643.html#l00185">NL3D::CVertexBufferInfo::ATIVertexObjectId</a>, <a class="el" href="a05650.html#l00561">NL3D::CDriverGLStates::enableColorArray()</a>, <a class="el" href="a05650.html#l00537">NL3D::CDriverGLStates::enableNormalArray()</a>, <a class="el" href="a05650.html#l00525">NL3D::CDriverGLStates::enableVertexArray()</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05645.html#l00412">nglArrayObjectATI</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05653.html#l00449">setupUVPtr()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05643.html#l00175">NL3D::CVertexBufferInfo::Type</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05643.html#l00176">NL3D::CVertexBufferInfo::UVRouting</a>, <a class="el" href="a05643.html#l00179">NL3D::CVertexBufferInfo::ValuePtr</a>, <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>, and <a class="el" href="a05643.html#l00172">NL3D::CVertexBufferInfo::VertexSize</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01033">setupGlArrays()</a>.
+<p>
+<div class="fragment"><pre>00677 {
+00678 <a class="code" href="a04558.html#a11">uint32</a> flags= vb.VertexFormat;
+00679 <span class="comment">// setup vertex ptr.</span>
+00680 <span class="comment">//-----------</span>
+00681 <a class="code" href="a04558.html#a15">uint</a> numVertexCoord = CVertexBuffer::NumComponentsType[vb.Type[CVertexBuffer::Position]];
+00682 <a class="code" href="a04199.html#a6">nlassert</a> (numVertexCoord &gt;= 2);
+00683
+00684 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexArray(<span class="keyword">true</span>);
+00685 <span class="comment">// Setup ATI VBHard or std ptr.</span>
+00686 <span class="keywordflow">if</span>(vb.ATIVBHardMode)
+00687 <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_VERTEX_ARRAY, numVertexCoord, GL_FLOAT, vb.VertexSize,
+00688 vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::Position]);
+00689 <span class="keywordflow">else</span>
+00690 glVertexPointer(numVertexCoord, GL_FLOAT, vb.VertexSize, vb.ValuePtr[CVertexBuffer::Position]);
+00691
+00692
+00693 <span class="comment">// setup normal ptr.</span>
+00694 <span class="comment">//-----------</span>
+00695 <span class="comment">// Check for normal param in vertex buffer</span>
+00696 <span class="keywordflow">if</span> (flags &amp; CVertexBuffer::NormalFlag)
+00697 {
+00698 <span class="comment">// Check type</span>
+00699 <a class="code" href="a04199.html#a6">nlassert</a> (vb.Type[CVertexBuffer::Normal]==CVertexBuffer::Float3);
+00700
+00701 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableNormalArray(<span class="keyword">true</span>);
+00702 <span class="comment">// Setup ATI VBHard or std ptr.</span>
+00703 <span class="keywordflow">if</span>(vb.ATIVBHardMode)
+00704 <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_NORMAL_ARRAY, 3, GL_FLOAT, vb.VertexSize,
+00705 vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::Normal]);
+00706 <span class="keywordflow">else</span>
+00707 glNormalPointer(GL_FLOAT, vb.VertexSize, vb.ValuePtr[CVertexBuffer::Normal]);
+00708 }
+00709 <span class="keywordflow">else</span>
+00710 {
+00711 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableNormalArray(<span class="keyword">false</span>);
+00712 }
+00713
+00714
+00715 <span class="comment">// Setup Color</span>
+00716 <span class="comment">//-----------</span>
+00717 <span class="comment">// Check for color param in vertex buffer</span>
+00718 <span class="keywordflow">if</span> (flags &amp; CVertexBuffer::PrimaryColorFlag)
+00719 {
+00720 <span class="comment">// Check type</span>
+00721 <a class="code" href="a04199.html#a6">nlassert</a> (vb.Type[CVertexBuffer::PrimaryColor]==CVertexBuffer::UChar4);
+00722
+00723 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">true</span>);
+00724 <span class="comment">// Setup ATI VBHard or std ptr.</span>
+00725 <span class="keywordflow">if</span>(vb.ATIVBHardMode)
+00726 <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_COLOR_ARRAY, 4, GL_UNSIGNED_BYTE, vb.VertexSize,
+00727 vb.ATIVertexObjectId, vb.ATIValueOffset[CVertexBuffer::PrimaryColor]);
+00728 <span class="keywordflow">else</span>
+00729 glColorPointer(4,GL_UNSIGNED_BYTE, vb.VertexSize, vb.ValuePtr[CVertexBuffer::PrimaryColor]);
+00730 }
+00731 <span class="keywordflow">else</span>
+00732 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00733
+00734
+00735 <span class="comment">// Setup Uvs</span>
+00736 <span class="comment">//-----------</span>
+00737 <span class="comment">// Get the routing</span>
+00738 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0; i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); i++)
+00739 {
+00740 <span class="comment">// normal behavior: each texture has its own UV.</span>
+00741 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd23">setupUVPtr</a>(i, vb, vb.UVRouting[i]);
+00742 }
+00743 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_4" doxytag="NL3D::CDriverGL::setupLightMapPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupLightMapPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00670">670</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00609">_FogEnabled</a>, <a class="el" href="a05643.html#l00748">_LastVB</a>, <a class="el" href="a05643.html#l00774">_LastVertexSetupIsLightMap</a>, <a class="el" href="a05643.html#l00771">_LightMapLastStageEnv</a>, <a class="el" href="a05643.html#l00768">_LightMapLUT</a>, <a class="el" href="a05969.html#l00610">NL3D::CMaterial::_LightMaps</a>, <a class="el" href="a05969.html#l00611">NL3D::CMaterial::_LightMapsMulx2</a>, <a class="el" href="a05643.html#l00775">_LightMapUVMap</a>, <a class="el" href="a05643.html#l00766">_NLightMapPass</a>, <a class="el" href="a05643.html#l00765">_NLightMapPerPass</a>, <a class="el" href="a05643.html#l00764">_NLightMaps</a>, <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a05652.html#l01159">activateTexEnvColor()</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05645.html#l00102">NL3D::CGlExtensions::ATIXTextureEnvCombine3</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a05650.html#l00252">NL3D::CDriverGLStates::blendFunc()</a>, <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a05650.html#l00150">NL3D::CDriverGLStates::enableBlend()</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a05969.html#l00278">NL3D::CMaterial::getBlend()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00661">GL_MODULATE_ADD_ATIX</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, <a class="el" href="a05650.html#l00414">NL3D::CDriverGLStates::setTexGenMode()</a>, <a class="el" href="a05653.html#l00449">setupUVPtr()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy3">TexEnvSpecialLightMap</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="a05648.html#l00554">setupPass()</a>.
+<p>
+<div class="fragment"><pre>00671 {
+00672 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+00673
+00674 <span class="comment">// No lightmap or all blacks??, just setup "black texture" for stage 0.</span>
+00675 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_11">_NLightMaps</a>==0)
+00676 {
+00677 ITexture *text= mat.getTexture(0);
+00678 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0,text);
+00679
+00680 <span class="comment">// setup std modulate env</span>
+00681 CMaterial::CTexEnv env;
+00682 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(0, env);
+00683 <span class="comment">// Since Lighting is disabled, as well as colorArray, must setup alpha.</span>
+00684 <span class="comment">// setup color to 0 =&gt; blackness</span>
+00685 glColor4ub(0, 0, 0, 255);
+00686
+00687 <span class="comment">// Setup gen tex off</span>
+00688 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+00689 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(0, 0);
+00690
+00691 <span class="comment">// And disable other stages.</span>
+00692 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> stage=1 ; stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() ; stage++)
+00693 {
+00694 <span class="comment">// disable texturing.</span>
+00695 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage, NULL);
+00696 }
+00697
+00698 <span class="keywordflow">return</span>;
+00699 }
+00700
+00701 <a class="code" href="a04199.html#a6">nlassert</a>(pass&lt;_NLightMapPass);
+00702
+00703
+00704 <span class="comment">// setup Texture Pass.</span>
+00705 <span class="comment">//=========================</span>
+00706 <a class="code" href="a04558.html#a15">uint</a> lmapId;
+00707 <a class="code" href="a04558.html#a15">uint</a> nstages;
+00708 lmapId= pass * <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_10">_NLightMapPerPass</a>; <span class="comment">// Nb lightmaps already processed</span>
+00709 <span class="comment">// N lightmaps for this pass, plus the texture.</span>
+00710 nstages= <a class="code" href="a04061.html#a0">std::min</a>(_NLightMapPerPass, _NLightMaps-lmapId) + 1;
+00711 <span class="comment">// setup all stages.</span>
+00712 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> stage= 0; stage&lt;(<a class="code" href="a04558.html#a15">uint</a>)<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); stage++)
+00713 {
+00714 <span class="comment">// if must setup a lightmap stage.</span>
+00715 <span class="keywordflow">if</span>(stage&lt;nstages-1)
+00716 {
+00717 <span class="comment">// setup lightMap.</span>
+00718 <a class="code" href="a04558.html#a15">uint</a> whichLightMap= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_7">_LightMapLUT</a>[lmapId];
+00719 <span class="comment">// get text and factor.</span>
+00720 ITexture *text = mat._LightMaps[whichLightMap].Texture;
+00721 <a class="code" href="a03337.html">CRGBA</a> lmapFactor = mat._LightMaps[whichLightMap].Factor;
+00722 lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a> = (<a class="code" href="a04558.html#a7">uint8</a>)((((<a class="code" href="a04558.html#a11">uint32</a>)lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>) * ((<a class="code" href="a04558.html#a11">uint32</a>)mat._LightMaps[whichLightMap].Color.R)) / 255);
+00723 lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a> = (<a class="code" href="a04558.html#a7">uint8</a>)((((<a class="code" href="a04558.html#a11">uint32</a>)lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>) * ((<a class="code" href="a04558.html#a11">uint32</a>)mat._LightMaps[whichLightMap].Color.G)) / 255);
+00724 lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a> = (<a class="code" href="a04558.html#a7">uint8</a>)((((<a class="code" href="a04558.html#a11">uint32</a>)lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>) * ((<a class="code" href="a04558.html#a11">uint32</a>)mat._LightMaps[whichLightMap].Color.B)) / 255);
+00725 lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a> = 255;
+00726
+00727 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage,text);
+00728
+00729 <span class="comment">// If texture not NULL, Change texture env fonction.</span>
+00730 <span class="comment">//==================================================</span>
+00731 <span class="keywordflow">if</span>(text)
+00732 {
+00733 <span class="keyword">static</span> CMaterial::CTexEnv stdEnv;
+00734
+00735 <span class="comment">// NB, !_Extensions.NVTextureEnvCombine4, nstages==2, so here always stage==0.</span>
+00736 <span class="keywordflow">if</span> (stage==0)
+00737 {
+00738 <span class="comment">// do not use consant color to blend lightmap, but incoming diffuse color, for stage0 only.</span>
+00739 <span class="comment">// (NB: lighting and vertexcolorArray are disabled here)</span>
+00740 glColor4ub(lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>, lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>, lmapFactor.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>, 255);
+00741
+00742 <span class="comment">// Leave stage as default env (Modulate with previous)</span>
+00743 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(stage, stdEnv);
+00744
+00745 <span class="comment">// Setup gen tex off</span>
+00746 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00747 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(stage, 0);
+00748 }
+00749 <span class="keywordflow">else</span>
+00750 {
+00751 <span class="comment">// Here, we are sure that texEnvCombine4 or texEnvCombine3 is OK.</span>
+00752 <a class="code" href="a04199.html#a6">nlassert</a>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvCombine3);
+00753
+00754 <span class="comment">// setup constant color with Lightmap factor.</span>
+00755 stdEnv.ConstantColor=lmapFactor;
+00756 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a>(stage, stdEnv);
+00757
+00758 <span class="comment">// Setup env for texture stage.</span>
+00759 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00760 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(stage, 0);
+00761
+00762 <span class="comment">// setup TexEnvCombine4 (ignore alpha part).</span>
+00763 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[stage] != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy3">TexEnvSpecialLightMap</a>)
+00764 {
+00765 <span class="comment">// TexEnv is special.</span>
+00766 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[stage] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy3">TexEnvSpecialLightMap</a>;
+00767
+00768 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4)
+00769 {
+00770 <span class="comment">// What we want to setup is Texture*Constant + Previous*1.</span>
+00771 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+00772
+00773 <span class="comment">// Operator.</span>
+00774 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD );
+00775 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_ADD );
+00776 <span class="comment">// Arg0.</span>
+00777 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE );
+00778 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+00779 <span class="comment">// Arg1.</span>
+00780 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_CONSTANT_EXT );
+00781 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+00782 <span class="comment">// Arg2.</span>
+00783 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PREVIOUS_EXT );
+00784 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+00785 <span class="comment">// Arg3.</span>
+00786 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO);
+00787 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_ONE_MINUS_SRC_COLOR);
+00788 }
+00789 <span class="keywordflow">else</span>
+00790 {
+00791 <span class="comment">// ATI EnvCombine3</span>
+00792 <span class="comment">// What we want to setup is Texture*Constant + Previous.</span>
+00793 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+00794 <span class="comment">// Operator.</span>
+00795 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE_ADD_ATIX);
+00796 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE_ADD_ATIX);
+00797 <span class="comment">// Arg0.</span>
+00798 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE );
+00799 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+00800 <span class="comment">// Arg1.</span>
+00801 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_CONSTANT_EXT );
+00802 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+00803 <span class="comment">// Arg2.</span>
+00804 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT );
+00805 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+00806 }
+00807 }
+00808 }
+00809
+00810 <span class="comment">// setup UV, with UV1. Only if needed (cached)</span>
+00811 <span class="keywordflow">if</span>( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a> || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a>[stage]!=1 )
+00812 {
+00813 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd23">setupUVPtr</a>(stage, _LastVB, 1);
+00814 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a>[stage]= 1;
+00815 }
+00816 }
+00817
+00818 <span class="comment">// Next lightmap.</span>
+00819 lmapId++;
+00820 }
+00821 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(stage&lt;nstages)
+00822 {
+00823 <span class="comment">// optim: do this only for first pass, and last pass only if stage!=nLMapPerPass </span>
+00824 <span class="comment">// (meaning not the same stage as preceding passes).</span>
+00825 <span class="keywordflow">if</span>(pass==0 || (pass==<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_9">_NLightMapPass</a>-1 &amp;&amp; stage!=_NLightMapPerPass))
+00826 {
+00827 <span class="comment">// activate the texture at last stage.</span>
+00828 ITexture *text= mat.getTexture(0);
+00829 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage,text);
+00830
+00831 <span class="comment">// setup ModulateRGB/ReplaceAlpha env. (this may disable possible COMBINE4_NV setup).</span>
+00832 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(stage, _LightMapLastStageEnv);
+00833
+00834 <span class="comment">// Setup gen tex off</span>
+00835 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(stage);
+00836 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(stage, 0);
+00837
+00838 <span class="comment">// setup UV, with UV0. Only if needed (cached)</span>
+00839 <span class="keywordflow">if</span>( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a> || <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a>[stage]!=0 )
+00840 {
+00841 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd23">setupUVPtr</a>(stage, _LastVB, 0);
+00842 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_8">_LightMapUVMap</a>[stage]= 0;
+00843 }
+00844
+00845 <span class="keywordflow">if</span> (mat._LightMapsMulx2)
+00846 {
+00847 <span class="comment">// Multiply x 2</span>
+00848 glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 2);
+00849 }
+00850 }
+00851 }
+00852 <span class="keywordflow">else</span>
+00853 {
+00854 <span class="comment">// else all other stages are disabled.</span>
+00855 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage,NULL);
+00856 }
+00857 }
+00858
+00859
+00860 <span class="comment">// setup blend / lighting.</span>
+00861 <span class="comment">//=========================</span>
+00862
+00863 <span class="comment">/* If multi-pass, then must setup a black Fog color for 1+ pass (just do it for the pass 1).</span>
+00864 <span class="comment"> This is because Transparency ONE/ONE is used.</span>
+00865 <span class="comment"> */</span>
+00866 <span class="keywordflow">if</span>(pass==1 &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLr7">_FogEnabled</a>)
+00867 {
+00868 <span class="keyword">static</span> GLfloat blackFog[4]= {0,0,0,0};
+00869 glFogfv(GL_FOG_COLOR, blackFog);
+00870 }
+00871
+00872 <span class="comment">// Blend is different if the material is blended or not</span>
+00873 <span class="keywordflow">if</span>( !mat.getBlend() )
+00874 {
+00875 <span class="comment">// Not blended, std case.</span>
+00876 <span class="keywordflow">if</span>(pass==0)
+00877 {
+00878 <span class="comment">// no transparency for first pass.</span>
+00879 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(<span class="keyword">false</span>);
+00880 }
+00881 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(pass==1)
+00882 {
+00883 <span class="comment">// setup an Additive transparency (only for pass 1, will be kept for successives pass).</span>
+00884 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(<span class="keyword">true</span>);
+00885 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.blendFunc(GL_ONE, GL_ONE);
+00886 }
+00887 }
+00888 <span class="keywordflow">else</span>
+00889 {
+00890 <span class="comment">/* 1st pass, std alphaBlend. 2nd pass, add to background. Demo:</span>
+00891 <span class="comment"> T: texture.</span>
+00892 <span class="comment"> l0: lightmap (or group of lightmap) of pass 0.</span>
+00893 <span class="comment"> l1: lightmap (or group of lightmap) of pass 1. (same thing with 2,3 etc....)</span>
+00894 <span class="comment"> B: Background.</span>
+00895 <span class="comment"> A: Alpha of texture.</span>
+00896 <span class="comment"></span>
+00897 <span class="comment"> finalResult= T*(l0+l1) * A + B * (1-A).</span>
+00898 <span class="comment"></span>
+00899 <span class="comment"> We get it in two pass:</span>
+00900 <span class="comment"> fint= T*l0 * A + B * (1-A).</span>
+00901 <span class="comment"> finalResult= T*l1 * A + fint = T*l1 * A + T*l0 * A + B * (1-A)=</span>
+00902 <span class="comment"> T* (l0+l1) * A + B * (1-A)</span>
+00903 <span class="comment"> */</span>
+00904 <span class="keywordflow">if</span>(pass==0)
+00905 {
+00906 <span class="comment">// no transparency for first pass.</span>
+00907 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(<span class="keyword">true</span>);
+00908 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+00909 }
+00910 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(pass==1)
+00911 {
+00912 <span class="comment">// setup an Additive transparency (only for pass 1, will be kept for successives pass).</span>
+00913 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(<span class="keyword">true</span>);
+00914 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.blendFunc(GL_SRC_ALPHA, GL_ONE);
+00915 }
+00916 }
+00917
+00918 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa87" doxytag="NL3D::CDriverGL::setupMaterial" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupMaterial </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mat</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+For objects with caustics, setup the first texture (which actually is the one from the material).
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera67">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05648.html#l00257">257</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00654">_CurrentMaterialSupportedShader</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00609">_FogEnabled</a>, <a class="el" href="a05643.html#l00774">_LastVertexSetupIsLightMap</a>, <a class="el" href="a05969.html#l00610">NL3D::CMaterial::_LightMaps</a>, <a class="el" href="a05643.html#l00680">_MaterialAllTextureTouchedFlag</a>, <a class="el" href="a05643.html#l00918">_NbSetupMaterialCall</a>, <a class="el" href="a05643.html#l00590">_OODeltaZ</a>, <a class="el" href="a05969.html#l00590">NL3D::CMaterial::_TexAddrMode</a>, <a class="el" href="a05969.html#l00589">NL3D::CMaterial::_Textures</a>, <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00284">NL3D::CDriverGLStates::alphaFunc()</a>, <a class="el" href="a05643.html#l00150">NL3D::CShaderGL::Ambient</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a05650.html#l00252">NL3D::CDriverGLStates::blendFunc()</a>, <a class="el" href="a05969.html#l00616">NL3D::CMaterial::clearTouched()</a>, <a class="el" href="a05648.html#l00036">NL3D::convBlend()</a>, <a class="el" href="a05648.html#l00071">NL3D::convColor()</a>, <a class="el" href="a05648.html#l00055">NL3D::convZFunction()</a>, <a class="el" href="a05650.html#l00268">NL3D::CDriverGLStates::depthFunc()</a>, <a class="el" href="a05643.html#l00151">NL3D::CShaderGL::Diffuse</a>, <a class="el" href="a05648.html#l00197">disableUserTextureMatrix()</a>, <a class="el" href="a05643.html#l00146">NL3D::CShaderGL::DstBlend</a>, <a class="el" href="a05643.html#l00149">NL3D::CShaderGL::Emissive</a>, <a class="el" href="a05650.html#l00188">NL3D::CDriverGLStates::enableAlphaTest()</a>, <a class="el" href="a05650.html#l00150">NL3D::CDriverGLStates::enableBlend()</a>, <a class="el" href="a05650.html#l00169">NL3D::CDriverGLStates::enableCullFace()</a>, <a class="el" href="a05650.html#l00695">NL3D::CDriverGLStates::enableFog()</a>, <a class="el" href="a05650.html#l00212">NL3D::CDriverGLStates::enableLighting()</a>, <a class="el" href="a05642.html#l02409">enableNVTextureShader()</a>, <a class="el" href="a05650.html#l00231">NL3D::CDriverGLStates::enableZWrite()</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a05969.html#l00320">NL3D::CMaterial::getAlphaTestThreshold()</a>, <a class="el" href="a05969.html#l00378">NL3D::CMaterial::getAmbient()</a>, <a class="el" href="a05969.html#l00376">NL3D::CMaterial::getColor()</a>, <a class="el" href="a05969.html#l00380">NL3D::CMaterial::getDiffuse()</a>, <a class="el" href="a05969.html#l00280">NL3D::CMaterial::getDstBlend()</a>, <a class="el" href="a05969.html#l00377">NL3D::CMaterial::getEmissive()</a>, <a class="el" href="a05969.html#l00614">NL3D::CMaterial::getFlags()</a>, <a class="el" href="a06340.html#l00075">NLMISC::CRGBA::getPacked()</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05969.html#l00383">NL3D::CMaterial::getShininess()</a>, <a class="el" href="a05969.html#l00382">NL3D::CMaterial::getSpecular()</a>, <a class="el" href="a05969.html#l00279">NL3D::CMaterial::getSrcBlend()</a>, <a class="el" href="a05648.html#l00221">getSupportedShader()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05969.html#l00615">NL3D::CMaterial::getTouched()</a>, <a class="el" href="a05969.html#l00336">NL3D::CMaterial::getZBias()</a>, <a class="el" href="a05969.html#l00334">NL3D::CMaterial::getZFunc()</a>, <a class="el" href="a05969.html#l00079">NL3D::IDRV_MAT_ALPHA_TEST</a>, <a class="el" href="a05969.html#l00077">NL3D::IDRV_MAT_BLEND</a>, <a class="el" href="a05969.html#l00078">NL3D::IDRV_MAT_DOUBLE_SIDED</a>, <a class="el" href="a05969.html#l00074">NL3D::IDRV_MAT_LIGHTING</a>, <a class="el" href="a05969.html#l00080">NL3D::IDRV_MAT_TEX_ADDR</a>, <a class="el" href="a05969.html#l00072">NL3D::IDRV_MAT_ZWRITE</a>, <a class="el" href="a05969.html#l00067">NL3D::IDRV_TOUCHED_ALL</a>, <a class="el" href="a05969.html#l00049">NL3D::IDRV_TOUCHED_BLENDFUNC</a>, <a class="el" href="a05969.html#l00055">NL3D::IDRV_TOUCHED_LIGHTING</a>, <a class="el" href="a05969.html#l00051">NL3D::IDRV_TOUCHED_SHADER</a>, <a class="el" href="a05969.html#l00052">NL3D::IDRV_TOUCHED_ZFUNC</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05969.html#l00374">NL3D::CMaterial::isLightedVertexColor()</a>, <a class="el" href="a06369.html#l00056">NL3D::ItShaderPtrList</a>, <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>, <a class="el" href="a05643.html#l00155">NL3D::CShaderGL::PackedAmbient</a>, <a class="el" href="a05643.html#l00156">NL3D::CShaderGL::PackedDiffuse</a>, <a class="el" href="a05643.html#l00154">NL3D::CShaderGL::PackedEmissive</a>, <a class="el" href="a05643.html#l00157">NL3D::CShaderGL::PackedSpecular</a>, <a class="el" href="a05969.html#l00592">NL3D::CMaterial::pShader</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, <a class="el" href="a05650.html#l00311">NL3D::CDriverGLStates::setAmbient()</a>, <a class="el" href="a05650.html#l00400">NL3D::CDriverGLStates::setDepthRange()</a>, <a class="el" href="a05650.html#l00323">NL3D::CDriverGLStates::setDiffuse()</a>, <a class="el" href="a05650.html#l00299">NL3D::CDriverGLStates::setEmissive()</a>, <a class="el" href="a05650.html#l00347">NL3D::CDriverGLStates::setShininess()</a>, <a class="el" href="a05650.html#l00335">NL3D::CDriverGLStates::setSpecular()</a>, <a class="el" href="a05648.html#l00117">setTextureEnvFunction()</a>, <a class="el" href="a05648.html#l00238">setTextureShaders()</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, <a class="el" href="a05648.html#l00160">setupUserTextureMatrix()</a>, <a class="el" href="a05650.html#l00370">NL3D::CDriverGLStates::setVertexColorLighted()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05643.html#l00152">NL3D::CShaderGL::Specular</a>, <a class="el" href="a05643.html#l00145">NL3D::CShaderGL::SrcBlend</a>, <a class="el" href="a05643.html#l00160">NL3D::CShaderGL::SupportedShader</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05643.html#l00147">NL3D::CShaderGL::ZComp</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, and <a class="el" href="a05653.html#l00187">renderTriangles()</a>.
+<p>
+<div class="fragment"><pre>00258 {
+00259 CShaderGL* pShader;
+00260 GLenum glenum;
+00261 <a class="code" href="a04558.html#a11">uint32</a> touched=mat.getTouched();
+00262 <a class="code" href="a04558.html#a14">sint</a> stage;
+00263
+00264
+00265 <span class="comment">// profile.</span>
+00266 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_4">_NbSetupMaterialCall</a>++;
+00267
+00268
+00269 <span class="comment">// 0. Retrieve/Create driver shader.</span>
+00270 <span class="comment">//==================================</span>
+00271 <span class="keywordflow">if</span> (!mat.pShader)
+00272 {
+00273 <span class="comment">// insert into driver list. (so it is deleted when driver is deleted).</span>
+00274 <a class="code" href="a05363.html#a287">ItShaderPtrList</a> it= <a class="code" href="a02434.html#NL3D_1_1IDriverp1">_Shaders</a>.insert(<a class="code" href="a02434.html#NL3D_1_1IDriverp1">_Shaders</a>.end());
+00275 <span class="comment">// create and set iterator, for future deletion.</span>
+00276 *it= mat.pShader= <span class="keyword">new</span> CShaderGL(<span class="keyword">this</span>, it);
+00277
+00278 <span class="comment">// Must create all OpenGL shader states.</span>
+00279 touched= <a class="code" href="a05363.html#a98">IDRV_TOUCHED_ALL</a>;
+00280 }
+00281 pShader=static_cast&lt;CShaderGL*&gt;((<a class="code" href="a02434.html#NL3D_1_1IDrivern2">IShader</a>*)(mat.pShader));
+00282
+00283
+00284 <span class="comment">// 1. Setup modified fields of material.</span>
+00285 <span class="comment">//=====================================</span>
+00286 <span class="keywordflow">if</span>( touched )
+00287 {
+00288 <span class="comment">/* Exception: if only Textures are modified in the material, no need to "Bind OpenGL States", or even to test</span>
+00289 <span class="comment"> for change, because textures are activated alone, see below.</span>
+00290 <span class="comment"> No problem with delete/new problem (see below), because in this case, IDRV_TOUCHED_ALL is set (see above).</span>
+00291 <span class="comment"> */</span>
+00292 <span class="comment">// If any flag is set (but a flag of texture)</span>
+00293 <span class="keywordflow">if</span>( touched &amp; (~<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_11">_MaterialAllTextureTouchedFlag</a>) )
+00294 {
+00295 <span class="comment">// Convert Material to driver shader.</span>
+00296 <span class="keywordflow">if</span> (touched &amp; <a class="code" href="a05363.html#a84">IDRV_TOUCHED_BLENDFUNC</a>)
+00297 {
+00298 <a class="code" href="a05363.html#a403">convBlend</a>( mat.getSrcBlend(),glenum );
+00299 pShader-&gt;SrcBlend=glenum;
+00300 <a class="code" href="a05363.html#a403">convBlend</a>( mat.getDstBlend(),glenum );
+00301 pShader-&gt;DstBlend=glenum;
+00302 }
+00303 <span class="keywordflow">if</span> (touched &amp; <a class="code" href="a05363.html#a87">IDRV_TOUCHED_ZFUNC</a>)
+00304 {
+00305 <a class="code" href="a05363.html#a404">convZFunction</a>( mat.getZFunc(),glenum);
+00306 pShader-&gt;ZComp= glenum;
+00307 }
+00308 <span class="keywordflow">if</span> (touched &amp; <a class="code" href="a05363.html#a90">IDRV_TOUCHED_LIGHTING</a>)
+00309 {
+00310 <a class="code" href="a05363.html#a405">convColor</a>(mat.getEmissive(), pShader-&gt;Emissive);
+00311 <a class="code" href="a05363.html#a405">convColor</a>(mat.getAmbient(), pShader-&gt;Ambient);
+00312 <a class="code" href="a05363.html#a405">convColor</a>(mat.getDiffuse(), pShader-&gt;Diffuse);
+00313 <a class="code" href="a05363.html#a405">convColor</a>(mat.getSpecular(), pShader-&gt;Specular);
+00314 pShader-&gt;PackedEmissive= mat.getEmissive().getPacked();
+00315 pShader-&gt;PackedAmbient= mat.getAmbient().getPacked();
+00316 pShader-&gt;PackedDiffuse= mat.getDiffuse().getPacked();
+00317 pShader-&gt;PackedSpecular= mat.getSpecular().getPacked();
+00318 }
+00319 <span class="keywordflow">if</span> (touched &amp; <a class="code" href="a05363.html#a86">IDRV_TOUCHED_SHADER</a>)
+00320 {
+00321 <span class="comment">// Get shader. Fallback to other shader if not supported.</span>
+00322 pShader-&gt;SupportedShader= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz107_0">getSupportedShader</a>(mat.getShader());
+00323 }
+00324
+00325
+00326 <span class="comment">// Since modified, must rebind all openGL states. And do this also for the delete/new problem.</span>
+00327 <span class="comment">/* If an old material is deleted, _CurrentMaterial is invalid. But this is grave only if a new </span>
+00328 <span class="comment"> material is created, with the same pointer (bad luck). Since an newly allocated material always </span>
+00329 <span class="comment"> pass here before use, we are sure to avoid any problems.</span>
+00330 <span class="comment"> */</span>
+00331 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>= NULL;
+00332 }
+00333
+00334 <span class="comment">// Optimize: reset all flags at the end.</span>
+00335 mat.clearTouched(0xFFFFFFFF);
+00336 }
+00337
+00338
+00339 <span class="comment">// Now we can get the supported shader from the cache.</span>
+00340 CMaterial::TShader matShader = pShader-&gt;SupportedShader;
+00341
+00342 <span class="comment">// setup the global</span>
+00343 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_4">_CurrentMaterialSupportedShader</a>= matShader;
+00344
+00345
+00346 <span class="comment">// 2. Setup / Bind Textures.</span>
+00347 <span class="comment">//==========================</span>
+00348 <span class="comment">// Must setup textures each frame. (need to test if touched).</span>
+00349 <span class="comment">// Must separate texture setup and texture activation in 2 "for"...</span>
+00350 <span class="comment">// because setupTexture() may disable all stage.</span>
+00351 <span class="keywordflow">if</span> (matShader != CMaterial::Water)
+00352 {
+00353 <span class="keywordflow">for</span>(stage=0 ; stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() ; stage++)
+00354 {
+00355 ITexture *text= mat.getTexture(stage);
+00356 <span class="keywordflow">if</span> (text != NULL &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*text))
+00357 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
+00358 }
+00359 }
+00360 <span class="comment">// Here, for Lightmap materials, setup the lightmaps.</span>
+00361 <span class="keywordflow">if</span>(matShader == CMaterial::LightMap)
+00362 {
+00363 <span class="keywordflow">for</span>(stage=0 ; stage&lt;(<a class="code" href="a04558.html#a14">sint</a>)mat._LightMaps.size() ; stage++)
+00364 {
+00365 ITexture *text= mat._LightMaps[stage].Texture;
+00366 <span class="keywordflow">if</span> (text != NULL &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*text))
+00367 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
+00368 }
+00369 }
+00370
+00371 <span class="comment">// Here, for caustic shader, setup the lightmaps</span>
+00372 <span class="comment">/*if (matShader == CMaterial::Caustics)</span>
+00373 <span class="comment"> {</span>
+00374 <span class="comment"> if (mat.getTexture(stage))</span>
+00375 <span class="comment"> }*/</span>
+00376
+00377
+00378 <span class="comment">// Activate the textures.</span>
+00379 <span class="comment">// Do not do it for Lightmap and per pixel lighting , because done in multipass in a very special fashion.</span>
+00380 <span class="comment">// This avoid the useless multiple change of texture states per lightmapped object.</span>
+00381 <span class="comment">// Don't do it also for Specular because the EnvFunction and the TexGen may be special.</span>
+00382 <span class="keywordflow">if</span>(matShader != CMaterial::LightMap
+00383 &amp;&amp; matShader != CMaterial::PerPixelLighting
+00384 <span class="comment">/* &amp;&amp; matShader != CMaterial::Caustics */</span>
+00385 &amp;&amp; matShader != CMaterial::Cloud
+00386 &amp;&amp; matShader != CMaterial::Water
+00387 &amp;&amp; matShader != CMaterial::Specular
+00388 )
+00389 {
+00390 <span class="keywordflow">for</span>(stage=0 ; stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() ; stage++)
+00391 {
+00392 ITexture *text= mat.getTexture(stage);
+00393
+00394 <span class="comment">// activate the texture, or disable texturing if NULL.</span>
+00395 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage,text);
+00396
+00397 <span class="comment">// If texture not NULL, Change texture env fonction.</span>
+00398 <span class="comment">//==================================================</span>
+00399 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa86">setTextureEnvFunction</a>(stage, mat);
+00400 }
+00401 }
+00402
+00403
+00404 <span class="comment">// 3. Bind OpenGL States.</span>
+00405 <span class="comment">//=======================</span>
+00406 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>!=&amp;mat)
+00407 {
+00408 <span class="comment">// Bind Blend Part.</span>
+00409 <span class="comment">//=================</span>
+00410 <span class="keywordtype">bool</span> <a class="code" href="a05378.html#a253">blend</a> = (mat.getFlags()&amp;<a class="code" href="a05363.html#a106">IDRV_MAT_BLEND</a>)!=0;
+00411 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(blend);
+00412 <span class="keywordflow">if</span>(<a class="code" href="a05378.html#a253">blend</a>)
+00413 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.blendFunc(pShader-&gt;SrcBlend, pShader-&gt;DstBlend);
+00414
+00415 <span class="comment">// Double Sided Part.</span>
+00416 <span class="comment">//===================</span>
+00417 <span class="comment">// NB: inverse state: DoubleSided &lt;=&gt; !CullFace.</span>
+00418 <a class="code" href="a04558.html#a11">uint32</a> twoSided= mat.getFlags()&amp;<a class="code" href="a05363.html#a107">IDRV_MAT_DOUBLE_SIDED</a>;
+00419 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableCullFace( twoSided==0 );
+00420
+00421
+00422 <span class="comment">// Alpha Test Part.</span>
+00423 <span class="comment">//=================</span>
+00424 <a class="code" href="a04558.html#a11">uint32</a> alphaTest= mat.getFlags()&amp;<a class="code" href="a05363.html#a108">IDRV_MAT_ALPHA_TEST</a>;
+00425 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableAlphaTest(alphaTest);
+00426 <span class="keywordflow">if</span>(alphaTest)
+00427 {
+00428 <span class="comment">// setup alphaTest threshold.</span>
+00429 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.alphaFunc(mat.getAlphaTestThreshold());
+00430 }
+00431
+00432
+00433 <span class="comment">// Bind ZBuffer Part.</span>
+00434 <span class="comment">//===================</span>
+00435 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableZWrite(mat.getFlags()&amp;<a class="code" href="a05363.html#a101">IDRV_MAT_ZWRITE</a>);
+00436 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.depthFunc(pShader-&gt;ZComp);
+00437 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setDepthRange (mat.getZBias () * <a class="code" href="a02433.html#NL3D_1_1CDriverGLr27">_OODeltaZ</a>);
+00438
+00439
+00440 <span class="comment">// Color-Lighting Part.</span>
+00441 <span class="comment">//=====================</span>
+00442
+00443 <span class="comment">// Light Part.</span>
+00444 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableLighting(mat.getFlags()&amp;<a class="code" href="a05363.html#a103">IDRV_MAT_LIGHTING</a>);
+00445 <span class="keywordflow">if</span>(mat.getFlags()&amp;<a class="code" href="a05363.html#a103">IDRV_MAT_LIGHTING</a>)
+00446 {
+00447 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setEmissive(pShader-&gt;PackedEmissive, pShader-&gt;Emissive);
+00448 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setAmbient(pShader-&gt;PackedAmbient, pShader-&gt;Ambient);
+00449 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setDiffuse(pShader-&gt;PackedDiffuse, pShader-&gt;Diffuse);
+00450 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setSpecular(pShader-&gt;PackedSpecular, pShader-&gt;Specular);
+00451 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setShininess(mat.getShininess());
+00452 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setVertexColorLighted(mat.isLightedVertexColor ());
+00453 }
+00454 <span class="keywordflow">else</span>
+00455 {
+00456
+00457 <span class="comment">// Color unlit part.</span>
+00458 <a class="code" href="a03337.html">CRGBA</a> col= mat.getColor();
+00459 glColor4ub(col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo3">R</a>, col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo2">G</a>, col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo1">B</a>, col.<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>);
+00460 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setVertexColorLighted(<span class="keyword">false</span>);
+00461 }
+00462
+00463
+00464 <span class="comment">// Fog Part.</span>
+00465 <span class="comment">//=================</span>
+00466
+00467 <span class="comment">// Disable fog if dest blend is ONE</span>
+00468 <span class="keywordflow">if</span> (<a class="code" href="a05378.html#a253">blend</a> &amp;&amp; (pShader-&gt;DstBlend == GL_ONE))
+00469 {
+00470 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableFog(<span class="keyword">false</span>);
+00471 }
+00472 <span class="keywordflow">else</span>
+00473 {
+00474 <span class="comment">// Restaure fog state to its current value</span>
+00475 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableFog(_FogEnabled);
+00476 }
+00477
+00478 <span class="comment">// Texture shader part.</span>
+00479 <span class="comment">//=====================</span>
+00480
+00481 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader)
+00482 {
+00483 <span class="keywordflow">if</span> (matShader == CMaterial::Normal)
+00484 {
+00485 <span class="comment">// Texture addressing modes (support only via NVTextureShader for now)</span>
+00486 <span class="comment">//=================================================================== </span>
+00487 <span class="keywordflow">if</span> ( mat.getFlags() &amp; <a class="code" href="a05363.html#a109">IDRV_MAT_TEX_ADDR</a> )
+00488 {
+00489 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd8">enableNVTextureShader</a>(<span class="keyword">true</span>);
+00490 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_2">setTextureShaders</a>(&amp;mat._TexAddrMode[0], &amp;mat._Textures[0]);
+00491 }
+00492 <span class="keywordflow">else</span>
+00493 {
+00494 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd8">enableNVTextureShader</a>(<span class="keyword">false</span>);
+00495 }
+00496 }
+00497 <span class="keywordflow">else</span>
+00498 {
+00499 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd8">enableNVTextureShader</a>(<span class="keyword">false</span>);
+00500 }
+00501 }
+00502
+00503 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>=&amp;mat;
+00504 }
+00505
+00506
+00507 <span class="comment">// 4. Misc</span>
+00508 <span class="comment">//=====================================</span>
+00509
+00510 <span class="comment">// If !lightMap and prec material was lihgtmap =&gt; vertex setup is dirty!</span>
+00511 <span class="keywordflow">if</span>( matShader != CMaterial::LightMap &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_5">_LastVertexSetupIsLightMap</a> )
+00512 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_3">resetLightMapVertexSetup</a>();
+00513
+00514 <span class="comment">// Textures user matrix</span>
+00515 <span class="keywordflow">if</span> (matShader == CMaterial::Normal)
+00516 {
+00517 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa92">setupUserTextureMatrix</a>((<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(), mat);
+00518 }
+00519 <span class="keywordflow">else</span> <span class="comment">// deactivate texture matrix</span>
+00520 {
+00521 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa14">disableUserTextureMatrix</a>();
+00522 }
+00523
+00524 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00525 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz80_2" doxytag="NL3D::CDriverGL::setupMaterialPass" ></a><p>
+<table class="mdTable" 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 void NL3D::CDriverGL::setupMaterialPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+active the ith pass of this material.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz139_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05643.html#l00508">508</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+References <a class="el" href="a05648.html#l00554">setupPass()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00508 { <a class="code" href="a02433.html#NL3D_1_1CDriverGLz87_2">setupPass</a>(pass); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa88" doxytag="NL3D::CDriverGL::setupModelMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupModelMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02851.html">CMatrix</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mtx</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup the model matrix.<p>
+NB: you must <a class="el" href="a02433.html#NL3D_1_1CDriverGLa88">setupModelMatrix()</a> AFTER <a class="el" href="a02433.html#NL3D_1_1CDriverGLa93">setupViewMatrix()</a>, or else undefined results.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera68">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05649.html#l00124">124</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00606">_ModelViewMatrix</a>, <a class="el" href="a05643.html#l00578">_ModelViewMatrixDirty</a>, <a class="el" href="a05643.html#l00919">_NbSetupModelMatrixCall</a>, <a class="el" href="a05643.html#l00600">_PZBCameraPos</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05643.html#l00596">_ViewMtx</a>, <a class="el" href="a05973.html#l00198">NLMISC::CMatrix::getPos()</a>, and <a class="el" href="a05972.html#l00267">NLMISC::CMatrix::setPos()</a>.
+<p>
+<div class="fragment"><pre>00125 {
+00126 <span class="comment">// profiling</span>
+00127 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_5">_NbSetupModelMatrixCall</a>++;
+00128
+00129
+00130 <span class="comment">// Dirt flags.</span>
+00131 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a>= <span class="keyword">true</span>;
+00132 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">true</span>;
+00133
+00134
+00135 <span class="comment">// Put the matrix in the opengl eye space, and store it.</span>
+00136 CMatrix mat= mtx;
+00137 <span class="comment">// remove first the _PZBCameraPos</span>
+00138 mat.setPos(mtx.getPos() - <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>);
+00139 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr24">_ModelViewMatrix</a>= <a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>*mat;
+00140 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz87_2" doxytag="NL3D::CDriverGL::setupPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+active the ith pass of this material.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00554">554</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00654">_CurrentMaterialSupportedShader</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>, <a class="el" href="a05648.html#l02155">setupWaterPass()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, <a class="el" href="a05653.html#l00187">renderTriangles()</a>, and <a class="el" href="a05643.html#l00508">setupMaterialPass()</a>.
+<p>
+<div class="fragment"><pre>00555 {
+00556 <span class="keywordflow">switch</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_4">_CurrentMaterialSupportedShader</a>)
+00557 {
+00558 <span class="keywordflow">case</span> CMaterial::LightMap:
+00559 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz89_4">setupLightMapPass</a> (pass);
+00560 <span class="keywordflow">break</span>;
+00561 <span class="keywordflow">case</span> CMaterial::Specular:
+00562 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_4">setupSpecularPass</a> (pass);
+00563 <span class="keywordflow">break</span>;
+00564 <span class="keywordflow">case</span> CMaterial::Water:
+00565 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz93_2">setupWaterPass</a>(pass);
+00566 <span class="keywordflow">break</span>;
+00567 <span class="keywordflow">case</span> CMaterial::PerPixelLighting:
+00568 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_9">setupPPLPass</a> (pass);
+00569 <span class="keywordflow">break</span>;
+00570 <span class="keywordflow">case</span> CMaterial::PerPixelLightingNoSpec:
+00571 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_8">setupPPLNoSpecPass</a> (pass);
+00572 <span class="keywordflow">break</span>;
+00573 <span class="comment">/* case CMaterial::Caustics:</span>
+00574 <span class="comment"> case CMaterial::Caustics:</span>
+00575 <span class="comment"> break; */</span>
+00576 <span class="keywordflow">case</span> CMaterial::Cloud:
+00577 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz98_2">setupCloudPass</a> (pass);
+00578 <span class="keywordflow">break</span>;
+00579
+00580 <span class="comment">// All others materials do not require multi pass.</span>
+00581 <span class="keywordflow">default</span>: <span class="keywordflow">return</span>;
+00582 }
+00583 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_8" doxytag="NL3D::CDriverGL::setupPPLNoSpecPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupPPLNoSpecPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01561">1561</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00631">_PPLightDiffuseColor</a>, <a class="el" href="a05652.html#l01159">activateTexEnvColor()</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a05648.html#l01266">getSpecularCubeMap()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00661">GL_MODULATE_ADD_ATIX</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00554">setupPass()</a>.
+<p>
+<div class="fragment"><pre>01562 {
+01563 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+01564
+01565 <a class="code" href="a04199.html#a6">nlassert</a>(pass == 0);
+01566
+01567 ITexture *tex0 = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_7">getSpecularCubeMap</a>(1);
+01568 <span class="keywordflow">if</span> (tex0) <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex0);
+01569
+01570 <span class="keywordflow">if</span> (mat.getTexture(0)) <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*mat.getTexture(0));
+01571
+01572 <span class="comment">// tex coord 0 = texture coordinates</span>
+01573 <span class="comment">// tex coord 1 = normal in tangent space </span>
+01574
+01575 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0, tex0);
+01576 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(1, mat.getTexture(0));
+01577
+01578
+01579 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 2; k &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); ++k)
+01580 {
+01581 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(k, NULL);
+01582 }
+01583
+01584 <span class="comment">// setup the tex envs</span>
+01585
+01586
+01587 <span class="comment">// Stage 0 is rgb = DiffuseCubeMap * LightColor + DiffuseGouraud * 1 (TODO : EnvCombine3)</span>
+01588 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[0] != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>)
+01589 {
+01590 <span class="comment">// TexEnv is special.</span>
+01591 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[0] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>;
+01592 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+01593
+01594 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4)
+01595 {
+01596 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+01597
+01598 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);
+01599 <span class="comment">// Arg0 = Diffuse read in cube map alpha</span>
+01600 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
+01601 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01602 <span class="comment">// Arg1 = Light color</span>
+01603 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_CONSTANT_EXT);
+01604 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01605 <span class="comment">// Arg2 = Primary color (other light diffuse and </span>
+01606 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PRIMARY_COLOR_EXT);
+01607 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01608 <span class="comment">// Arg3 = White (= ~ Black)</span>
+01609 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO);
+01610 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_ONE_MINUS_SRC_COLOR);
+01611 }
+01612 <span class="keywordflow">else</span>
+01613 {
+01614 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01615
+01616 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE_ADD_ATIX);
+01617 <span class="comment">// Arg0 = Diffuse read in cube map alpha</span>
+01618 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
+01619 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01620 <span class="comment">// Arg2 = Light color</span>
+01621 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_CONSTANT_EXT);
+01622 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01623 <span class="comment">// Arg1 = Primary color (other light diffuse and </span>
+01624 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PRIMARY_COLOR_EXT);
+01625 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01626 }
+01627 }
+01628 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a>(0, _PPLightDiffuseColor);
+01629
+01630 <span class="comment">// Stage 1 </span>
+01631 <span class="keyword">static</span> CMaterial::CTexEnv env;
+01632 env.Env.SrcArg1Alpha = CMaterial::Diffuse;
+01633 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(1, env);
+01634
+01635 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_9" doxytag="NL3D::CDriverGL::setupPPLPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupPPLPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01376">1376</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00631">_PPLightDiffuseColor</a>, <a class="el" href="a05643.html#l00632">_PPLightSpecularColor</a>, <a class="el" href="a05652.html#l01159">activateTexEnvColor()</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a05969.html#l00383">NL3D::CMaterial::getShininess()</a>, <a class="el" href="a05648.html#l01266">getSpecularCubeMap()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00661">GL_MODULATE_ADD_ATIX</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy5">TexEnvSpecialPPLStage2</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00554">setupPass()</a>.
+<p>
+<div class="fragment"><pre>01377 {
+01378 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+01379
+01380 <a class="code" href="a04199.html#a6">nlassert</a>(pass == 0);
+01381
+01382 <span class="comment">/* ITexture *tex0 = getSpecularCubeMap(1);</span>
+01383 <span class="comment"> if (tex0) setupTexture(*tex0);</span>
+01384 <span class="comment"> activateTexture(0, tex0);</span>
+01385 <span class="comment"> </span>
+01386 <span class="comment"></span>
+01387 <span class="comment"> static CMaterial::CTexEnv env;</span>
+01388 <span class="comment"> env.Env.SrcArg0Alpha = CMaterial::Diffuse; </span>
+01389 <span class="comment"> env.Env.SrcArg1Alpha = CMaterial::Constant; </span>
+01390 <span class="comment"> env.Env.SrcArg0RGB = CMaterial::Diffuse; </span>
+01391 <span class="comment"> env.Env.SrcArg1RGB = CMaterial::Constant;</span>
+01392 <span class="comment"> env.Env.OpRGB = CMaterial::Replace;</span>
+01393 <span class="comment"> env.Env.OpAlpha = CMaterial::Replace;</span>
+01394 <span class="comment"> activateTexEnvMode(0, env);</span>
+01395 <span class="comment"></span>
+01396 <span class="comment"> return;*/</span>
+01397
+01398 ITexture *tex0 = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_7">getSpecularCubeMap</a>(1);
+01399 <span class="keywordflow">if</span> (tex0) <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex0);
+01400 ITexture *tex2 = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz95_7">getSpecularCubeMap</a>((<a class="code" href="a04558.html#a15">uint</a>) mat.getShininess());
+01401 <span class="keywordflow">if</span> (tex2) <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex2);
+01402 <span class="keywordflow">if</span> (mat.getTexture(0)) <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*mat.getTexture(0));
+01403
+01404 <span class="comment">// tex coord 0 = texture coordinates</span>
+01405 <span class="comment">// tex coord 1 = normal in tangent space</span>
+01406 <span class="comment">// tex coord 2 = half angle vector in tangent space</span>
+01407
+01408 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0, tex0);
+01409 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(1, mat.getTexture(0));
+01410 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(2, tex2);
+01411
+01412 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 3; k &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); ++k)
+01413 {
+01414 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(k, NULL);
+01415 }
+01416
+01417 <span class="comment">// setup the tex envs</span>
+01418
+01419
+01420 <span class="comment">// Stage 0 is rgb = DiffuseCubeMap * LightColor + DiffuseGouraud * 1</span>
+01421 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[0] != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>)
+01422 {
+01423 <span class="comment">// TexEnv is special.</span>
+01424 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[0] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy4">TexEnvSpecialPPLStage0</a>;
+01425 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+01426
+01427 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4)
+01428 {
+01429 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+01430
+01431 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);
+01432 <span class="comment">// Arg0 = Diffuse read in cube map</span>
+01433 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
+01434 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01435 <span class="comment">// Arg1 = Light color</span>
+01436 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_CONSTANT_EXT);
+01437 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01438 <span class="comment">// Arg2 = Primary color (other light diffuse and </span>
+01439 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PRIMARY_COLOR_EXT);
+01440 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01441 <span class="comment">// Arg3 = White (= ~ Black)</span>
+01442 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO);
+01443 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_ONE_MINUS_SRC_COLOR);
+01444 }
+01445 <span class="keywordflow">else</span> <span class="comment">// use ATI extension</span>
+01446 {
+01447 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01448
+01449 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE_ADD_ATIX);
+01450 <span class="comment">// Arg0 = Diffuse read in cube map</span>
+01451 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
+01452 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01453 <span class="comment">// Arg1 = Light color</span>
+01454 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_CONSTANT_EXT);
+01455 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01456 <span class="comment">// Arg2 = Primary color (other light diffuse and </span>
+01457 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PRIMARY_COLOR_EXT);
+01458 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01459 }
+01460 }
+01461 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a>(0, _PPLightDiffuseColor);
+01462
+01463 <span class="comment">// Stage 1 </span>
+01464 <span class="keyword">static</span> CMaterial::CTexEnv env;
+01465 env.Env.SrcArg1Alpha = CMaterial::Diffuse;
+01466 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(1, env);
+01467
+01468
+01469
+01470 <span class="comment">// Stage 2 is rgb = SpecularCubeMap * SpecularLightColor + Prec * 1</span>
+01471 <span class="comment">// alpha = prec alpha</span>
+01472
+01473 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[2] != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy5">TexEnvSpecialPPLStage2</a>)
+01474 {
+01475 <span class="comment">// TexEnv is special.</span>
+01476 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[2] = <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy5">TexEnvSpecialPPLStage2</a>;
+01477 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(2);
+01478
+01479 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4)
+01480 {
+01481 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+01482 <span class="comment">//== colors ==</span>
+01483 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);
+01484 <span class="comment">// Arg0 = Specular read in cube map</span>
+01485 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
+01486 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01487 <span class="comment">// Arg1 = Light color</span>
+01488 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_CONSTANT_EXT);
+01489 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01490 <span class="comment">// Arg2 = Primary color ( + other light diffuse )</span>
+01491 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PREVIOUS_EXT);
+01492 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01493 <span class="comment">// Arg3 = White (= ~ Black)</span>
+01494 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO);
+01495 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_ONE_MINUS_SRC_COLOR);
+01496
+01497 <span class="comment">//== alpha ==</span>
+01498 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_ADD);
+01499 <span class="comment">// Arg0 = PREVIOUS ALPHA</span>
+01500 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_EXT);
+01501 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_COLOR);
+01502 <span class="comment">// Arg1 = 1</span>
+01503 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_ZERO);
+01504 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_ONE_MINUS_SRC_COLOR);
+01505 <span class="comment">// Arg2 = 0</span>
+01506 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_ZERO);
+01507 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_SRC_COLOR);
+01508 <span class="comment">// Arg3 = 0</span>
+01509 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_ALPHA_NV, GL_ZERO);
+01510 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_ALPHA_NV, GL_SRC_COLOR);
+01511 }
+01512 <span class="keywordflow">else</span> <span class="comment">// ATI EnvCombine3</span>
+01513 {
+01514 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01515 <span class="comment">//== colors ==</span>
+01516 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE_ADD_ATIX);
+01517 <span class="comment">// Arg0 = Specular read in cube map</span>
+01518 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
+01519 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
+01520 <span class="comment">// Arg2 = Light color</span>
+01521 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_CONSTANT_EXT);
+01522 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
+01523 <span class="comment">// Arg1 = Primary color ( + other light diffuse)</span>
+01524 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
+01525 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
+01526
+01527 <span class="comment">//== alpha ==</span>
+01528 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE_ADD_ATIX);
+01529 <span class="comment">// Arg0 = PREVIOUS ALPHA</span>
+01530 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_EXT);
+01531 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_COLOR);
+01532 <span class="comment">// Arg2 = 1</span>
+01533 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_ZERO);
+01534 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_ONE_MINUS_SRC_COLOR);
+01535 <span class="comment">// Arg1 = 0</span>
+01536 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_ZERO);
+01537 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_COLOR);
+01538 }
+01539 }
+01540 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd1">activateTexEnvColor</a>(2, _PPLightSpecularColor);
+01541
+01542 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa89" doxytag="NL3D::CDriverGL::setupScissor" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupScissor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const class <a class="el" href="a03353.html">CScissor</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>scissor</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the current Scissor. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>scissor</em>&nbsp;</td><td>is a scissor to setup the current Scissor, in Window relative coordinate (0,1).</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera69">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01874">1874</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a05646.html#l01013">width</a>, <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>01875 {
+01876 <span class="comment">// Get viewport</span>
+01877 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a572">x</a>= scissor.X;
+01878 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a632">width</a>= scissor.Width;
+01879 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a633">height</a>= scissor.Height;
+01880
+01881 <span class="keywordflow">if</span>(<a class="code" href="a04223.html#a572">x</a>==0 &amp;&amp; <a class="code" href="a04223.html#a572">x</a>==0 &amp;&amp; <a class="code" href="a04223.html#a632">width</a>==1 &amp;&amp; <a class="code" href="a04223.html#a633">height</a>==1)
+01882 {
+01883 glDisable(GL_SCISSOR_TEST);
+01884 }
+01885 <span class="keywordflow">else</span>
+01886 {
+01887 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01888 <span class="preprocessor"></span>
+01889 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a573">y</a>= scissor.Y;
+01890
+01891 <span class="keywordflow">if</span> (_hWnd)
+01892 {
+01893 <span class="comment">// Get window rect</span>
+01894 <span class="keywordtype">int</span> clientWidth = _WindowWidth;
+01895 <span class="keywordtype">int</span> clientHeight = _WindowHeight;
+01896
+01897 <span class="comment">// Setup gl scissor</span>
+01898 <span class="keywordtype">int</span> ix0=(<span class="keywordtype">int</span>)floor((<span class="keywordtype">float</span>)clientWidth * x + 0.5f);
+01899 <a class="code" href="a05378.html#a374">clamp</a> (ix0, 0, clientWidth);
+01900 <span class="keywordtype">int</span> iy0=(<span class="keywordtype">int</span>)floor((<span class="keywordtype">float</span>)clientHeight* y + 0.5f);
+01901 <a class="code" href="a05378.html#a374">clamp</a> (iy0, 0, clientHeight);
+01902
+01903 <span class="keywordtype">int</span> ix1=(<span class="keywordtype">int</span>)floor((<span class="keywordtype">float</span>)clientWidth * (x+width) + 0.5f );
+01904 <a class="code" href="a05378.html#a374">clamp</a> (ix1, 0, clientWidth);
+01905 <span class="keywordtype">int</span> iy1=(<span class="keywordtype">int</span>)floor((<span class="keywordtype">float</span>)clientHeight* (y+height) + 0.5f );
+01906 <a class="code" href="a05378.html#a374">clamp</a> (iy1, 0, clientHeight);
+01907
+01908
+01909 <span class="keywordtype">int</span> iwidth= ix1 - ix0;
+01910 <a class="code" href="a05378.html#a374">clamp</a> (iwidth, 0, clientWidth);
+01911 <span class="keywordtype">int</span> iheight= iy1 - iy0;
+01912 <a class="code" href="a05378.html#a374">clamp</a> (iheight, 0, clientHeight);
+01913
+01914 glScissor (ix0, iy0, iwidth, iheight);
+01915 glEnable(GL_SCISSOR_TEST);
+01916 }
+01917 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+01918 <span class="preprocessor"></span> }
+01919 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz91_2" doxytag="NL3D::CDriverGL::setupSpecularBegin" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupSpecularBegin </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l00985">985</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00598">_SpecularTexMtx</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a05972.html#l00443">NLMISC::CMatrix::get()</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05650.html#l00414">NL3D::CDriverGLStates::setTexGenMode()</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, and <a class="el" href="a05648.html#l00969">startSpecularBatch()</a>.
+<p>
+<div class="fragment"><pre>00986 {
+00987 <span class="comment">// ---- Reset any textures with id&gt;=2</span>
+00988 <a class="code" href="a04558.html#a14">sint</a> stage= 2;
+00989 <span class="keywordflow">for</span>(; stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() ; stage++)
+00990 {
+00991 <span class="comment">// disable texturing</span>
+00992 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage, NULL);
+00993 }
+00994
+00995 <span class="comment">// ---- Stage 0 Common Setup.</span>
+00996 <span class="comment">// Setup the env for stage 0 only.</span>
+00997 <span class="comment">// Result RGB : Texture*Diffuse, Alpha : Texture</span>
+00998 CMaterial::CTexEnv env;
+00999 env.Env.OpAlpha= CMaterial::Replace;
+01000 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(0, env);
+01001
+01002 <span class="comment">// Disable texGen for stage 0</span>
+01003 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+01004 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(0, 0);
+01005
+01006 <span class="comment">// ---- Stage 1 Common Setup.</span>
+01007 <span class="comment">// NB don't setup the TexEnv here (stage1 setuped in setupSpecularPass() according to extensions)</span>
+01008 <span class="comment">// For all cases, setup the TexCoord gen for stage1</span>
+01009 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01010
+01011 <span class="comment">// todo hulud remove</span>
+01012 <span class="comment">// _DriverGLStates.setTextureMode(CDriverGLStates::TextureCubeMap);</span>
+01013
+01014 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode (1, GL_REFLECTION_MAP_ARB);
+01015 <span class="comment">// setup the good matrix for stage 1.</span>
+01016 glMatrixMode(GL_TEXTURE);
+01017 glLoadMatrixf( <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>.get() );
+01018 glMatrixMode(GL_MODELVIEW);
+01019 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz91_3" doxytag="NL3D::CDriverGL::setupSpecularEnd" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupSpecularEnd </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l01022">1022</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, and <a class="el" href="a05650.html#l00414">NL3D::CDriverGLStates::setTexGenMode()</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00977">endSpecularBatch()</a>, and <a class="el" href="a05648.html#l01236">endSpecularMultiPass()</a>.
+<p>
+<div class="fragment"><pre>01023 {
+01024 <span class="comment">// Disable Texture coord generation.</span>
+01025 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01026 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTexGenMode(1, 0);
+01027
+01028 <span class="comment">// Happiness !!! we have already enabled the stage 1</span>
+01029 glMatrixMode(GL_TEXTURE);
+01030 glLoadIdentity();
+01031 glMatrixMode(GL_MODELVIEW);
+01032 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz91_4" doxytag="NL3D::CDriverGL::setupSpecularPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupSpecularPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Support NVidia combine 4 extension to do specular map in a single pass
+<p>
+Definition at line <a class="el" href="a05648.html#l01067">1067</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00663">_CurrentTexEnvSpecial</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05645.html#l00102">NL3D::CGlExtensions::ATIXTextureEnvCombine3</a>, <a class="el" href="a05650.html#l00252">NL3D::CDriverGLStates::blendFunc()</a>, <a class="el" href="a05643.html#l00641">CTexEnvSpecial</a>, <a class="el" href="a05650.html#l00150">NL3D::CDriverGLStates::enableBlend()</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00661">GL_MODULATE_ADD_ATIX</a>, <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>, <a class="el" href="a05650.html#l00473">NL3D::CDriverGLStates::setTextureMode()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy6">TexEnvSpecialSpecularStage1</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy7">TexEnvSpecialSpecularStage1NoText</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00554">setupPass()</a>.
+<p>
+<div class="fragment"><pre>01068 {
+01069 <span class="keyword">const</span> CMaterial &amp;mat= *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+01070
+01071 <span class="comment">// Manage the rare case when the SpecularMap is not provided (error of a graphist).</span>
+01072 <span class="keywordflow">if</span>(mat.getTexture(1)==NULL)
+01073 {
+01074 <span class="comment">// Just display the texture</span>
+01075 <span class="comment">// NB: setupMaterial() code has correclty setuped textures.</span>
+01076 <span class="keywordflow">return</span>;
+01077 }
+01078
+01080 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 )
+01081 { <span class="comment">// Ok we can do it in a single pass</span>
+01082
+01083 <span class="comment">// Set Stage 1</span>
+01084 <span class="comment">// Special: not the same sepcial env if there is or not texture in stage 0.</span>
+01085 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0">CTexEnvSpecial</a> newEnvStage1;
+01086 <span class="keywordflow">if</span>( mat.getTexture(0) == NULL )
+01087 newEnvStage1= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy7">TexEnvSpecialSpecularStage1NoText</a>;
+01088 <span class="keywordflow">else</span>
+01089 newEnvStage1= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy6">TexEnvSpecialSpecularStage1</a>;
+01090 <span class="comment">// Test if same env as prec.</span>
+01091 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[1] != newEnvStage1)
+01092 {
+01093 <span class="comment">// TexEnv is special.</span>
+01094 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[1] = newEnvStage1;
+01095
+01096 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01097 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE4_NV);
+01098 <span class="comment">// Operator Add (Arg0*Arg1+Arg2*Arg3)</span>
+01099 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD );
+01100 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_ADD );
+01101 <span class="comment">// Arg0.</span>
+01102 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE );
+01103 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR );
+01104 <span class="comment">// Arg1.</span>
+01105 <span class="keywordflow">if</span>( newEnvStage1 == TexEnvSpecialSpecularStage1NoText )
+01106 {
+01107 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_ZERO );
+01108 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_ONE_MINUS_SRC_COLOR);
+01109 }
+01110 <span class="keywordflow">else</span>
+01111 {
+01112 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT );
+01113 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_ALPHA );
+01114 }
+01115 <span class="comment">// Arg2.</span>
+01116 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PREVIOUS_EXT );
+01117 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR );
+01118 <span class="comment">// Arg3.</span>
+01119 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_RGB_NV, GL_ZERO );
+01120 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_RGB_NV, GL_ONE_MINUS_SRC_COLOR);
+01121 <span class="comment">// Result : Texture*Previous.Alpha+Previous</span>
+01122 <span class="comment">// Setup Alpha Diffuse Copy</span>
+01123 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT );
+01124 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA );
+01125 <span class="comment">// Arg1.</span>
+01126 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_ZERO );
+01127 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_ONE_MINUS_SRC_ALPHA);
+01128 <span class="comment">// Arg2.</span>
+01129 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_ZERO );
+01130 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_SRC_ALPHA );
+01131 <span class="comment">// Arg3.</span>
+01132 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE3_ALPHA_NV, GL_ZERO );
+01133 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND3_ALPHA_NV, GL_SRC_ALPHA);
+01134 }
+01135 }
+01136 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvCombine3)
+01137 {
+01138 <span class="comment">// Ok we can do it in a single pass</span>
+01139
+01140 <span class="comment">// Set Stage 1</span>
+01141 <span class="comment">// Special: not the same sepcial env if there is or not texture in stage 0.</span>
+01142 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0">CTexEnvSpecial</a> newEnvStage1;
+01143 <span class="keywordflow">if</span>( mat.getTexture(0) == NULL )
+01144 newEnvStage1= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy7">TexEnvSpecialSpecularStage1NoText</a>;
+01145 <span class="keywordflow">else</span>
+01146 newEnvStage1= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_0NL3D_1_1CDriverGLy6">TexEnvSpecialSpecularStage1</a>;
+01147 <span class="comment">// Test if same env as prec.</span>
+01148 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[1] != newEnvStage1)
+01149 {
+01150 <span class="comment">// TexEnv is special.</span>
+01151 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_7">_CurrentTexEnvSpecial</a>[1] = newEnvStage1;
+01152
+01153 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01154 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+01155 <span class="comment">// Operator Add (Arg0*Arg2+Arg1)</span>
+01156 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE_ADD_ATIX );
+01157 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE_ADD_ATIX );
+01158 <span class="comment">// Arg0.</span>
+01159 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE );
+01160 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR );
+01161 <span class="comment">// Arg2.</span>
+01162 <span class="keywordflow">if</span>( newEnvStage1 == TexEnvSpecialSpecularStage1NoText )
+01163 {
+01164 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_ZERO );
+01165 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_ONE_MINUS_SRC_COLOR);
+01166 }
+01167 <span class="keywordflow">else</span>
+01168 {
+01169 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PREVIOUS_EXT );
+01170 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA );
+01171 }
+01172 <span class="comment">// Arg1.</span>
+01173 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT );
+01174 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR );
+01175 <span class="comment">// Result : Texture*Previous.Alpha+Previous</span>
+01176 <span class="comment">// Setup Alpha Diffuse Copy</span>
+01177 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT );
+01178 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA );
+01179 <span class="comment">// Arg2.</span>
+01180 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA_EXT, GL_ZERO );
+01181 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA_EXT, GL_ONE_MINUS_SRC_ALPHA );
+01182 <span class="comment">// Arg1.</span>
+01183 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_ZERO );
+01184 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA);
+01185 }
+01186 }
+01187 <span class="keywordflow">else</span>
+01188 { <span class="comment">// We have to do it in 2 passes</span>
+01189
+01190 <span class="comment">// For Both Pass, setup correct Env.</span>
+01191
+01192 <span class="keywordflow">if</span>( pass == 0 )
+01193 { <span class="comment">// Just display the texture</span>
+01194 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(<span class="keyword">false</span>);
+01195 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+01196 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::TextureDisabled);
+01197 }
+01198 <span class="keywordflow">else</span>
+01199 { <span class="comment">// Multiply texture1 by alpha_texture0 and display with add</span>
+01200 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableBlend(<span class="keyword">true</span>);
+01201 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.blendFunc(GL_ONE, GL_ONE);
+01202
+01203 <span class="comment">// Set stage 0</span>
+01204 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+01205 CMaterial::CTexEnv env;
+01206
+01207 env.Env.OpRGB = CMaterial::Replace;
+01208 env.Env.SrcArg0RGB = CMaterial::Texture;
+01209 env.Env.OpArg0RGB = CMaterial::SrcAlpha;
+01210
+01211 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(0, env);
+01212
+01213
+01214 <span class="comment">// Set stage 1</span>
+01215 <span class="keywordflow">if</span>( mat.getTexture(0) == NULL )
+01216 {
+01217 env.Env.OpRGB = CMaterial::Replace;
+01218 env.Env.SrcArg0RGB = CMaterial::Texture;
+01219 env.Env.OpArg0RGB = CMaterial::SrcColor;
+01220 }
+01221 <span class="keywordflow">else</span>
+01222 {
+01223 env.Env.OpRGB = CMaterial::Modulate;
+01224 env.Env.SrcArg0RGB = CMaterial::Texture;
+01225 env.Env.OpArg0RGB = CMaterial::SrcColor;
+01226
+01227 env.Env.SrcArg1RGB = CMaterial::Previous;
+01228 env.Env.OpArg1RGB = CMaterial::SrcColor;
+01229 }
+01230
+01231 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(1, env);
+01232 }
+01233 }
+01234 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa90" doxytag="NL3D::CDriverGL::setupTexture" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupTexture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>tex</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup a texture, generate and upload if needed. same as setupTextureEx(tex, true, dummy);
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera70">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l00354">354</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05652.html#l00361">setupTextureEx()</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02185">copyFrameBufferToTexture()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>, <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>, <a class="el" href="a05648.html#l01876">setupWaterPassR200()</a>, and <a class="el" href="a05652.html#l01185">swapTextureHandle()</a>.
+<p>
+<div class="fragment"><pre>00355 {
+00356 <span class="keywordtype">bool</span> nTmp;
+00357 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLa91">setupTextureEx</a> (tex, <span class="keyword">true</span>, nTmp);
+00358 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa91" doxytag="NL3D::CDriverGL::setupTextureEx" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupTextureEx </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>bUpload</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>bAllUploaded</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>bMustRecreateSharedTexture</em> = false</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup a texture in the driver. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>bUpload</em>&nbsp;</td><td>if true the texture is created and uploaded to VRAM, if false the texture is only created it is useful for the async upload texture to only create the texture and then make invalidate to upload small piece each frame. There is ONE case where bUpload is forced to be true inside the method: if the texture must be converted to RGBA. </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd>bAllUploaded </dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>bAllUploaded</em>&nbsp;</td><td>true if any upload arise (texture invalid, must convert texture etc...). </td></tr>
+ <tr><td valign=top><em>bMustRecreateSharedTexture</em>&nbsp;</td><td>if true and if the texture supportSharing, then the texture is recreated (and uploaded if bUpload==true) into the shared DrvInfo (if found). Default setup (false) imply that the DrvInfo is only bound to tex (thus creating and uploading nothing) NB: the texture must be at least touch()-ed for the recreate to work.</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera71">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l00361">361</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00917">_AllocatedTextureMemory</a>, <a class="el" href="a05643.html#l00658">_CurrentTexture</a>, <a class="el" href="a05643.html#l00660">_CurrentTextureInfoGL</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00995">_ForceTextureResizePower</a>, <a class="el" href="a06506.html#l00422">NL3D::ITexture::_ListInvalidRect</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a06506.html#l00352">NL3D::ITexture::allowDegradation()</a>, <a class="el" href="a05645.html#l00081">NL3D::CGlExtensions::ARBTextureCubeMap</a>, <a class="el" href="a05486.html#l01422">NLMISC::CBitmap::buildMipMaps()</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a06506.html#l00448">NL3D::ITexture::clearTouched()</a>, <a class="el" href="a05643.html#l00110">NL3D::CTextureDrvInfosGL::Compressed</a>, <a class="el" href="a05652.html#l00215">computeMipMapMemoryUsage()</a>, <a class="el" href="a05486.html#l00926">NLMISC::CBitmap::convertToType()</a>, <a class="el" href="a05643.html#l00515">CTextureDrvInfosGL</a>, <a class="el" href="a05640.html#l00993">NL3D::IDriver::CTextureDrvShare</a>, <a class="el" href="a05645.html#l00077">NL3D::CGlExtensions::EXTTextureCompressionS3TC</a>, <a class="el" href="a06506.html#l00309">NL3D::ITexture::generate()</a>, <a class="el" href="a05652.html#l00199">NL3D::getGlSrcTextureComponentType()</a>, <a class="el" href="a05652.html#l00170">NL3D::getGlSrcTextureFormat()</a>, <a class="el" href="a05652.html#l00099">getGlTextureFormat()</a>, <a class="el" href="a05486.html#l01388">NLMISC::CBitmap::getHeight()</a>, <a class="el" href="a06506.html#l00214">NL3D::ITexture::getMagFilter()</a>, <a class="el" href="a06506.html#l00215">NL3D::ITexture::getMinFilter()</a>, <a class="el" href="a05487.html#l00369">NLMISC::CBitmap::getMipMapCount()</a>, <a class="el" href="a05487.html#l00335">NLMISC::CBitmap::getPixelFormat()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a06116.html#l00195">NLMISC::CObjectVector&lt; uint8 &gt;::getPtr()</a>, <a class="el" href="a06506.html#l00267">NL3D::ITexture::getReleasable()</a>, <a class="el" href="a05486.html#l01412">NLMISC::CBitmap::getSize()</a>, <a class="el" href="a06514.html#l00062">NL3D::CTextureCube::getTexture()</a>, <a class="el" href="a05652.html#l00089">NL3D::getTextureGl()</a>, <a class="el" href="a05639.html#l00277">NL3D::IDriver::getTextureShareName()</a>, <a class="el" href="a05486.html#l01363">NLMISC::CBitmap::getWidth()</a>, <a class="el" href="a06506.html#l00204">NL3D::ITexture::getWrapS()</a>, <a class="el" href="a06506.html#l00205">NL3D::ITexture::getWrapT()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, <a class="el" href="a05643.html#l00108">NL3D::CTextureDrvInfosGL::ID</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a06506.html#l00428">NL3D::ITexture::isAllInvalidated()</a>, <a class="el" href="a06506.html#l00376">NL3D::ITexture::isTextureCube()</a>, <a class="el" href="a06506.html#l00058">NL3D::ItTexDrvInfoPtrMap</a>, <a class="el" href="a06506.html#l00059">NL3D::ItTexDrvSharePtrList</a>, <a class="el" href="a05643.html#l00123">NL3D::CTextureDrvInfosGL::MagFilter</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05643.html#l00124">NL3D::CTextureDrvInfosGL::MinFilter</a>, <a class="el" href="a05643.html#l00112">NL3D::CTextureDrvInfosGL::MipMap</a>, <a class="el" href="a06506.html#l00217">NL3D::ITexture::mipMapOn()</a>, <a class="el" href="a05652.html#l00052">NEL_MEASURE_UPLOAD_TIME_END</a>, <a class="el" href="a05652.html#l00051">NEL_MEASURE_UPLOAD_TIME_START</a>, <a class="el" href="a05645.html#l00230">nglCompressedTexImage2DARB</a>, <a class="el" href="a06506.html#l00327">NL3D::ITexture::release()</a>, <a class="el" href="a05486.html#l01493">NLMISC::CBitmap::releaseMipMaps()</a>, <a class="el" href="a05486.html#l01508">NLMISC::CBitmap::resample()</a>, <a class="el" href="a05652.html#l00322">NL3D::sameDXTCFormat()</a>, <a class="el" href="a05650.html#l00473">NL3D::CDriverGLStates::setTextureMode()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; uint8 &gt;::size()</a>, <a class="el" href="a05646.html#l00645">size</a>, <a class="el" href="a06506.html#l00332">NL3D::ITexture::supportSharing()</a>, <a class="el" href="a06506.html#l00416">NL3D::ITexture::TextureDrvShare</a>, <a class="el" href="a05643.html#l00115">NL3D::CTextureDrvInfosGL::TextureMemory</a>, <a class="el" href="a06506.html#l00438">NL3D::ITexture::touched()</a>, <a class="el" href="a05652.html#l00261">NL3D::translateMagFilterToGl()</a>, <a class="el" href="a05652.html#l00280">NL3D::translateMinFilterToGl()</a>, <a class="el" href="a05652.html#l00246">NL3D::translateWrapToGl()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05646.html#l00236">w</a>, <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>, <a class="el" href="a05643.html#l00121">NL3D::CTextureDrvInfosGL::WrapS</a>, <a class="el" href="a05643.html#l00122">NL3D::CTextureDrvInfosGL::WrapT</a>, <a class="el" href="a06320.html#l00107">NLMISC::CRect::X</a>, and <a class="el" href="a06320.html#l00110">NLMISC::CRect::Y</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00354">setupTexture()</a>.
+<p>
+<div class="fragment"><pre>00362 {
+00363 bAllUploaded = <span class="keyword">false</span>;
+00364
+00365 <span class="keywordflow">if</span>(tex.isTextureCube() &amp;&amp; (!<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ARBTextureCubeMap))
+00366 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00367
+00368 <span class="comment">// 0. Create/Retrieve the driver texture.</span>
+00369 <span class="comment">//=======================================</span>
+00370 <span class="keywordtype">bool</span> mustCreate = <span class="keyword">false</span>;
+00371 <span class="keywordflow">if</span> ( !tex.TextureDrvShare )
+00372 {
+00373 <span class="comment">// insert into driver list. (so it is deleted when driver is deleted).</span>
+00374 <a class="code" href="a05363.html#a298">ItTexDrvSharePtrList</a> it= <a class="code" href="a02434.html#NL3D_1_1IDriverp3">_TexDrvShares</a>.insert(<a class="code" href="a02434.html#NL3D_1_1IDriverp3">_TexDrvShares</a>.end());
+00375 <span class="comment">// create and set iterator, for future deletion.</span>
+00376 *it= tex.TextureDrvShare= <span class="keyword">new</span> <a class="code" href="a02434.html#NL3D_1_1IDrivern1">CTextureDrvShare</a>(<span class="keyword">this</span>, it);
+00377
+00378 <span class="comment">// Must (re)-create the texture.</span>
+00379 mustCreate = <span class="keyword">true</span>;
+00380 }
+00381
+00382 <span class="comment">// Does the texture has been touched ?</span>
+00383 <span class="keywordflow">if</span> ( (!tex.touched()) &amp;&amp; (!mustCreate) )
+00384 <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// Do not do anything</span>
+00385
+00386
+00387 <span class="comment">// 1. If modified, may (re)load texture part or all of the texture.</span>
+00388 <span class="comment">//=================================================================</span>
+00389
+00390
+00391 <span class="keywordtype">bool</span> mustLoadAll= <span class="keyword">false</span>;
+00392 <span class="keywordtype">bool</span> mustLoadPart= <span class="keyword">false</span>;
+00393
+00394
+00395 <span class="comment">// To avoid any delete/new ptr problem, disable all texturing.</span>
+00396 <span class="comment">/* If an old texture is deleted, _CurrentTexture[*] and _CurrentTextureInfoGL[*] are invalid. </span>
+00397 <span class="comment"> But this is grave only if a new texture is created, with the same pointer (bad luck). </span>
+00398 <span class="comment"> Since an newly allocated texture always pass here before use, we are sure to avoid any problems.</span>
+00399 <span class="comment"> */</span>
+00400 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> stage=0 ; stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() ; stage++)
+00401 {
+00402 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage, NULL);
+00403 }
+00404
+00405
+00406 <span class="comment">// A. Share mgt.</span>
+00407 <span class="comment">//==============</span>
+00408 <span class="keywordflow">if</span>(tex.supportSharing())
+00409 {
+00410 <span class="comment">// Try to get the shared texture.</span>
+00411
+00412 <span class="comment">// Create the shared Name.</span>
+00413 std::string name;
+00414 <a class="code" href="a02434.html#NL3D_1_1IDrivere0">getTextureShareName</a> (tex, name);
+00415
+00416 <span class="comment">// insert or get the texture.</span>
+00417 {
+00418 CSynchronized&lt;TTexDrvInfoPtrMap&gt;::CAccessor access(&amp;_SyncTexDrvInfos);
+00419 TTexDrvInfoPtrMap &amp;rTexDrvInfos = access.value();
+00420
+00421 <a class="code" href="a05363.html#a297">ItTexDrvInfoPtrMap</a> itTex;
+00422 itTex= rTexDrvInfos.find(name);
+00423
+00424 <span class="comment">// texture not found?</span>
+00425 <span class="keywordflow">if</span>( itTex==rTexDrvInfos.end() )
+00426 {
+00427 <span class="comment">// insert into driver map. (so it is deleted when driver is deleted).</span>
+00428 itTex= (rTexDrvInfos.insert(make_pair(name, (ITextureDrvInfos*)NULL))).first;
+00429 <span class="comment">// create and set iterator, for future deletion.</span>
+00430 itTex-&gt;second= tex.TextureDrvShare-&gt;DrvTexture= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>(<span class="keyword">this</span>, itTex, <span class="keyword">this</span>);
+00431
+00432 <span class="comment">// need to load ALL this texture.</span>
+00433 mustLoadAll= <span class="keyword">true</span>;
+00434 }
+00435 <span class="keywordflow">else</span>
+00436 {
+00437 tex.TextureDrvShare-&gt;DrvTexture= itTex-&gt;second;
+00438
+00439 <span class="keywordflow">if</span>(bMustRecreateSharedTexture)
+00440 <span class="comment">// reload this shared texture (user request)</span>
+00441 mustLoadAll= <span class="keyword">true</span>;
+00442 <span class="keywordflow">else</span>
+00443 <span class="comment">// Do not need to reload this texture, even if the format/mipmap has changed, since we found this </span>
+00444 <span class="comment">// couple in the map.</span>
+00445 mustLoadAll= <span class="keyword">false</span>;
+00446 }
+00447 }
+00448 <span class="comment">// Do not test if part of texture may need to be computed, because Rect invalidation is incompatible </span>
+00449 <span class="comment">// with texture sharing.</span>
+00450 }
+00451 <span class="keywordflow">else</span>
+00452 {
+00453 <span class="comment">// If texture not already created.</span>
+00454 <span class="keywordflow">if</span>(!tex.TextureDrvShare-&gt;DrvTexture)
+00455 {
+00456 <span class="comment">// Must create it. Create auto a GL id (in constructor).</span>
+00457 <span class="comment">// Do not insert into the map. This un-shared texture will be deleted at deletion of the texture.</span>
+00458 <span class="comment">// Inform ITextureDrvInfos by passing NULL _Driver.</span>
+00459 tex.TextureDrvShare-&gt;DrvTexture= <span class="keyword">new</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>(NULL, <a class="code" href="a05363.html#a297">ItTexDrvInfoPtrMap</a>(), <span class="keyword">this</span>);
+00460
+00461 <span class="comment">// need to load ALL this texture.</span>
+00462 mustLoadAll= <span class="keyword">true</span>;
+00463 }
+00464 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(tex.isAllInvalidated())
+00465 mustLoadAll= <span class="keyword">true</span>;
+00466 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(tex.touched())
+00467 mustLoadPart= <span class="keyword">true</span>;
+00468 }
+00469
+00470 <span class="comment">// B. Setup texture.</span>
+00471 <span class="comment">//==================</span>
+00472 <span class="keywordflow">if</span>(mustLoadAll || mustLoadPart)
+00473 {
+00474 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>* gltext;
+00475 gltext= <a class="code" href="a05363.html#a407">getTextureGl</a>(tex);
+00476
+00477 <span class="comment">// system of "backup the previous binded texture" seems to not work with some drivers....</span>
+00478 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(0);
+00479 <span class="keywordflow">if</span>(tex.isTextureCube())
+00480 {
+00481 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::TextureCubeMap);
+00482 <span class="comment">// Bind this texture, for reload...</span>
+00483 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, gltext-&gt;ID);
+00484 }
+00485 <span class="keywordflow">else</span>
+00486 {
+00487 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::Texture2D);
+00488 <span class="comment">// Bind this texture, for reload...</span>
+00489 glBindTexture(GL_TEXTURE_2D, gltext-&gt;ID);
+00490 }
+00491
+00492
+00493 glPixelStorei(GL_UNPACK_ALIGNMENT,1);
+00494
+00495 <span class="comment">// a. Load All the texture case.</span>
+00496 <span class="comment">//==============================</span>
+00497 <span class="keywordflow">if</span> (mustLoadAll)
+00498 {
+00499 <span class="comment">// profiling. sub old textre memory usage, and reset.</span>
+00500 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_2">_AllocatedTextureMemory</a>-= gltext-&gt;TextureMemory;
+00501 gltext-&gt;TextureMemory= 0;
+00502
+00503
+00504 <span class="keywordflow">if</span>(tex.isTextureCube())
+00505 {
+00506 <span class="keyword">static</span> GLenum face_map[6] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
+00507 GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB,
+00508 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB,
+00509 GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB,
+00510 GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB,
+00511 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB };
+00512 CTextureCube *pTC = NLMISC::safe_cast&lt;CTextureCube *&gt;(&amp;tex);
+00513 <span class="comment">// Regenerate all the texture.</span>
+00514 tex.generate();
+00515 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> nText = 0; nText &lt; 6; ++nText)
+00516 <span class="keywordflow">if</span>(pTC-&gt;getTexture((CTextureCube::TFace)nText) != NULL)
+00517 {
+00518 ITexture *pTInTC = pTC-&gt;getTexture((CTextureCube::TFace)nText);
+00519 <span class="comment">// Get the correct texture format from texture...</span>
+00520 GLint glfmt= <a class="code" href="a02433.html#NL3D_1_1CDriverGLd12">getGlTextureFormat</a>(*pTInTC, gltext-&gt;Compressed);
+00521 GLint glSrcFmt= <a class="code" href="a05363.html#a408">getGlSrcTextureFormat</a>(*pTInTC, glfmt);
+00522 GLenum glSrcType= <a class="code" href="a05363.html#a409">getGlSrcTextureComponentType</a>(glSrcFmt);
+00523
+00524 <a class="code" href="a04558.html#a14">sint</a> nMipMaps;
+00525 <span class="keywordflow">if</span>(glSrcFmt==GL_RGBA &amp;&amp; pTInTC-&gt;getPixelFormat()!=CBitmap::RGBA )
+00526 pTInTC-&gt;convertToType(CBitmap::RGBA);
+00527 <span class="keywordflow">if</span>(tex.mipMapOn())
+00528 {
+00529 pTInTC-&gt;buildMipMaps();
+00530 nMipMaps= pTInTC-&gt;getMipMapCount();
+00531 }
+00532 <span class="keywordflow">else</span>
+00533 nMipMaps= 1;
+00534
+00535 <span class="comment">// MipMap upload?</span>
+00536 gltext-&gt;MipMap= nMipMaps&gt;1;
+00537
+00538 <span class="comment">// Fill mipmaps.</span>
+00539 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i&lt;nMipMaps;i++)
+00540 {
+00541 <span class="keywordtype">void</span> *ptr= pTInTC-&gt;getPixels(i).getPtr();
+00542 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a575">w</a>= pTInTC-&gt;getWidth(i);
+00543 <a class="code" href="a04558.html#a15">uint</a> h= pTInTC-&gt;getHeight(i);
+00544 <span class="keywordflow">if</span> (bUpload)
+00545 {
+00546 <a class="code" href="a04229.html#a0">NEL_MEASURE_UPLOAD_TIME_START</a>
+00547 glTexImage2D (face_map[nText], i, glfmt, w, h, 0, glSrcFmt, glSrcType, ptr);
+00548 bAllUploaded = <span class="keyword">true</span>;
+00549 <a class="code" href="a04229.html#a1">NEL_MEASURE_UPLOAD_TIME_END</a>
+00550
+00551 }
+00552 <span class="keywordflow">else</span>
+00553 {
+00554 <a class="code" href="a04229.html#a0">NEL_MEASURE_UPLOAD_TIME_START</a>
+00555 glTexImage2D (face_map[nText], i, glfmt, w, h, 0, glSrcFmt, glSrcType, NULL);
+00556 <a class="code" href="a04229.html#a1">NEL_MEASURE_UPLOAD_TIME_END</a>
+00557 }
+00558 <span class="comment">// profiling: count TextureMemory usage.</span>
+00559 gltext-&gt;TextureMemory+= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_1">computeMipMapMemoryUsage</a>(w, h, glfmt);
+00560 }
+00561 }
+00562 }
+00563 <span class="keywordflow">else</span>
+00564 {
+00565 <span class="comment">// Regenerate all the texture.</span>
+00566 tex.generate();
+00567
+00568 <span class="keywordflow">if</span>(tex.getSize()&gt;0)
+00569 {
+00570 <span class="comment">// Get the correct texture format from texture...</span>
+00571 GLint glfmt= <a class="code" href="a02433.html#NL3D_1_1CDriverGLd12">getGlTextureFormat</a>(tex, gltext-&gt;Compressed);
+00572 GLint glSrcFmt= <a class="code" href="a05363.html#a408">getGlSrcTextureFormat</a>(tex, glfmt);
+00573 GLenum glSrcType= <a class="code" href="a05363.html#a409">getGlSrcTextureComponentType</a>(glSrcFmt);
+00574
+00575 <span class="comment">// DXTC: if same format, and same mipmapOn/Off, use glTexCompressedImage*.</span>
+00576 <span class="comment">// We cannot build the mipmaps if they are not here.</span>
+00577 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTTextureCompressionS3TC &amp;&amp; <a class="code" href="a05363.html#a413">sameDXTCFormat</a>(tex, glfmt))
+00578 {
+00579 <a class="code" href="a04558.html#a14">sint</a> nMipMaps = 1;
+00580
+00581 <span class="keywordflow">if</span>(tex.mipMapOn())
+00582 nMipMaps= tex.getMipMapCount();
+00583
+00584 <span class="comment">// MipMap upload?</span>
+00585 gltext-&gt;MipMap= nMipMaps&gt;1;
+00586
+00587 <span class="comment">// Degradation in Size allowed only if DXTC texture are provided with mipmaps.</span>
+00588 <span class="comment">// Because use them to resize !!!</span>
+00589 <a class="code" href="a04558.html#a15">uint</a> decalMipMapResize= 0;
+00590 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>&gt;0 &amp;&amp; tex.allowDegradation() &amp;&amp; nMipMaps&gt;1)
+00591 {
+00592 decalMipMapResize= <a class="code" href="a04061.html#a0">min</a>(_ForceTextureResizePower, (<a class="code" href="a04558.html#a15">uint</a>)(nMipMaps-1));
+00593 }
+00594
+00595 <span class="comment">// Fill mipmaps.</span>
+00596 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=decalMipMapResize;i&lt;nMipMaps;i++)
+00597 {
+00598 <span class="keywordtype">void</span> *ptr= tex.getPixels(i).getPtr();
+00599 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a04223.html#a587">size</a>= tex.getPixels(i).size();
+00600 <span class="keywordflow">if</span> (bUpload)
+00601 {
+00602 <a class="code" href="a04222.html#a35">nglCompressedTexImage2DARB</a> (GL_TEXTURE_2D, i-decalMipMapResize, glfmt,
+00603 tex.getWidth(i),tex.getHeight(i), 0, <a class="code" href="a04223.html#a587">size</a>, ptr);
+00604 bAllUploaded = <span class="keyword">true</span>;
+00605 }
+00606 <span class="keywordflow">else</span>
+00607 {
+00608 <span class="comment">//nglCompressedTexImage2DARB (GL_TEXTURE_2D, i-decalMipMapResize, glfmt, </span>
+00609 <span class="comment">// tex.getWidth(i),tex.getHeight(i), 0, size, NULL);</span>
+00610 <a class="code" href="a04229.html#a0">NEL_MEASURE_UPLOAD_TIME_START</a>
+00611 glTexImage2D (GL_TEXTURE_2D, i-decalMipMapResize, glfmt, tex.getWidth(i), tex.getHeight(i),
+00612 0, glSrcFmt, glSrcType, NULL);
+00613 <a class="code" href="a04229.html#a1">NEL_MEASURE_UPLOAD_TIME_END</a>
+00614 }
+00615
+00616 <span class="comment">// profiling: count TextureMemory usage.</span>
+00617 gltext-&gt;TextureMemory+= tex.getPixels(i).size();
+00618 }
+00619 }
+00620 <span class="keywordflow">else</span>
+00621 {
+00622 <a class="code" href="a04558.html#a14">sint</a> nMipMaps;
+00623 <span class="keywordflow">if</span>(glSrcFmt==GL_RGBA &amp;&amp; tex.getPixelFormat()!=CBitmap::RGBA )
+00624 {
+00625 bUpload = <span class="keyword">true</span>; <span class="comment">// Force all upload</span>
+00626 tex.convertToType(CBitmap::RGBA);
+00627 }
+00628
+00629 <span class="comment">// Degradation in Size.</span>
+00630 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>&gt;0 &amp;&amp; tex.allowDegradation())
+00631 {
+00632 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a575">w</a>= tex.getWidth(0) &gt;&gt; <a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>;
+00633 <a class="code" href="a04558.html#a15">uint</a> h= tex.getHeight(0) &gt;&gt; <a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>;
+00634 <a class="code" href="a04223.html#a575">w</a>= max(1U, w);
+00635 h= max(1U, h);
+00636 tex.resample(w, h);
+00637 }
+00638
+00639 <span class="keywordflow">if</span>(tex.mipMapOn())
+00640 {
+00641 tex.buildMipMaps();
+00642 nMipMaps= tex.getMipMapCount();
+00643 }
+00644 <span class="keywordflow">else</span>
+00645 nMipMaps= 1;
+00646
+00647 <span class="comment">// MipMap upload?</span>
+00648 gltext-&gt;MipMap= nMipMaps&gt;1;
+00649
+00650 <span class="comment">// Fill mipmaps.</span>
+00651 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i&lt;nMipMaps;i++)
+00652 {
+00653 <span class="keywordtype">void</span> *ptr= tex.getPixels(i).getPtr();
+00654 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a575">w</a>= tex.getWidth(i);
+00655 <a class="code" href="a04558.html#a15">uint</a> h= tex.getHeight(i);
+00656
+00657 <span class="keywordflow">if</span> (bUpload)
+00658 {
+00659 <a class="code" href="a04229.html#a0">NEL_MEASURE_UPLOAD_TIME_START</a>
+00660 glTexImage2D (GL_TEXTURE_2D, i, glfmt, w, h, 0,glSrcFmt, glSrcType, ptr);
+00661 <a class="code" href="a04229.html#a1">NEL_MEASURE_UPLOAD_TIME_END</a>
+00662 bAllUploaded = <span class="keyword">true</span>;
+00663 }
+00664 <span class="keywordflow">else</span>
+00665 {
+00666 <a class="code" href="a04229.html#a0">NEL_MEASURE_UPLOAD_TIME_START</a>
+00667 glTexImage2D (GL_TEXTURE_2D, i, glfmt, w, h, 0,glSrcFmt, glSrcType, NULL);
+00668 <a class="code" href="a04229.html#a1">NEL_MEASURE_UPLOAD_TIME_END</a>
+00669 }
+00670 <span class="comment">// profiling: count TextureMemory usage.</span>
+00671 gltext-&gt;TextureMemory += <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_1">computeMipMapMemoryUsage</a> (w, h, glfmt);
+00672 }
+00673 }
+00674 }
+00675 }
+00676 <span class="comment">//printf("%d,%d,%d\n", tex.getMipMapCount(), tex.getWidth(0), tex.getHeight(0));</span>
+00677
+00678
+00679 <span class="comment">// profiling. add new TextureMemory usage.</span>
+00680 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_2">_AllocatedTextureMemory</a>+= gltext-&gt;TextureMemory;
+00681 }
+00682 <span class="comment">// b. Load part of the texture case.</span>
+00683 <span class="comment">//==================================</span>
+00684 <span class="comment">// \todo yoyo: TODO_DXTC</span>
+00685 <span class="comment">// Replace parts of a compressed image. Maybe don't work with the actual system of invalidateRect()...</span>
+00686 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mustLoadPart &amp;&amp; !gltext-&gt;Compressed)
+00687 {
+00688 <span class="comment">// Regenerate wanted part of the texture.</span>
+00689 tex.generate();
+00690
+00691 <span class="keywordflow">if</span>(tex.getSize()&gt;0)
+00692 {
+00693 <span class="comment">// Get the correct texture format from texture...</span>
+00694 <span class="comment">//===============================================</span>
+00695 <span class="keywordtype">bool</span> dummy;
+00696 GLint glfmt= <a class="code" href="a02433.html#NL3D_1_1CDriverGLd12">getGlTextureFormat</a>(tex, dummy);
+00697 GLint glSrcFmt= <a class="code" href="a05363.html#a408">getGlSrcTextureFormat</a>(tex, glfmt);
+00698 GLenum glSrcType= <a class="code" href="a05363.html#a409">getGlSrcTextureComponentType</a>(glSrcFmt);
+00699
+00700 <a class="code" href="a04558.html#a14">sint</a> nMipMaps;
+00701 <span class="keywordflow">if</span>(glSrcFmt==GL_RGBA &amp;&amp; tex.getPixelFormat()!=CBitmap::RGBA )
+00702 tex.convertToType(CBitmap::RGBA);
+00703 <span class="keywordflow">if</span>(tex.mipMapOn())
+00704 {
+00705 <span class="keywordtype">bool</span> hadMipMap= tex.getMipMapCount()&gt;1;
+00706 tex.buildMipMaps();
+00707 nMipMaps= tex.getMipMapCount();
+00708 <span class="comment">// If the texture had no mipmap before, release them.</span>
+00709 <span class="keywordflow">if</span>(!hadMipMap)
+00710 {
+00711 tex.releaseMipMaps();
+00712 }
+00713 }
+00714 <span class="keywordflow">else</span>
+00715 nMipMaps= 1;
+00716
+00717 <span class="comment">// For all rect, update the texture/mipmap.</span>
+00718 <span class="comment">//===============================================</span>
+00719 <a class="code" href="a03889.html">list&lt;NLMISC::CRect&gt;</a>::iterator itRect;
+00720 <span class="keywordflow">for</span>(itRect=tex._ListInvalidRect.begin(); itRect!=tex._ListInvalidRect.end(); itRect++)
+00721 {
+00722 <a class="code" href="a03319.html">CRect</a> &amp;rect= *itRect;
+00723 <a class="code" href="a04558.html#a14">sint</a> x0= rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>;
+00724 <a class="code" href="a04558.html#a14">sint</a> y0= rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>;
+00725 <a class="code" href="a04558.html#a14">sint</a> x1= rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>+rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>;
+00726 <a class="code" href="a04558.html#a14">sint</a> y1= rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>+rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>;
+00727
+00728 <span class="comment">// Fill mipmaps.</span>
+00729 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0;i&lt;nMipMaps;i++)
+00730 {
+00731 <span class="keywordtype">void</span> *ptr= tex.getPixels(i).getPtr();
+00732 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a04223.html#a575">w</a>= tex.getWidth(i);
+00733 <a class="code" href="a04558.html#a14">sint</a> h= tex.getHeight(i);
+00734 <a class="code" href="a05378.html#a374">clamp</a>(x0, 0, w);
+00735 <a class="code" href="a05378.html#a374">clamp</a>(y0, 0, h);
+00736 <a class="code" href="a05378.html#a374">clamp</a>(x1, x0, w);
+00737 <a class="code" href="a05378.html#a374">clamp</a>(y1, y0, h);
+00738
+00739 glPixelStorei(GL_UNPACK_ROW_LENGTH, w);
+00740 glPixelStorei(GL_UNPACK_SKIP_ROWS, y0);
+00741 glPixelStorei(GL_UNPACK_SKIP_PIXELS, x0);
+00742 <span class="keywordflow">if</span> (bUpload)
+00743 glTexSubImage2D (GL_TEXTURE_2D, i, x0, y0, x1-x0, y1-y0, glSrcFmt,glSrcType, ptr);
+00744 <span class="keywordflow">else</span>
+00745 glTexSubImage2D (GL_TEXTURE_2D, i, x0, y0, x1-x0, y1-y0, glSrcFmt,glSrcType, NULL);
+00746
+00747 <span class="comment">// Next mipmap!!</span>
+00748 <span class="comment">// floor .</span>
+00749 x0= x0/2;
+00750 y0= y0/2;
+00751 <span class="comment">// ceil.</span>
+00752 x1= (x1+1)/2;
+00753 y1= (y1+1)/2;
+00754 }
+00755 }
+00756
+00757 <span class="comment">// Reset the transfer mode...</span>
+00758 glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
+00759 glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
+00760 glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
+00761 }
+00762 }
+00763
+00764
+00765 <span class="comment">// Release, if wanted.</span>
+00766 <span class="keywordflow">if</span>(tex.getReleasable())
+00767 tex.release();
+00768
+00769 <span class="comment">// Basic parameters.</span>
+00770 <span class="comment">//==================</span>
+00771 gltext-&gt;WrapS= tex.getWrapS();
+00772 gltext-&gt;WrapT= tex.getWrapT();
+00773 gltext-&gt;MagFilter= tex.getMagFilter();
+00774 gltext-&gt;MinFilter= tex.getMinFilter();
+00775 <span class="keywordflow">if</span>(tex.isTextureCube())
+00776 {
+00777 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_WRAP_S, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(ITexture::Clamp, _Extensions));
+00778 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_WRAP_T, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(ITexture::Clamp, _Extensions));
+00779 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_WRAP_R, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(ITexture::Clamp, _Extensions));
+00780 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MAG_FILTER, <a class="code" href="a05363.html#a411">translateMagFilterToGl</a>(gltext));
+00781 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MIN_FILTER, <a class="code" href="a05363.html#a412">translateMinFilterToGl</a>(gltext));
+00782 }
+00783 <span class="keywordflow">else</span>
+00784 {
+00785 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(gltext-&gt;WrapS, _Extensions));
+00786 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, <a class="code" href="a05363.html#a410">translateWrapToGl</a>(gltext-&gt;WrapT, _Extensions));
+00787 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, <a class="code" href="a05363.html#a411">translateMagFilterToGl</a>(gltext));
+00788 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, <a class="code" href="a05363.html#a412">translateMinFilterToGl</a>(gltext));
+00789 }
+00790
+00791
+00792
+00793 <span class="comment">// Disable texture 0</span>
+00794 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[0]= NULL;
+00795 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[0]= NULL;
+00796 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode(CDriverGLStates::TextureDisabled);
+00797 }
+00798
+00799
+00800 <span class="comment">// The texture is correctly setuped.</span>
+00801 tex.clearTouched();
+00802 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00803 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa92" doxytag="NL3D::CDriverGL::setupUserTextureMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupUserTextureMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>numStages</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mat</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup the texture matrix for a given number of stages (starting from 0)
+<p>
+check if matrix disabled
+<p>
+Definition at line <a class="el" href="a05648.html#l00160">160</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l01000">_UserTexMatEnabled</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05972.html#l00443">NLMISC::CMatrix::get()</a>, <a class="el" href="a05969.html#l00614">NL3D::CMaterial::getFlags()</a>, <a class="el" href="a05641.html#l00377">NL3D::CMaterial::getUserTexMat()</a>, <a class="el" href="a05969.html#l00102">NL3D::IDRV_MAT_USER_TEX_FIRST_BIT</a>, <a class="el" href="a05969.html#l00100">NL3D::IDRV_MAT_USER_TEX_MAT_ALL</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00257">setupMaterial()</a>.
+<p>
+<div class="fragment"><pre>00161 {
+00162 <span class="keywordflow">if</span> (
+00163 (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> != 0 &amp;&amp; (mat.getFlags() &amp; <a class="code" href="a05363.html#a127">IDRV_MAT_USER_TEX_MAT_ALL</a>) == 0)
+00164 || (mat.getFlags() &amp; <a class="code" href="a05363.html#a127">IDRV_MAT_USER_TEX_MAT_ALL</a>) != 0
+00165 )
+00166 {
+00167 glMatrixMode(GL_TEXTURE);
+00168 <span class="comment">// for each stage, setup the texture matrix if needed</span>
+00169 <a class="code" href="a04558.html#a15">uint</a> newMask = (mat.getFlags() &amp; <a class="code" href="a05363.html#a127">IDRV_MAT_USER_TEX_MAT_ALL</a>) &gt;&gt; <a class="code" href="a05363.html#a128">IDRV_MAT_USER_TEX_FIRST_BIT</a>;
+00170 <a class="code" href="a04558.html#a15">uint</a> shiftMask = 1;
+00171 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; numStages ; ++k)
+00172 {
+00173 <span class="keywordflow">if</span> (newMask &amp; shiftMask) <span class="comment">// user matrix for this stage</span>
+00174 {
+00175 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(k);
+00176 glLoadMatrixf(mat.getUserTexMat(k).get());
+00177 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> |= shiftMask;
+00178 }
+00179 <span class="keywordflow">else</span>
+00180 {
+00182 <span class="keywordflow">if</span> (
+00183 (newMask &amp; shiftMask) != (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> &amp; shiftMask)
+00184 )
+00185 {
+00186 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(k);
+00187 glLoadIdentity();
+00188 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr34">_UserTexMatEnabled</a> &amp;= ~shiftMask;
+00189 }
+00190 }
+00191 shiftMask &lt;&lt;= 1;
+00192 }
+00193 glMatrixMode(GL_MODELVIEW);
+00194 }
+00195 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd23" doxytag="NL3D::CDriverGL::setupUVPtr" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupUVPtr </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>stage</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03699.html">CVertexBufferInfo</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>VB</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>uvId</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup a texture stage with an UV from VB.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00449">449</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00988">_LastSetupGLArrayVertexProgram</a>, <a class="el" href="a05643.html#l00187">NL3D::CVertexBufferInfo::ATIValueOffset</a>, <a class="el" href="a05643.html#l00183">NL3D::CVertexBufferInfo::ATIVBHardMode</a>, <a class="el" href="a05643.html#l00185">NL3D::CVertexBufferInfo::ATIVertexObjectId</a>, <a class="el" href="a05650.html#l00594">NL3D::CDriverGLStates::clientActiveTextureARB()</a>, <a class="el" href="a05650.html#l00604">NL3D::CDriverGLStates::enableTexCoordArray()</a>, <a class="el" href="a05645.html#l00412">nglArrayObjectATI</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05643.html#l00175">NL3D::CVertexBufferInfo::Type</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05643.html#l00179">NL3D::CVertexBufferInfo::ValuePtr</a>, <a class="el" href="a05643.html#l00171">NL3D::CVertexBufferInfo::VertexFormat</a>, and <a class="el" href="a05643.html#l00172">NL3D::CVertexBufferInfo::VertexSize</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00479">mapTextureStageToUV()</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, <a class="el" href="a05653.html#l00676">setupGlArraysStd()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>.
+<p>
+<div class="fragment"><pre>00450 {
+00451 <span class="comment">// sould not be called with vertex program Array setuped.</span>
+00452 <a class="code" href="a04199.html#a6">nlassert</a>(!_LastSetupGLArrayVertexProgram);
+00453
+00454 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.clientActiveTextureARB(stage);
+00455 <span class="keywordflow">if</span> (VB.VertexFormat &amp; (CVertexBuffer::TexCoord0Flag&lt;&lt;uvId))
+00456 {
+00457 <span class="comment">// Check type, if not supported, just ignore</span>
+00458 <span class="keywordflow">if</span> (VB.Type[CVertexBuffer::TexCoord0+uvId]==CVertexBuffer::Float2)
+00459 {
+00460 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableTexCoordArray(<span class="keyword">true</span>);
+00461 <span class="comment">// Setup ATI VBHard or std ptr.</span>
+00462 <span class="keywordflow">if</span>(VB.ATIVBHardMode)
+00463 <a class="code" href="a04222.html#a178">nglArrayObjectATI</a>(GL_TEXTURE_COORD_ARRAY, 2, GL_FLOAT, VB.VertexSize,
+00464 VB.ATIVertexObjectId, VB.ATIValueOffset[CVertexBuffer::TexCoord0+uvId]);
+00465 <span class="keywordflow">else</span>
+00466 glTexCoordPointer(2,GL_FLOAT,VB.VertexSize,VB.ValuePtr[CVertexBuffer::TexCoord0+uvId]);
+00467 }
+00468 <span class="keywordflow">else</span>
+00469 {
+00470 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableTexCoordArray(<span class="keyword">false</span>);
+00471 }
+00472 }
+00473 <span class="keywordflow">else</span>
+00474 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableTexCoordArray(<span class="keyword">false</span>);
+00475 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd24" doxytag="NL3D::CDriverGL::setupVertexBuffer" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupVertexBuffer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03692.html">CVertexBuffer</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>VB</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00060">60</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a06711.html#l00264">NL3D::CVertexBuffer::DrvInfos</a>, <a class="el" href="a06711.html#l00265">NL3D::CVertexBuffer::getTouchFlags()</a>, <a class="el" href="a06711.html#l00064">NL3D::ItVBDrvInfoPtrList</a>, and <a class="el" href="a06711.html#l00266">NL3D::CVertexBuffer::resetTouchFlags()</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00087">activeVertexBuffer()</a>.
+<p>
+<div class="fragment"><pre>00061 {
+00062 <span class="comment">// 1. Retrieve/Create driver shader.</span>
+00063 <span class="comment">//==================================</span>
+00064 <span class="keywordflow">if</span> (!VB.DrvInfos)
+00065 {
+00066 <span class="comment">// insert into driver list. (so it is deleted when driver is deleted).</span>
+00067 <a class="code" href="a05363.html#a343">ItVBDrvInfoPtrList</a> it= <a class="code" href="a02434.html#NL3D_1_1IDriverp4">_VBDrvInfos</a>.insert(<a class="code" href="a02434.html#NL3D_1_1IDriverp4">_VBDrvInfos</a>.end());
+00068 <span class="comment">// create and set iterator, for future deletion.</span>
+00069 *it= VB.DrvInfos= <span class="keyword">new</span> CVBDrvInfosGL(<span class="keyword">this</span>, it);
+00070 }
+00071
+00072 <span class="comment">// 2. If necessary, do modifications.</span>
+00073 <span class="comment">//==================================</span>
+00074 <span class="keywordflow">if</span>( VB.getTouchFlags()!=0 )
+00075 {
+00076 <span class="comment">// nop</span>
+00077 <span class="comment">// OK!</span>
+00078 VB.resetTouchFlags();
+00079 }
+00080
+00081
+00082 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00083 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa93" doxytag="NL3D::CDriverGL::setupViewMatrix" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupViewMatrix </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02851.html">CMatrix</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mtx</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup the view matrix (inverse of camera matrix).<p>
+NB: you must <a class="el" href="a02433.html#NL3D_1_1CDriverGLa93">setupViewMatrix()</a> BEFORE <a class="el" href="a02433.html#NL3D_1_1CDriverGLa88">setupModelMatrix()</a>, or else undefined results.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera72">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05649.html#l00086">86</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00623">_LightDirty</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00578">_ModelViewMatrixDirty</a>, <a class="el" href="a05643.html#l00600">_PZBCameraPos</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05643.html#l00598">_SpecularTexMtx</a>, <a class="el" href="a05643.html#l00593">_UserViewMtx</a>, <a class="el" href="a05643.html#l00596">_ViewMtx</a>, <a class="el" href="a05972.html#l00200">NLMISC::CMatrix::identity()</a>, <a class="el" href="a05972.html#l00914">NLMISC::CMatrix::invert()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>, <a class="el" href="a05972.html#l00267">NLMISC::CMatrix::setPos()</a>, <a class="el" href="a05972.html#l00209">NLMISC::CMatrix::setRot()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00087 {
+00088 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr35">_UserViewMtx</a>= mtx;
+00089
+00090 <span class="comment">// Setup the matrix to transform the CScene basis in openGL basis.</span>
+00091 CMatrix changeBasis;
+00092 CVector I(1,0,0);
+00093 CVector J(0,0,-1);
+00094 CVector K(0,1,0);
+00095
+00096 changeBasis.identity();
+00097 changeBasis.setRot(I,J,K, <span class="keyword">true</span>);
+00098 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>=changeBasis*mtx;
+00099 <span class="comment">// Just set the PZBCameraPos to 0.</span>
+00100 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>= CVector::Null;
+00101
+00102 <span class="comment">// Anything that depend on the view martix must be updated.</span>
+00103 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>= <span class="keyword">true</span>;
+00104 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a>= <span class="keyword">true</span>;
+00105 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">true</span>;
+00106 <span class="comment">// All lights must be refresh.</span>
+00107 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>;i++)
+00108 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a>[i]= <span class="keyword">true</span>;
+00109
+00110 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a> = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>;
+00111 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>.setPos(CVector(0.0f,0.0f,0.0f));
+00112 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>.invert();
+00113 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a> = changeBasis * <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>;
+00114
+00115 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa94" doxytag="NL3D::CDriverGL::setupViewMatrixEx" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupViewMatrixEx </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02851.html">CMatrix</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>mtx</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>cameraPos</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup the view matrix (inverse of camera matrix). Extended: give a cameraPos (mtx.Pos() is not taken into account but for <a class="el" href="a02433.html#NL3D_1_1CDriverGLa48">getViewMatrix()</a>), so the driver use it to remove translation from all ModelMatrixes (and lights pos). This approach improves greatly ZBuffer precision.<p>
+This is transparent to user, and <a class="el" href="a02433.html#NL3D_1_1CDriverGLa48">getViewMatrix()</a> return mtx (as in <a class="el" href="a02433.html#NL3D_1_1CDriverGLa93">setupViewMatrix()</a>).<p>
+NB: you must <a class="el" href="a02433.html#NL3D_1_1CDriverGLa94">setupViewMatrixEx()</a> BEFORE <a class="el" href="a02433.html#NL3D_1_1CDriverGLa88">setupModelMatrix()</a>, or else undefined results.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>mtx</em>&nbsp;</td><td>the same view matrix (still with correct "inversed" camera position) as if passed in <a class="el" href="a02433.html#NL3D_1_1CDriverGLa93">setupViewMatrix()</a> </td></tr>
+ <tr><td valign=top><em>cameraPos</em>&nbsp;</td><td>position of the camera (before inversion, ie mtx.getPos()!=cameraPos ).</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera73">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05649.html#l00053">53</a> of file <a class="el" href="a05649.html">driver_opengl_matrix.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00623">_LightDirty</a>, <a class="el" href="a05643.html#l00575">_LightSetupDirty</a>, <a class="el" href="a05643.html#l00578">_ModelViewMatrixDirty</a>, <a class="el" href="a05643.html#l00600">_PZBCameraPos</a>, <a class="el" href="a05643.html#l00587">_RenderSetupDirty</a>, <a class="el" href="a05643.html#l00598">_SpecularTexMtx</a>, <a class="el" href="a05643.html#l00593">_UserViewMtx</a>, <a class="el" href="a05643.html#l00596">_ViewMtx</a>, <a class="el" href="a05972.html#l00200">NLMISC::CMatrix::identity()</a>, <a class="el" href="a05972.html#l00914">NLMISC::CMatrix::invert()</a>, <a class="el" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>, <a class="el" href="a05972.html#l00267">NLMISC::CMatrix::setPos()</a>, <a class="el" href="a05972.html#l00209">NLMISC::CMatrix::setRot()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00054 {
+00055 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr35">_UserViewMtx</a>= mtx;
+00056
+00057 <span class="comment">// Setup the matrix to transform the CScene basis in openGL basis.</span>
+00058 CMatrix changeBasis;
+00059 CVector I(1,0,0);
+00060 CVector J(0,0,-1);
+00061 CVector K(0,1,0);
+00062
+00063 changeBasis.identity();
+00064 changeBasis.setRot(I,J,K, <span class="keyword">true</span>);
+00065 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>=changeBasis*mtx;
+00066 <span class="comment">// Reset the viewMtx position.</span>
+00067 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>.setPos(CVector::Null);
+00068 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr30">_PZBCameraPos</a>= cameraPos;
+00069
+00070 <span class="comment">// Anything that depend on the view martix must be updated.</span>
+00071 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr22">_LightSetupDirty</a>= <span class="keyword">true</span>;
+00072 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr25">_ModelViewMatrixDirty</a>= <span class="keyword">true</span>;
+00073 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr31">_RenderSetupDirty</a>= <span class="keyword">true</span>;
+00074 <span class="comment">// All lights must be refresh.</span>
+00075 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLw0NL3D_1_1CDriverGLw23">MaxLight</a>;i++)
+00076 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr19">_LightDirty</a>[i]= <span class="keyword">true</span>;
+00077
+00078 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a> = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr37">_ViewMtx</a>;
+00079 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>.setPos(CVector(0.0f,0.0f,0.0f));
+00080 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>.invert();
+00081 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a> = changeBasis * <a class="code" href="a02433.html#NL3D_1_1CDriverGLr32">_SpecularTexMtx</a>;
+00082 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa95" doxytag="NL3D::CDriverGL::setupViewport" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupViewport </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const class <a class="el" href="a03704.html">CViewport</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>viewport</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the current viewport<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>viewport</em>&nbsp;</td><td>is a viewport to setup as current viewport.</td></tr>
+ </table>
+</dl>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera74">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01821">1821</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00614">_CurrViewport</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a06722.html#l00044">NL3D::CViewport::init()</a>, <a class="el" href="a05646.html#l01013">width</a>, <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>01822 {
+01823 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01824 <span class="preprocessor"></span> <span class="keywordflow">if</span> (_hWnd == NULL) <span class="keywordflow">return</span>;
+01825
+01826 <span class="comment">// Setup gl viewport</span>
+01827 <span class="keywordtype">int</span> clientWidth = _WindowWidth;
+01828 <span class="keywordtype">int</span> clientHeight = _WindowHeight;
+01829
+01830 <span class="preprocessor">#else // NL_OS_WINDOWS</span>
+01831 <span class="preprocessor"></span>
+01832 XWindowAttributes win_attributes;
+01833 <span class="keywordflow">if</span> (!XGetWindowAttributes(dpy, win, &amp;win_attributes))
+01834 <span class="keywordflow">throw</span> EBadDisplay(<span class="stringliteral">"Can't get window attributes."</span>);
+01835
+01836 <span class="comment">// Setup gl viewport</span>
+01837 <span class="keywordtype">int</span> clientWidth=win_attributes.width;
+01838 <span class="keywordtype">int</span> clientHeight=win_attributes.height;
+01839
+01840 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+01841 <span class="preprocessor"></span>
+01842 <span class="comment">// Get viewport</span>
+01843 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a572">x</a>;
+01844 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a573">y</a>;
+01845 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a632">width</a>;
+01846 <span class="keywordtype">float</span> <a class="code" href="a04223.html#a633">height</a>;
+01847 viewport.getValues (x, y, width, height);
+01848
+01849 <span class="comment">// Setup gl viewport</span>
+01850 <span class="keywordtype">int</span> ix=(<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)clientWidth*<a class="code" href="a04223.html#a572">x</a>);
+01851 <a class="code" href="a05378.html#a374">clamp</a> (ix, 0, clientWidth);
+01852 <span class="keywordtype">int</span> iy=(<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)clientHeight*<a class="code" href="a04223.html#a573">y</a>);
+01853 <a class="code" href="a05378.html#a374">clamp</a> (iy, 0, clientHeight);
+01854 <span class="keywordtype">int</span> iwidth=(<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)clientWidth*<a class="code" href="a04223.html#a632">width</a>);
+01855 <a class="code" href="a05378.html#a374">clamp</a> (iwidth, 0, clientWidth-ix);
+01856 <span class="keywordtype">int</span> iheight=(<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)clientHeight*<a class="code" href="a04223.html#a633">height</a>);
+01857 <a class="code" href="a05378.html#a374">clamp</a> (iheight, 0, clientHeight-iy);
+01858 glViewport (ix, iy, iwidth, iheight);
+01859
+01860 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr5">_CurrViewport</a>.init(ix / (<span class="keywordtype">float</span>) clientWidth, iy / (<span class="keywordtype">float</span>) clientHeight,
+01861 iwidth / (<span class="keywordtype">float</span>) clientWidth, iheight / (<span class="keywordtype">float</span>) clientHeight);
+01862
+01863 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz93_2" doxytag="NL3D::CDriverGL::setupWaterPass" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupWaterPass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pass</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l02155">2155</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l01063">ARBWaterShader</a>, <a class="el" href="a05643.html#l01060">ATIWaterShaderHandleNoDiffuseMap</a>, <a class="el" href="a05969.html#l00254">NL3D::CMaterial::getShader()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>, <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>, <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>, <a class="el" href="a05648.html#l01876">setupWaterPassR200()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00554">setupPass()</a>.
+<p>
+<div class="fragment"><pre>02156 {
+02157 <a class="code" href="a04199.html#a6">nlassert</a> (_CurrentMaterial);
+02158 CMaterial &amp;mat = *<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>;
+02159 <a class="code" href="a04199.html#a6">nlassert</a>(_CurrentMaterial-&gt;getShader() == CMaterial::Water);
+02160
+02161 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader)
+02162 {
+02163 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_4">setupWaterPassNV20</a>(mat);
+02164 }
+02165 <span class="keywordflow">else</span>
+02166 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_6">ARBWaterShader</a>[0])
+02167 {
+02168 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_3">setupWaterPassARB</a>(mat);
+02169 }
+02170 <span class="keywordflow">else</span>
+02171 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_8">ATIWaterShaderHandleNoDiffuseMap</a>)
+02172 {
+02173 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz112_5">setupWaterPassR200</a>(mat);
+02174 }
+02175
+02176 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_3" doxytag="NL3D::CDriverGL::setupWaterPassARB" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupWaterPassARB </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mat</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+water setup for ARB_fragment_program
+<p>
+Unfortunately, the EXT_vertex_shader extension has to output the fog values in the [0, 1] range to work with the standard pipeline. So we must add a special path for this case, where the fog coordinate is 'unscaled' again. NB : this is fixed in later drivers (from 6.14.10.6343), so chek this
+<p>
+Definition at line <a class="el" href="a05648.html#l01956">1956</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l01080">_ATIFogRangeFixed</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00609">_FogEnabled</a>, <a class="el" href="a05643.html#l00610">_FogEnd</a>, <a class="el" href="a05643.html#l00610">_FogStart</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05643.html#l01063">ARBWaterShader</a>, <a class="el" href="a05645.html#l00083">NL3D::CGlExtensions::EXTVertexShader</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00859">GL_FRAGMENT_PROGRAM_ARB</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a06506.html#l00380">NL3D::ITexture::isBumpMap()</a>, <a class="el" href="a05645.html#l00449">nglBindProgramARB</a>, <a class="el" href="a05645.html#l00454">nglProgramEnvParameter4fARB</a>, <a class="el" href="a06505.html#l00088">NL3D::ITexture::setUploadFormat()</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l02155">setupWaterPass()</a>.
+<p>
+<div class="fragment"><pre>01957 {
+01958 <a class="code" href="a04558.html#a15">uint</a> k;
+01959 ITexture *tex = mat.getTexture(0);
+01960 <span class="keywordflow">if</span> (tex)
+01961 {
+01962 tex-&gt;setUploadFormat(ITexture::RGBA8888);
+01963 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01964 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0, tex);
+01965 }
+01966 tex = mat.getTexture(1);
+01967 <span class="keywordflow">if</span> (tex)
+01968 {
+01969 tex-&gt;setUploadFormat(ITexture::RGBA8888);
+01970 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01971 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(1, tex);
+01972 }
+01973 tex = mat.getTexture(2);
+01974 <span class="keywordflow">if</span> (tex)
+01975 {
+01976 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01977 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(2, tex);
+01978 }
+01979 tex = mat.getTexture(3);
+01980 <span class="keywordflow">if</span> (tex)
+01981 {
+01982 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01983 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(3, tex);
+01984 }
+01985 <span class="keywordflow">for</span> (k = 4; k &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); ++k)
+01986 {
+01987 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(k, NULL);
+01988 }
+01989 <a class="code" href="a04222.html#a201">nglBindProgramARB</a>(GL_FRAGMENT_PROGRAM_ARB, ARBWaterShader[(_FogEnabled ? 1 : 0) | (mat.getTexture(3) != NULL ? 2 : 0)]);
+01990 glEnable(GL_FRAGMENT_PROGRAM_ARB);
+01991 <span class="comment">// setup the constant</span>
+01992 <span class="keywordflow">if</span> (mat.getTexture(0) &amp;&amp; mat.getTexture(0)-&gt;isBumpMap())
+01993 {
+01994 <span class="keywordtype">float</span> factor = 0.25f * NLMISC::safe_cast&lt;CTextureBump *&gt;(mat.getTexture(0))-&gt;getNormalizationFactor();
+01995 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 0, 2.f * factor, -1.f * factor, 0.f, 0.f); <span class="comment">// scale_bias from [0, 1] to [-1, 1] and factor applied</span>
+01996 }
+01997 <span class="keywordflow">else</span>
+01998 {
+01999 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 0, 2.f, -1.f, 0.f, 0.f); <span class="comment">// scale_bias from [0, 1] to [-1, 1] and factor applied</span>
+02000 }
+02001
+02002 <span class="comment">// setup the constant</span>
+02003 <span class="keywordflow">if</span> (mat.getTexture(1) &amp;&amp; mat.getTexture(1)-&gt;isBumpMap())
+02004 {
+02005 <span class="keywordtype">float</span> factor = NLMISC::safe_cast&lt;CTextureBump *&gt;(mat.getTexture(1))-&gt;getNormalizationFactor();
+02006 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 1, 2.f * factor, -1.f * factor, 0.f, 0.f); <span class="comment">// scale_bias from [0, 1] to [-1, 1] and factor applied</span>
+02007 }
+02008 <span class="keywordflow">else</span>
+02009 {
+02010 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 1, 2.f, -1.f, 0.f, 0.f); <span class="comment">// scale_bias from [0, 1] to [-1, 1] and factor applied</span>
+02011 }
+02012
+02013 <span class="keywordflow">if</span> (_FogEnabled)
+02014 {
+02015 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr9">_FogStart</a> == <a class="code" href="a02433.html#NL3D_1_1CDriverGLr8">_FogEnd</a>)
+02016 {
+02017 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 2, 0.f, 0.f, 0.f, 0.f);
+02018 }
+02019 <span class="keywordflow">else</span>
+02020 {
+02025 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTVertexShader &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLr1">_ATIFogRangeFixed</a>)
+02026 {
+02027 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 2, 1.f, 0.f, 0.f, 0.f);
+02028 }
+02029 <span class="keywordflow">else</span>
+02030 {
+02031 <span class="comment">//\TODO nico: test this pass when we got hardware to test it</span>
+02032 <a class="code" href="a04222.html#a206">nglProgramEnvParameter4fARB</a>(GL_FRAGMENT_PROGRAM_ARB, 2, - 1.f/ (_FogEnd - _FogStart), _FogEnd / (_FogEnd - _FogStart), 0.f, 0.f);
+02033 }
+02034 }
+02035 }
+02036
+02037 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_4" doxytag="NL3D::CDriverGL::setupWaterPassNV20" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupWaterPassNV20 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mat</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05648.html#l02064">2064</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05969.html#l00589">NL3D::CMaterial::_Textures</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a05642.html#l02409">enableNVTextureShader()</a>, <a class="el" href="a02842.html#NL3D_1_1CMaterial_1_1CTexEnvo1">NL3D::CMaterial::CTexEnv::Env</a>, <a class="el" href="a06511.html#l00382">NL3D::CTextureBump::getNormalizationFactor()</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00422">GL_OFFSET_TEXTURE_MATRIX_NV</a>, <a class="el" href="a05646.html#l00419">GL_TEXTURE_SHADER_NV</a>, <a class="el" href="a05648.html#l02060">NL3D::IdentityTexMat</a>, <a class="el" href="a05969.html#l00047">NL3D::IDRV_MAT_MAXTEXTURES</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a06506.html#l00380">NL3D::ITexture::isBumpMap()</a>, <a class="el" href="a05622.html#l00541">nlctassert</a>, <a class="el" href="a05648.html#l00238">setTextureShaders()</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05648.html#l02043">NL3D::WaterNoDiffuseTexAddrMode</a>, and <a class="el" href="a05648.html#l02052">NL3D::WaterTexAddrMode</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l02155">setupWaterPass()</a>.
+<p>
+<div class="fragment"><pre>02065 {
+02066
+02067 <span class="keyword">static</span> <span class="keywordtype">bool</span> setupDone = <span class="keyword">false</span>;
+02068 <span class="keyword">static</span> CMaterial::CTexEnv texEnvReplace;
+02069 <span class="keyword">static</span> CMaterial::CTexEnv texEnvModulate;
+02070
+02071 <span class="keywordflow">if</span> (!setupDone)
+02072 {
+02073 texEnvReplace.Env.OpRGB = CMaterial::Replace;
+02074 texEnvReplace.Env.OpAlpha = CMaterial::Replace;
+02075 <span class="comment">// use default setup for texenv modulate</span>
+02076 setupDone = <span class="keyword">true</span>;
+02077 }
+02078
+02079 <span class="comment">// activate the textures &amp; set the matrixs</span>
+02080 ITexture *tex = mat.getTexture(0);
+02081 <span class="keywordflow">if</span> (tex)
+02082 {
+02083 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+02084 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0, tex);
+02085 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(1);
+02086 <span class="keywordflow">if</span> (tex-&gt;isBumpMap())
+02087 {
+02088 CTextureBump *tb = static_cast&lt;CTextureBump *&gt;(tex);
+02089 <span class="comment">// set the matrix for the texture shader</span>
+02090 <span class="keywordtype">float</span> factor = tb-&gt;getNormalizationFactor();
+02091 <span class="keywordtype">float</span> tsMatrix[4] = { 0.25f * factor, 0.f, 0.f, 0.25f * factor };
+02092 glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, tsMatrix);
+02093 }
+02094 <span class="keywordflow">else</span>
+02095 {
+02096 glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, IdentityTexMat);
+02097 }
+02098 }
+02099 tex = mat.getTexture(1);
+02100 <span class="keywordflow">if</span> (tex)
+02101 {
+02102 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+02103 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(1, tex);
+02104 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB(2);
+02105 <span class="keywordflow">if</span> (tex-&gt;isBumpMap())
+02106 {
+02107 CTextureBump *tb = static_cast&lt;CTextureBump *&gt;(tex);
+02108 <span class="comment">// set the matrix for the texture shader</span>
+02109 <span class="keywordtype">float</span> factor = tb-&gt;getNormalizationFactor();
+02110 <span class="keywordtype">float</span> tsMatrix[4] = { factor, 0.f, 0.f, factor };
+02111 glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, tsMatrix);
+02112 }
+02113 <span class="keywordflow">else</span>
+02114 {
+02115 glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, IdentityTexMat);
+02116 }
+02117 }
+02118 tex = mat.getTexture(2);
+02119 <span class="keywordflow">if</span> (tex)
+02120 {
+02121 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+02122 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(2, tex);
+02123 }
+02124 tex = mat.getTexture(3);
+02125 <span class="keywordflow">if</span> (tex)
+02126 {
+02127 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+02128 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(3, tex);
+02129 }
+02130 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> k = 4; k &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); ++k)
+02131 {
+02132 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(k, NULL);
+02133 }
+02134
+02135
+02136 <span class="comment">// setup the texture shaders</span>
+02137 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd8">enableNVTextureShader</a>(<span class="keyword">true</span>);
+02138 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(0, texEnvReplace);
+02139 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(1, texEnvReplace);
+02140 <a class="code" href="a04199.html#a16">nlctassert</a>(IDRV_MAT_MAXTEXTURES == 4); <span class="comment">// if this value changes, may have to change the arrays WaterNoDiffuseTexAddrMode &amp; WaterTexAddrMode</span>
+02141 <span class="keywordflow">if</span> (mat.getTexture(3) == NULL)
+02142 {
+02143 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_2">setTextureShaders</a>(WaterNoDiffuseTexAddrMode, mat._Textures);
+02144 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(2, texEnvReplace);
+02145 }
+02146 <span class="keywordflow">else</span>
+02147 {
+02148 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_2">setTextureShaders</a>(WaterTexAddrMode, mat._Textures);
+02149 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(2, texEnvReplace);
+02150 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd2">activateTexEnvMode</a>(3, texEnvModulate);
+02151 }
+02152 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_5" doxytag="NL3D::CDriverGL::setupWaterPassR200" ></a><p>
+<table class="mdTable" 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::CDriverGL::setupWaterPassR200 </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02839.html">CMaterial</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>mat</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+water setup for ATI
+<p>
+Definition at line <a class="el" href="a05648.html#l01876">1876</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05643.html#l01061">ATIWaterShaderHandle</a>, <a class="el" href="a05643.html#l01060">ATIWaterShaderHandleNoDiffuseMap</a>, <a class="el" href="a05641.html#l00046">NL3D::CMaterial::getTexture()</a>, <a class="el" href="a05646.html#l00730">GL_CON_0_ATI</a>, <a class="el" href="a05646.html#l00731">GL_CON_1_ATI</a>, <a class="el" href="a05646.html#l00697">GL_FRAGMENT_SHADER_ATI</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a06506.html#l00380">NL3D::ITexture::isBumpMap()</a>, <a class="el" href="a05645.html#l00430">nglBindFragmentShaderATI</a>, <a class="el" href="a05645.html#l00442">nglSetFragmentShaderConstantATI</a>, <a class="el" href="a06512.html#l00090">NL3D::CTextureBump::setSignedFormat()</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l02155">setupWaterPass()</a>.
+<p>
+<div class="fragment"><pre>01877 {
+01878 <a class="code" href="a04558.html#a15">uint</a> k;
+01879 ITexture *tex = mat.getTexture(0);
+01880 <span class="keywordflow">if</span> (tex)
+01881 {
+01882 <span class="keywordflow">if</span> (tex-&gt;isBumpMap())
+01883 {
+01884 CTextureBump *tb = static_cast&lt;CTextureBump *&gt;(tex);
+01885 tb-&gt;setSignedFormat(<span class="keyword">false</span>);
+01886 }
+01887 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01888 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(0, tex);
+01889 }
+01890 tex = mat.getTexture(1);
+01891 <span class="keywordflow">if</span> (tex)
+01892 {
+01893 <span class="keywordflow">if</span> (tex-&gt;isBumpMap())
+01894 {
+01895 CTextureBump *tb = static_cast&lt;CTextureBump *&gt;(tex);
+01896 tb-&gt;setSignedFormat(<span class="keyword">false</span>);
+01897 }
+01898 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01899 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(1, tex);
+01900 }
+01901 tex = mat.getTexture(2);
+01902 <span class="keywordflow">if</span> (tex)
+01903 {
+01904 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01905 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(2, tex);
+01906 }
+01907 tex = mat.getTexture(3);
+01908 <span class="keywordflow">if</span> (tex)
+01909 {
+01910 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(*tex);
+01911 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(3, tex);
+01912 }
+01913 <span class="keywordflow">for</span> (k = 4; k &lt; (<a class="code" href="a04558.html#a15">uint</a>) <a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); ++k)
+01914 {
+01915 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(k, NULL);
+01916 }
+01917 <span class="keywordflow">if</span> (mat.getTexture(3) != NULL) <span class="comment">// is there a diffuse map ?</span>
+01918 {
+01919 <a class="code" href="a04222.html#a187">nglBindFragmentShaderATI</a>(ATIWaterShaderHandle);
+01920 }
+01921 <span class="keywordflow">else</span>
+01922 {
+01923 <a class="code" href="a04222.html#a187">nglBindFragmentShaderATI</a>(ATIWaterShaderHandleNoDiffuseMap);
+01924 }
+01925 glEnable(GL_FRAGMENT_SHADER_ATI);
+01926 <span class="comment">// set constants</span>
+01927 <span class="keywordflow">if</span> (mat.getTexture(0) &amp;&amp; mat.getTexture(0)-&gt;isBumpMap())
+01928 {
+01929 <span class="keywordtype">float</span> factor = NLMISC::safe_cast&lt;CTextureBump *&gt;(mat.getTexture(0))-&gt;getNormalizationFactor();
+01930 <span class="keywordtype">float</span> cst[4] = { factor, factor, factor, 0.f };
+01931 <a class="code" href="a04222.html#a199">nglSetFragmentShaderConstantATI</a>(GL_CON_0_ATI, cst);
+01932 }
+01933 <span class="keywordflow">else</span>
+01934 {
+01935 <span class="keywordtype">float</span> cst[4] = { 1.f, 1.f, 1.f, 0.f };
+01936 <a class="code" href="a04222.html#a199">nglSetFragmentShaderConstantATI</a>(GL_CON_0_ATI, cst);
+01937 }
+01938 <span class="comment">//</span>
+01939 <span class="keywordflow">if</span> (mat.getTexture(1) &amp;&amp; mat.getTexture(1)-&gt;isBumpMap())
+01940 {
+01941 <span class="keywordtype">float</span> factor = NLMISC::safe_cast&lt;CTextureBump *&gt;(mat.getTexture(1))-&gt;getNormalizationFactor();
+01942 <span class="keywordtype">float</span> cst[4] = { factor, factor, factor, 0.f };
+01943 <a class="code" href="a04222.html#a199">nglSetFragmentShaderConstantATI</a>(GL_CON_1_ATI, cst);
+01944 }
+01945 <span class="keywordflow">else</span>
+01946 {
+01947 <span class="keywordtype">float</span> cst[4] = { 1.f, 1.f, 1.f, 0.f };
+01948 <a class="code" href="a04222.html#a199">nglSetFragmentShaderConstantATI</a>(GL_CON_0_ATI, cst);
+01949 }
+01950 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa96" doxytag="NL3D::CDriverGL::showCursor" ></a><p>
+<table class="mdTable" 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::CDriverGL::showCursor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>b</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+show cursor if b is true, or hide it if b is false
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz145_6">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01925">1925</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+<div class="fragment"><pre>01926 {
+01927 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01928 <span class="preprocessor"></span> <span class="keywordflow">if</span> (b)
+01929 {
+01930 <span class="keywordflow">while</span> (ShowCursor(b) &lt; 0) {};
+01931 }
+01932 <span class="keywordflow">else</span>
+01933 {
+01934 <span class="keywordflow">while</span> (ShowCursor(b) &gt;= 0) {};
+01935 }
+01936 <span class="preprocessor">#elif defined (NL_OS_UNIX)</span>
+01937 <span class="preprocessor"></span>
+01938 <span class="keywordflow">if</span> (b)
+01939 {
+01940 <span class="keywordflow">if</span> (cursor != None)
+01941 {
+01942 XFreeCursor(dpy, cursor);
+01943 cursor = None;
+01944 }
+01945 XUndefineCursor(dpy, win);
+01946 }
+01947 <span class="keywordflow">else</span>
+01948 {
+01949 <span class="keywordflow">if</span> (cursor == None)
+01950 {
+01951 <span class="keywordtype">char</span> bm_no_data[] = { 0,0,0,0, 0,0,0,0 };
+01952 Pixmap pixmap_no_data = XCreateBitmapFromData (dpy, win, bm_no_data, 8, 8);
+01953 XColor black;
+01954 memset(&amp;black, 0, <span class="keyword">sizeof</span> (XColor));
+01955 black.flags = DoRed | DoGreen | DoBlue;
+01956 cursor = XCreatePixmapCursor (dpy, pixmap_no_data, pixmap_no_data, &amp;black, &amp;black, 0, 0);
+01957 XFreePixmap(dpy, pixmap_no_data);
+01958 }
+01959 XDefineCursor(dpy, win, cursor);
+01960 }
+01961 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+01962 <span class="preprocessor"></span>}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa97" doxytag="NL3D::CDriverGL::slowUnlockVertexBufferHard" ></a><p>
+<table class="mdTable" 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::CDriverGL::slowUnlockVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return true if driver support VertexBufferHard, but vbHard-&gt;unlock() are slow (ATI-openGL).
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera75">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00502">502</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00896">_SlowUnlockVBHard</a>.
+<p>
+<div class="fragment"><pre>00503 {
+00504 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_8">_SlowUnlockVBHard</a>;
+00505 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa98" doxytag="NL3D::CDriverGL::startProfileVBHardLock" ></a><p>
+<table class="mdTable" 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::CDriverGL::startProfileVBHardLock </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+If the driver support it, enable profile VBHard locks. No-Op if already profiling
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz141_8">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03079">3079</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00940">_CurVBHardLockCount</a>, <a class="el" href="a05643.html#l00941">_NumVBHardProfileFrame</a>, <a class="el" href="a05643.html#l00939">_VBHardProfiles</a>, and <a class="el" href="a05643.html#l00938">_VBHardProfiling</a>.
+<p>
+<div class="fragment"><pre>03080 {
+03081 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a>)
+03082 <span class="keywordflow">return</span>;
+03083
+03084 <span class="comment">// start</span>
+03085 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.clear();
+03086 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_11">_VBHardProfiles</a>.reserve(50);
+03087 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a>= <span class="keyword">true</span>;
+03088 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>= 0;
+03089 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_6">_NumVBHardProfileFrame</a>= 0;
+03090 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa99" doxytag="NL3D::CDriverGL::startSpecularBatch" ></a><p>
+<table class="mdTable" 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::CDriverGL::startSpecularBatch </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Special for Faster Specular Setup. Call this between lot of primitives rendered with Specular Materials. Visual Errors may arise if you don't correclty call <a class="el" href="a02433.html#NL3D_1_1CDriverGLa20">endSpecularBatch()</a>.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera76">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05648.html#l00969">969</a> of file <a class="el" href="a05648.html">driver_opengl_material.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00789">_SpecularBatchOn</a>, and <a class="el" href="a05648.html#l00985">setupSpecularBegin()</a>.
+<p>
+<div class="fragment"><pre>00970 {
+00971 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_5">_SpecularBatchOn</a>= <span class="keyword">true</span>;
+00972
+00973 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz91_2">setupSpecularBegin</a>();
+00974 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz78_6" doxytag="NL3D::CDriverGL::supportBlendConstantColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportBlendConstantColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Does the driver support Blend Constant Color ??? If yes CMaterial::blendConstant* enum can be used for blend Src ord Dst factor. If no, using these enum will have undefined results.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz153_5">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02559">2559</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00088">NL3D::CGlExtensions::EXTBlendColor</a>.
+<p>
+<div class="fragment"><pre>02560 {
+02561 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTBlendColor;
+02562 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa100" doxytag="NL3D::CDriverGL::supportCloudRenderSinglePass" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportCloudRenderSinglePass </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_13">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l03193">3193</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05645.html#l00105">NL3D::CGlExtensions::ATIXTextureEnvRoute</a>, <a class="el" href="a05645.html#l00071">NL3D::CGlExtensions::EXTTextureEnvCombine</a>, and <a class="el" href="a05645.html#l00080">NL3D::CGlExtensions::NVTextureEnvCombine4</a>.
+<p>
+<div class="fragment"><pre>03194 {
+03195 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureEnvCombine4 || (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIXTextureEnvRoute &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTTextureEnvCombine);
+03196 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz76_2" doxytag="NL3D::CDriverGL::supportEMBM" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportEMBM </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz151_2">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02657">2657</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00103">NL3D::CGlExtensions::ATIEnvMapBumpMap</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02686">initEMBM()</a>, <a class="el" href="a05642.html#l02664">isEMBMSupportedAtStage()</a>, and <a class="el" href="a05642.html#l02673">setEMBMMatrix()</a>.
+<p>
+<div class="fragment"><pre>02658 {
+02659 <span class="comment">// For now, supported via ATI extension</span>
+02660 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.ATIEnvMapBumpMap;
+02661 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa101" doxytag="NL3D::CDriverGL::supportPerPixelLighting" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportPerPixelLighting </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>specular</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera77">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02445">2445</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00628">_SupportPerPixelShader</a>, and <a class="el" href="a05643.html#l00629">_SupportPerPixelShaderNoSpec</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01367">beginPPLMultiPass()</a>, and <a class="el" href="a05648.html#l01552">beginPPLNoSpecMultiPass()</a>.
+<p>
+<div class="fragment"><pre>02446 {
+02447 <span class="keywordflow">return</span> specular ? <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_4">_SupportPerPixelShader</a> : <a class="code" href="a02433.html#NL3D_1_1CDriverGLz83_5">_SupportPerPixelShaderNoSpec</a>;
+02448 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz74_3" doxytag="NL3D::CDriverGL::supportTextureShaders" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportTextureShaders </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+test wether the device supports some form of texture shader. (could be limited to DX6 EMBM for example)
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz149_3">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l02369">2369</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00084">NL3D::CGlExtensions::NVTextureShader</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02398">setMatrix2DForTextureOffsetAddrMode()</a>.
+<p>
+<div class="fragment"><pre>02370 {
+02371 <span class="comment">// fully supported by NV_TEXTURE_SHADER </span>
+02372 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVTextureShader;
+02373 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa102" doxytag="NL3D::CDriverGL::supportVertexBufferHard" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportVertexBufferHard </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+return true if driver support VertexBufferHard.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera78">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05653.html#l00495">495</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00895">_SupportVBHard</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01229">initVertexArrayRange()</a>.
+<p>
+<div class="fragment"><pre>00496 {
+00497 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_9">_SupportVBHard</a>;
+00498 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz104_11" doxytag="NL3D::CDriverGL::supportVertexProgramDoubleSidedColor" ></a><p>
+<table class="mdTable" 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::CDriverGL::supportVertexProgramDoubleSidedColor </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [private, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Check if the driver support double sided colors vertex programs.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDriverz147_14">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05656.html#l01442">1442</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00564">_Extensions</a>, and <a class="el" href="a05645.html#l00082">NL3D::CGlExtensions::NVVertexProgram</a>.
+<p>
+<div class="fragment"><pre>01443 {
+01444 <span class="comment">// currenlty only supported by NV_VERTEX_PROGRAM</span>
+01445 <span class="keywordflow">return</span> <a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.NVVertexProgram;
+01446 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa103" doxytag="NL3D::CDriverGL::swapBuffers" ></a><p>
+<table class="mdTable" 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::CDriverGL::swapBuffers </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Swap the back and front buffers.
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera79">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05642.html#l01536">1536</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00653">_CurrentMaterial</a>, <a class="el" href="a05643.html#l00658">_CurrentTexture</a>, <a class="el" href="a05643.html#l00660">_CurrentTextureInfoGL</a>, <a class="el" href="a05643.html#l00889">_CurrentVertexBufferHard</a>, <a class="el" href="a05643.html#l00940">_CurVBHardLockCount</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00918">_NbSetupMaterialCall</a>, <a class="el" href="a05643.html#l00919">_NbSetupModelMatrixCall</a>, <a class="el" href="a05643.html#l00941">_NumVBHardProfileFrame</a>, <a class="el" href="a05643.html#l00673">_NVTextureShaderEnabled</a>, <a class="el" href="a05643.html#l00915">_PrimitiveProfileIn</a>, <a class="el" href="a05643.html#l00916">_PrimitiveProfileOut</a>, <a class="el" href="a05643.html#l00921">_TextureUsed</a>, <a class="el" href="a05643.html#l00938">_VBHardProfiling</a>, <a class="el" href="a05643.html#l00878">_VertexBufferHardSet</a>, <a class="el" href="a05653.html#l00128">activeVertexBuffer()</a>, <a class="el" href="a05969.html#l00520">NL3D::CMaterial::CTexEnv::ConstantColor</a>, <a class="el" href="a05643.html#l00699">forceActivateTexEnvColor()</a>, <a class="el" href="a05652.html#l01054">forceActivateTexEnvMode()</a>, <a class="el" href="a05650.html#l00067">NL3D::CDriverGLStates::forceDefaults()</a>, <a class="el" href="a05646.html#l00419">GL_TEXTURE_SHADER_NV</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05655.html#l00199">NL3D::CVertexBufferHardGLNVidia::isFenceSet()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06205.html#l00035">NL3D::CPrimitiveProfile::reset()</a>, <a class="el" href="a06339.html#l00066">NLMISC::CRGBA::set()</a>, <a class="el" href="a06290.html#l00049">NL3D::CPtrSet&lt; IVertexBufferHardGL &gt;::Set</a>, <a class="el" href="a06710.html#l00409">NL3D::CVertexBuffer::setNumVertices()</a>, <a class="el" href="a06710.html#l00169">NL3D::CVertexBuffer::setVertexFormat()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05654.html#l00403">NL3D::CVertexBufferHardGLNVidia::testFence()</a>.
+<p>
+<div class="fragment"><pre>01537 {
+01538 <span class="comment">// Reset texture shaders</span>
+01539 <span class="comment">//resetTextureShaders();</span>
+01540
+01541
+01542 <span class="comment">/* Yoyo: must do this (GeForce bug ??) esle weird results if end render with a VBHard.</span>
+01543 <span class="comment"> Setup a std vertex buffer to ensure NVidia synchronisation.</span>
+01544 <span class="comment"> */</span>
+01545 <span class="keyword">static</span> CVertexBuffer dummyVB;
+01546 <span class="keyword">static</span> <span class="keywordtype">bool</span> dummyVBinit= <span class="keyword">false</span>;
+01547 <span class="keywordflow">if</span>(!dummyVBinit)
+01548 {
+01549 dummyVBinit= <span class="keyword">true</span>;
+01550 <span class="comment">// setup a full feature VB (maybe not usefull ... :( ).</span>
+01551 dummyVB.setVertexFormat(CVertexBuffer::PositionFlag|CVertexBuffer::NormalFlag|
+01552 CVertexBuffer::PrimaryColorFlag|CVertexBuffer::SecondaryColorFlag|
+01553 CVertexBuffer::TexCoord0Flag|CVertexBuffer::TexCoord1Flag|
+01554 CVertexBuffer::TexCoord2Flag|CVertexBuffer::TexCoord3Flag
+01555 );
+01556 <span class="comment">// some vertices.</span>
+01557 dummyVB.setNumVertices(10);
+01558 }
+01559 <span class="comment">/* activate each frame to close VBHard rendering. </span>
+01560 <span class="comment"> NVidia: This also force a SetFence on if last VB was a VBHard, "closing" it before swap.</span>
+01561 <span class="comment"> */</span>
+01562 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa2">activeVertexBuffer</a>(dummyVB);
+01563 <a class="code" href="a04199.html#a6">nlassert</a>(_CurrentVertexBufferHard==NULL);
+01564
+01565
+01566 <span class="comment">/* PATCH For Possible NVidia Synchronisation.</span>
+01567 <span class="comment"> /*/</span>
+01568 <span class="comment"> // Because of Bug with GeForce, must finishFence() for all VBHard.</span>
+01569 <span class="comment"> /*set&lt;IVertexBufferHardGL*&gt;::iterator itVBHard= _VertexBufferHardSet.Set.begin();</span>
+01570 <span class="comment"> while(itVBHard != _VertexBufferHardSet.Set.end() )</span>
+01571 <span class="comment"> {</span>
+01572 <span class="comment"> // Need only to do it for NVidia VB ones.</span>
+01573 <span class="comment"> if((*itVBHard)-&gt;NVidiaVertexBufferHard)</span>
+01574 <span class="comment"> {</span>
+01575 <span class="comment"> CVertexBufferHardGLNVidia *vbHardNV= static_cast&lt;CVertexBufferHardGLNVidia*&gt;(*itVBHard);</span>
+01576 <span class="comment"> // If needed, "flush" these VB.</span>
+01577 <span class="comment"> vbHardNV-&gt;finishFence();</span>
+01578 <span class="comment"> }</span>
+01579 <span class="comment"> itVBHard++;</span>
+01580 <span class="comment"> }*/</span>
+01581 <span class="comment">/* Need to Do this code only if Synchronisation PATCH before not done!</span>
+01582 <span class="comment"> AS NV_Fence GeForce Implementation says. Test each frame the NVFence, until completion. </span>
+01583 <span class="comment"> NB: finish is not required here. Just test. This is like a "non block synchronisation"</span>
+01584 <span class="comment"> */</span>
+01585 set&lt;IVertexBufferHardGL*&gt;::iterator itVBHard= <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.begin();
+01586 <span class="keywordflow">while</span>(itVBHard != <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_10">_VertexBufferHardSet</a>.Set.end() )
+01587 {
+01588 <span class="keywordflow">if</span>((*itVBHard)-&gt;VBType == IVertexBufferHardGL::NVidiaVB)
+01589 {
+01590 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz100_17">CVertexBufferHardGLNVidia</a> *vbHardNV= static_cast&lt;CVertexBufferHardGLNVidia*&gt;(*itVBHard);
+01591 <span class="keywordflow">if</span>(vbHardNV-&gt;isFenceSet())
+01592 {
+01593 <span class="comment">// update Fence Cache.</span>
+01594 vbHardNV-&gt;testFence();
+01595 }
+01596 }
+01597 itVBHard++;
+01598 }
+01599
+01600
+01601 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01602 <span class="preprocessor"></span> <span class="keywordflow">if</span> (_EventEmitter.getNumEmitters() &gt; 1) <span class="comment">// is direct input running ?</span>
+01603 {
+01604 <span class="comment">// flush direct input messages if any</span>
+01605 NLMISC::safe_cast&lt;NLMISC::CDIEventEmitter *&gt;(_EventEmitter.getEmitter(1))-&gt;poll();
+01606 }
+01607 <span class="preprocessor">#endif</span>
+01608 <span class="preprocessor"></span>
+01609
+01610 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+01611 <span class="preprocessor"></span> SwapBuffers(_hDC);
+01612 <span class="preprocessor">#else // NL_OS_WINDOWS</span>
+01613 <span class="preprocessor"></span> glXSwapBuffers(dpy, win);
+01614 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+01615 <span class="preprocessor"></span>
+01616 <span class="comment">// Activate the default texture environnments for all stages.</span>
+01617 <span class="comment">//===========================================================</span>
+01618 <span class="comment">// This is not a requirement, but it ensure a more stable state each frame.</span>
+01619 <span class="comment">// (well, maybe the good reason is "it hides much more the bugs" :o) ).</span>
+01620 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> stage=0;stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); stage++)
+01621 {
+01622 <span class="comment">// init no texture.</span>
+01623 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[stage]= NULL;
+01624 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[stage]= NULL;
+01625 <span class="comment">// texture are disabled in DriverGLStates.forceDefaults().</span>
+01626
+01627 <span class="comment">// init default env.</span>
+01628 CMaterial::CTexEnv env; <span class="comment">// envmode init to default.</span>
+01629 env.ConstantColor.set(255,255,255,255);
+01630 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd11">forceActivateTexEnvMode</a>(stage, env);
+01631 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd10">forceActivateTexEnvColor</a>(stage, env);
+01632 }
+01633
+01634
+01635 <span class="comment">// Activate the default material.</span>
+01636 <span class="comment">//===========================================================</span>
+01637 <span class="comment">// Same reasoning as textures :)</span>
+01638 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.forceDefaults(<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>());
+01639 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a>)
+01640 {
+01641 glDisable(GL_TEXTURE_SHADER_NV);
+01642 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_12">_NVTextureShaderEnabled</a> = <span class="keyword">false</span>;
+01643 }
+01644 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_3">_CurrentMaterial</a>= NULL;
+01645
+01646 <span class="comment">// Reset the profiling counter.</span>
+01647 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_7">_PrimitiveProfileIn</a>.reset();
+01648 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_8">_PrimitiveProfileOut</a>.reset();
+01649 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_4">_NbSetupMaterialCall</a>= 0;
+01650 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_5">_NbSetupModelMatrixCall</a>= 0;
+01651
+01652 <span class="comment">// Reset the texture set</span>
+01653 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_10">_TextureUsed</a>.clear();
+01654
+01655 <span class="comment">// Reset Profile VBHardLock</span>
+01656 <span class="keywordflow">if</span>(<a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_12">_VBHardProfiling</a>)
+01657 {
+01658 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_3">_CurVBHardLockCount</a>= 0;
+01659 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz102_6">_NumVBHardProfileFrame</a>++;
+01660 }
+01661
+01662 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01663 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa104" doxytag="NL3D::CDriverGL::swapTextureHandle" ></a><p>
+<table class="mdTable" 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::CDriverGL::swapTextureHandle </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex0</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex1</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Special method to internally swap the Driver handle of 2 textures. USE IT WITH CARE (eg: may have Size problems, mipmap problems, format problems ...) Actually, it is used only by <a class="el" href="a02230.html">CAsyncTextureManager</a>, to manage Lods of DXTC <a class="el" href="a03502.html">CTextureFile</a>. NB: internally, all textures slots are disabled.
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera80">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l01185">1185</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05643.html#l00110">NL3D::CTextureDrvInfosGL::Compressed</a>, <a class="el" href="a05652.html#l00089">NL3D::getTextureGl()</a>, <a class="el" href="a05643.html#l00108">NL3D::CTextureDrvInfosGL::ID</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05643.html#l00123">NL3D::CTextureDrvInfosGL::MagFilter</a>, <a class="el" href="a05643.html#l00124">NL3D::CTextureDrvInfosGL::MinFilter</a>, <a class="el" href="a05643.html#l00112">NL3D::CTextureDrvInfosGL::MipMap</a>, <a class="el" href="a05652.html#l00354">setupTexture()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05643.html#l00115">NL3D::CTextureDrvInfosGL::TextureMemory</a>, <a class="el" href="a05643.html#l00121">NL3D::CTextureDrvInfosGL::WrapS</a>, and <a class="el" href="a05643.html#l00122">NL3D::CTextureDrvInfosGL::WrapT</a>.
+<p>
+<div class="fragment"><pre>01186 {
+01187 <span class="comment">// ensure creation of both texture</span>
+01188 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(tex0);
+01189 <a class="code" href="a02433.html#NL3D_1_1CDriverGLa90">setupTexture</a>(tex1);
+01190
+01191 <span class="comment">// avoid any problem, disable all textures</span>
+01192 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> stage=0; stage&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>() ; stage++)
+01193 {
+01194 <a class="code" href="a02433.html#NL3D_1_1CDriverGLd3">activateTexture</a>(stage, NULL);
+01195 }
+01196
+01197 <span class="comment">// get the handle.</span>
+01198 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a> *t0= <a class="code" href="a05363.html#a407">getTextureGl</a>(tex0);
+01199 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a> *t1= <a class="code" href="a05363.html#a407">getTextureGl</a>(tex1);
+01200
+01201 <span class="comment">/* Swap contents. Can't swap directly the pointers cause would have to change all CTextureDrvShare which point on</span>
+01202 <span class="comment"> Can't do swap(*t0, *t1), because must keep the correct _DriverIterator</span>
+01203 <span class="comment"> */</span>
+01204 swap(t0-&gt;ID, t1-&gt;ID);
+01205 swap(t0-&gt;MipMap, t1-&gt;MipMap);
+01206 swap(t0-&gt;Compressed, t1-&gt;Compressed);
+01207 swap(t0-&gt;TextureMemory, t1-&gt;TextureMemory);
+01208 swap(t0-&gt;WrapS, t1-&gt;WrapS);
+01209 swap(t0-&gt;WrapT, t1-&gt;WrapT);
+01210 swap(t0-&gt;MagFilter, t1-&gt;MagFilter);
+01211 swap(t0-&gt;MinFilter, t1-&gt;MinFilter);
+01212
+01213 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa105" doxytag="NL3D::CDriverGL::systemMessageBox" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a02434.html#NL3D_1_1IDriverw35">TMessageBoxId</a> NL3D::CDriverGL::systemMessageBox </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>message</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverw36">TMessageBoxType</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>type</em> = okType, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02434.html#NL3D_1_1IDriverw34">TMessageBoxIcon</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>icon</em> = noIcon</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Output a system message box and print a message with an icon. This method can be call even if the driver is not initialized. This method is used to return internal driver problem when string can't be displayed in the driver window. If the driver can't open a messageBox, it should not override this method and let the <a class="el" href="a02434.html">IDriver</a> class manage it with the ASCII console.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>message</em>&nbsp;</td><td>This is the message to display in the message box. </td></tr>
+ <tr><td valign=top><em>title</em>&nbsp;</td><td>This is the title of the message box. </td></tr>
+ <tr><td valign=top><em>type</em>&nbsp;</td><td>This is the type of the message box, ie number of button and label of buttons. </td></tr>
+ <tr><td valign=top><em>icon</em>&nbsp;</td><td>This is the icon of the message box should use like warning, error etc...</td></tr>
+ </table>
+</dl>
+
+<p>
+Reimplemented from <a class="el" href="a02434.html#NL3D_1_1IDrivera81">NL3D::IDriver</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd25" doxytag="NL3D::CDriverGL::toggleGlArraysForEXTVertexShader" ></a><p>
+<table class="mdTable" 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::CDriverGL::toggleGlArraysForEXTVertexShader </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00792">792</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a06717.html#l00111">NL3D::CVertexProgram::_DrvInfo</a>, <a class="el" href="a05643.html#l00988">_LastSetupGLArrayVertexProgram</a>, <a class="el" href="a05643.html#l00991">_LastSetuppedVP</a>, <a class="el" href="a05650.html#l00594">NL3D::CDriverGLStates::clientActiveTextureARB()</a>, <a class="el" href="a05650.html#l00561">NL3D::CDriverGLStates::enableColorArray()</a>, <a class="el" href="a05650.html#l00537">NL3D::CDriverGLStates::enableNormalArray()</a>, <a class="el" href="a05650.html#l00604">NL3D::CDriverGLStates::enableTexCoordArray()</a>, <a class="el" href="a05650.html#l00525">NL3D::CDriverGLStates::enableVertexArray()</a>, <a class="el" href="a05650.html#l00631">NL3D::CDriverGLStates::enableVertexAttribArrayForEXTVertexShader()</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05643.html#l00979">isVertexProgramEnabled()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05646.html#l01132">value</a>, and <a class="el" href="a05643.html#l01096">NL3D::CVertexProgamDrvInfosGL::Variants</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01033">setupGlArrays()</a>.
+<p>
+<div class="fragment"><pre>00793 {
+00794 <span class="comment">// If change of setup type, must disable olds.</span>
+00795 <span class="comment">//=======================</span>
+00796
+00797
+00798 <span class="comment">// If last was a VertexProgram setup, and now it is a standard GL array setup.</span>
+00799 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a> &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> () )
+00800 {
+00801 CVertexProgram *vp = <a class="code" href="a02433.html#NL3D_1_1CDriverGLr17">_LastSetuppedVP</a>;
+00802 <span class="keywordflow">if</span> (vp)
+00803 {
+00804 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn3">CVertexProgamDrvInfosGL</a> *drvInfo = NLMISC::safe_cast&lt;CVertexProgamDrvInfosGL *&gt;((<a class="code" href="a02434.html#NL3D_1_1IDrivern5">IVertexProgramDrvInfos</a> *) vp-&gt;_DrvInfo);
+00805 <span class="keywordflow">if</span> (drvInfo)
+00806 {
+00807 <span class="comment">// Disable all VertexAttribs.</span>
+00808 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a658">value</a>=0; <a class="code" href="a04223.html#a658">value</a>&lt;CVertexBuffer::NumValue; <a class="code" href="a04223.html#a658">value</a>++)
+00809 {
+00810 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArrayForEXTVertexShader(value, <span class="keyword">false</span>, drvInfo-&gt;Variants);
+00811 }
+00812 }
+00813 }
+00814 <span class="comment">// no more a vertex program setup.</span>
+00815 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a>= <span class="keyword">false</span>;
+00816 }
+00817
+00818 <span class="comment">// If last was a standard GL array setup, and now it is a VertexProgram setup.</span>
+00819 <span class="keywordflow">if</span>( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a> &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> () )
+00820 {
+00821 <span class="comment">// Disable all standards ptrs.</span>
+00822 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexArray(<span class="keyword">false</span>);
+00823 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableNormalArray(<span class="keyword">false</span>);
+00824 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00825 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0; i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); i++)
+00826 {
+00827 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.clientActiveTextureARB(i);
+00828 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableTexCoordArray(<span class="keyword">false</span>);
+00829 }
+00830
+00831
+00832 <span class="comment">// now, vertex program setup.</span>
+00833 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a>= <span class="keyword">true</span>;
+00834 }
+00835 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd26" doxytag="NL3D::CDriverGL::toggleGlArraysForNVVertexProgram" ></a><p>
+<table class="mdTable" 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::CDriverGL::toggleGlArraysForNVVertexProgram </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05653.html#l00748">748</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00988">_LastSetupGLArrayVertexProgram</a>, <a class="el" href="a05650.html#l00594">NL3D::CDriverGLStates::clientActiveTextureARB()</a>, <a class="el" href="a05650.html#l00561">NL3D::CDriverGLStates::enableColorArray()</a>, <a class="el" href="a05650.html#l00537">NL3D::CDriverGLStates::enableNormalArray()</a>, <a class="el" href="a05650.html#l00575">NL3D::CDriverGLStates::enableSecondaryColorArray()</a>, <a class="el" href="a05650.html#l00604">NL3D::CDriverGLStates::enableTexCoordArray()</a>, <a class="el" href="a05650.html#l00525">NL3D::CDriverGLStates::enableVertexArray()</a>, <a class="el" href="a05650.html#l00617">NL3D::CDriverGLStates::enableVertexAttribArray()</a>, <a class="el" href="a05653.html#l00653">GLVertexAttribIndex</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05643.html#l00979">isVertexProgramEnabled()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05646.html#l01132">value</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l01033">setupGlArrays()</a>.
+<p>
+<div class="fragment"><pre>00749 {
+00750 <span class="comment">// If change of setup type, must disable olds.</span>
+00751 <span class="comment">//=======================</span>
+00752
+00753 <span class="comment">// If last was a VertexProgram setup, and now it is a standard GL array setup.</span>
+00754 <span class="keywordflow">if</span>( <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a> &amp;&amp; !<a class="code" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> () )
+00755 {
+00756
+00757 <span class="comment">// Disable all VertexAttribs.</span>
+00758 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a658">value</a>=0; <a class="code" href="a04223.html#a658">value</a>&lt;CVertexBuffer::NumValue; <a class="code" href="a04223.html#a658">value</a>++)
+00759 {
+00760 <span class="comment">// Index</span>
+00761 <a class="code" href="a04558.html#a15">uint</a> glIndex=<a class="code" href="a02433.html#NL3D_1_1CDriverGLv3">GLVertexAttribIndex</a>[<a class="code" href="a04223.html#a658">value</a>];
+00762 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexAttribArray(glIndex, <span class="keyword">false</span>);
+00763 }
+00764 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00765 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableSecondaryColorArray(<span class="keyword">false</span>);
+00766
+00767 <span class="comment">// no more a vertex program setup.</span>
+00768 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a>= <span class="keyword">false</span>;
+00769 }
+00770
+00771 <span class="comment">// If last was a standard GL array setup, and now it is a VertexProgram setup.</span>
+00772 <span class="keywordflow">if</span>( !<a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a> &amp;&amp; <a class="code" href="a02433.html#NL3D_1_1CDriverGLd15">isVertexProgramEnabled</a> () )
+00773 {
+00774 <span class="comment">// Disable all standards ptrs.</span>
+00775 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableVertexArray(<span class="keyword">false</span>);
+00776 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableNormalArray(<span class="keyword">false</span>);
+00777 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableColorArray(<span class="keyword">false</span>);
+00778 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0; i&lt;<a class="code" href="a02433.html#NL3D_1_1CDriverGLd14">inlGetNumTextStages</a>(); i++)
+00779 {
+00780 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.clientActiveTextureARB(i);
+00781 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.enableTexCoordArray(<span class="keyword">false</span>);
+00782 }
+00783
+00784
+00785 <span class="comment">// now, vertex program setup.</span>
+00786 <a class="code" href="a02433.html#NL3D_1_1CDriverGLr16">_LastSetupGLArrayVertexProgram</a>= <span class="keyword">true</span>;
+00787 }
+00788 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa106" doxytag="NL3D::CDriverGL::uploadTexture" ></a><p>
+<table class="mdTable" 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::CDriverGL::uploadTexture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03319.html">NLMISC::CRect</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rect</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nNumMipMap</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The texture must be created or uploadTexture do nothing. These function can be used to upload piece by piece a texture. Use it in conjunction with setupTextureEx(..., false);
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera82">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l00807">807</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a05643.html#l00658">_CurrentTexture</a>, <a class="el" href="a05643.html#l00660">_CurrentTextureInfoGL</a>, <a class="el" href="a05643.html#l00678">_DriverGLStates</a>, <a class="el" href="a05643.html#l00564">_Extensions</a>, <a class="el" href="a05643.html#l00995">_ForceTextureResizePower</a>, <a class="el" href="a05650.html#l00507">NL3D::CDriverGLStates::activeTextureARB()</a>, <a class="el" href="a06506.html#l00352">NL3D::ITexture::allowDegradation()</a>, <a class="el" href="a05587.html#l00115">NLMISC::clamp()</a>, <a class="el" href="a05645.html#l00077">NL3D::CGlExtensions::EXTTextureCompressionS3TC</a>, <a class="el" href="a05652.html#l00199">NL3D::getGlSrcTextureComponentType()</a>, <a class="el" href="a05652.html#l00170">NL3D::getGlSrcTextureFormat()</a>, <a class="el" href="a05652.html#l00099">getGlTextureFormat()</a>, <a class="el" href="a05486.html#l01388">NLMISC::CBitmap::getHeight()</a>, <a class="el" href="a05487.html#l00369">NLMISC::CBitmap::getMipMapCount()</a>, <a class="el" href="a05487.html#l00335">NLMISC::CBitmap::getPixelFormat()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a06116.html#l00195">NLMISC::CObjectVector&lt; uint8 &gt;::getPtr()</a>, <a class="el" href="a05652.html#l00089">NL3D::getTextureGl()</a>, <a class="el" href="a05486.html#l01363">NLMISC::CBitmap::getWidth()</a>, <a class="el" href="a06320.html#l00116">NLMISC::CRect::Height</a>, <a class="el" href="a05643.html#l00108">NL3D::CTextureDrvInfosGL::ID</a>, <a class="el" href="a05646.html#l01013">imageSize</a>, <a class="el" href="a06506.html#l00376">NL3D::ITexture::isTextureCube()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a06506.html#l00217">NL3D::ITexture::mipMapOn()</a>, <a class="el" href="a05645.html#l00230">nglCompressedTexImage2DARB</a>, <a class="el" href="a05645.html#l00233">nglCompressedTexSubImage2DARB</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05652.html#l00322">NL3D::sameDXTCFormat()</a>, <a class="el" href="a05650.html#l00473">NL3D::CDriverGLStates::setTextureMode()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; uint8 &gt;::size()</a>, <a class="el" href="a06506.html#l00416">NL3D::ITexture::TextureDrvShare</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05646.html#l00236">w</a>, <a class="el" href="a06320.html#l00113">NLMISC::CRect::Width</a>, <a class="el" href="a06320.html#l00107">NLMISC::CRect::X</a>, and <a class="el" href="a06320.html#l00110">NLMISC::CRect::Y</a>.
+<p>
+<div class="fragment"><pre>00808 {
+00809 <span class="keywordflow">if</span> (tex.TextureDrvShare == NULL)
+00810 <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Texture not created</span>
+00811 <span class="keywordflow">if</span> (tex.TextureDrvShare-&gt;DrvTexture == NULL)
+00812 <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Texture not created</span>
+00813 <span class="keywordflow">if</span> (tex.isTextureCube())
+00814 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00815
+00816 <a class="code" href="a04199.html#a6">nlassert</a>(nNumMipMap&lt;(<a class="code" href="a04558.html#a7">uint8</a>)tex.getMipMapCount());
+00817
+00818 <span class="comment">// validate rect.</span>
+00819 <a class="code" href="a04558.html#a14">sint</a> x0 = rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>;
+00820 <a class="code" href="a04558.html#a14">sint</a> y0 = rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>;
+00821 <a class="code" href="a04558.html#a14">sint</a> x1 = rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto2">X</a>+rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto1">Width</a>;
+00822 <a class="code" href="a04558.html#a14">sint</a> y1 = rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto3">Y</a>+rect.<a class="code" href="a03319.html#NLMISC_1_1CRecto0">Height</a>;
+00823 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a04223.html#a575">w</a> = tex.getWidth (nNumMipMap);
+00824 <a class="code" href="a04558.html#a14">sint</a> h = tex.getHeight (nNumMipMap);
+00825 <a class="code" href="a05378.html#a374">clamp</a> (x0, 0, w);
+00826 <a class="code" href="a05378.html#a374">clamp</a> (y0, 0, h);
+00827 <a class="code" href="a05378.html#a374">clamp</a> (x1, x0, w);
+00828 <a class="code" href="a05378.html#a374">clamp</a> (y1, y0, h);
+00829
+00830 <span class="comment">// bind the texture to upload </span>
+00831 <a class="code" href="a02433.html#NL3D_1_1CDriverGLn1">CTextureDrvInfosGL</a>* gltext;
+00832 gltext = <a class="code" href="a05363.html#a407">getTextureGl</a> (tex);
+00833
+00834 <span class="comment">// system of "backup the previous binded texture" seems to not work with some drivers....</span>
+00835 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.activeTextureARB (0);
+00836 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode (CDriverGLStates::Texture2D);
+00837 <span class="comment">// Bind this texture, for reload...</span>
+00838 glBindTexture (GL_TEXTURE_2D, gltext-&gt;ID);
+00839
+00840 glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
+00841
+00842 <span class="keywordtype">bool</span> dummy;
+00843 GLint glfmt = <a class="code" href="a02433.html#NL3D_1_1CDriverGLd12">getGlTextureFormat</a> (tex, dummy);
+00844 GLint glSrcFmt = <a class="code" href="a05363.html#a408">getGlSrcTextureFormat</a> (tex, glfmt);
+00845 GLenum glSrcType= <a class="code" href="a05363.html#a409">getGlSrcTextureComponentType</a>(glSrcFmt);
+00846 <span class="comment">// If DXTC format</span>
+00847 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLz82_0">_Extensions</a>.EXTTextureCompressionS3TC &amp;&amp; <a class="code" href="a05363.html#a413">sameDXTCFormat</a>(tex, glfmt))
+00848 {
+00849
+00850 <a class="code" href="a04558.html#a14">sint</a> nUploadMipMaps;
+00851 <span class="keywordflow">if</span> (tex.mipMapOn())
+00852 nUploadMipMaps = tex.getMipMapCount();
+00853 <span class="keywordflow">else</span>
+00854 nUploadMipMaps = 1;
+00855
+00856 <a class="code" href="a04558.html#a15">uint</a> decalMipMapResize = 0;
+00857 <span class="keywordflow">if</span> (<a class="code" href="a02433.html#NL3D_1_1CDriverGLr12">_ForceTextureResizePower</a>&gt;0 &amp;&amp; tex.allowDegradation() &amp;&amp; nUploadMipMaps&gt;1)
+00858 {
+00859 decalMipMapResize = <a class="code" href="a04061.html#a0">min</a>(_ForceTextureResizePower, (<a class="code" href="a04558.html#a15">uint</a>)(nUploadMipMaps-1));
+00860 }
+00861
+00862 <span class="comment">// Compute src compressed size and location</span>
+00863 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a04223.html#a636">imageSize</a> = (x1-x0)*(y1-y0);
+00864 <span class="keywordtype">void</span> *ptr = tex.getPixels(nNumMipMap).getPtr();
+00865
+00866 <span class="comment">// If DXTC1 or DXTC1A, then 4 bits/texel else 8 bits/texel</span>
+00867 <span class="keywordflow">if</span> (glfmt == GL_COMPRESSED_RGB_S3TC_DXT1_EXT || glfmt == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)
+00868 {
+00869 <a class="code" href="a04223.html#a636">imageSize</a> /= 2;
+00870 ptr = (<a class="code" href="a04558.html#a7">uint8</a>*)ptr + y0*<a class="code" href="a04223.html#a575">w</a>/2 + x0/2;
+00871 }
+00872 <span class="keywordflow">else</span>
+00873 {
+00874 ptr = (<a class="code" href="a04558.html#a7">uint8</a>*)ptr + y0*<a class="code" href="a04223.html#a575">w</a> + x0;
+00875 }
+00876
+00877 <span class="comment">// Upload</span>
+00878
+00879 <span class="keywordflow">if</span> (decalMipMapResize &gt; nNumMipMap)
+00880 {
+00881 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[0]= NULL;
+00882 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[0]= NULL;
+00883 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode (CDriverGLStates::TextureDisabled);
+00884 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00885 }
+00886
+00887
+00888 <a class="code" href="a04199.html#a6">nlassert</a> (((x0&amp;3) == 0) &amp;&amp; ((y0&amp;3) == 0));
+00889 <span class="keywordflow">if</span> ((<a class="code" href="a04223.html#a575">w</a>&gt;=4) &amp;&amp; (h&gt;=4))
+00890 {
+00891 <a class="code" href="a04222.html#a38">nglCompressedTexSubImage2DARB</a> ( GL_TEXTURE_2D, nNumMipMap-decalMipMapResize,
+00892 x0, y0, (x1-x0), (y1-y0), glfmt, imageSize, ptr );
+00893 }
+00894 <span class="keywordflow">else</span>
+00895 {
+00896 <span class="comment">// The CompressedTexSubImage2DARB function do not functionnate properly if width or height</span>
+00897 <span class="comment">// of the mipmap is less than 4 pixel so we use the other form. (its not really time critical</span>
+00898 <span class="comment">// to upload 16 bytes so we can do it twice if texture is cut)</span>
+00899 <a class="code" href="a04223.html#a636">imageSize</a> = tex.getPixels(nNumMipMap).size();
+00900 <a class="code" href="a04222.html#a35">nglCompressedTexImage2DARB</a> (GL_TEXTURE_2D, nNumMipMap-decalMipMapResize,
+00901 glfmt, w, h, 0, imageSize, ptr);
+00902 }
+00903 }
+00904 <span class="keywordflow">else</span>
+00905 {
+00906 <span class="comment">// glSrcFmt and ITexture format must be identical</span>
+00907 <a class="code" href="a04199.html#a6">nlassert</a> (glSrcFmt!=GL_RGBA || tex.getPixelFormat()==CBitmap::RGBA);
+00908
+00909 <span class="keywordtype">void</span> *ptr= tex.getPixels(nNumMipMap).getPtr();
+00910 glPixelStorei (GL_UNPACK_ROW_LENGTH, w);
+00911 glPixelStorei (GL_UNPACK_SKIP_ROWS, y0);
+00912 glPixelStorei (GL_UNPACK_SKIP_PIXELS, x0);
+00913 glTexSubImage2D (GL_TEXTURE_2D, nNumMipMap, x0, y0, x1-x0, y1-y0, glSrcFmt,glSrcType, ptr);
+00914
+00915 <span class="comment">// Reset the transfer mode...</span>
+00916 glPixelStorei (GL_UNPACK_ROW_LENGTH, 0);
+00917 glPixelStorei (GL_UNPACK_SKIP_ROWS, 0);
+00918 glPixelStorei (GL_UNPACK_SKIP_PIXELS, 0);
+00919 }
+00920
+00921 <span class="comment">// Disable texture 0</span>
+00922 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_8">_CurrentTexture</a>[0]= NULL;
+00923 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_9">_CurrentTextureInfoGL</a>[0]= NULL;
+00924 <a class="code" href="a02433.html#NL3D_1_1CDriverGLz85_10">_DriverGLStates</a>.setTextureMode (CDriverGLStates::TextureDisabled);
+00925
+00926 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00927 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLa107" doxytag="NL3D::CDriverGL::uploadTextureCube" ></a><p>
+<table class="mdTable" 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::CDriverGL::uploadTextureCube </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03487.html">ITexture</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>tex</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03319.html">NLMISC::CRect</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rect</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nNumMipMap</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nNumFace</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Implements <a class="el" href="a02434.html#NL3D_1_1IDrivera83">NL3D::IDriver</a>.
+<p>
+Definition at line <a class="el" href="a05652.html#l00930">930</a> of file <a class="el" href="a05652.html">driver_opengl_texture.cpp</a>.
+<p>
+References <a class="el" href="a06506.html#l00376">NL3D::ITexture::isTextureCube()</a>, <a class="el" href="a06506.html#l00416">NL3D::ITexture::TextureDrvShare</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+<div class="fragment"><pre>00931 {
+00932 <span class="keywordflow">if</span> (tex.TextureDrvShare == NULL)
+00933 <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Texture not created</span>
+00934 <span class="keywordflow">if</span> (!tex.isTextureCube())
+00935 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00936
+00937 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00938 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLd27" doxytag="NL3D::CDriverGL::verifyNVTextureShaderConfig" ></a><p>
+<table class="mdTable" 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::CDriverGL::verifyNVTextureShaderConfig </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<hr><h2>Friends And Related Function Documentation</h2>
+<a class="anchor" name="NLGEORGES_1_1UTypen0" doxytag="NL3D::CDriverGL::CPtrInfo" ></a><p>
+<table class="mdTable" 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 struct CPtrInfo<code> [friend, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00067">67</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLn1" doxytag="NL3D::CDriverGL::CTextureDrvInfosGL" ></a><p>
+<table class="mdTable" 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="a03495.html">CTextureDrvInfosGL</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00515">515</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00361">setupTextureEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivern1" doxytag="NL3D::CDriverGL::CTextureDrvShare" ></a><p>
+<table class="mdTable" 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="a03496.html">CTextureDrvShare</a><code> [friend, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00993">993</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00361">setupTextureEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_12" doxytag="NL3D::CDriverGL::CVertexArrayRangeATI" ></a><p>
+<table class="mdTable" 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="a03688.html">CVertexArrayRangeATI</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00881">881</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_13" doxytag="NL3D::CDriverGL::CVertexArrayRangeMapObjectATI" ></a><p>
+<table class="mdTable" 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="a03690.html">CVertexArrayRangeMapObjectATI</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00883">883</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_14" doxytag="NL3D::CDriverGL::CVertexArrayRangeNVidia" ></a><p>
+<table class="mdTable" 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="a03691.html">CVertexArrayRangeNVidia</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00879">879</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_15" doxytag="NL3D::CDriverGL::CVertexBufferHardGLATI" ></a><p>
+<table class="mdTable" 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="a03693.html">CVertexBufferHardGLATI</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00882">882</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_16" doxytag="NL3D::CDriverGL::CVertexBufferHardGLMapObjectATI" ></a><p>
+<table class="mdTable" 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="a03696.html">CVertexBufferHardGLMapObjectATI</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00884">884</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_17" doxytag="NL3D::CDriverGL::CVertexBufferHardGLNVidia" ></a><p>
+<table class="mdTable" 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="a03697.html">CVertexBufferHardGLNVidia</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00880">880</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLn3" doxytag="NL3D::CDriverGL::CVertexProgamDrvInfosGL" ></a><p>
+<table class="mdTable" 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="a03701.html">CVertexProgamDrvInfosGL</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00516">516</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01148">activeEXTVertexShader()</a>, and <a class="el" href="a05656.html#l00079">activeNVVertexProgram()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivern2" doxytag="NL3D::CDriverGL::IShader" ></a><p>
+<table class="mdTable" 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="a03877.html">IShader</a><code> [friend, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00995">995</a> of file <a class="el" href="a05640.html">driver.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivern3" doxytag="NL3D::CDriverGL::ITextureDrvInfos" ></a><p>
+<table class="mdTable" 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="a03879.html">ITextureDrvInfos</a><code> [friend, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00994">994</a> of file <a class="el" href="a05640.html">driver.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivern4" doxytag="NL3D::CDriverGL::IVBDrvInfos" ></a><p>
+<table class="mdTable" 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="a03883.html">IVBDrvInfos</a><code> [friend, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00992">992</a> of file <a class="el" href="a05640.html">driver.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivern5" doxytag="NL3D::CDriverGL::IVertexProgramDrvInfos" ></a><p>
+<table class="mdTable" 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="a03885.html">IVertexProgramDrvInfos</a><code> [friend, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00996">996</a> of file <a class="el" href="a05640.html">driver.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_2" doxytag="NL3D::CDriverGL::_AGPVertexArrayRange" ></a><p>
+<table class="mdTable" 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="a03689.html">IVertexArrayRange</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_2">NL3D::CDriverGL::_AGPVertexArrayRange</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00900">900</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05653.html#l00516">createVertexBufferHard()</a>, <a class="el" href="a05653.html#l01299">getAvailableVertexAGPMemory()</a>, <a class="el" href="a05653.html#l01229">initVertexArrayRange()</a>, <a class="el" href="a05642.html#l01667">release()</a>, and <a class="el" href="a05653.html#l01207">resetVertexArrayRange()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_2" doxytag="NL3D::CDriverGL::_AllocatedTextureMemory" ></a><p>
+<table class="mdTable" 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> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_2">NL3D::CDriverGL::_AllocatedTextureMemory</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00917">917</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02313">profileAllocatedTextureMemory()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, and <a class="el" href="a05652.html#l00073">NL3D::CTextureDrvInfosGL::~CTextureDrvInfosGL()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr0" doxytag="NL3D::CDriverGL::_ATIDriverVersion" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr0">NL3D::CDriverGL::_ATIDriverVersion</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01079">1079</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05642.html#l03199">retrieveATIDriverVersion()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr1" doxytag="NL3D::CDriverGL::_ATIFogRangeFixed" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr1">NL3D::CDriverGL::_ATIFogRangeFixed</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01080">1080</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03199">retrieveATIDriverVersion()</a>, <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>, <a class="el" href="a05642.html#l02245">setupFog()</a>, and <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz109_0" doxytag="NL3D::CDriverGL::_CausticCubeMap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03408.html">NLMISC::CSmartPtr</a>&lt;<a class="el" href="a03492.html">CTextureCube</a>&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLz109_0">NL3D::CDriverGL::_CausticCubeMap</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01012">1012</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr2" doxytag="NL3D::CDriverGL::_CurrentBlendConstantColor" ></a><p>
+<table class="mdTable" 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="a03337.html">NLMISC::CRGBA</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr2">NL3D::CDriverGL::_CurrentBlendConstantColor</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01020">1020</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02576">getBlendConstantColor()</a>, and <a class="el" href="a05642.html#l02564">setBlendConstantColor()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr3" doxytag="NL3D::CDriverGL::_CurrentFogColor" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLfloat <a class="el" href="a02433.html#NL3D_1_1CDriverGLr3">NL3D::CDriverGL::_CurrentFogColor</a>[4]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00611">611</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, <a class="el" href="a05642.html#l02293">getFogColor()</a>, and <a class="el" href="a05642.html#l02245">setupFog()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr4" doxytag="NL3D::CDriverGL::_CurrentGlNormalize" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr4">NL3D::CDriverGL::_CurrentGlNormalize</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00684">684</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05643.html#l00852">enableGlNormalize()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_3" doxytag="NL3D::CDriverGL::_CurrentMaterial" ></a><p>
+<table class="mdTable" 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="a02839.html">CMaterial</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_3">NL3D::CDriverGL::_CurrentMaterial</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00653">653</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01726">beginCloudMultiPass()</a>, <a class="el" href="a05648.html#l00653">beginLightMapMultiPass()</a>, <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, <a class="el" href="a05648.html#l01866">beginWaterMultiPass()</a>, <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l01859">endCloudMultiPass()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, <a class="el" href="a05648.html#l02179">endWaterMultiPass()</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>, <a class="el" href="a05648.html#l02155">setupWaterPass()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_4" doxytag="NL3D::CDriverGL::_CurrentMaterialSupportedShader" ></a><p>
+<table class="mdTable" 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="a02839.html#NL3D_1_1CMaterialw65">CMaterial::TShader</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_4">NL3D::CDriverGL::_CurrentMaterialSupportedShader</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00654">654</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00529">beginMultiPass()</a>, <a class="el" href="a05648.html#l00587">endMultiPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, and <a class="el" href="a05648.html#l00554">setupPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_5" doxytag="NL3D::CDriverGL::_CurrentTexAddrMode" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLenum <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_5">NL3D::CDriverGL::_CurrentTexAddrMode</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00665">665</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l01440">resetTextureShaders()</a>, and <a class="el" href="a05648.html#l00238">setTextureShaders()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_6" doxytag="NL3D::CDriverGL::_CurrentTexEnv" ></a><p>
+<table class="mdTable" 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="a02842.html">CMaterial::CTexEnv</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_6">NL3D::CDriverGL::_CurrentTexEnv</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00661">661</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l01137">activateTexEnvColor()</a>, <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05643.html#l00699">forceActivateTexEnvColor()</a>, and <a class="el" href="a05652.html#l01054">forceActivateTexEnvMode()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_7" doxytag="NL3D::CDriverGL::_CurrentTexEnvSpecial" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz85_0">CTexEnvSpecial</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_7">NL3D::CDriverGL::_CurrentTexEnvSpecial</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00663">663</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l01147">activateTexEnvMode()</a>, <a class="el" href="a05652.html#l01054">forceActivateTexEnvMode()</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, and <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_8" doxytag="NL3D::CDriverGL::_CurrentTexture" ></a><p>
+<table class="mdTable" 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="a03487.html">ITexture</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_8">NL3D::CDriverGL::_CurrentTexture</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00658">658</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05642.html#l02185">copyFrameBufferToTexture()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, <a class="el" href="a05642.html#l01536">swapBuffers()</a>, and <a class="el" href="a05652.html#l00807">uploadTexture()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_9" doxytag="NL3D::CDriverGL::_CurrentTextureInfoGL" ></a><p>
+<table class="mdTable" 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="a03495.html">CTextureDrvInfosGL</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_9">NL3D::CDriverGL::_CurrentTextureInfoGL</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00660">660</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05642.html#l02185">copyFrameBufferToTexture()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, <a class="el" href="a05642.html#l01536">swapBuffers()</a>, and <a class="el" href="a05652.html#l00807">uploadTexture()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_3" doxytag="NL3D::CDriverGL::_CurrentVertexArrayRange" ></a><p>
+<table class="mdTable" 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="a03689.html">IVertexArrayRange</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_3">NL3D::CDriverGL::_CurrentVertexArrayRange</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00887">887</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05654.html#l00549">NL3D::CVertexArrayRangeATI::disable()</a>, <a class="el" href="a05654.html#l00191">NL3D::CVertexArrayRangeNVidia::disable()</a>, <a class="el" href="a05654.html#l00543">NL3D::CVertexArrayRangeATI::enable()</a>, and <a class="el" href="a05654.html#l00166">NL3D::CVertexArrayRangeNVidia::enable()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_4" doxytag="NL3D::CDriverGL::_CurrentVertexBufferHard" ></a><p>
+<table class="mdTable" 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="a03695.html">IVertexBufferHardGL</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_4">NL3D::CDriverGL::_CurrentVertexBufferHard</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00889">889</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00087">activeVertexBuffer()</a>, <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05653.html#l00558">deleteVertexBufferHard()</a>, <a class="el" href="a05654.html#l00862">NL3D::CVertexBufferHardGLMapObjectATI::disable()</a>, <a class="el" href="a05654.html#l00685">NL3D::CVertexBufferHardGLATI::disable()</a>, <a class="el" href="a05654.html#l00366">NL3D::CVertexBufferHardGLNVidia::disable()</a>, <a class="el" href="a05654.html#l00851">NL3D::CVertexBufferHardGLMapObjectATI::enable()</a>, <a class="el" href="a05654.html#l00673">NL3D::CVertexBufferHardGLATI::enable()</a>, <a class="el" href="a05654.html#l00354">NL3D::CVertexBufferHardGLNVidia::enable()</a>, <a class="el" href="a05653.html#l01319">fenceOnCurVBHardIfNeeded()</a>, <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, <a class="el" href="a05653.html#l00226">renderSimpleTriangles()</a>, <a class="el" href="a05653.html#l00187">renderTriangles()</a>, <a class="el" href="a05653.html#l01207">resetVertexArrayRange()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr5" doxytag="NL3D::CDriverGL::_CurrViewport" ></a><p>
+<table class="mdTable" 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="a03704.html">CViewport</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr5">NL3D::CDriverGL::_CurrViewport</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00614">614</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l01866">getViewport()</a>, and <a class="el" href="a05642.html#l01821">setupViewport()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_3" doxytag="NL3D::CDriverGL::_CurVBHardLockCount" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz102_3">NL3D::CDriverGL::_CurVBHardLockCount</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00940">940</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l03131">appendVBHardLockProfile()</a>, <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03079">startProfileVBHardLock()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr6" doxytag="NL3D::CDriverGL::_Depth" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr6">NL3D::CDriverGL::_Depth</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00569">569</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_10" doxytag="NL3D::CDriverGL::_DriverGLStates" ></a><p>
+<table class="mdTable" 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="a02436.html">CDriverGLStates</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_10">NL3D::CDriverGL::_DriverGLStates</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00678">678</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05648.html#l00653">beginLightMapMultiPass()</a>, <a class="el" href="a05642.html#l01520">clearZBuffer()</a>, <a class="el" href="a05642.html#l02185">copyFrameBufferToTexture()</a>, <a class="el" href="a05648.html#l00197">disableUserTextureMatrix()</a>, <a class="el" href="a05642.html#l02239">enableFog()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, <a class="el" href="a05643.html#l00699">forceActivateTexEnvColor()</a>, <a class="el" href="a05652.html#l01054">forceActivateTexEnvMode()</a>, <a class="el" href="a05642.html#l02686">initEMBM()</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, <a class="el" href="a05642.html#l01440">resetTextureShaders()</a>, <a class="el" href="a05642.html#l02673">setEMBMMatrix()</a>, <a class="el" href="a05642.html#l02398">setMatrix2DForTextureOffsetAddrMode()</a>, <a class="el" href="a05648.html#l00117">setTextureEnvFunction()</a>, <a class="el" href="a05648.html#l00238">setTextureShaders()</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05653.html#l00920">setupGlArraysForEXTVertexShader()</a>, <a class="el" href="a05653.html#l00838">setupGlArraysForNVVertexProgram()</a>, <a class="el" href="a05653.html#l00676">setupGlArraysStd()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l00985">setupSpecularBegin()</a>, <a class="el" href="a05648.html#l01022">setupSpecularEnd()</a>, <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, <a class="el" href="a05648.html#l00160">setupUserTextureMatrix()</a>, <a class="el" href="a05653.html#l00449">setupUVPtr()</a>, <a class="el" href="a05648.html#l02064">setupWaterPassNV20()</a>, <a class="el" href="a05642.html#l01536">swapBuffers()</a>, <a class="el" href="a05653.html#l00792">toggleGlArraysForEXTVertexShader()</a>, <a class="el" href="a05653.html#l00748">toggleGlArraysForNVVertexProgram()</a>, and <a class="el" href="a05652.html#l00807">uploadTexture()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_2" doxytag="NL3D::CDriverGL::_EVSColorHandle" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_2">NL3D::CDriverGL::_EVSColorHandle</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01036">1036</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_3" doxytag="NL3D::CDriverGL::_EVSConstantHandle" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_3">NL3D::CDriverGL::_EVSConstantHandle</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01039">1039</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01239">setConstant()</a>, <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>, and <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_4" doxytag="NL3D::CDriverGL::_EVSNormalHandle" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_4">NL3D::CDriverGL::_EVSNormalHandle</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01035">1035</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_7" doxytag="NL3D::CDriverGL::_EVSNumConstant" ></a><p>
+<table class="mdTable" 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="a04558.html#a15">uint</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_7">NL3D::CDriverGL::_EVSNumConstant</a> = 97<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l00099">99</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>, and <a class="el" href="a05642.html#l02245">setupFog()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_5" doxytag="NL3D::CDriverGL::_EVSPositionHandle" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_5">NL3D::CDriverGL::_EVSPositionHandle</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01034">1034</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz111_6" doxytag="NL3D::CDriverGL::_EVSTexHandle" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz111_6">NL3D::CDriverGL::_EVSTexHandle</a>[8]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01037">1037</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l00372">setupEXTVertexShader()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz82_0" doxytag="NL3D::CDriverGL::_Extensions" ></a><p>
+<table class="mdTable" 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="a02587.html">CGlExtensions</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz82_0">NL3D::CDriverGL::_Extensions</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00564">564</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05656.html#l01220">activeVertexProgram()</a>, <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, <a class="el" href="a05642.html#l02427">checkForPerPixelLightingSupport()</a>, <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, <a class="el" href="a05656.html#l00045">NL3D::CVertexProgamDrvInfosGL::CVertexProgamDrvInfosGL()</a>, <a class="el" href="a05654.html#l00191">NL3D::CVertexArrayRangeNVidia::disable()</a>, <a class="el" href="a05642.html#l00392">disableHardwareTextureShader()</a>, <a class="el" href="a05642.html#l00387">disableHardwareVertexArrayAGP()</a>, <a class="el" href="a05642.html#l00382">disableHardwareVertexProgram()</a>, <a class="el" href="a05654.html#l00166">NL3D::CVertexArrayRangeNVidia::enable()</a>, <a class="el" href="a05656.html#l01427">enableVertexProgramDoubleSidedColor()</a>, <a class="el" href="a05648.html#l02179">endWaterMultiPass()</a>, <a class="el" href="a05652.html#l01054">forceActivateTexEnvMode()</a>, <a class="el" href="a05652.html#l00099">getGlTextureFormat()</a>, <a class="el" href="a05642.html#l03046">getSwapVBLInterval()</a>, <a class="el" href="a05642.html#l02686">initEMBM()</a>, <a class="el" href="a05642.html#l02920">initFragmentShaders()</a>, <a class="el" href="a05643.html#l01017">inlGetNumTextStages()</a>, <a class="el" href="a05642.html#l02384">isTextureAddrModeSupported()</a>, <a class="el" href="a05656.html#l00071">isVertexProgramEmulated()</a>, <a class="el" href="a05656.html#l00065">isVertexProgramSupported()</a>, <a class="el" href="a05642.html#l02376">isWaterShaderSupported()</a>, <a class="el" href="a05642.html#l01440">resetTextureShaders()</a>, <a class="el" href="a05642.html#l02564">setBlendConstantColor()</a>, <a class="el" href="a05656.html#l01239">setConstant()</a>, <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>, <a class="el" href="a05642.html#l02673">setEMBMMatrix()</a>, <a class="el" href="a05642.html#l03035">setSwapVBLInterval()</a>, <a class="el" href="a05648.html#l01733">setupCloudPass()</a>, <a class="el" href="a05642.html#l02245">setupFog()</a>, <a class="el" href="a05653.html#l01033">setupGlArrays()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, <a class="el" href="a05648.html#l01376">setupPPLPass()</a>, <a class="el" href="a05648.html#l01067">setupSpecularPass()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, <a class="el" href="a05648.html#l02155">setupWaterPass()</a>, <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>, <a class="el" href="a05642.html#l02559">supportBlendConstantColor()</a>, <a class="el" href="a05642.html#l03193">supportCloudRenderSinglePass()</a>, <a class="el" href="a05642.html#l02657">supportEMBM()</a>, <a class="el" href="a05642.html#l02369">supportTextureShaders()</a>, <a class="el" href="a05656.html#l01442">supportVertexProgramDoubleSidedColor()</a>, and <a class="el" href="a05652.html#l00807">uploadTexture()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr7" doxytag="NL3D::CDriverGL::_FogEnabled" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr7">NL3D::CDriverGL::_FogEnabled</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00609">609</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02239">enableFog()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, <a class="el" href="a05642.html#l02234">fogEnabled()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, and <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr8" doxytag="NL3D::CDriverGL::_FogEnd" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a02433.html#NL3D_1_1CDriverGLr8">NL3D::CDriverGL::_FogEnd</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00610">610</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02287">getFogEnd()</a>, <a class="el" href="a05642.html#l02245">setupFog()</a>, and <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr9" doxytag="NL3D::CDriverGL::_FogStart" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a02433.html#NL3D_1_1CDriverGLr9">NL3D::CDriverGL::_FogStart</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00610">610</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02281">getFogStart()</a>, <a class="el" href="a05642.html#l02245">setupFog()</a>, and <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr10" doxytag="NL3D::CDriverGL::_ForceDXTCCompression" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr10">NL3D::CDriverGL::_ForceDXTCCompression</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00993">993</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05652.html#l01169">forceDXTCCompression()</a>, and <a class="el" href="a05652.html#l00099">getGlTextureFormat()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr11" doxytag="NL3D::CDriverGL::_ForceNormalize" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr11">NL3D::CDriverGL::_ForceNormalize</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00572">572</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>, <a class="el" href="a05643.html#l00298">forceNormalize()</a>, and <a class="el" href="a05643.html#l00306">isForceNormalize()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr12" doxytag="NL3D::CDriverGL::_ForceTextureResizePower" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr12">NL3D::CDriverGL::_ForceTextureResizePower</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Divisor for textureResize (power).
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00995">995</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05652.html#l01175">forceTextureResize()</a>, <a class="el" href="a05652.html#l00361">setupTextureEx()</a>, and <a class="el" href="a05652.html#l00807">uploadTexture()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr13" doxytag="NL3D::CDriverGL::_FullScreen" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr13">NL3D::CDriverGL::_FullScreen</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00523">523</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l01667">release()</a>, and <a class="el" href="a05642.html#l01333">setMode()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr14" doxytag="NL3D::CDriverGL::_GLProjMat" ></a><p>
+<table class="mdTable" 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="a02851.html">NLMISC::CMatrix</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr14">NL3D::CDriverGL::_GLProjMat</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00584">584</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02589">refreshProjMatrixFromGL()</a>, and <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr15" doxytag="NL3D::CDriverGL::_Initialized" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr15">NL3D::CDriverGL::_Initialized</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00559">559</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02059">getVideocardInformation()</a>, and <a class="el" href="a05642.html#l01667">release()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr16" doxytag="NL3D::CDriverGL::_LastSetupGLArrayVertexProgram" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr16">NL3D::CDriverGL::_LastSetupGLArrayVertexProgram</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00988">988</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00449">setupUVPtr()</a>, <a class="el" href="a05653.html#l00792">toggleGlArraysForEXTVertexShader()</a>, and <a class="el" href="a05653.html#l00748">toggleGlArraysForNVVertexProgram()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr17" doxytag="NL3D::CDriverGL::_LastSetuppedVP" ></a><p>
+<table class="mdTable" 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">NLMISC::CRefPtr</a>&lt;<a class="el" href="a03702.html">CVertexProgram</a>&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLr17">NL3D::CDriverGL::_LastSetuppedVP</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00991">991</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01148">activeEXTVertexShader()</a>, <a class="el" href="a05656.html#l00079">activeNVVertexProgram()</a>, <a class="el" href="a05653.html#l00920">setupGlArraysForEXTVertexShader()</a>, and <a class="el" href="a05653.html#l00792">toggleGlArraysForEXTVertexShader()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr18" doxytag="NL3D::CDriverGL::_LastVB" ></a><p>
+<table class="mdTable" 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="a03699.html">CVertexBufferInfo</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr18">NL3D::CDriverGL::_LastVB</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+LastVB for UV setup.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00748">748</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00087">activeVertexBuffer()</a>, <a class="el" href="a05653.html#l00580">activeVertexBufferHard()</a>, <a class="el" href="a05648.html#l00653">beginLightMapMultiPass()</a>, <a class="el" href="a05653.html#l00479">mapTextureStageToUV()</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_5" doxytag="NL3D::CDriverGL::_LastVertexSetupIsLightMap" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz89_5">NL3D::CDriverGL::_LastVertexSetupIsLightMap</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00774">774</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, <a class="el" href="a05653.html#l01033">setupGlArrays()</a>, <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>, and <a class="el" href="a05648.html#l00257">setupMaterial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr19" doxytag="NL3D::CDriverGL::_LightDirty" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr19">NL3D::CDriverGL::_LightDirty</a>[MaxLight]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00623">623</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, <a class="el" href="a05647.html#l00135">enableLight()</a>, <a class="el" href="a05647.html#l00043">setLight()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr20" doxytag="NL3D::CDriverGL::_LightEnable" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr20">NL3D::CDriverGL::_LightEnable</a>[MaxLight]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00619">619</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, and <a class="el" href="a05647.html#l00135">enableLight()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_6" doxytag="NL3D::CDriverGL::_LightMapLastStageEnv" ></a><p>
+<table class="mdTable" 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="a02842.html">CMaterial::CTexEnv</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_6">NL3D::CDriverGL::_LightMapLastStageEnv</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00771">771</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_7" doxytag="NL3D::CDriverGL::_LightMapLUT" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a15">uint</a>&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_7">NL3D::CDriverGL::_LightMapLUT</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00768">768</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_8" doxytag="NL3D::CDriverGL::_LightMapUVMap" ></a><p>
+<table class="mdTable" 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#a6">sint8</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_8">NL3D::CDriverGL::_LightMapUVMap</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00775">775</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l00948">resetLightMapVertexSetup()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr21" doxytag="NL3D::CDriverGL::_LightMode" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr21">NL3D::CDriverGL::_LightMode</a>[MaxLight]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00620">620</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, and <a class="el" href="a05647.html#l00043">setLight()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr22" doxytag="NL3D::CDriverGL::_LightSetupDirty" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr22">NL3D::CDriverGL::_LightSetupDirty</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00575">575</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>, <a class="el" href="a05647.html#l00135">enableLight()</a>, <a class="el" href="a05647.html#l00043">setLight()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_11" doxytag="NL3D::CDriverGL::_MaterialAllTextureTouchedFlag" ></a><p>
+<table class="mdTable" 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> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz85_11">NL3D::CDriverGL::_MaterialAllTextureTouchedFlag</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00680">680</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05648.html#l00257">setupMaterial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr23" doxytag="NL3D::CDriverGL::_MaxDriverLight" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr23">NL3D::CDriverGL::_MaxDriverLight</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00618">618</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, <a class="el" href="a05647.html#l00135">enableLight()</a>, <a class="el" href="a05647.html#l00035">getMaxLight()</a>, and <a class="el" href="a05647.html#l00043">setLight()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_5" doxytag="NL3D::CDriverGL::_MaxVerticesByVBHard" ></a><p>
+<table class="mdTable" 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> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_5">NL3D::CDriverGL::_MaxVerticesByVBHard</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00897">897</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05653.html#l00516">createVertexBufferHard()</a>, <a class="el" href="a05653.html#l00509">getMaxVerticesByVertexBufferHard()</a>, and <a class="el" href="a05653.html#l01229">initVertexArrayRange()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr24" doxytag="NL3D::CDriverGL::_ModelViewMatrix" ></a><p>
+<table class="mdTable" 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="a02851.html">CMatrix</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr24">NL3D::CDriverGL::_ModelViewMatrix</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00606">606</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>, <a class="el" href="a05649.html#l00143">multiplyModelMatrix()</a>, <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>, and <a class="el" href="a05649.html#l00124">setupModelMatrix()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr25" doxytag="NL3D::CDriverGL::_ModelViewMatrixDirty" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr25">NL3D::CDriverGL::_ModelViewMatrixDirty</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00578">578</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>, <a class="el" href="a05649.html#l00143">multiplyModelMatrix()</a>, <a class="el" href="a05649.html#l00124">setupModelMatrix()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_4" doxytag="NL3D::CDriverGL::_NbSetupMaterialCall" ></a><p>
+<table class="mdTable" 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> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_4">NL3D::CDriverGL::_NbSetupMaterialCall</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00918">918</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02320">profileSetupedMaterials()</a>, <a class="el" href="a05648.html#l00257">setupMaterial()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_5" doxytag="NL3D::CDriverGL::_NbSetupModelMatrixCall" ></a><p>
+<table class="mdTable" 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> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_5">NL3D::CDriverGL::_NbSetupModelMatrixCall</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00919">919</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02327">profileSetupedModelMatrix()</a>, <a class="el" href="a05649.html#l00124">setupModelMatrix()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_9" doxytag="NL3D::CDriverGL::_NLightMapPass" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz89_9">NL3D::CDriverGL::_NLightMapPass</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00766">766</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00653">beginLightMapMultiPass()</a>, <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_10" doxytag="NL3D::CDriverGL::_NLightMapPerPass" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz89_10">NL3D::CDriverGL::_NLightMapPerPass</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00765">765</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, <a class="el" href="a05648.html#l00920">endLightMapMultiPass()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz89_11" doxytag="NL3D::CDriverGL::_NLightMaps" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz89_11">NL3D::CDriverGL::_NLightMaps</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Temp Variables computed in <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_0">beginLightMapMultiPass()</a>. Reused in <a class="el" href="a02433.html#NL3D_1_1CDriverGLz89_4">setupLightMapPass()</a>.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00764">764</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00619">computeLightMapInfos()</a>, and <a class="el" href="a05648.html#l00670">setupLightMapPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_6" doxytag="NL3D::CDriverGL::_NumVBHardProfileFrame" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz102_6">NL3D::CDriverGL::_NumVBHardProfileFrame</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00941">941</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03093">endProfileVBHardLock()</a>, <a class="el" href="a05642.html#l03079">startProfileVBHardLock()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_6" doxytag="NL3D::CDriverGL::_NVCurrentVARPtr" ></a><p>
+<table class="mdTable" 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* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_6">NL3D::CDriverGL::_NVCurrentVARPtr</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00891">891</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05654.html#l00166">NL3D::CVertexArrayRangeNVidia::enable()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_7" doxytag="NL3D::CDriverGL::_NVCurrentVARSize" ></a><p>
+<table class="mdTable" 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> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_7">NL3D::CDriverGL::_NVCurrentVARSize</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00892">892</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05654.html#l00166">NL3D::CVertexArrayRangeNVidia::enable()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_12" doxytag="NL3D::CDriverGL::_NVTextureShaderEnabled" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz85_12">NL3D::CDriverGL::_NVTextureShaderEnabled</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00673">673</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02409">enableNVTextureShader()</a>, <a class="el" href="a05642.html#l01440">resetTextureShaders()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr26" doxytag="NL3D::CDriverGL::_OffScreen" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr26">NL3D::CDriverGL::_OffScreen</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00524">524</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02017">getWindowPos()</a>, <a class="el" href="a05642.html#l01989">getWindowSize()</a>, and <a class="el" href="a05642.html#l01667">release()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr27" doxytag="NL3D::CDriverGL::_OODeltaZ" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a02433.html#NL3D_1_1CDriverGLr27">NL3D::CDriverGL::_OODeltaZ</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00590">590</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05649.html#l00031">setFrustum()</a>, and <a class="el" href="a05648.html#l00257">setupMaterial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverp0" doxytag="NL3D::CDriverGL::_PolygonMode" ></a><p>
+<table class="mdTable" 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="a02434.html#NL3D_1_1IDriverw37">TPolygonMode</a> <a class="el" href="a02434.html#NL3D_1_1IDriverp0">NL3D::IDriver::_PolygonMode</a><code> [protected, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00165">165</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05640.html#l00817">NL3D::IDriver::getPolygonMode()</a>, <a class="el" href="a05639.html#l00049">NL3D::IDriver::IDriver()</a>, and <a class="el" href="a05640.html#l00763">NL3D::IDriver::setPolygonMode()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr28" doxytag="NL3D::CDriverGL::_PolygonSmooth" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr28">NL3D::CDriverGL::_PolygonSmooth</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01076">1076</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03061">enablePolygonSmoothing()</a>, and <a class="el" href="a05642.html#l03071">isPolygonSmoothingEnabled()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz83_1" doxytag="NL3D::CDriverGL::_PPLExponent" ></a><p>
+<table class="mdTable" 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 <a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_1">NL3D::CDriverGL::_PPLExponent</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00630">630</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02451">setPerPixelLightingLight()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz83_2" doxytag="NL3D::CDriverGL::_PPLightDiffuseColor" ></a><p>
+<table class="mdTable" 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="a03337.html">NLMISC::CRGBA</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_2">NL3D::CDriverGL::_PPLightDiffuseColor</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00631">631</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02451">setPerPixelLightingLight()</a>, <a class="el" href="a05648.html#l01561">setupPPLNoSpecPass()</a>, and <a class="el" href="a05648.html#l01376">setupPPLPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz83_3" doxytag="NL3D::CDriverGL::_PPLightSpecularColor" ></a><p>
+<table class="mdTable" 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="a03337.html">NLMISC::CRGBA</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz83_3">NL3D::CDriverGL::_PPLightSpecularColor</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00632">632</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02451">setPerPixelLightingLight()</a>, and <a class="el" href="a05648.html#l01376">setupPPLPass()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_7" doxytag="NL3D::CDriverGL::_PrimitiveProfileIn" ></a><p>
+<table class="mdTable" 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="a03116.html">CPrimitiveProfile</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_7">NL3D::CDriverGL::_PrimitiveProfileIn</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00915">915</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02305">profileRenderedPrimitives()</a>, <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, <a class="el" href="a05653.html#l00226">renderSimpleTriangles()</a>, <a class="el" href="a05653.html#l00187">renderTriangles()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_8" doxytag="NL3D::CDriverGL::_PrimitiveProfileOut" ></a><p>
+<table class="mdTable" 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="a03116.html">CPrimitiveProfile</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_8">NL3D::CDriverGL::_PrimitiveProfileOut</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00916">916</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02305">profileRenderedPrimitives()</a>, <a class="el" href="a05653.html#l00135">render()</a>, <a class="el" href="a05653.html#l00291">renderOrientedQuads()</a>, <a class="el" href="a05653.html#l00253">renderPoints()</a>, <a class="el" href="a05653.html#l00410">renderQuads()</a>, <a class="el" href="a05653.html#l00226">renderSimpleTriangles()</a>, <a class="el" href="a05653.html#l00187">renderTriangles()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr29" doxytag="NL3D::CDriverGL::_ProjMatDirty" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr29">NL3D::CDriverGL::_ProjMatDirty</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00581">581</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02589">refreshProjMatrixFromGL()</a>, and <a class="el" href="a05649.html#l00031">setFrustum()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr30" doxytag="NL3D::CDriverGL::_PZBCameraPos" ></a><p>
+<table class="mdTable" 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="a03128.html">CVector</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr30">NL3D::CDriverGL::_PZBCameraPos</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00600">600</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, <a class="el" href="a05649.html#l00124">setupModelMatrix()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr31" doxytag="NL3D::CDriverGL::_RenderSetupDirty" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr31">NL3D::CDriverGL::_RenderSetupDirty</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00587">587</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05649.html#l00156">doRefreshRenderSetup()</a>, <a class="el" href="a05647.html#l00135">enableLight()</a>, <a class="el" href="a05649.html#l00143">multiplyModelMatrix()</a>, <a class="el" href="a05643.html#l00865">refreshRenderSetup()</a>, <a class="el" href="a05647.html#l00043">setLight()</a>, <a class="el" href="a05649.html#l00124">setupModelMatrix()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverp1" doxytag="NL3D::CDriverGL::_Shaders" ></a><p>
+<table class="mdTable" 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="a05363.html#a286">TShaderPtrList</a> <a class="el" href="a02434.html#NL3D_1_1IDriverp1">NL3D::IDriver::_Shaders</a><code> [protected, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00163">163</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05639.html#l00073">NL3D::IDriver::release()</a>, <a class="el" href="a05639.html#l00232">NL3D::IDriver::removeShaderPtr()</a>, and <a class="el" href="a05639.html#l00055">NL3D::IDriver::~IDriver()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_8" doxytag="NL3D::CDriverGL::_SlowUnlockVBHard" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz100_8">NL3D::CDriverGL::_SlowUnlockVBHard</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00896">896</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05653.html#l00502">slowUnlockVertexBufferHard()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz91_5" doxytag="NL3D::CDriverGL::_SpecularBatchOn" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz91_5">NL3D::CDriverGL::_SpecularBatchOn</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00789">789</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01035">beginSpecularMultiPass()</a>, <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l00977">endSpecularBatch()</a>, <a class="el" href="a05648.html#l01236">endSpecularMultiPass()</a>, and <a class="el" href="a05648.html#l00969">startSpecularBatch()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr32" doxytag="NL3D::CDriverGL::_SpecularTexMtx" ></a><p>
+<table class="mdTable" 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="a02851.html">CMatrix</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr32">NL3D::CDriverGL::_SpecularTexMtx</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00598">598</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l00985">setupSpecularBegin()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz95_10" doxytag="NL3D::CDriverGL::_SpecularTextureCubes" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz95_1">TTexCubeVect</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLz95_10">NL3D::CDriverGL::_SpecularTextureCubes</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00814">814</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05648.html#l01266">getSpecularCubeMap()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz85_13" doxytag="NL3D::CDriverGL::_StageSupportEMBM" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz85_13">NL3D::CDriverGL::_StageSupportEMBM</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00675">675</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02686">initEMBM()</a>, and <a class="el" href="a05642.html#l02664">isEMBMSupportedAtStage()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_9" doxytag="NL3D::CDriverGL::_SumTextureMemoryUsed" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz102_9">NL3D::CDriverGL::_SumTextureMemoryUsed</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00920">920</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05642.html#l02334">enableUsedTextureMemorySum()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz83_4" doxytag="NL3D::CDriverGL::_SupportPerPixelShader" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz83_4">NL3D::CDriverGL::_SupportPerPixelShader</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00628">628</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02427">checkForPerPixelLightingSupport()</a>, <a class="el" href="a05648.html#l00221">getSupportedShader()</a>, and <a class="el" href="a05642.html#l02445">supportPerPixelLighting()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz83_5" doxytag="NL3D::CDriverGL::_SupportPerPixelShaderNoSpec" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz83_5">NL3D::CDriverGL::_SupportPerPixelShaderNoSpec</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00629">629</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l02427">checkForPerPixelLightingSupport()</a>, <a class="el" href="a05648.html#l00221">getSupportedShader()</a>, and <a class="el" href="a05642.html#l02445">supportPerPixelLighting()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_9" doxytag="NL3D::CDriverGL::_SupportVBHard" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz100_9">NL3D::CDriverGL::_SupportVBHard</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00895">895</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, and <a class="el" href="a05653.html#l00495">supportVertexBufferHard()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverp2" doxytag="NL3D::CDriverGL::_SyncTexDrvInfos" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> CSynchronized&lt;<a class="el" href="a03916.html">TTexDrvInfoPtrMap</a>&gt; <a class="el" href="a02434.html#NL3D_1_1IDriverp2">NL3D::IDriver::_SyncTexDrvInfos</a><code> [protected, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00160">160</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05639.html#l00243">NL3D::IDriver::invalidateShareTexture()</a>, <a class="el" href="a05639.html#l00073">NL3D::IDriver::release()</a>, <a class="el" href="a05639.html#l00219">NL3D::IDriver::removeTextureDrvInfoPtr()</a>, and <a class="el" href="a05639.html#l00055">NL3D::IDriver::~IDriver()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverp3" doxytag="NL3D::CDriverGL::_TexDrvShares" ></a><p>
+<table class="mdTable" 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="a05363.html#a296">TTexDrvSharePtrList</a> <a class="el" href="a02434.html#NL3D_1_1IDriverp3">NL3D::IDriver::_TexDrvShares</a><code> [protected, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00162">162</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05639.html#l00243">NL3D::IDriver::invalidateShareTexture()</a>, <a class="el" href="a05639.html#l00073">NL3D::IDriver::release()</a>, <a class="el" href="a05639.html#l00227">NL3D::IDriver::removeTextureDrvSharePtr()</a>, and <a class="el" href="a05639.html#l00055">NL3D::IDriver::~IDriver()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_10" doxytag="NL3D::CDriverGL::_TextureUsed" ></a><p>
+<table class="mdTable" 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::set&lt;<a class="el" href="a03495.html">CTextureDrvInfosGL</a>*&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_10">NL3D::CDriverGL::_TextureUsed</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00921">921</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05652.html#l00941">activateTexture()</a>, <a class="el" href="a05642.html#l02343">getUsedTextureMemory()</a>, <a class="el" href="a05642.html#l01536">swapBuffers()</a>, and <a class="el" href="a05652.html#l00073">NL3D::CTextureDrvInfosGL::~CTextureDrvInfosGL()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr33" doxytag="NL3D::CDriverGL::_UserTexMat" ></a><p>
+<table class="mdTable" 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="a02851.html">NLMISC::CMatrix</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr33">NL3D::CDriverGL::_UserTexMat</a>[<a class="el" href="a05363.html#a83">IDRV_MAT_MAXTEXTURES</a>]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00999">999</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr34" doxytag="NL3D::CDriverGL::_UserTexMatEnabled" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr34">NL3D::CDriverGL::_UserTexMatEnabled</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01000">1000</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05648.html#l00197">disableUserTextureMatrix()</a>, and <a class="el" href="a05648.html#l00160">setupUserTextureMatrix()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr35" doxytag="NL3D::CDriverGL::_UserViewMtx" ></a><p>
+<table class="mdTable" 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="a02851.html">CMatrix</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr35">NL3D::CDriverGL::_UserViewMtx</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00593">593</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05649.html#l00118">getViewMatrix()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverp4" doxytag="NL3D::CDriverGL::_VBDrvInfos" ></a><p>
+<table class="mdTable" 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="a05363.html#a342">TVBDrvInfoPtrList</a> <a class="el" href="a02434.html#NL3D_1_1IDriverp4">NL3D::IDriver::_VBDrvInfos</a><code> [protected, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00164">164</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05639.html#l00073">NL3D::IDriver::release()</a>, <a class="el" href="a05639.html#l00214">NL3D::IDriver::removeVBDrvInfoPtr()</a>, and <a class="el" href="a05639.html#l00055">NL3D::IDriver::~IDriver()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_11" doxytag="NL3D::CDriverGL::_VBHardProfiles" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02435.html">CVBHardProfile</a>&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLz102_11">NL3D::CDriverGL::_VBHardProfiles</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00939">939</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l03131">appendVBHardLockProfile()</a>, <a class="el" href="a05642.html#l03093">endProfileVBHardLock()</a>, and <a class="el" href="a05642.html#l03079">startProfileVBHardLock()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz102_12" doxytag="NL3D::CDriverGL::_VBHardProfiling" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLz102_12">NL3D::CDriverGL::_VBHardProfiling</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00938">938</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03093">endProfileVBHardLock()</a>, <a class="el" href="a05654.html#l00304">NL3D::CVertexBufferHardGLNVidia::lock()</a>, <a class="el" href="a05642.html#l03079">startProfileVBHardLock()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_10" doxytag="NL3D::CDriverGL::_VertexBufferHardSet" ></a><p>
+<table class="mdTable" 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="a03262.html">CPtrSet</a>&lt;<a class="el" href="a03695.html">IVertexBufferHardGL</a>&gt; <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_10">NL3D::CDriverGL::_VertexBufferHardSet</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00878">878</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00516">createVertexBufferHard()</a>, <a class="el" href="a05653.html#l00558">deleteVertexBufferHard()</a>, <a class="el" href="a05642.html#l03157">profileVBHardAllocation()</a>, <a class="el" href="a05653.html#l01207">resetVertexArrayRange()</a>, and <a class="el" href="a05642.html#l01536">swapBuffers()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr36" doxytag="NL3D::CDriverGL::_VertexProgramEnabled" ></a><p>
+<table class="mdTable" 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="a02433.html#NL3D_1_1CDriverGLr36">NL3D::CDriverGL::_VertexProgramEnabled</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00986">986</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01148">activeEXTVertexShader()</a>, <a class="el" href="a05656.html#l00079">activeNVVertexProgram()</a>, and <a class="el" href="a05643.html#l00979">isVertexProgramEnabled()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr37" doxytag="NL3D::CDriverGL::_ViewMtx" ></a><p>
+<table class="mdTable" 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="a02851.html">CMatrix</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr37">NL3D::CDriverGL::_ViewMtx</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00596">596</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, <a class="el" href="a05649.html#l00124">setupModelMatrix()</a>, <a class="el" href="a05649.html#l00086">setupViewMatrix()</a>, and <a class="el" href="a05649.html#l00053">setupViewMatrixEx()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz100_11" doxytag="NL3D::CDriverGL::_VRAMVertexArrayRange" ></a><p>
+<table class="mdTable" 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="a03689.html">IVertexArrayRange</a>* <a class="el" href="a02433.html#NL3D_1_1CDriverGLz100_11">NL3D::CDriverGL::_VRAMVertexArrayRange</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00902">902</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05653.html#l00516">createVertexBufferHard()</a>, <a class="el" href="a05653.html#l01309">getAvailableVertexVRAMMemory()</a>, <a class="el" href="a05653.html#l01229">initVertexArrayRange()</a>, <a class="el" href="a05642.html#l01667">release()</a>, and <a class="el" href="a05653.html#l01207">resetVertexArrayRange()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDriverp5" doxytag="NL3D::CDriverGL::_VtxPrgDrvInfos" ></a><p>
+<table class="mdTable" 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="a05363.html#a344">TVtxPrgDrvInfoPtrList</a> <a class="el" href="a02434.html#NL3D_1_1IDriverp5">NL3D::IDriver::_VtxPrgDrvInfos</a><code> [protected, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05640.html#l00166">166</a> of file <a class="el" href="a05640.html">driver.h</a>.
+<p>
+Referenced by <a class="el" href="a05639.html#l00073">NL3D::IDriver::release()</a>, <a class="el" href="a05639.html#l00237">NL3D::IDriver::removeVtxPrgDrvInfoPtr()</a>, and <a class="el" href="a05639.html#l00055">NL3D::IDriver::~IDriver()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr38" doxytag="NL3D::CDriverGL::_WorldLightDirection" ></a><p>
+<table class="mdTable" 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="a03128.html">CVector</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr38">NL3D::CDriverGL::_WorldLightDirection</a>[MaxLight]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00622">622</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, and <a class="el" href="a05647.html#l00043">setLight()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLr39" doxytag="NL3D::CDriverGL::_WorldLightPos" ></a><p>
+<table class="mdTable" 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="a03128.html">CVector</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLr39">NL3D::CDriverGL::_WorldLightPos</a>[MaxLight]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l00621">621</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05647.html#l00179">cleanLightSetup()</a>, and <a class="el" href="a05647.html#l00043">setLight()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_6" doxytag="NL3D::CDriverGL::ARBWaterShader" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_6">NL3D::CDriverGL::ARBWaterShader</a>[4]<code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01063">1063</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l02996">deleteARBFragmentPrograms()</a>, <a class="el" href="a05648.html#l02179">endWaterMultiPass()</a>, <a class="el" href="a05642.html#l02920">initFragmentShaders()</a>, <a class="el" href="a05648.html#l02155">setupWaterPass()</a>, and <a class="el" href="a05648.html#l01956">setupWaterPassARB()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_7" doxytag="NL3D::CDriverGL::ATIWaterShaderHandle" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_7">NL3D::CDriverGL::ATIWaterShaderHandle</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01061">1061</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03011">deleteFragmentShaders()</a>, <a class="el" href="a05642.html#l02920">initFragmentShaders()</a>, and <a class="el" href="a05648.html#l01876">setupWaterPassR200()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLz112_8" doxytag="NL3D::CDriverGL::ATIWaterShaderHandleNoDiffuseMap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> GLuint <a class="el" href="a02433.html#NL3D_1_1CDriverGLz112_8">NL3D::CDriverGL::ATIWaterShaderHandleNoDiffuseMap</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05643.html#l01060">1060</a> of file <a class="el" href="a05643.html">driver_opengl.h</a>.
+<p>
+Referenced by <a class="el" href="a05642.html#l00190">CDriverGL()</a>, <a class="el" href="a05642.html#l03011">deleteFragmentShaders()</a>, <a class="el" href="a05648.html#l02179">endWaterMultiPass()</a>, <a class="el" href="a05642.html#l02920">initFragmentShaders()</a>, <a class="el" href="a05648.html#l02155">setupWaterPass()</a>, and <a class="el" href="a05648.html#l01876">setupWaterPassR200()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLGEORGES_1_1UTypeo0" doxytag="NL3D::CDriverGL::crefs" ></a><p>
+<table class="mdTable" 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="a02209.html#NLGEORGES_1_1UTypeo0">NLMISC::CRefCount::crefs</a><code> [mutable, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00079">79</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>.
+<p>
+Referenced by <a class="el" href="a06402.html#l00085">NLMISC::CRefCount::CRefCount()</a>, <a class="el" href="a06402.html#l00070">NLMISC::CRefCount::getRefCount()</a>, and <a class="el" href="a06403.html#l00044">NLMISC::CRefCount::~CRefCount()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLv0" doxytag="NL3D::CDriverGL::GLMatrix" ></a><p>
+<table class="mdTable" 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="a04558.html#a15">uint</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLv0">NL3D::CDriverGL::GLMatrix</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<b>Initial value:</b><div class="fragment"><pre>
+{
+ GL_MODELVIEW,
+ GL_PROJECTION,
+ 0x8629
+}
+</pre></div>
+<p>
+Definition at line <a class="el" href="a05656.html#l01345">1345</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLv1" doxytag="NL3D::CDriverGL::GLTransform" ></a><p>
+<table class="mdTable" 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="a04558.html#a15">uint</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLv1">NL3D::CDriverGL::GLTransform</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<b>Initial value:</b><div class="fragment"><pre>
+{
+ 0x862A ,
+ 0x862B ,
+ 0x862C ,
+ 0x862D
+}
+</pre></div>
+<p>
+Definition at line <a class="el" href="a05656.html#l01355">1355</a> of file <a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05656.html#l01366">setConstantMatrix()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLv2" doxytag="NL3D::CDriverGL::GLType" ></a><p>
+<table class="mdTable" 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="a04558.html#a15">uint</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLv2">NL3D::CDriverGL::GLType</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<b>Initial value:</b><div class="fragment"><pre>
+{
+ GL_DOUBLE,
+ GL_FLOAT,
+ GL_SHORT,
+ GL_DOUBLE,
+ GL_FLOAT,
+ GL_SHORT,
+ GL_DOUBLE,
+ GL_FLOAT,
+ GL_SHORT,
+ GL_DOUBLE,
+ GL_FLOAT,
+ GL_SHORT,
+ GL_UNSIGNED_BYTE
+}
+</pre></div>
+<p>
+Definition at line <a class="el" href="a05653.html#l00634">634</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00920">setupGlArraysForEXTVertexShader()</a>, and <a class="el" href="a05653.html#l00838">setupGlArraysForNVVertexProgram()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLv3" doxytag="NL3D::CDriverGL::GLVertexAttribIndex" ></a><p>
+<table class="mdTable" 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="a04558.html#a15">uint</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLv3">NL3D::CDriverGL::GLVertexAttribIndex</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<b>Initial value:</b><div class="fragment"><pre>
+{
+ 0,
+ 2,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 3,
+ 4,
+ 1,
+ 6,
+ 5,
+ 7,
+}
+</pre></div>
+<p>
+Definition at line <a class="el" href="a05653.html#l00653">653</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00920">setupGlArraysForEXTVertexShader()</a>, <a class="el" href="a05653.html#l00838">setupGlArraysForNVVertexProgram()</a>, and <a class="el" href="a05653.html#l00748">toggleGlArraysForNVVertexProgram()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1IDrivers0" doxytag="NL3D::CDriverGL::InterfaceVersion" ></a><p>
+<table class="mdTable" 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="a04558.html#a11">uint32</a> <a class="el" href="a02434.html#NL3D_1_1IDrivers0">NL3D::IDriver::InterfaceVersion</a> = 0x4e<code> [static, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Version of the driver interface. To increment when the interface change.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05639.html#l00046">46</a> of file <a class="el" href="a05639.html">driver.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLGEORGES_1_1UTypes0" doxytag="NL3D::CDriverGL::NullPtrInfo" ></a><p>
+<table class="mdTable" 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="a03320.html">CRefCount::CPtrInfo</a> <a class="el" href="a02209.html#NLGEORGES_1_1UTypes0">NLMISC::CRefCount::NullPtrInfo</a><code> [static, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Referenced by <a class="el" href="a06402.html#l00085">NLMISC::CRefCount::CRefCount()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLv4" doxytag="NL3D::CDriverGL::NumCoordinatesType" ></a><p>
+<table class="mdTable" 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="a04558.html#a15">uint</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLv4">NL3D::CDriverGL::NumCoordinatesType</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<b>Initial value:</b><div class="fragment"><pre>
+{
+ 1,
+ 1,
+ 1,
+ 2,
+ 2,
+ 2,
+ 3,
+ 3,
+ 3,
+ 4,
+ 4,
+ 4,
+ 4
+}
+</pre></div>
+<p>
+Definition at line <a class="el" href="a05653.html#l00615">615</a> of file <a class="el" href="a05653.html">driver_opengl_vertex.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05653.html#l00920">setupGlArraysForEXTVertexShader()</a>, and <a class="el" href="a05653.html#l00838">setupGlArraysForNVVertexProgram()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLGEORGES_1_1UTypeo1" doxytag="NL3D::CDriverGL::pinfo" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> CPtrInfo* <a class="el" href="a02209.html#NLGEORGES_1_1UTypeo1">NLMISC::CRefCount::pinfo</a><code> [mutable, inherited]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00080">80</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>.
+<p>
+Referenced by <a class="el" href="a06402.html#l00085">NLMISC::CRefCount::CRefCount()</a>, and <a class="el" href="a06403.html#l00044">NLMISC::CRefCount::~CRefCount()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CDriverGLv5" doxytag="NL3D::CDriverGL::ReleaseVersion" ></a><p>
+<table class="mdTable" 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="a04558.html#a11">uint32</a> <a class="el" href="a02433.html#NL3D_1_1CDriverGLv5">NL3D::CDriverGL::ReleaseVersion</a> = 0xa<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05642.html#l00096">96</a> of file <a class="el" href="a05642.html">driver_opengl.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05643.html#l00384">getImplementationVersion()</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a05643.html">driver_opengl.h</a><li><a class="el" href="a05642.html">driver_opengl.cpp</a><li><a class="el" href="a05647.html">driver_opengl_light.cpp</a><li><a class="el" href="a05648.html">driver_opengl_material.cpp</a><li><a class="el" href="a05649.html">driver_opengl_matrix.cpp</a><li><a class="el" href="a05652.html">driver_opengl_texture.cpp</a><li><a class="el" href="a05653.html">driver_opengl_vertex.cpp</a><li><a class="el" href="a05656.html">driver_opengl_vertex_program.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 06:45:53 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>