aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/texture__far_8cpp-source.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/doxygen/nel/texture__far_8cpp-source.html1989
1 files changed, 1989 insertions, 0 deletions
diff --git a/docs/doxygen/nel/texture__far_8cpp-source.html b/docs/doxygen/nel/texture__far_8cpp-source.html
new file mode 100644
index 00000000..bd8e9fbd
--- /dev/null
+++ b/docs/doxygen/nel/texture__far_8cpp-source.html
@@ -0,0 +1,1989 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : docs</TITLE>
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+&nbsp;
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Documentation</B></TD>
+ <TD ALIGN=RIGHT>&nbsp;</td>
+</tr></table>
+<!-- Generated by Doxygen 1.2.14 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> &nbsp; </center>
+<hr><h1>texture_far.cpp</h1><a href="texture__far_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
+00007 <font class="comment">/* Copyright, 2000 Nevrax Ltd.</font>
+00008 <font class="comment"> *</font>
+00009 <font class="comment"> * This file is part of NEVRAX NEL.</font>
+00010 <font class="comment"> * NEVRAX NEL is free software; you can redistribute it and/or modify</font>
+00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font>
+00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font>
+00013 <font class="comment"> * any later version.</font>
+00014 <font class="comment"></font>
+00015 <font class="comment"> * NEVRAX NEL is distributed in the hope that it will be useful, but</font>
+00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font>
+00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font>
+00018 <font class="comment"> * General Public License for more details.</font>
+00019 <font class="comment"></font>
+00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font>
+00021 <font class="comment"> * along with NEVRAX NEL; see the file COPYING. If not, write to the</font>
+00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font>
+00023 <font class="comment"> * MA 02111-1307, USA.</font>
+00024 <font class="comment"> */</font>
+00025
+00026 <font class="preprocessor">#include "<a class="code" href="std3d_8h.html">std3d.h</a>"</font>
+00027
+00028 <font class="preprocessor">#include "<a class="code" href="texture__far_8h.html">3d/texture_far.h</a>"</font>
+00029 <font class="preprocessor">#include "<a class="code" href="tile__far__bank_8h.html">3d/tile_far_bank.h</a>"</font>
+00030 <font class="preprocessor">#include "<a class="code" href="patch_8h.html">3d/patch.h</a>"</font>
+00031 <font class="preprocessor">#include "<a class="code" href="tile__color_8h.html">3d/tile_color.h</a>"</font>
+00032 <font class="preprocessor">#include "<a class="code" href="src_23d_2zone_8h.html">3d/zone.h</a>"</font>
+00033 <font class="preprocessor">#include "<a class="code" href="landscape_8h.html">3d/landscape.h</a>"</font>
+00034 <font class="preprocessor">#include "<a class="code" href="system__info_8h.html">nel/misc/system_info.h</a>"</font>
+00035
+00036
+00037 <font class="keyword">using</font> <font class="keyword">namespace </font>NLMISC;
+00038 <font class="keyword">using</font> <font class="keyword">namespace </font>NL3D;
+00039
+00040 <font class="keyword">namespace </font>NL3D {
+00041
+<a name="l00042"></a><a class="code" href="classNL3D_1_1CTextureFar.html#r0">00042</a> CRGBA CTextureFar::_LightmapExpanded[<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>*<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>*<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>*<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>];
+<a name="l00043"></a><a class="code" href="classNL3D_1_1CTextureFar.html#r1">00043</a> uint8 CTextureFar::_LumelExpanded[(<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a>+1)*(<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a>+1)];
+<a name="l00044"></a><a class="code" href="classNL3D_1_1CTextureFar.html#r2">00044</a> CRGBA CTextureFar::_TileTLIColors[(<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*(<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)];
+00045
+<a name="l00046"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a0">00046</a> CTextureFar::CTextureFar()
+00047 {
+00048 <font class="comment">// This texture is releasable. It doesn't stays in standard memory after been uploaded into video memory.</font>
+00049 <a class="code" href="classNL3D_1_1ITexture.html#a3">setReleasable</a> (<font class="keyword">true</font>);
+00050
+00051 <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>= <font class="keyword">this</font>;
+00052 <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>= <font class="keyword">this</font>;
+00053 }
+00054
+<a name="l00055"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a1">00055</a> CTextureFar::~CTextureFar()
+00056 {
+00057 <font class="comment">// verify the textureFar is correctly unlinked from any ciruclar list.</font>
+00058 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>==<font class="keyword">this</font> &amp;&amp; <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>==<font class="keyword">this</font>);
+00059 }
+00060
+00061
+<a name="l00062"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a7">00062</a> <font class="keywordtype">void</font> CTextureFar::linkBeforeUL(CTextureFar *textNext)
+00063 {
+00064 <a class="code" href="debug_8h.html#a6">nlassert</a>(textNext);
+00065
+00066 <font class="comment">// first, unlink others from me. NB: works even if _ULPrec==_ULNext==this.</font>
+00067 <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>-&gt;_ULPrec= <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>;
+00068 <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>-&gt;_ULNext= <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>;
+00069 <font class="comment">// link to igNext.</font>
+00070 <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>= textNext;
+00071 <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>= textNext-&gt;_ULPrec;
+00072 <font class="comment">// link others to me.</font>
+00073 <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>-&gt;_ULPrec= <font class="keyword">this</font>;
+00074 <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>-&gt;_ULNext= <font class="keyword">this</font>;
+00075 }
+00076
+<a name="l00077"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a8">00077</a> <font class="keywordtype">void</font> CTextureFar::unlinkUL()
+00078 {
+00079 <font class="comment">// first, unlink others from me. NB: works even if _ULPrec==_ULNext==this.</font>
+00080 <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>-&gt;_ULPrec= <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>;
+00081 <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>-&gt;_ULNext= <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>;
+00082 <font class="comment">// reset</font>
+00083 <a class="code" href="classNL3D_1_1CTextureFar.html#o2">_ULPrec</a>= <font class="keyword">this</font>;
+00084 <a class="code" href="classNL3D_1_1CTextureFar.html#o3">_ULNext</a>= <font class="keyword">this</font>;
+00085 }
+00086
+00087
+<a name="l00088"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a2">00088</a> <font class="keywordtype">void</font> CTextureFar::setSizeOfFarPatch (sint <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>, sint <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>)
+00089 {
+00090 <font class="comment">// Resizing the bitmap</font>
+00091 <a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>=<a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>*<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>;
+00092 <a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>=<a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>*<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>;
+00093
+00094 <font class="comment">// Resize patch array</font>
+00095 <a class="code" href="namespaceNLMISC.html#a222">contReset</a> (<a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>);
+00096 <a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>.resize (<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>);
+00097
+00098 <font class="comment">// Init count of patch</font>
+00099 <a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a>=0;
+00100
+00101 <font class="comment">// Init upload format 16 bits</font>
+00102 <a class="code" href="classNL3D_1_1ITexture.html#z826_4">setUploadFormat</a>(<a class="code" href="classNL3D_1_1ITexture.html#s29s8">RGB565</a>);
+00103
+00104 <font class="comment">// Set filter mode. No mipmap!</font>
+00105 <a class="code" href="classNL3D_1_1ITexture.html#z826_6">setFilterMode</a> (<a class="code" href="classNL3D_1_1ITexture.html#s30s19">Linear</a>, <a class="code" href="classNL3D_1_1ITexture.html#s31s24">LinearMipMapOff</a>);
+00106
+00107 <font class="comment">// Wrap</font>
+00108 <a class="code" href="classNL3D_1_1ITexture.html#z826_0">setWrapS</a> (<a class="code" href="classNL3D_1_1ITexture.html#s28s1">Clamp</a>);
+00109 <a class="code" href="classNL3D_1_1ITexture.html#z826_1">setWrapT</a> (<a class="code" href="classNL3D_1_1ITexture.html#s28s1">Clamp</a>);
+00110
+00111 <font class="comment">// Init patch array</font>
+00112 <font class="keywordflow">for</font> (sint p=0; p&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>; p++)
+00113 {
+00114 <font class="comment">// Set patch pointer to NULL</font>
+00115 <a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[p].Patch=NULL;
+00116 }
+00117 }
+00118
+00119 <font class="comment">// Add a patch in the CTexture Patch. Must not be full! Return true if the texture is full after adding this patch else false.</font>
+<a name="l00120"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a3">00120</a> <font class="keywordtype">bool</font> CTextureFar::addPatch (CPatch *pPatch, <font class="keywordtype">float</font>&amp; farUScale, <font class="keywordtype">float</font>&amp; farVScale, <font class="keywordtype">float</font>&amp; farUBias, <font class="keywordtype">float</font>&amp; farVBias, <font class="keywordtype">bool</font>&amp; bRot)
+00121 {
+00122 <font class="comment">// Check that at least a cell is free</font>
+00123 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a>&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>);
+00124
+00125 <font class="comment">// Look for a free cell</font>
+00126 sint p;
+00127 <font class="keywordflow">for</font> (p=0; p&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>; p++)
+00128 {
+00129 <font class="comment">// Cell is NULL ?</font>
+00130 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[p].Patch==NULL)
+00131 {
+00132 <font class="comment">// Put the patch here and go out.</font>
+00133 <a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[p].Patch=pPatch;
+00134 <font class="keywordflow">break</font>;
+00135 }
+00136 }
+00137 <font class="comment">// Check that at least a cell is free</font>
+00138 <a class="code" href="debug_8h.html#a6">nlassert</a> (p&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>);
+00139
+00140 <font class="comment">// Position of the invalide rectangle</font>
+00141 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a> = ((p &amp; <a class="code" href="texture__far_8h.html#a2">NL_NUM_FAR_PATCHES_BY_EDGE_MASK</a>) * <a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>) &gt;&gt; <a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>;
+00142 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a> = ((p &gt;&gt; <a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>) * <a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>) &gt;&gt; <a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>;
+00143
+00144 <font class="comment">// Invalidate the rectangle</font>
+00145 CRect rect (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>, <a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>, <a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>);
+00146 ITexture::touchRect (rect);
+00147
+00148 <font class="comment">// ** Return some values</font>
+00149
+00150 <font class="comment">// Rotation flag</font>
+00151 bRot = ( pPatch-&gt;getOrderS() &lt; pPatch-&gt;getOrderT() );
+00152
+00153 <font class="comment">// Scale is the same for all</font>
+00154 farUScale=(float)((<a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)-1)/(float)<a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>;
+00155 farVScale=(float)((<a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)-1)/(float)<a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>;
+00156
+00157 <font class="comment">// UBias is the same for all</font>
+00158 farUBias=((float)<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>+0.5f)/(float)<a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>;
+00159
+00160 <font class="comment">// UBias is the same for all</font>
+00161 farVBias=((float)<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>+0.5f)/(float)<a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>;
+00162
+00163 <font class="comment">// One more patch</font>
+00164 <a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a>++;
+00165
+00166 <font class="keywordflow">return</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a> == <a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>);
+00167 }
+00168
+00169 <font class="comment">// Remove a patch in the CTexture Patch</font>
+<a name="l00170"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a4">00170</a> <font class="keywordtype">bool</font> CTextureFar::removePatch (CPatch *pPatch)
+00171 {
+00172 <font class="comment">// Check that at least a cell is used</font>
+00173 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a>&gt;0);
+00174
+00175 <font class="comment">// Look for the patch free cell</font>
+00176 sint p;
+00177 <font class="keywordflow">for</font> (p=0; p&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>; p++)
+00178 {
+00179 <font class="comment">// Is the good cell ?</font>
+00180 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[p].Patch==pPatch)
+00181 {
+00182 <font class="comment">// ok, remove it</font>
+00183 <a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[p].Patch=NULL;
+00184 <font class="keywordflow">break</font>;
+00185 }
+00186 }
+00187
+00188 <font class="comment">// Check it has been found</font>
+00189 <a class="code" href="debug_8h.html#a6">nlassert</a> (p&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>);
+00190
+00191 <font class="comment">// One patch less</font>
+00192 <a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a>--;
+00193
+00194 <font class="comment">// Return true if it is empty, else return false</font>
+00195 <font class="keywordflow">return</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#m1">_PatchCount</a> == 0);
+00196 }
+00197
+<a name="l00198"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a6">00198</a> uint CTextureFar::touchPatch(uint p)
+00199 {
+00200 <font class="comment">// Check param</font>
+00201 <a class="code" href="debug_8h.html#a6">nlassert</a> (p&lt;<a class="code" href="texture__far_8h.html#a3">NL_NUM_FAR_PATCHES_BY_TEXTURE</a>);
+00202
+00203 <font class="comment">// if there is still a patch here</font>
+00204 <font class="keywordflow">if</font>( <a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[p].Patch!=NULL )
+00205 {
+00206 <font class="comment">// Position of the invalide rectangle</font>
+00207 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a> = ((p &amp; <a class="code" href="texture__far_8h.html#a2">NL_NUM_FAR_PATCHES_BY_EDGE_MASK</a>) * <a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>) &gt;&gt; <a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>;
+00208 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a> = ((p &gt;&gt; <a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>) * <a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>) &gt;&gt; <a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>;
+00209
+00210 <font class="comment">// Invalidate the associated rectangle</font>
+00211 CRect rect (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>, <a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>, <a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>);
+00212 ITexture::touchRect (rect);
+00213
+00214 <font class="comment">// return number of pixels touched</font>
+00215 <font class="keywordflow">return</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>) * (<a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>);
+00216 }
+00217 <font class="keywordflow">else</font>
+00218 {
+00219 <font class="comment">// no touch</font>
+00220 <font class="keywordflow">return</font> 0;
+00221 }
+00222 }
+00223
+00224 <font class="comment">// Generate the texture. See ITexture::doGenerate().</font>
+<a name="l00225"></a><a class="code" href="classNL3D_1_1CTextureFar.html#a5">00225</a> <font class="keywordtype">void</font> CTextureFar::doGenerate ()
+00226 {
+00227 <font class="comment">// Resize</font>
+00228 CBitmap::resize (<a class="code" href="classNL3D_1_1CTextureFar.html#o0">_OriginalWidth</a>, <a class="code" href="classNL3D_1_1CTextureFar.html#o1">_OriginalHeight</a>, <a class="code" href="classNLMISC_1_1CBitmap.html#s11s0">RGBA</a>);
+00229
+00230 <font class="comment">// Rectangle invalidate ?</font>
+00231 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1ITexture.html#m1">_ListInvalidRect</a>.begin()!=<a class="code" href="classNL3D_1_1ITexture.html#m1">_ListInvalidRect</a>.end())
+00232 {
+00233 <font class="comment">// Yes, rebuild only those rectangles.</font>
+00234
+00235 <font class="comment">// For each rectangle to compute</font>
+00236 <a class="code" href="classstd_1_1list.html">std::list&lt;NLMISC::CRect&gt;</a>::iterator ite=<a class="code" href="classNL3D_1_1ITexture.html#m1">_ListInvalidRect</a>.begin();
+00237 <font class="keywordflow">while</font> (ite!=<a class="code" href="classNL3D_1_1ITexture.html#m1">_ListInvalidRect</a>.end())
+00238 {
+00239 <font class="comment">// Compute rectangle coordinates</font>
+00240 sint <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>=(ite-&gt;left()&lt;&lt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)/<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>;
+00241 sint <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>=(ite-&gt;top()&lt;&lt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)/<a class="code" href="classNLMISC_1_1CBitmap.html#n4">_Height</a>;
+00242
+00243 <font class="comment">// X and Y coord should be &gt;0 and not be greater or equal to the number of patch stored on a texture edge.</font>
+00244 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&gt;=0);
+00245 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&lt;<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>);
+00246 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&gt;=0);
+00247 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>);
+00248
+00249 <font class="comment">// ReBuild the rectangle. verify first patch still exist.</font>
+00250 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>+(<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;&lt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)].Patch)
+00251 <a class="code" href="classNL3D_1_1CTextureFar.html#c0">rebuildRectangle</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>);
+00252
+00253 <font class="comment">// Next rectangle</font>
+00254 ite++;
+00255 }
+00256 }
+00257 <font class="keywordflow">else</font>
+00258 {
+00259 <font class="comment">// no, rebuild all the rectangle</font>
+00260 <font class="keywordflow">for</font> (sint <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>++)
+00261 <font class="keywordflow">for</font> (sint <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&lt;<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>++)
+00262 {
+00263 <font class="comment">// Rebuild this rectangle</font>
+00264 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>+(<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;&lt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)].Patch)
+00265 <a class="code" href="classNL3D_1_1CTextureFar.html#c0">rebuildRectangle</a> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>);
+00266 }
+00267 }
+00268 }
+00269
+00270
+00271 <font class="comment">// Rebuild the rectangle passed with coordinate passed in parameter</font>
+<a name="l00272"></a><a class="code" href="classNL3D_1_1CTextureFar.html#c0">00272</a> <font class="keywordtype">void</font> CTextureFar::rebuildRectangle (uint <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, uint <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>)
+00273 {
+00274 <font class="comment">// Patch pointer</font>
+00275 CPatch* patch=<a class="code" href="classNL3D_1_1CTextureFar.html#m0">_Patches</a>[<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>+(<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;&lt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)].Patch;
+00276
+00277 <font class="comment">// Check it exists</font>
+00278 <a class="code" href="debug_8h.html#a6">nlassert</a> (patch);
+00279
+00280 <font class="comment">// get the order</font>
+00281 uint nS=patch-&gt;getOrderS();
+00282 uint nT=patch-&gt;getOrderT();
+00283
+00284 <font class="comment">// Check it is a 16 bits texture</font>
+00285 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="classNLMISC_1_1CBitmap.html#a5">getPixelFormat</a>()==<a class="code" href="classNLMISC_1_1CBitmap.html#s11s0">RGBA</a>);
+00286
+00287 <font class="comment">// Check pixels exist</font>
+00288 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="classNLMISC_1_1CBitmap.html#z277_0">getPixels</a>().<a class="code" href="cf__lexical_8cpp.html#a94">size</a>()!=0);
+00289
+00290 <font class="comment">// Base offset of the first pixel of the patch's texture</font>
+00291 uint nBaseOffset;
+00292
+00293 <font class="comment">// Delta to add to the destination offset when walk for a pixel to the right in the source tile</font>
+00294 sint dstDeltaX;
+00295
+00296 <font class="comment">// Delta to add to the destination offset when walk for a pixel to the bottom in the source tile</font>
+00297 sint dstDeltaY;
+00298
+00299 <font class="comment">// larger size</font>
+00300 uint larger;
+00301
+00302 <font class="comment">// larger than higher (regular)</font>
+00303 <font class="keywordflow">if</font> (nS&gt;=nT)
+00304 {
+00305 <font class="comment">// Regular offset, top left</font>
+00306 nBaseOffset=((<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>*<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>)&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)+((<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>*<a class="code" href="classNLMISC_1_1CBitmap.html#n4">_Height</a>)&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)*<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>;
+00307
+00308 <font class="comment">// Regular deltaX, to the right</font>
+00309 dstDeltaX=1;
+00310
+00311 <font class="comment">// Regular deltaY, to the bottom</font>
+00312 dstDeltaY=<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>;
+00313
+00314 <font class="comment">// Larger size</font>
+00315 larger=nS;
+00316 }
+00317 <font class="comment">// higher than larger (goofy), the patch is stored with a rotation of 1 (to the left of course)</font>
+00318 <font class="keywordflow">else</font>
+00319 {
+00320 <font class="comment">// Goofy offset, bottom left</font>
+00321 nBaseOffset=((<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>*<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>)&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)+((<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>*<a class="code" href="classNLMISC_1_1CBitmap.html#n4">_Height</a>)&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)*<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>;
+00322 nBaseOffset+=((<a class="code" href="classNLMISC_1_1CBitmap.html#n4">_Height</a>&gt;&gt;<a class="code" href="texture__far_8h.html#a0">NL_NUM_FAR_PATCHES_BY_EDGE_SHIFT</a>)-1)*<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>;
+00323
+00324 <font class="comment">// Goofy deltaX, to the top</font>
+00325 dstDeltaX=-(sint)<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>;
+00326
+00327 <font class="comment">// Goofy deltaY, to the right</font>
+00328 dstDeltaY=1;
+00329
+00330 <font class="comment">// Larger size</font>
+00331 larger=nT;
+00332 }
+00333
+00334 <font class="comment">// Compute the order of the patch</font>
+00335 CTileFarBank::TFarOrder orderX=CTileFarBank::order0;
+00336 uint tileSize=0;
+00337 <font class="keywordflow">switch</font> ((larger*<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>*<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>)/<a class="code" href="classNLMISC_1_1CBitmap.html#n3">_Width</a>)
+00338 {
+00339 <font class="keywordflow">case</font> 4:
+00340 <font class="comment">// Ratio 1:4</font>
+00341 orderX=CTileFarBank::order2;
+00342 tileSize=<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>&gt;&gt;2;
+00343 <font class="keywordflow">break</font>;
+00344 <font class="keywordflow">case</font> 2:
+00345 <font class="comment">// Ratio 1:2</font>
+00346 orderX=CTileFarBank::order1;
+00347 tileSize=<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>&gt;&gt;1;
+00348 <font class="keywordflow">break</font>;
+00349 <font class="keywordflow">case</font> 1:
+00350 <font class="comment">// Ratio 1:1</font>
+00351 orderX=CTileFarBank::order0;
+00352 tileSize=<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>;
+00353 <font class="keywordflow">break</font>;
+00354 <font class="keywordflow">default</font>:
+00355 <font class="comment">// no!: must be one of the previous values</font>
+00356 <a class="code" href="debug_8h.html#a6">nlassert</a> (0);
+00357 }
+00358
+00359 <font class="preprocessor">#ifdef NL_DEBUG</font>
+00360 <font class="preprocessor"></font> <font class="comment">// Compute the Y order</font>
+00361 CTileFarBank::TFarOrder orderY;
+00362 <font class="keywordflow">switch</font> ((<a class="code" href="bit__set_8cpp.html#a0">std::min</a>(nS, nT)*<a class="code" href="texture__far_8h.html#a1">NL_NUM_FAR_PATCHES_BY_EDGE</a>*<a class="code" href="tile__far__bank_8h.html#a1">NL_NUM_PIXELS_ON_FAR_TILE_EDGE</a>)/<a class="code" href="classNLMISC_1_1CBitmap.html#n4">_Height</a>)
+00363 {
+00364 <font class="keywordflow">case</font> 4:
+00365 <font class="comment">// Ratio 1:4</font>
+00366 orderY=CTileFarBank::order2;
+00367 <font class="keywordflow">break</font>;
+00368 <font class="keywordflow">case</font> 2:
+00369 <font class="comment">// Ratio 1:2</font>
+00370 orderY=CTileFarBank::order1;
+00371 <font class="keywordflow">break</font>;
+00372 <font class="keywordflow">case</font> 1:
+00373 <font class="comment">// Ratio 1:1</font>
+00374 orderY=CTileFarBank::order0;
+00375 <font class="keywordflow">break</font>;
+00376 <font class="keywordflow">default</font>:
+00377 <font class="comment">// no!: must be one of the previous values</font>
+00378 <a class="code" href="debug_8h.html#a6">nlassert</a> (0);
+00379 }
+00380
+00381 <font class="comment">// Check the ratio on Y is the same than on X</font>
+00382 <a class="code" href="debug_8h.html#a6">nlassert</a> (orderX == orderY);
+00383 <font class="preprocessor">#endif // NL_DEBUG</font>
+00384 <font class="preprocessor"></font> <font class="comment">// Must have a far tile bank pointer set in the CFarTexture</font>
+00385 <a class="code" href="debug_8h.html#a6">nlassert</a> (<a class="code" href="classNL3D_1_1CTextureFar.html#m2">_Bank</a>);
+00386
+00387 <font class="comment">// For all the tiles in the textures</font>
+00388 sint nTileInPatch=0;
+00389
+00390 <font class="comment">// ** Fill the struct for the tile fill method for each layers</font>
+00391 <a class="code" href="structNL3D__CComputeTileFar.html">NL3D_CComputeTileFar</a> TileFar;
+00392 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m10">AsmMMX</a>= <font class="keyword">false</font>;
+00393 <font class="preprocessor">#ifdef NL_OS_WINDOWS</font>
+00394 <font class="preprocessor"></font> TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m10">AsmMMX</a>= <a class="code" href="classNLMISC_1_1CSystemInfo.html#d4">NLMISC::CSystemInfo::hasMMX</a>();
+00395 <font class="preprocessor">#endif</font>
+00396 <font class="preprocessor"></font>
+00397 <font class="comment">// Destination pointer</font>
+00398
+00399 <font class="comment">// Destination delta</font>
+00400 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>=dstDeltaX;
+00401 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m8">DstDeltaY</a>=dstDeltaY;
+00402
+00403 <font class="comment">// ** Build expand lightmap..</font>
+00404 <a class="code" href="structNL3D__CExpandLightmap.html">NL3D_CExpandLightmap</a> lightMap;
+00405
+00406 <font class="comment">// Fill the structure</font>
+00407 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m5">MulFactor</a>=tileSize;
+00408 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m0">ColorTile</a>=&amp;patch-&gt;TileColors[0];
+00409 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>=nS+1;
+00410 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m4">Height</a>=nT+1;
+00411 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>=patch-&gt;getZone()-&gt;getLandscape()-&gt;getStaticLight();
+00412 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m7">DstPixels</a>=<a class="code" href="classNL3D_1_1CTextureFar.html#r0">_LightmapExpanded</a>;
+00413 <font class="comment">// Compute current TLI colors.</font>
+00414 patch-&gt;computeCurrentTLILightmap(<a class="code" href="classNL3D_1_1CTextureFar.html#r2">_TileTLIColors</a>);
+00415 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m1">TLIColor</a>= <a class="code" href="classNL3D_1_1CTextureFar.html#r2">_TileTLIColors</a>;
+00416
+00417 <font class="comment">// Expand the shadowmap</font>
+00418 patch-&gt;unpackShadowMap (<a class="code" href="classNL3D_1_1CTextureFar.html#r1">_LumelExpanded</a>);
+00419 lightMap.<a class="code" href="structNL3D__CExpandLightmap.html#m2">LumelTile</a>=<a class="code" href="classNL3D_1_1CTextureFar.html#r1">_LumelExpanded</a>;
+00420
+00421 <font class="comment">// Expand the patch lightmap now</font>
+00422 <a class="code" href="texture__far_8cpp.html#a7">NL3D_expandLightmap</a> (&amp;lightMap);
+00423
+00424 <font class="comment">// DeltaY for lightmap</font>
+00425 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m5">SrcLightingDeltaY</a>=nS*tileSize;
+00426
+00427 <font class="comment">// Base Dst pointer on the tile line</font>
+00428 uint nBaseDstTileLine=nBaseOffset;
+00429 <font class="keywordflow">for</font> (uint <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>&lt;nT; <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>++)
+00430 {
+00431 <font class="comment">// Base Dst pointer on the tile</font>
+00432 uint nBaseDstTilePixels=nBaseDstTileLine;
+00433
+00434 <font class="comment">// For each tile of the line</font>
+00435 <font class="keywordflow">for</font> (uint <a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>&lt;nS; <a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>++)
+00436 {
+00437 <font class="comment">// Base pointer of the destination texture</font>
+00438 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m6">DstPixels</a>=(CRGBA*)&amp;(<a class="code" href="classNLMISC_1_1CBitmap.html#z277_0">getPixels</a>()[0])+nBaseDstTilePixels;
+00439
+00440 <font class="comment">// Lightmap pointer</font>
+00441 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m4">SrcLightingPixels</a>=<a class="code" href="classNL3D_1_1CTextureFar.html#r0">_LightmapExpanded</a>+(<a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>*tileSize)+(<a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>*nS*tileSize*tileSize);
+00442
+00443 <font class="comment">// For each layer of the tile</font>
+00444 <font class="keywordflow">for</font> (sint <a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>=0; <a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>&lt;3; <a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>++)
+00445 {
+00446 <font class="comment">// Use of additive in this layer ?</font>
+00447 <font class="keywordtype">bool</font> bAdditive=<font class="keyword">false</font>;
+00448
+00449 <font class="comment">// Size of the edge far tile</font>
+00450 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>=tileSize;
+00451
+00452 <font class="comment">// Get a tile element reference for this tile.</font>
+00453 <font class="keyword">const</font> CTileElement &amp;tileElm=patch-&gt;Tiles[nTileInPatch];
+00454
+00455 <font class="comment">// Check for 256 tiles...</font>
+00456 <font class="keywordtype">bool</font> is256x256;
+00457 uint8 uvOff;
+00458 tileElm.getTile256Info(is256x256, uvOff);
+00459
+00460 <font class="comment">// Get the tile number</font>
+00461 sint tile=tileElm.Tile[<a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>];
+00462
+00463 <font class="comment">// Is the last layer ?</font>
+00464 <font class="keywordtype">bool</font> lastLayer = ( (<a class="code" href="namespaceNLAISCRIPT.html#a20">l</a> == 2) || (tileElm.Tile[<a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>+1] == <a class="code" href="tile__element_8h.html#a12">NL_TILE_ELM_LAYER_EMPTY</a>) );
+00465
+00466 <font class="comment">// Is an non-empty layer ?</font>
+00467 <font class="keywordflow">if</font> (tile!=<a class="code" href="tile__element_8h.html#a12">NL_TILE_ELM_LAYER_EMPTY</a>)
+00468 {
+00469 <font class="comment">// Get the read only pointer on the far tile</font>
+00470 <font class="keyword">const</font> CTileFarBank::CTileFar* pTile=<a class="code" href="classNL3D_1_1CTextureFar.html#m2">_Bank</a>-&gt;getTile (tile);
+00471
+00472 <font class="comment">// This pointer must not be null, else the farBank is not valid!</font>
+00473 <font class="keywordflow">if</font> (pTile==NULL)
+00474 <a class="code" href="debug_8h.html#a2">nlwarning</a> (<font class="stringliteral">"FarBank is not valid!"</font>);
+00475
+00476 <font class="comment">// If the tile exist</font>
+00477 <font class="keywordflow">if</font> (pTile)
+00478 {
+00479 <font class="comment">// Tile exist ?</font>
+00480 <font class="keywordflow">if</font> (pTile-&gt;isFill (CTileFarBank::diffuse))
+00481 {
+00482 <font class="comment">// Get rotation of the tile in this layer</font>
+00483 sint nRot=tileElm.getTileOrient(<a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>);
+00484
+00485 <font class="comment">// Source pointer</font>
+00486 <font class="keyword">const</font> CRGBA* pSrcDiffusePixels=pTile-&gt;getPixels (CTileFarBank::diffuse, orderX);
+00487 <font class="keyword">const</font> CRGBA* pSrcAdditivePixels=NULL;
+00488
+00489 <font class="comment">// Additive ?</font>
+00490 <font class="keywordflow">if</font> (pTile-&gt;isFill (CTileFarBank::additive))
+00491 {
+00492 <font class="comment">// Use it</font>
+00493 bAdditive=<font class="keyword">true</font>;
+00494
+00495 <font class="comment">// Get additive pointer</font>
+00496 pSrcAdditivePixels=pTile-&gt;getPixels (CTileFarBank::additive, orderX);
+00497 }
+00498
+00499 <font class="comment">// Source size</font>
+00500 sint sourceSize;
+00501
+00502 <font class="comment">// Source offset (for 256)</font>
+00503 uint sourceOffset=0;
+00504
+00505 <font class="comment">// 256 ?</font>
+00506 <font class="keywordflow">if</font> (is256x256)
+00507 {
+00508 <font class="comment">// On the left ?</font>
+00509 <font class="keywordflow">if</font> (uvOff&amp;0x02)
+00510 sourceOffset+=tileSize;
+00511
+00512 <font class="comment">// On the bottom ?</font>
+00513 <font class="keywordflow">if</font> ((uvOff==1)||(uvOff==2))
+00514 sourceOffset+=2*tileSize*tileSize;
+00515
+00516 <font class="comment">// Yes, 256</font>
+00517 sourceSize=tileSize&lt;&lt;1;
+00518 }
+00519 <font class="keywordflow">else</font>
+00520 {
+00521 <font class="comment">// No, 128</font>
+00522 sourceSize=tileSize;
+00523 }
+00524
+00525 <font class="comment">// Compute offset and deltas</font>
+00526 <font class="keywordflow">switch</font> (nRot)
+00527 {
+00528 <font class="keywordflow">case</font> 0:
+00529 <font class="comment">// Source pointers</font>
+00530 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>=pSrcDiffusePixels+sourceOffset;
+00531 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m1">SrcAdditivePixels</a>=pSrcAdditivePixels+sourceOffset;
+00532
+00533 <font class="comment">// Source delta</font>
+00534 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>=1;
+00535 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>=sourceSize;
+00536 <font class="keywordflow">break</font>;
+00537 <font class="keywordflow">case</font> 1:
+00538 {
+00539 <font class="comment">// Source pointers</font>
+00540 uint newOffset=sourceOffset+(tileSize-1);
+00541 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>=pSrcDiffusePixels+newOffset;
+00542 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m1">SrcAdditivePixels</a>=pSrcAdditivePixels+newOffset;
+00543
+00544 <font class="comment">// Source delta</font>
+00545 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>=sourceSize;
+00546 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>=-1;
+00547 }
+00548 <font class="keywordflow">break</font>;
+00549 <font class="keywordflow">case</font> 2:
+00550 {
+00551 <font class="comment">// Destination pointer</font>
+00552 uint newOffset=sourceOffset+(tileSize-1)*sourceSize+tileSize-1;
+00553 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>=pSrcDiffusePixels+newOffset;
+00554 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m1">SrcAdditivePixels</a>=pSrcAdditivePixels+newOffset;
+00555
+00556 <font class="comment">// Source delta</font>
+00557 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>=-1;
+00558 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>=-sourceSize;
+00559 }
+00560 <font class="keywordflow">break</font>;
+00561 <font class="keywordflow">case</font> 3:
+00562 {
+00563 <font class="comment">// Destination pointer</font>
+00564 uint newOffset=sourceOffset+(tileSize-1)*sourceSize;
+00565 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>=pSrcDiffusePixels+newOffset;
+00566 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m1">SrcAdditivePixels</a>=pSrcAdditivePixels+newOffset;
+00567
+00568 <font class="comment">// Source delta</font>
+00569 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>=-sourceSize;
+00570 TileFar.<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>=1;
+00571 }
+00572 <font class="keywordflow">break</font>;
+00573 }
+00574
+00575 <font class="comment">// *** Draw the layer</font>
+00576
+00577 <font class="comment">// Alpha layer ?</font>
+00578 <font class="keywordflow">if</font> (<a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>&gt;0)
+00579 {
+00580 <font class="comment">// Additive layer ?</font>
+00581 <font class="keywordflow">if</font> (bAdditive &amp;&amp; lastLayer)
+00582 <a class="code" href="texture__far_8cpp.html#a13">NL3D_drawFarTileInFarTextureAdditiveAlpha</a> (&amp;TileFar);
+00583 <font class="keywordflow">else</font> <font class="comment">// No additive layer</font>
+00584 <a class="code" href="texture__far_8cpp.html#a11">NL3D_drawFarTileInFarTextureAlpha</a> (&amp;TileFar);
+00585 }
+00586 <font class="keywordflow">else</font> <font class="comment">// no alpha</font>
+00587 {
+00588 <font class="comment">// Additive layer ?</font>
+00589 <font class="keywordflow">if</font> (bAdditive &amp;&amp; lastLayer)
+00590 <a class="code" href="texture__far_8cpp.html#a12">NL3D_drawFarTileInFarTextureAdditive</a> (&amp;TileFar);
+00591 <font class="keywordflow">else</font> <font class="comment">// No additive layer</font>
+00592 <a class="code" href="texture__far_8cpp.html#a10">NL3D_drawFarTileInFarTexture</a> (&amp;TileFar);
+00593 }
+00594 }
+00595 }
+00596 }
+00597 <font class="keywordflow">else</font>
+00598 <font class="comment">// Stop, no more layer</font>
+00599 <font class="keywordflow">break</font>;
+00600 }
+00601
+00602 <font class="comment">// Next tile</font>
+00603 nTileInPatch++;
+00604
+00605 <font class="comment">// Next tile on the line</font>
+00606 nBaseDstTilePixels+=dstDeltaX*tileSize;
+00607 }
+00608
+00609 <font class="comment">// Next line of tiles</font>
+00610 nBaseDstTileLine+=dstDeltaY*tileSize;
+00611 }
+00612
+00613 }
+00614
+00615 } <font class="comment">// NL3D</font>
+00616
+00617
+00618 <font class="comment">// ***************************************************************************</font>
+00619 <font class="comment">// ***************************************************************************</font>
+00620 <font class="comment">// NL3D_ExpandLightmap. C and Asm Part</font>
+00621 <font class="comment">// ***************************************************************************</font>
+00622 <font class="comment">// ***************************************************************************</font>
+00623
+00624 <font class="preprocessor">#ifdef NL_OS_WINDOWS</font>
+00625 <font class="preprocessor"></font>
+00626
+00627 <font class="comment">// EMMS called not in __asm block.</font>
+00628 <font class="preprocessor"># pragma warning (disable : 4799)</font>
+00629 <font class="preprocessor"></font>
+00630
+00631 <font class="comment">// ***************************************************************************</font>
+00632 <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>()
+00633 {
+00634 __asm
+00635 {
+00636 <font class="comment">// close MMX computation</font>
+00637 emms
+00638 }
+00639 }
+00640
+00641
+00642 <font class="comment">// ***************************************************************************</font>
+00646 <font class="comment"></font><font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a1">NL3D_asmExpandLineColor565</a>(<font class="keyword">const</font> uint16 *<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>, CRGBA *dst, uint du, uint len)
+00647 {
+00648 <font class="keyword">static</font> uint64 blank = 0;
+00649 <font class="keyword">static</font> uint64 cF800 = 0x0000F8000000F800;
+00650 <font class="keyword">static</font> uint64 cE000 = 0x0000E0000000E000;
+00651 <font class="keyword">static</font> uint64 c07E0 = 0x000007E0000007E0;
+00652 <font class="keyword">static</font> uint64 c0600 = 0x0000060000000600;
+00653 <font class="keyword">static</font> uint64 c001F = 0x0000001F0000001F;
+00654 <font class="keyword">static</font> uint64 c001C = 0x0000001C0000001C;
+00655 <font class="keywordflow">if</font>(len==0)
+00656 <font class="keywordflow">return</font>;
+00657
+00658
+00659 <font class="comment">// Loop for pix.</font>
+00660 __asm
+00661 {
+00662 movq mm7, blank
+00663
+00664 <font class="comment">// start at pixel 1 =&gt; increment dst, and start u= du</font>
+00665 mov esi, <a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>
+00666 mov edi, dst
+00667 add edi, 4
+00668 mov ecx, len
+00669 mov edx, du
+00670
+00671 <font class="comment">// Loop</font>
+00672 myLoop:
+00673
+00674
+00675 <font class="comment">// Read 565 colors</font>
+00676 <font class="comment">//----------</font>
+00677 <font class="comment">// index u.</font>
+00678 mov ebx, edx
+00679 shr ebx, 8
+00680
+00681 <font class="comment">// pack the 2 colors in eax: // Hedx= color0, Ledx= color1</font>
+00682 xor eax, eax <font class="comment">// avoid partial stall.</font>
+00683 mov ax, [esi + ebx*2]
+00684 shl eax, 16
+00685 mov ax, [esi + ebx*2 +2]
+00686
+00687 <font class="comment">// store and unpack in mm2: Hmm2= color0, Lmm2= color1</font>
+00688 movd mm2, eax
+00689 punpcklwd mm2, mm7
+00690
+00691 <font class="comment">// reset accumulator mm3 to black</font>
+00692 movq mm3, mm7
+00693
+00694 <font class="comment">// Expand 565 to 888: color0 and color1 in parrallel</font>
+00695 <font class="comment">// R</font>
+00696 movq mm0, mm2
+00697 movq mm1, mm2
+00698 pand mm0, cF800
+00699 pand mm1, cE000
+00700 psrld mm0, 8
+00701 psrld mm1, 13
+00702 por mm3, mm0
+00703 por mm3, mm1
+00704 <font class="comment">// G</font>
+00705 movq mm0, mm2
+00706 movq mm1, mm2
+00707 pand mm0, c07E0
+00708 pand mm1, c0600
+00709 pslld mm0, 5
+00710 psrld mm1, 1
+00711 por mm3, mm0
+00712 por mm3, mm1
+00713 <font class="comment">// B</font>
+00714 movq mm0, mm2
+00715 movq mm1, mm2
+00716 pand mm0, c001F
+00717 pand mm1, c001C
+00718 pslld mm0, 19
+00719 pslld mm1, 14
+00720 por mm3, mm0
+00721 por mm3, mm1
+00722
+00723 <font class="comment">// unpack mm3 quad to mm0=color0 and mm1=color1.</font>
+00724 movq mm0, mm3
+00725 movq mm1, mm3
+00726 psrlq mm0, 32
+00727
+00728
+00729 <font class="comment">// Blend.</font>
+00730 <font class="comment">//----------</font>
+00731 <font class="comment">// blend factors</font>
+00732 mov ebx, edx
+00733 mov eax, 256
+00734
+00735 and ebx, 0xFF
+00736 sub eax, ebx
+00737
+00738 movd mm2, ebx <font class="comment">// mm2= factor</font>
+00739 movd mm3, eax <font class="comment">// mm3= 1-factor</font>
+00740 <font class="comment">// replicate to the 4 words.</font>
+00741 punpckldq mm2, mm2 <font class="comment">// mm2= 0000 00AA 0000 00AA</font>
+00742 punpckldq mm3, mm3 <font class="comment">// mm3= 0000 00AA 0000 00AA</font>
+00743 packssdw mm2, mm2 <font class="comment">// mm2= 00AA 00AA 00AA 00AA</font>
+00744 packssdw mm3, mm3 <font class="comment">// mm3= 00AA 00AA 00AA 00AA</font>
+00745
+00746 <font class="comment">// mul</font>
+00747 punpcklbw mm0, mm7
+00748 punpcklbw mm1, mm7
+00749 pmullw mm0, mm3 <font class="comment">// color0*(1-factor)</font>
+00750 pmullw mm1, mm2 <font class="comment">// color1*factor</font>
+00751 <font class="comment">// add, and unpack</font>
+00752 paddusw mm0, mm1
+00753 psrlw mm0, 8
+00754 packuswb mm0, mm0
+00755
+00756 <font class="comment">// store</font>
+00757 movd [edi], mm0
+00758
+00759
+00760 <font class="comment">// next pix</font>
+00761 add edx, du
+00762 add edi, 4
+00763 dec ecx
+00764 jnz myLoop
+00765 }
+00766 }
+00767
+00768
+00769 <font class="comment">// ***************************************************************************</font>
+00773 <font class="comment"></font><font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a2">NL3D_asmExpandLineColor8888</a>(<font class="keyword">const</font> CRGBA *<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>, CRGBA *dst, uint du, uint len)
+00774 {
+00775 <font class="keyword">static</font> uint64 blank = 0;
+00776 <font class="keywordflow">if</font>(len==0)
+00777 <font class="keywordflow">return</font>;
+00778
+00779
+00780 <font class="comment">// Loop for pix.</font>
+00781 __asm
+00782 {
+00783 movq mm7, blank
+00784
+00785 <font class="comment">// start at pixel 1 =&gt; increment dst, and start u= du</font>
+00786 mov esi, <a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>
+00787 mov edi, dst
+00788 add edi, 4
+00789 mov ecx, len
+00790 mov edx, du
+00791
+00792 <font class="comment">// Loop</font>
+00793 myLoop:
+00794
+00795
+00796 <font class="comment">// Read 8888 colors</font>
+00797 <font class="comment">//----------</font>
+00798 <font class="comment">// index u.</font>
+00799 mov ebx, edx
+00800 shr ebx, 8
+00801
+00802 <font class="comment">// read the 2 colors: mm0= color0, mm1= color1</font>
+00803 movd mm0 , [esi + ebx*4]
+00804 movd mm1 , [esi + ebx*4 + 4]
+00805
+00806
+00807 <font class="comment">// Blend.</font>
+00808 <font class="comment">//----------</font>
+00809 <font class="comment">// blend factors</font>
+00810 mov ebx, edx
+00811 mov eax, 256
+00812
+00813 and ebx, 0xFF
+00814 sub eax, ebx
+00815
+00816 movd mm2, ebx <font class="comment">// mm2= factor</font>
+00817 movd mm3, eax <font class="comment">// mm3= 1-factor</font>
+00818 <font class="comment">// replicate to the 4 words.</font>
+00819 punpckldq mm2, mm2 <font class="comment">// mm2= 0000 00AA 0000 00AA</font>
+00820 punpckldq mm3, mm3 <font class="comment">// mm3= 0000 00AA 0000 00AA</font>
+00821 packssdw mm2, mm2 <font class="comment">// mm2= 00AA 00AA 00AA 00AA</font>
+00822 packssdw mm3, mm3 <font class="comment">// mm3= 00AA 00AA 00AA 00AA</font>
+00823
+00824 <font class="comment">// mul</font>
+00825 punpcklbw mm0, mm7
+00826 punpcklbw mm1, mm7
+00827 pmullw mm0, mm3 <font class="comment">// color0*(1-factor)</font>
+00828 pmullw mm1, mm2 <font class="comment">// color1*factor</font>
+00829 <font class="comment">// add, and unpack</font>
+00830 paddusw mm0, mm1
+00831 psrlw mm0, 8
+00832 packuswb mm0, mm0
+00833
+00834 <font class="comment">// store</font>
+00835 movd [edi], mm0
+00836
+00837
+00838 <font class="comment">// next pix</font>
+00839 add edx, du
+00840 add edi, 4
+00841 dec ecx
+00842 jnz myLoop
+00843 }
+00844 }
+00845
+00846
+00847 <font class="comment">// ***************************************************************************</font>
+00851 <font class="comment"></font><font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a3">NL3D_asmBlendLines</a>(CRGBA *dst, <font class="keyword">const</font> CRGBA *src0, <font class="keyword">const</font> CRGBA *src1, uint <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>, uint len)
+00852 {
+00853 <font class="keyword">static</font> uint64 blank = 0;
+00854 <font class="keywordflow">if</font>(len==0)
+00855 <font class="keywordflow">return</font>;
+00856
+00857
+00858 <font class="comment">// Loop for pix.</font>
+00859 __asm
+00860 {
+00861 movq mm7, blank
+00862
+00863 <font class="comment">// read the factor and expand it to 4 words.</font>
+00864 mov ebx, <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>
+00865 mov eax, 256
+00866 and ebx, 0xFF
+00867 sub eax, ebx
+00868 movd mm2, ebx <font class="comment">// mm2= factor</font>
+00869 movd mm3, eax <font class="comment">// mm3= 1-factor</font>
+00870 punpckldq mm2, mm2 <font class="comment">// mm2= 0000 00AA 0000 00AA</font>
+00871 punpckldq mm3, mm3 <font class="comment">// mm3= 0000 00AA 0000 00AA</font>
+00872 packssdw mm2, mm2 <font class="comment">// mm2= 00AA 00AA 00AA 00AA</font>
+00873 packssdw mm3, mm3 <font class="comment">// mm3= 00AA 00AA 00AA 00AA</font>
+00874
+00875 <font class="comment">// setup ptrs</font>
+00876 mov esi, src0
+00877 mov edx, src1
+00878 sub edx, esi <font class="comment">// difference between 2 src</font>
+00879 mov edi, dst
+00880 mov ecx, len
+00881
+00882 <font class="comment">// Loop</font>
+00883 myLoop:
+00884
+00885 <font class="comment">// Read</font>
+00886 movd mm0, [esi]
+00887 movd mm1, [esi+edx]
+00888
+00889 <font class="comment">// mul</font>
+00890 punpcklbw mm0, mm7
+00891 punpcklbw mm1, mm7
+00892 pmullw mm0, mm3 <font class="comment">// color0*(1-factor)</font>
+00893 pmullw mm1, mm2 <font class="comment">// color1*factor</font>
+00894 <font class="comment">// add, and unpack</font>
+00895 paddusw mm0, mm1
+00896 psrlw mm0, 8
+00897 packuswb mm0, mm0
+00898
+00899 <font class="comment">// store</font>
+00900 movd [edi], mm0
+00901
+00902
+00903 <font class="comment">// next pix</font>
+00904 add esi, 4
+00905 add edi, 4
+00906 dec ecx
+00907 jnz myLoop
+00908 }
+00909 }
+00910
+00911
+00912 <font class="comment">// ***************************************************************************</font>
+00916 <font class="comment"></font><font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a4">NL3D_asmAssembleShading1x1</a>(<font class="keyword">const</font> uint8 *lumels, <font class="keyword">const</font> CRGBA *colorMap,
+00917 <font class="keyword">const</font> CRGBA *srcTLIs, <font class="keyword">const</font> CRGBA *srcUSCs, CRGBA *dst, uint lineWidth, uint nbTexel)
+00918 {
+00919 <font class="keyword">static</font> uint64 blank = 0;
+00920 <font class="keywordflow">if</font>(nbTexel==0)
+00921 <font class="keywordflow">return</font>;
+00922
+00923 <font class="comment">// local var</font>
+00924 uint offsetTLIs= ((uint)srcTLIs-(uint)dst);
+00925 uint offsetUSCs= ((uint)srcUSCs-(uint)dst);
+00926
+00927 <font class="comment">// Loop for pix.</font>
+00928 __asm
+00929 {
+00930 movq mm7, blank
+00931
+00932 <font class="comment">// setup ptrs</font>
+00933 mov esi, lumels
+00934 mov edi, dst
+00935 mov ecx, nbTexel
+00936
+00937 <font class="comment">// Loop</font>
+00938 myLoop:
+00939
+00940 <font class="comment">// Average shade part</font>
+00941 <font class="comment">//------------</font>
+00942 mov ebx, colorMap
+00943 mov edx, lineWidth
+00944
+00945 <font class="comment">// read and accumulate shade </font>
+00946 xor eax,eax <font class="comment">// avoid partial stall</font>
+00947 <font class="comment">// add with line 0</font>
+00948 mov al, [esi + 0]
+00949 add al, [esi + 1]
+00950 adc ah, 0
+00951 add al, [esi + 2]
+00952 adc ah, 0
+00953 add al, [esi + 3]
+00954 adc ah, 0
+00955 <font class="comment">// add with line 1</font>
+00956 add al, [esi + edx + 0]
+00957 adc ah, 0
+00958 add al, [esi + edx + 1]
+00959 adc ah, 0
+00960 add al, [esi + edx + 2]
+00961 adc ah, 0
+00962 add al, [esi + edx + 3]
+00963 adc ah, 0
+00964 <font class="comment">// add with line 2</font>
+00965 add al, [esi + edx*2 + 0]
+00966 adc ah, 0
+00967 add al, [esi + edx*2 + 1]
+00968 adc ah, 0
+00969 add al, [esi + edx*2 + 2]
+00970 adc ah, 0
+00971 add al, [esi + edx*2 + 3]
+00972 adc ah, 0
+00973 <font class="comment">// add with line 3</font>
+00974 lea edx, [edx + edx*2]
+00975 add al, [esi + edx + 0]
+00976 adc ah, 0
+00977 add al, [esi + edx + 1]
+00978 adc ah, 0
+00979 add al, [esi + edx + 2]
+00980 adc ah, 0
+00981 add al, [esi + edx + 3]
+00982 adc ah, 0
+00983 <font class="comment">// average</font>
+00984 shr eax, 4
+00985
+00986 <font class="comment">// convert to RGBA from the color Map</font>
+00987 movd mm0, [ebx + eax*4]
+00988
+00989 <font class="comment">// Assemble part</font>
+00990 <font class="comment">//------------</font>
+00991 mov edx, offsetTLIs
+00992 mov ebx, offsetUSCs
+00993
+00994 <font class="comment">// Add with TLI, and clamp.</font>
+00995 paddusb mm0, [edi + edx]
+00996
+00997 <font class="comment">// mul with USC</font>
+00998 movd mm1, [edi + ebx]
+00999 punpcklbw mm0, mm7
+01000 punpcklbw mm1, mm7
+01001 pmullw mm0, mm1
+01002 <font class="comment">// unpack</font>
+01003 psrlw mm0, 8
+01004 packuswb mm0, mm0
+01005
+01006 <font class="comment">// store</font>
+01007 movd [edi], mm0
+01008
+01009
+01010 <font class="comment">// next pix</font>
+01011 add esi, 4 <font class="comment">// skip 4 lumels</font>
+01012 add edi, 4 <font class="comment">// next texel</font>
+01013 dec ecx
+01014 jnz myLoop
+01015 }
+01016 }
+01017
+01018
+01019 <font class="comment">// ***************************************************************************</font>
+01023 <font class="comment"></font><font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a5">NL3D_asmAssembleShading2x2</a>(<font class="keyword">const</font> uint8 *lumels, <font class="keyword">const</font> CRGBA *colorMap,
+01024 <font class="keyword">const</font> CRGBA *srcTLIs, <font class="keyword">const</font> CRGBA *srcUSCs, CRGBA *dst, uint lineWidth, uint nbTexel)
+01025 {
+01026 <font class="keyword">static</font> uint64 blank = 0;
+01027 <font class="keywordflow">if</font>(nbTexel==0)
+01028 <font class="keywordflow">return</font>;
+01029
+01030 <font class="comment">// local var</font>
+01031 uint offsetTLIs= ((uint)srcTLIs-(uint)dst);
+01032 uint offsetUSCs= ((uint)srcUSCs-(uint)dst);
+01033
+01034 <font class="comment">// Loop for pix.</font>
+01035 __asm
+01036 {
+01037 movq mm7, blank
+01038
+01039 <font class="comment">// setup ptrs</font>
+01040 mov esi, lumels
+01041 mov edi, dst
+01042 mov ecx, nbTexel
+01043
+01044 <font class="comment">// Loop</font>
+01045 myLoop:
+01046
+01047 <font class="comment">// Average shade part</font>
+01048 <font class="comment">//------------</font>
+01049 mov ebx, colorMap
+01050 mov edx, lineWidth
+01051
+01052 <font class="comment">// read and accumulate shade </font>
+01053 xor eax,eax <font class="comment">// avoid partial stall</font>
+01054 mov al, [esi] <font class="comment">// read lumel</font>
+01055 <font class="comment">// add with nbors</font>
+01056 add al, [esi + 1]
+01057 adc ah, 0
+01058 add al, [esi + edx]
+01059 adc ah, 0
+01060 add al, [esi + edx + 1]
+01061 adc ah, 0
+01062 <font class="comment">// average</font>
+01063 shr eax, 2
+01064
+01065 <font class="comment">// convert to RGBA from the color Map</font>
+01066 movd mm0, [ebx + eax*4]
+01067
+01068 <font class="comment">// Assemble part</font>
+01069 <font class="comment">//------------</font>
+01070 mov edx, offsetTLIs
+01071 mov ebx, offsetUSCs
+01072
+01073 <font class="comment">// Add with TLI, and clamp.</font>
+01074 paddusb mm0, [edi + edx]
+01075
+01076 <font class="comment">// mul with USC</font>
+01077 movd mm1, [edi + ebx]
+01078 punpcklbw mm0, mm7
+01079 punpcklbw mm1, mm7
+01080 pmullw mm0, mm1
+01081 <font class="comment">// unpack</font>
+01082 psrlw mm0, 8
+01083 packuswb mm0, mm0
+01084
+01085 <font class="comment">// store</font>
+01086 movd [edi], mm0
+01087
+01088
+01089 <font class="comment">// next pix</font>
+01090 add esi, 2 <font class="comment">// skip 2 lumels</font>
+01091 add edi, 4 <font class="comment">// next texel</font>
+01092 dec ecx
+01093 jnz myLoop
+01094 }
+01095 }
+01096
+01097
+01098 <font class="comment">// ***************************************************************************</font>
+01099 <font class="preprocessor"># pragma warning (disable : 4731) // frame pointer register 'ebp' modified by inline assembly code</font>
+01100 <font class="preprocessor"></font>
+01103 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a6">NL3D_asmAssembleShading4x4</a>(<font class="keyword">const</font> uint8 *lumels, <font class="keyword">const</font> CRGBA *colorMap,
+01104 <font class="keyword">const</font> CRGBA *srcTLIs, <font class="keyword">const</font> CRGBA *srcUSCs, CRGBA *dst, uint nbTexel)
+01105 {
+01106 <font class="keyword">static</font> uint64 blank = 0;
+01107 <font class="keywordflow">if</font>(nbTexel==0)
+01108 <font class="keywordflow">return</font>;
+01109
+01110 <font class="comment">// Loop for pix.</font>
+01111 __asm
+01112 {
+01113 <font class="comment">// Use ebp as a register for faster access...</font>
+01114 push ebp
+01115
+01116 movq mm7, blank
+01117
+01118 <font class="comment">// setup ptrs</font>
+01119 mov esi, lumels
+01120 mov edi, dst
+01121 mov edx, srcTLIs
+01122 sub edx, edi <font class="comment">// difference src and dest</font>
+01123 mov ebx, srcUSCs
+01124 sub ebx, edi <font class="comment">// difference src and dest</font>
+01125 mov ecx, nbTexel
+01126
+01127 <font class="comment">// set ebp after reading locals...</font>
+01128 mov ebp, colorMap
+01129
+01130 <font class="comment">// Loop</font>
+01131 myLoop:
+01132
+01133 <font class="comment">// read shade RGBA into the color Map</font>
+01134 xor eax,eax <font class="comment">// avoid partial stall</font>
+01135 mov al,[esi] <font class="comment">// read lumel</font>
+01136 movd mm0, [ebp + eax*4]
+01137
+01138 <font class="comment">// Add with TLI, and clamp.</font>
+01139 paddusb mm0, [edi + edx]
+01140
+01141 <font class="comment">// mul with USC</font>
+01142 movd mm1, [edi + ebx]
+01143 punpcklbw mm0, mm7
+01144 punpcklbw mm1, mm7
+01145 pmullw mm0, mm1
+01146 <font class="comment">// unpack</font>
+01147 psrlw mm0, 8
+01148 packuswb mm0, mm0
+01149
+01150 <font class="comment">// store</font>
+01151 movd [edi], mm0
+01152
+01153
+01154 <font class="comment">// next pix</font>
+01155 add esi, 1 <font class="comment">// next lumel</font>
+01156 add edi, 4 <font class="comment">// next texel</font>
+01157 dec ecx
+01158 jnz myLoop
+01159
+01160 <font class="comment">// restore</font>
+01161 pop ebp
+01162 }
+01163
+01164 }
+01165
+01166 <font class="preprocessor"># pragma warning (default : 4731) // frame pointer register 'ebp' modified by inline assembly code</font>
+01167 <font class="preprocessor"></font>
+01168
+01169 <font class="preprocessor">#else // NL_OS_WINDOWS</font>
+01170 <font class="preprocessor"></font>
+01171 <font class="comment">// Dummy for non-windows platforms</font>
+<a name="l01172"></a><a class="code" href="texture__far_8cpp.html#a0">01172</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>() {}
+<a name="l01173"></a><a class="code" href="texture__far_8cpp.html#a1">01173</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a1">NL3D_asmExpandLineColor565</a>(<font class="keyword">const</font> uint16 *<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>, CRGBA *dst, uint du, uint len) {}
+<a name="l01174"></a><a class="code" href="texture__far_8cpp.html#a2">01174</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a2">NL3D_asmExpandLineColor8888</a>(<font class="keyword">const</font> CRGBA *<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>, CRGBA *dst, uint du, uint len) {}
+<a name="l01175"></a><a class="code" href="texture__far_8cpp.html#a3">01175</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a3">NL3D_asmBlendLines</a>(CRGBA *dst, <font class="keyword">const</font> CRGBA *src0, <font class="keyword">const</font> CRGBA *src1, uint <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>, uint len) {}
+<a name="l01176"></a><a class="code" href="texture__far_8cpp.html#a4">01176</a> <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a4">NL3D_asmAssembleShading1x1</a>(<font class="keyword">const</font> uint8 *lumels, <font class="keyword">const</font> CRGBA *colorMap,
+01177 <font class="keyword">const</font> CRGBA *srcTLIs, <font class="keyword">const</font> CRGBA *srcUSCs, CRGBA *dst, uint lineWidth, uint nbTexel)
+01178 {
+01179 }
+<a name="l01180"></a><a class="code" href="texture__far_8cpp.html#a5">01180</a> <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a5">NL3D_asmAssembleShading2x2</a>(<font class="keyword">const</font> uint8 *lumels, <font class="keyword">const</font> CRGBA *colorMap,
+01181 <font class="keyword">const</font> CRGBA *srcTLIs, <font class="keyword">const</font> CRGBA *srcUSCs, CRGBA *dst, uint lineWidth, uint nbTexel)
+01182 {
+01183 }
+<a name="l01184"></a><a class="code" href="texture__far_8cpp.html#a6">01184</a> <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a6">NL3D_asmAssembleShading4x4</a>(<font class="keyword">const</font> uint8 *lumels, <font class="keyword">const</font> CRGBA *colorMap,
+01185 <font class="keyword">const</font> CRGBA *srcTLIs, <font class="keyword">const</font> CRGBA *srcUSCs, CRGBA *dst, uint nbTexel)
+01186 {
+01187 }
+01188
+01189 <font class="preprocessor">#endif // NL_OS_WINDOWS</font>
+01190 <font class="preprocessor"></font>
+01191
+01192 <font class="comment">// ***************************************************************************</font>
+<a name="l01193"></a><a class="code" href="texture__far_8cpp.html#a7">01193</a> <font class="keyword">extern</font> <font class="stringliteral">"C"</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a7">NL3D_expandLightmap</a> (<font class="keyword">const</font> <a class="code" href="structNL3D__CExpandLightmap.html">NL3D_CExpandLightmap</a>* pLightmap)
+01194 {
+01195 <font class="keywordtype">bool</font> asmMMX= <font class="keyword">false</font>;
+01196 <font class="preprocessor">#ifdef NL_OS_WINDOWS</font>
+01197 <font class="preprocessor"></font> asmMMX= CSystemInfo::hasMMX();
+01198 <font class="comment">// A CTileColor must be a 565 only.</font>
+01199 <a class="code" href="debug_8h.html#a6">nlassert</a>(<font class="keyword">sizeof</font>(CTileColor)==2);
+01200 <font class="preprocessor">#endif</font>
+01201 <font class="preprocessor"></font>
+01202 <font class="comment">// Expanded width</font>
+01203 uint dstWidth=(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>-1)*pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m5">MulFactor</a>;
+01204 uint dstHeight=(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m4">Height</a>-1)*pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m5">MulFactor</a>;
+01205
+01206 <font class="comment">// *** First expand user color and TLI colors</font>
+01207 <font class="comment">// First pass, expand on U</font>
+01208 <font class="keyword">static</font> CRGBA expandedUserColorLine[ (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*
+01209 (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a> ];
+01210 <font class="keyword">static</font> CRGBA expandedTLIColorLine[ (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*
+01211 (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a> ];
+01212 <font class="comment">// Second pass, expand on V.</font>
+01213 <font class="keyword">static</font> CRGBA expandedUserColor[ (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a> *
+01214 (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a> ];
+01215 <font class="keyword">static</font> CRGBA expandedTLIColor[ (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a> *
+01216 (<a class="code" href="patch_8h.html#a1">NL_MAX_TILES_BY_PATCH_EDGE</a>+1)*<a class="code" href="patch_8h.html#a7">NL_LUMEL_BY_TILE</a> ];
+01217
+01218
+01219 <font class="comment">// ** Expand on U</font>
+01220 <font class="comment">//=========</font>
+01221 uint u, <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>;
+01222
+01223 <font class="comment">// Expansion factor</font>
+01224 uint expandFactor=((pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>-1)&lt;&lt;8)/(dstWidth-1);
+01225
+01226 <font class="comment">// Destination pointer</font>
+01227 CRGBA *expandedUserColorLinePtr= expandedUserColorLine;
+01228 CRGBA *expandedTLIColorLinePtr= expandedTLIColorLine;
+01229
+01230 <font class="comment">// Source pointer</font>
+01231 <font class="keyword">const</font> <a class="code" href="classNL3D_1_1CTileColor.html">NL3D::CTileColor</a> *colorTilePtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m0">ColorTile</a>;
+01232 <font class="keyword">const</font> <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> *colorTLIPtr= pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m1">TLIColor</a>;
+01233
+01234 <font class="comment">// Go for U</font>
+01235 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>&lt;pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m4">Height</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>++)
+01236 {
+01237 <font class="comment">// First pixel</font>
+01238 expandedUserColorLinePtr[0].<a class="code" href="classNLMISC_1_1CRGBA.html#a12">set565</a> (colorTilePtr[0].Color565);
+01239 expandedTLIColorLinePtr[0]= colorTLIPtr[0];
+01240
+01241 <font class="comment">// MMX implementation.</font>
+01242 <font class="comment">//-------------</font>
+01243 <font class="keywordflow">if</font>(asmMMX)
+01244 {
+01245 <a class="code" href="texture__far_8cpp.html#a1">NL3D_asmExpandLineColor565</a>(&amp;colorTilePtr-&gt;<a class="code" href="classNL3D_1_1CTileColor.html#m0">Color565</a>, expandedUserColorLinePtr, expandFactor, dstWidth-2);
+01246 <a class="code" href="texture__far_8cpp.html#a2">NL3D_asmExpandLineColor8888</a>(colorTLIPtr, expandedTLIColorLinePtr, expandFactor, dstWidth-2);
+01247 }
+01248 <font class="comment">// C implementation</font>
+01249 <font class="comment">//-------------</font>
+01250 <font class="keywordflow">else</font>
+01251 {
+01252 <font class="comment">// Index next pixel</font>
+01253 uint srcIndexPixel=expandFactor;
+01254
+01255 <font class="keywordflow">for</font> (u=1; u&lt;dstWidth-1; u++)
+01256 {
+01257 <font class="comment">// Check</font>
+01258 <a class="code" href="debug_8h.html#a6">nlassert</a> ( (u+<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>*dstWidth) &lt; (<font class="keyword">sizeof</font>(expandedUserColorLine)/<font class="keyword">sizeof</font>(CRGBA)) );
+01259
+01260 <font class="comment">// Color index</font>
+01261 uint srcIndex=srcIndexPixel&gt;&gt;8;
+01262 <a class="code" href="debug_8h.html#a6">nlassert</a> (srcIndex&gt;=0);
+01263 <a class="code" href="debug_8h.html#a6">nlassert</a> (srcIndex&lt;pLightmap-&gt;Width-1);
+01264
+01265 <font class="comment">// Compute current color</font>
+01266 CRGBA color0;
+01267 CRGBA color1;
+01268 color0.set565 (colorTilePtr[srcIndex].Color565);
+01269 color1.set565 (colorTilePtr[srcIndex+1].Color565);
+01270 expandedUserColorLinePtr[u].blendFromui (color0, color1, srcIndexPixel&amp;0xff);
+01271 <font class="comment">// Compute current TLI color</font>
+01272 color0= colorTLIPtr[srcIndex];
+01273 color1= colorTLIPtr[srcIndex+1];
+01274 expandedTLIColorLinePtr[u].<a class="code" href="classNLMISC_1_1CRGBA.html#a7">blendFromui</a> (color0, color1, srcIndexPixel&amp;0xff);
+01275
+01276 <font class="comment">// Next index</font>
+01277 srcIndexPixel+=expandFactor;
+01278 }
+01279 }
+01280
+01281 <font class="comment">// Last pixel</font>
+01282 expandedUserColorLinePtr[dstWidth-1].set565 (colorTilePtr[pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>-1].Color565);
+01283 expandedTLIColorLinePtr[dstWidth-1]= colorTLIPtr[pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>-1];
+01284
+01285 <font class="comment">// Next line</font>
+01286 expandedUserColorLinePtr+= dstWidth;
+01287 expandedTLIColorLinePtr+= dstWidth;
+01288 colorTilePtr+=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>;
+01289 colorTLIPtr+=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m3">Width</a>;
+01290 }
+01291
+01292 <font class="comment">// stop MMX if used</font>
+01293 <font class="keywordflow">if</font>(asmMMX)
+01294 <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>();
+01295
+01296 <font class="comment">// ** Expand on V</font>
+01297 <font class="comment">//=========</font>
+01298
+01299 <font class="comment">// Expansion factor</font>
+01300 expandFactor=((pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m4">Height</a>-1)&lt;&lt;8)/(dstHeight-1);
+01301
+01302 <font class="comment">// Destination pointer</font>
+01303 CRGBA *expandedUserColorPtr= expandedUserColor;
+01304 CRGBA *expandedTLIColorPtr= expandedTLIColor;
+01305
+01306 <font class="comment">// Src pointer</font>
+01307 expandedUserColorLinePtr= expandedUserColorLine;
+01308 expandedTLIColorLinePtr= expandedTLIColorLine;
+01309
+01310 <font class="comment">// Copy first row</font>
+01311 memcpy(expandedUserColorPtr, expandedUserColorLinePtr, dstWidth*<font class="keyword">sizeof</font>(CRGBA));
+01312 memcpy(expandedTLIColorPtr, expandedTLIColorLinePtr, dstWidth*<font class="keyword">sizeof</font>(CRGBA));
+01313
+01314 <font class="comment">// Next line</font>
+01315 expandedUserColorPtr+=dstWidth;
+01316 expandedTLIColorPtr+=dstWidth;
+01317
+01318 <font class="comment">// Index next pixel</font>
+01319 uint indexPixel=expandFactor;
+01320
+01321 <font class="comment">// Go for V</font>
+01322 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>=1; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>&lt;dstHeight-1; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>++)
+01323 {
+01324 <font class="comment">// Color index</font>
+01325 uint <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>=indexPixel&gt;&gt;8;
+01326
+01327 <font class="comment">// Source pointer</font>
+01328 CRGBA *colorTilePtr0= expandedUserColorLine + <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>*dstWidth;
+01329 CRGBA *colorTilePtr1= expandedUserColorLine + (<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>+1)*dstWidth;
+01330 CRGBA *colorTLIPtr0= expandedTLIColorLine + <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>*dstWidth;
+01331 CRGBA *colorTLIPtr1= expandedTLIColorLine + (<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>+1)*dstWidth;
+01332
+01333 <font class="comment">// MMX implementation.</font>
+01334 <font class="comment">//-------------</font>
+01335 <font class="keywordflow">if</font>(asmMMX)
+01336 {
+01337 <a class="code" href="texture__far_8cpp.html#a3">NL3D_asmBlendLines</a>(expandedUserColorPtr, colorTilePtr0, colorTilePtr1, indexPixel, dstWidth);
+01338 <a class="code" href="texture__far_8cpp.html#a3">NL3D_asmBlendLines</a>(expandedTLIColorPtr, colorTLIPtr0, colorTLIPtr1, indexPixel, dstWidth);
+01339 }
+01340 <font class="comment">// C implementation</font>
+01341 <font class="comment">//-------------</font>
+01342 <font class="keywordflow">else</font>
+01343 {
+01344 <font class="comment">// Copy the row</font>
+01345 <font class="keywordflow">for</font> (u=0; u&lt;dstWidth; u++)
+01346 {
+01347 expandedUserColorPtr[u].blendFromui (colorTilePtr0[u], colorTilePtr1[u], indexPixel&amp;0xff);
+01348 expandedTLIColorPtr[u].blendFromui (colorTLIPtr0[u], colorTLIPtr1[u], indexPixel&amp;0xff);
+01349 }
+01350 }
+01351
+01352 <font class="comment">// Next index</font>
+01353 indexPixel+=expandFactor;
+01354
+01355 <font class="comment">// Next line</font>
+01356 expandedUserColorPtr+=dstWidth;
+01357 expandedTLIColorPtr+=dstWidth;
+01358 }
+01359
+01360 <font class="comment">// stop MMX if used</font>
+01361 <font class="keywordflow">if</font>(asmMMX)
+01362 <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>();
+01363
+01364 <font class="comment">// Last row</font>
+01365 <font class="comment">// Destination pointer</font>
+01366 expandedUserColorPtr= expandedUserColor + dstWidth*(dstHeight-1);
+01367 expandedTLIColorPtr= expandedTLIColor + dstWidth*(dstHeight-1);
+01368 <font class="comment">// Src pointer</font>
+01369 expandedUserColorLinePtr= expandedUserColorLine + dstWidth*(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m4">Height</a>-1);
+01370 expandedTLIColorLinePtr= expandedTLIColorLine + dstWidth*(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m4">Height</a>-1);
+01371
+01372 <font class="comment">// Copy last row</font>
+01373 memcpy(expandedUserColorPtr, expandedUserColorLinePtr, dstWidth*<font class="keyword">sizeof</font>(CRGBA));
+01374 memcpy(expandedTLIColorPtr, expandedTLIColorLinePtr, dstWidth*<font class="keyword">sizeof</font>(CRGBA));
+01375
+01376 <font class="comment">// *** Now combine with shading</font>
+01377 <font class="comment">//=========</font>
+01378
+01379 <font class="comment">// Switch to the optimal method for each expansion value</font>
+01380 <font class="keywordflow">switch</font> (pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m5">MulFactor</a>)
+01381 {
+01382 <font class="keywordflow">case</font> 1:
+01383 {
+01384 <font class="comment">// Make 4x4 -&gt; 1x1 blend</font>
+01385 CRGBA *lineUSCPtr= expandedUserColor;
+01386 CRGBA *lineTLIPtr= expandedTLIColor;
+01387 CRGBA *lineDestPtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m7">DstPixels</a>;
+01388 <font class="keyword">const</font> uint8 *lineLumelPtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m2">LumelTile</a>;
+01389 uint lineWidth=dstWidth&lt;&lt;2;
+01390 uint lineWidthx2=lineWidth&lt;&lt;1;
+01391 uint lineWidthx3=lineWidthx2+lineWidth;
+01392 uint lineWidthx4=lineWidth&lt;&lt;2;
+01393
+01394 <font class="comment">// For each line</font>
+01395 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>&lt;dstHeight; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>++)
+01396 {
+01397 <font class="comment">// MMX implementation.</font>
+01398 <font class="comment">//-------------</font>
+01399 <font class="keywordflow">if</font>(asmMMX)
+01400 {
+01401 <a class="code" href="texture__far_8cpp.html#a4">NL3D_asmAssembleShading1x1</a>(lineLumelPtr, pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>, lineTLIPtr, lineUSCPtr, lineDestPtr,
+01402 lineWidth, dstWidth);
+01403 }
+01404 <font class="comment">// C implementation</font>
+01405 <font class="comment">//-------------</font>
+01406 <font class="keywordflow">else</font>
+01407 {
+01408 <font class="comment">// For each lumel block</font>
+01409 <font class="keywordflow">for</font> (u=0; u&lt;dstWidth; u++)
+01410 {
+01411 <font class="comment">// index</font>
+01412 uint lumelIndex=u&lt;&lt;2;
+01413
+01414 <font class="comment">// Shading is filtred</font>
+01415 uint shading=
+01416 ((uint)lineLumelPtr[lumelIndex]+(uint)lineLumelPtr[lumelIndex+1]+(uint)lineLumelPtr[lumelIndex+2]+(uint)lineLumelPtr[lumelIndex+3]
+01417 +(uint)lineLumelPtr[lumelIndex+lineWidth]+(uint)lineLumelPtr[lumelIndex+1+lineWidth]+(uint)lineLumelPtr[lumelIndex+2+lineWidth]+(uint)lineLumelPtr[lumelIndex+3+lineWidth]
+01418 +(uint)lineLumelPtr[lumelIndex+lineWidthx2]+(uint)lineLumelPtr[lumelIndex+1+lineWidthx2]+(uint)lineLumelPtr[lumelIndex+2+lineWidthx2]+(uint)lineLumelPtr[lumelIndex+3+lineWidthx2]
+01419 +(uint)lineLumelPtr[lumelIndex+lineWidthx3]+(uint)lineLumelPtr[lumelIndex+1+lineWidthx3]+(uint)lineLumelPtr[lumelIndex+2+lineWidthx3]+(uint)lineLumelPtr[lumelIndex+3+lineWidthx3]
+01420 )&gt;&gt;4;
+01421
+01422 <font class="comment">// Add shading with TLI color.</font>
+01423 CRGBA col;
+01424 col.addRGBOnly(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>[shading], lineTLIPtr[u]);
+01425
+01426 <font class="comment">// Mul by the userColor</font>
+01427 lineDestPtr[u].modulateFromColorRGBOnly(col, lineUSCPtr[u]);
+01428 }
+01429 }
+01430
+01431 <font class="comment">// Next line</font>
+01432 lineUSCPtr+=dstWidth;
+01433 lineTLIPtr+=dstWidth;
+01434 lineDestPtr+=dstWidth;
+01435 lineLumelPtr+=lineWidthx4;
+01436 }
+01437 <font class="keywordflow">break</font>;
+01438 }
+01439 <font class="keywordflow">case</font> 2:
+01440 {
+01441 <font class="comment">// Make 2x2 -&gt; 1x1 blend</font>
+01442 CRGBA *lineUSCPtr= expandedUserColor;
+01443 CRGBA *lineTLIPtr= expandedTLIColor;
+01444 CRGBA *lineDestPtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m7">DstPixels</a>;
+01445 <font class="keyword">const</font> uint8 *lineLumelPtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m2">LumelTile</a>;
+01446 uint lineWidth=dstWidth*2;
+01447 uint lineWidthx2=lineWidth&lt;&lt;1;
+01448
+01449 <font class="comment">// For each line</font>
+01450 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>&lt;dstHeight; <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>++)
+01451 {
+01452 <font class="comment">// MMX implementation.</font>
+01453 <font class="comment">//-------------</font>
+01454 <font class="keywordflow">if</font>(asmMMX)
+01455 {
+01456 <a class="code" href="texture__far_8cpp.html#a5">NL3D_asmAssembleShading2x2</a>(lineLumelPtr, pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>, lineTLIPtr, lineUSCPtr, lineDestPtr,
+01457 lineWidth, dstWidth);
+01458 }
+01459 <font class="comment">// C implementation</font>
+01460 <font class="comment">//-------------</font>
+01461 <font class="keywordflow">else</font>
+01462 {
+01463 <font class="comment">// For each lumel block</font>
+01464 <font class="keywordflow">for</font> (u=0; u&lt;dstWidth; u++)
+01465 {
+01466 <font class="comment">// index</font>
+01467 uint lumelIndex=u&lt;&lt;1;
+01468
+01469 <font class="comment">// Shading is filtred</font>
+01470 uint shading=
+01471 ((uint)lineLumelPtr[lumelIndex]+(uint)lineLumelPtr[lumelIndex+1]+(uint)lineLumelPtr[lumelIndex+lineWidth]+(uint)lineLumelPtr[lumelIndex+1+lineWidth])&gt;&gt;2;
+01472
+01473 <font class="comment">// Add shading with TLI color.</font>
+01474 CRGBA col;
+01475 col.addRGBOnly(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>[shading], lineTLIPtr[u]);
+01476
+01477 <font class="comment">// Mul by the userColor</font>
+01478 lineDestPtr[u].modulateFromColorRGBOnly(col, lineUSCPtr[u]);
+01479 }
+01480 }
+01481
+01482 <font class="comment">// Next line</font>
+01483 lineUSCPtr+=dstWidth;
+01484 lineTLIPtr+=dstWidth;
+01485 lineDestPtr+=dstWidth;
+01486 lineLumelPtr+=lineWidthx2;
+01487 }
+01488 <font class="keywordflow">break</font>;
+01489 }
+01490
+01491 <font class="keywordflow">case</font> 4:
+01492 <font class="comment">// Make copy</font>
+01493 CRGBA *lineUSCPtr= expandedUserColor;
+01494 CRGBA *lineTLIPtr= expandedTLIColor;
+01495 CRGBA *lineDestPtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m7">DstPixels</a>;
+01496 <font class="keyword">const</font> uint8 *lineLumelPtr=pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m2">LumelTile</a>;
+01497 uint nbTexel=dstWidth*dstHeight;
+01498
+01499 <font class="comment">// MMX implementation.</font>
+01500 <font class="comment">//-------------</font>
+01501 <font class="keywordflow">if</font>(asmMMX)
+01502 {
+01503 <a class="code" href="texture__far_8cpp.html#a6">NL3D_asmAssembleShading4x4</a>(lineLumelPtr, pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>, lineTLIPtr, lineUSCPtr, lineDestPtr,
+01504 nbTexel);
+01505 }
+01506 <font class="comment">// C implementation</font>
+01507 <font class="comment">//-------------</font>
+01508 <font class="keywordflow">else</font>
+01509 {
+01510 <font class="comment">// For each pixel</font>
+01511 <font class="keywordflow">for</font> (u=0; u&lt;nbTexel; u++)
+01512 {
+01513 <font class="comment">// Shading is filtred</font>
+01514 uint shading=lineLumelPtr[u];
+01515
+01516 <font class="comment">// Add shading with TLI color.</font>
+01517 CRGBA col;
+01518 col.addRGBOnly(pLightmap-&gt;<a class="code" href="structNL3D__CExpandLightmap.html#m6">StaticLightColor</a>[shading], lineTLIPtr[u]);
+01519
+01520 <font class="comment">// Mul by the userColor</font>
+01521 lineDestPtr[u].modulateFromColorRGBOnly(col, lineUSCPtr[u]);
+01522 }
+01523 }
+01524 <font class="keywordflow">break</font>;
+01525 }
+01526
+01527 <font class="comment">// stop MMX if used</font>
+01528 <font class="keywordflow">if</font>(asmMMX)
+01529 <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>();
+01530
+01531 }
+01532
+01533
+01534 <font class="comment">// ***************************************************************************</font>
+01535 <font class="comment">// ***************************************************************************</font>
+01536 <font class="comment">// NL3D_drawFarTileInFar*. C and Asm Part</font>
+01537 <font class="comment">// ***************************************************************************</font>
+01538 <font class="comment">// ***************************************************************************</font>
+01539
+01540
+01541 <font class="preprocessor">#ifdef NL_OS_WINDOWS</font>
+01542 <font class="preprocessor"></font>
+01543
+01544 <font class="comment">// ***************************************************************************</font>
+01545 <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a8">NL3D_asmModulateLineColors</a>(CRGBA *dst, <font class="keyword">const</font> CRGBA *src0, <font class="keyword">const</font> CRGBA *src1,
+01546 uint len, uint src0DeltaX, uint dstDeltaX)
+01547 {
+01548 <font class="keyword">static</font> uint64 blank= 0;
+01549 <font class="keywordflow">if</font>(len==0)
+01550 <font class="keywordflow">return</font>;
+01551
+01552 __asm
+01553 {
+01554 movq mm7, blank
+01555
+01556 mov esi, src0 <font class="comment">// esi point to src Pixels</font>
+01557 mov edx, src1 <font class="comment">// edx point to src lighting pixels</font>
+01558 mov edi, dst
+01559 mov ecx, len
+01560 <font class="comment">// compute increments for esi and edi</font>
+01561 mov eax, src0DeltaX
+01562 mov ebx, dstDeltaX
+01563 sal eax, 2
+01564 sal ebx, 2
+01565
+01566 myLoop:
+01567 <font class="comment">// read colors</font>
+01568 movd mm0, [esi]
+01569 movd mm1, [edx]
+01570
+01571 <font class="comment">// mul mm0 and mm1</font>
+01572 punpcklbw mm0, mm7
+01573 punpcklbw mm1, mm7
+01574 pmullw mm0, mm1
+01575 psrlw mm0, 8
+01576 <font class="comment">// pack</font>
+01577 packuswb mm0, mm0
+01578
+01579 <font class="comment">// out</font>
+01580 movd [edi], mm0
+01581
+01582 <font class="comment">// increment</font>
+01583 add esi, eax
+01584 add edi, ebx
+01585 add edx, 4
+01586 dec ecx
+01587 jnz myLoop
+01588 }
+01589 }
+01590
+01591
+01592 <font class="comment">// ***************************************************************************</font>
+01593 <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a9">NL3D_asmModulateAndBlendLineColors</a>(CRGBA *dst, <font class="keyword">const</font> CRGBA *src0, <font class="keyword">const</font> CRGBA *src1,
+01594 uint len, uint src0DeltaX, uint dstDeltaX)
+01595 {
+01596 <font class="keyword">static</font> uint64 blank= 0;
+01597 <font class="keyword">static</font> uint64 one= 0x0100010001000100;
+01598 <font class="keywordflow">if</font>(len==0)
+01599 <font class="keywordflow">return</font>;
+01600
+01601 __asm
+01602 {
+01603 movq mm7, blank
+01604 movq mm6, one
+01605
+01606 mov esi, src0 <font class="comment">// esi point to src Pixels</font>
+01607 mov edx, src1 <font class="comment">// edx point to src lighting pixels</font>
+01608 mov edi, dst
+01609 mov ecx, len
+01610 <font class="comment">// compute increments for esi and edi</font>
+01611 mov eax, src0DeltaX
+01612 mov ebx, dstDeltaX
+01613 sal eax, 2
+01614 sal ebx, 2
+01615
+01616 myLoop:
+01617 <font class="comment">// read colors</font>
+01618 movd mm0, [esi]
+01619 movd mm1, [edx]
+01620
+01621 <font class="comment">// save and unpack Alpha. NB: ABGR</font>
+01622 movq mm2, mm0
+01623 psrld mm2, 24 <font class="comment">// mm2= 0000 0000 0000 00AA</font>
+01624 punpckldq mm2, mm2 <font class="comment">// mm2= 0000 00AA 0000 00AA</font>
+01625 packssdw mm2, mm2 <font class="comment">// mm2= 00AA 00AA 00AA 00AA</font>
+01626 <font class="comment">// negate with 256.</font>
+01627 movq mm3, mm6
+01628 psubusw mm3, mm2
+01629
+01630 <font class="comment">// mul mm0 and mm1</font>
+01631 punpcklbw mm0, mm7
+01632 punpcklbw mm1, mm7
+01633 pmullw mm0, mm1
+01634 psrlw mm0, 8
+01635
+01636 <font class="comment">// Alpha Blend with mm3 and mm2</font>
+01637 movd mm1, [edi] <font class="comment">// read dest</font>
+01638 punpcklbw mm1, mm7
+01639 pmullw mm0, mm2 <font class="comment">// mm0= srcColor*A</font>
+01640 pmullw mm1, mm3 <font class="comment">// mm1= dstColor*(1-A)</font>
+01641
+01642 <font class="comment">// add and pack</font>
+01643 paddusw mm0, mm1
+01644 psrlw mm0, 8
+01645 packuswb mm0, mm0
+01646
+01647 <font class="comment">// out</font>
+01648 movd [edi], mm0
+01649
+01650 <font class="comment">// increment</font>
+01651 add esi, eax
+01652 add edi, ebx
+01653 add edx, 4
+01654 dec ecx
+01655 jnz myLoop
+01656 }
+01657 }
+01658
+01659
+01660 <font class="preprocessor">#else // NL_OS_WINDOWS</font>
+01661 <font class="preprocessor"></font>
+01662 <font class="comment">// Dummy for non-windows platforms</font>
+<a name="l01663"></a><a class="code" href="texture__far_8cpp.html#a8">01663</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a8">NL3D_asmModulateLineColors</a>(CRGBA *dst, <font class="keyword">const</font> CRGBA *src0, <font class="keyword">const</font> CRGBA *src1,
+01664 uint len, uint src0DeltaX, uint dstDeltaX)
+01665 {
+01666 }
+<a name="l01667"></a><a class="code" href="texture__far_8cpp.html#a9">01667</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a9">NL3D_asmModulateAndBlendLineColors</a>(CRGBA *dst, <font class="keyword">const</font> CRGBA *src0, <font class="keyword">const</font> CRGBA *src1,
+01668 uint len, uint src0DeltaX, uint dstDeltaX)
+01669 {
+01670 }
+01671
+01672 <font class="preprocessor">#endif</font>
+01673 <font class="preprocessor"></font>
+01674 <font class="comment">// ***************************************************************************</font>
+<a name="l01675"></a><a class="code" href="texture__far_8cpp.html#a10">01675</a> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a10">NL3D_drawFarTileInFarTexture</a> (<font class="keyword">const</font> <a class="code" href="structNL3D__CComputeTileFar.html">NL3D_CComputeTileFar</a>* pTileFar)
+01676 {
+01677 <font class="comment">// Pointer of the Src diffuse pixels</font>
+01678 <font class="keyword">const</font> CRGBA* pSrcPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>;
+01679
+01680 <font class="comment">// Pointer of the Dst pixels</font>
+01681 <font class="keyword">const</font> CRGBA* pSrcLightPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m4">SrcLightingPixels</a>;
+01682
+01683 <font class="comment">// Pointer of the Dst pixels</font>
+01684 CRGBA* pDstPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m6">DstPixels</a>;
+01685
+01686 <font class="comment">// For each pixels</font>
+01687 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>;
+01688 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>++)
+01689 {
+01690 <font class="comment">// MMX implementation</font>
+01691 <font class="comment">//---------</font>
+01692 <font class="keywordflow">if</font>(pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m10">AsmMMX</a>)
+01693 {
+01694 <a class="code" href="texture__far_8cpp.html#a8">NL3D_asmModulateLineColors</a>(pDstPixels, pSrcPixels, pSrcLightPixels,
+01695 pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>, pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>, pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>);
+01696 }
+01697 <font class="comment">// C Implementation.</font>
+01698 <font class="comment">//---------</font>
+01699 <font class="keywordflow">else</font>
+01700 {
+01701 <font class="comment">// Pointer of the source line</font>
+01702 <font class="keyword">const</font> CRGBA* pSrcLine=pSrcPixels;
+01703
+01704 <font class="comment">// Pointer of the source lighting line</font>
+01705 <font class="keyword">const</font> CRGBA* pSrcLightingLine=pSrcLightPixels;
+01706
+01707 <font class="comment">// Pointer of the destination line</font>
+01708 CRGBA* pDstLine=pDstPixels;
+01709
+01710 <font class="comment">// For each pixels on the line</font>
+01711 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>++)
+01712 {
+01713 <font class="comment">// Read and write a pixel</font>
+01714 pDstLine-&gt;R=(uint8)(((uint)pSrcLine-&gt;R*(uint)pSrcLightingLine-&gt;R)&gt;&gt;8);
+01715 pDstLine-&gt;G=(uint8)(((uint)pSrcLine-&gt;G*(uint)pSrcLightingLine-&gt;G)&gt;&gt;8);
+01716 pDstLine-&gt;B=(uint8)(((uint)pSrcLine-&gt;B*(uint)pSrcLightingLine-&gt;B)&gt;&gt;8);
+01717
+01718 <font class="comment">// Next pixel</font>
+01719 pSrcLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>;
+01720 pSrcLightingLine++;
+01721 pDstLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>;
+01722 }
+01723 }
+01724
+01725 <font class="comment">// Next line</font>
+01726 pSrcPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>;
+01727 pSrcLightPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m5">SrcLightingDeltaY</a>;
+01728 pDstPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m8">DstDeltaY</a>;
+01729 }
+01730
+01731 <font class="comment">// stop MMX if used</font>
+01732 <font class="keywordflow">if</font>(pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m10">AsmMMX</a>)
+01733 <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>();
+01734 }
+01735
+01736
+01737 <font class="comment">// ***************************************************************************</font>
+<a name="l01738"></a><a class="code" href="texture__far_8cpp.html#a11">01738</a> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a11">NL3D_drawFarTileInFarTextureAlpha</a> (<font class="keyword">const</font> <a class="code" href="structNL3D__CComputeTileFar.html">NL3D_CComputeTileFar</a>* pTileFar)
+01739 {
+01740 <font class="comment">// Pointer of the Src pixels</font>
+01741 <font class="keyword">const</font> CRGBA* pSrcPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>;
+01742
+01743 <font class="comment">// Pointer of the Dst pixels</font>
+01744 <font class="keyword">const</font> CRGBA* pSrcLightPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m4">SrcLightingPixels</a>;
+01745
+01746 <font class="comment">// Pointer of the Dst pixels</font>
+01747 CRGBA* pDstPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m6">DstPixels</a>;
+01748
+01749 <font class="comment">// Fill the buffer with layer 0</font>
+01750 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>;
+01751 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>++)
+01752 {
+01753 <font class="comment">// MMX implementation</font>
+01754 <font class="comment">//---------</font>
+01755 <font class="keywordflow">if</font>(pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m10">AsmMMX</a>)
+01756 {
+01757 <a class="code" href="texture__far_8cpp.html#a9">NL3D_asmModulateAndBlendLineColors</a>(pDstPixels, pSrcPixels, pSrcLightPixels,
+01758 pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>, pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>, pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>);
+01759 }
+01760 <font class="comment">// C Implementation.</font>
+01761 <font class="comment">//---------</font>
+01762 <font class="keywordflow">else</font>
+01763 {
+01764 <font class="comment">// Pointer of the source line</font>
+01765 <font class="keyword">const</font> CRGBA* pSrcLine=pSrcPixels;
+01766
+01767 <font class="comment">// Pointer of the source lighting line</font>
+01768 <font class="keyword">const</font> CRGBA* pSrcLightingLine=pSrcLightPixels;
+01769
+01770 <font class="comment">// Pointer of the Dst pixels</font>
+01771 CRGBA* pDstLine=pDstPixels;
+01772
+01773 <font class="comment">// For each pixels on the line</font>
+01774 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>++)
+01775 {
+01776 <font class="comment">// Read and write a pixel</font>
+01777 <font class="keyword">register</font> uint <a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>=pSrcLine-&gt;A;
+01778 <font class="keyword">register</font> uint oneLessAlpha=255-pSrcLine-&gt;A;
+01779 pDstLine-&gt;R=(uint8)(((((uint)pSrcLine-&gt;R*(uint)pSrcLightingLine-&gt;R)&gt;&gt;8)*<a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>+(uint)pDstLine-&gt;R*oneLessAlpha)&gt;&gt;8);
+01780 pDstLine-&gt;G=(uint8)(((((uint)pSrcLine-&gt;G*(uint)pSrcLightingLine-&gt;G)&gt;&gt;8)*<a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>+(uint)pDstLine-&gt;G*oneLessAlpha)&gt;&gt;8);
+01781 pDstLine-&gt;B=(uint8)(((((uint)pSrcLine-&gt;B*(uint)pSrcLightingLine-&gt;B)&gt;&gt;8)*<a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>+(uint)pDstLine-&gt;B*oneLessAlpha)&gt;&gt;8);
+01782
+01783 <font class="comment">// Next pixel</font>
+01784 pSrcLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>;
+01785 pSrcLightingLine++;
+01786 pDstLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>;
+01787 }
+01788 }
+01789
+01790 <font class="comment">// Next line</font>
+01791 pSrcPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>;
+01792 pSrcLightPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m5">SrcLightingDeltaY</a>;
+01793 pDstPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m8">DstDeltaY</a>;
+01794 }
+01795
+01796 <font class="comment">// stop MMX if used</font>
+01797 <font class="keywordflow">if</font>(pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m10">AsmMMX</a>)
+01798 <a class="code" href="texture__far_8cpp.html#a0">NL3D_asmEndMMX</a>();
+01799 }
+01800
+01801
+01802 <font class="comment">// ***************************************************************************</font>
+01803 <font class="comment">// TODO: asm implementation of this function \\//</font>
+01804 <font class="comment">//#ifdef NL_NO_ASM</font>
+<a name="l01805"></a><a class="code" href="texture__far_8cpp.html#a12">01805</a> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a12">NL3D_drawFarTileInFarTextureAdditive</a> (<font class="keyword">const</font> <a class="code" href="structNL3D__CComputeTileFar.html">NL3D_CComputeTileFar</a>* pTileFar)
+01806 {
+01807 <font class="comment">// Pointer of the Src diffuse pixels</font>
+01808 <font class="keyword">const</font> CRGBA* pSrcPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>;
+01809
+01810 <font class="comment">// Pointer of the Src additive pixels</font>
+01811 <font class="keyword">const</font> CRGBA* pSrcAddPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m1">SrcAdditivePixels</a>;
+01812
+01813 <font class="comment">// Pointer of the Dst pixels</font>
+01814 <font class="keyword">const</font> CRGBA* pSrcLightPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m4">SrcLightingPixels</a>;
+01815
+01816 <font class="comment">// Pointer of the Dst pixels</font>
+01817 CRGBA* pDstPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m6">DstPixels</a>;
+01818
+01819 <font class="comment">// For each pixels</font>
+01820 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>;
+01821 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>++)
+01822 {
+01823 <font class="comment">// Pointer of the source line</font>
+01824 <font class="keyword">const</font> CRGBA* pSrcLine=pSrcPixels;
+01825
+01826 <font class="comment">// Pointer of the source line</font>
+01827 <font class="keyword">const</font> CRGBA* pSrcAddLine=pSrcAddPixels;
+01828
+01829 <font class="comment">// Pointer of the source lighting line</font>
+01830 <font class="keyword">const</font> CRGBA* pSrcLightingLine=pSrcLightPixels;
+01831
+01832 <font class="comment">// Pointer of the destination line</font>
+01833 CRGBA* pDstLine=pDstPixels;
+01834
+01835 <font class="comment">// For each pixels on the line</font>
+01836 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>++)
+01837 {
+01838 <font class="comment">// Read and write a pixel</font>
+01839 uint nTmp=(((uint)pSrcLine-&gt;R*(uint)pSrcLightingLine-&gt;R)&gt;&gt;8)+(uint)pSrcAddLine-&gt;R;
+01840 <font class="keywordflow">if</font> (nTmp&gt;255)
+01841 nTmp=255;
+01842 pDstLine-&gt;R=(uint8)nTmp;
+01843 nTmp=(((uint)pSrcLine-&gt;G*(uint)pSrcLightingLine-&gt;G)&gt;&gt;8)+(uint)pSrcAddLine-&gt;G;
+01844 <font class="keywordflow">if</font> (nTmp&gt;255)
+01845 nTmp=255;
+01846 pDstLine-&gt;G=(uint8)nTmp;
+01847 nTmp=(((uint)pSrcLine-&gt;B*(uint)pSrcLightingLine-&gt;B)&gt;&gt;8)+(uint)pSrcAddLine-&gt;B;
+01848 <font class="keywordflow">if</font> (nTmp&gt;255)
+01849 nTmp=255;
+01850 pDstLine-&gt;B=(uint8)nTmp;
+01851
+01852 <font class="comment">// Next pixel</font>
+01853 pSrcLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>;
+01854 pSrcAddLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>;
+01855 pSrcLightingLine++;
+01856 pDstLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>;
+01857 }
+01858
+01859 <font class="comment">// Next line</font>
+01860 pSrcPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>;
+01861 pSrcAddPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>;
+01862 pSrcLightPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m5">SrcLightingDeltaY</a>;
+01863 pDstPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m8">DstDeltaY</a>;
+01864 }
+01865 }
+01866 <font class="comment">//#endif // NL_NO_ASM</font>
+01867
+01868
+01869 <font class="comment">// ***************************************************************************</font>
+01870 <font class="comment">// TODO: asm implementation of this function \\//</font>
+01871 <font class="comment">//#ifdef NL_NO_ASM</font>
+<a name="l01872"></a><a class="code" href="texture__far_8cpp.html#a13">01872</a> <font class="keywordtype">void</font> <a class="code" href="texture__far_8cpp.html#a13">NL3D_drawFarTileInFarTextureAdditiveAlpha</a> (<font class="keyword">const</font> <a class="code" href="structNL3D__CComputeTileFar.html">NL3D_CComputeTileFar</a>* pTileFar)
+01873 {
+01874 <font class="comment">// Pointer of the Src pixels</font>
+01875 <font class="keyword">const</font> CRGBA* pSrcPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m0">SrcDiffusePixels</a>;
+01876
+01877 <font class="comment">// Pointer of the Src pixels</font>
+01878 <font class="keyword">const</font> CRGBA* pSrcAddPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m1">SrcAdditivePixels</a>;
+01879
+01880 <font class="comment">// Pointer of the Dst pixels</font>
+01881 <font class="keyword">const</font> CRGBA* pSrcLightPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m4">SrcLightingPixels</a>;
+01882
+01883 <font class="comment">// Pointer of the Dst pixels</font>
+01884 CRGBA* pDstPixels=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m6">DstPixels</a>;
+01885
+01886 <font class="comment">// Fill the buffer with layer 0</font>
+01887 <font class="keywordtype">int</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>;
+01888 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>++)
+01889 {
+01890 <font class="comment">// Pointer of the source line</font>
+01891 <font class="keyword">const</font> CRGBA* pSrcLine=pSrcPixels;
+01892
+01893 <font class="comment">// Pointer of the source line</font>
+01894 <font class="keyword">const</font> CRGBA* pSrcAddLine=pSrcAddPixels;
+01895
+01896 <font class="comment">// Pointer of the source lighting line</font>
+01897 <font class="keyword">const</font> CRGBA* pSrcLightingLine=pSrcLightPixels;
+01898
+01899 <font class="comment">// Pointer of the Dst pixels</font>
+01900 CRGBA* pDstLine=pDstPixels;
+01901
+01902 <font class="comment">// For each pixels on the line</font>
+01903 <font class="keywordflow">for</font> (<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>=0; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>&lt;pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m9">Size</a>; <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>++)
+01904 {
+01905 <font class="comment">// Read and write a pixel</font>
+01906 <font class="keyword">register</font> uint <a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>=pSrcLine-&gt;A;
+01907 <font class="keyword">register</font> uint oneLessAlpha=255-pSrcLine-&gt;A;
+01908
+01909 <font class="comment">// Read and write a pixel</font>
+01910 uint nTmp=(((uint)pSrcLine-&gt;R*(uint)pSrcLightingLine-&gt;R)&gt;&gt;8)+(uint)pSrcAddLine-&gt;R;
+01911 <font class="keywordflow">if</font> (nTmp&gt;255)
+01912 nTmp=255;
+01913 pDstLine-&gt;R=(uint8)((nTmp*<a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>+pDstLine-&gt;R*oneLessAlpha)&gt;&gt;8);
+01914 nTmp=(((uint)pSrcLine-&gt;G*(uint)pSrcLightingLine-&gt;G)&gt;&gt;8)+(uint)pSrcAddLine-&gt;G;
+01915 <font class="keywordflow">if</font> (nTmp&gt;255)
+01916 nTmp=255;
+01917 pDstLine-&gt;G=(uint8)((nTmp*<a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>+pDstLine-&gt;G*oneLessAlpha)&gt;&gt;8);
+01918 nTmp=(((uint)pSrcLine-&gt;B*(uint)pSrcLightingLine-&gt;B)&gt;&gt;8)+(uint)pSrcAddLine-&gt;B;
+01919 <font class="keywordflow">if</font> (nTmp&gt;255)
+01920 nTmp=255;
+01921 pDstLine-&gt;B=(uint8)((nTmp*<a class="code" href="driver__opengl__extension__def_8h.html#a420">alpha</a>+pDstLine-&gt;B*oneLessAlpha)&gt;&gt;8);
+01922
+01923 <font class="comment">// Next pixel</font>
+01924 pSrcLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>;
+01925 pSrcAddLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m2">SrcDeltaX</a>;
+01926 pSrcLightingLine++;
+01927 pDstLine+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m7">DstDeltaX</a>;
+01928 }
+01929
+01930 <font class="comment">// Next line</font>
+01931 pSrcPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>;
+01932 pSrcAddPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m3">SrcDeltaY</a>;
+01933 pSrcLightPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m5">SrcLightingDeltaY</a>;
+01934 pDstPixels+=pTileFar-&gt;<a class="code" href="structNL3D__CComputeTileFar.html#m8">DstDeltaY</a>;
+01935 }
+01936 }
+01937 <font class="comment">//#endif // NL_NO_ASM</font>
+</pre></div>
+
+<!-- footer -->
+<BR><FONT Size=+5>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>