aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02632.html
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/a02632.html
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to 'docs/doxygen/nel/a02632.html')
-rw-r--r--docs/doxygen/nel/a02632.html1486
1 files changed, 1486 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02632.html b/docs/doxygen/nel/a02632.html
new file mode 100644
index 00000000..cdadfbd0
--- /dev/null
+++ b/docs/doxygen/nel/a02632.html
@@ -0,0 +1,1486 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>NeL: NL3D::CHLSColorTexture class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NL3D::CHLSColorTexture Class Reference</h1><code>#include &lt;<a class="el" href="a05791.html">hls_color_texture.h</a>&gt;</code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A colorisable texture <dl compact><dt><b>Author:</b></dt><dd>Lionel Berenguier <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2002 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00070">70</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea0">addMask</a> (const <a class="el" href="a02268.html">NLMISC::CBitmap</a> &amp;bmp, <a class="el" href="a04558.html#a15">uint</a> threshold=15)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea1">buildColorVersion</a> (const <a class="el" href="a02631.html">CHLSColorDelta</a> *colDeltaList, <a class="el" href="a02268.html">NLMISC::CBitmap</a> &amp;out)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea2">CHLSColorTexture</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea3">getNumMasks</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get num of masks <a href="#NL3D_1_1CHLSColorTexturea3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea4">reset</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reset the build <a href="#NL3D_1_1CHLSColorTexturea4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea5">serial</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea6">setBitmap</a> (const <a class="el" href="a02268.html">NLMISC::CBitmap</a> &amp;bmp)</td></tr>
+
+<tr><td colspan=2><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturee0">compressBlockRGB</a> (<a class="el" href="a03337.html">CRGBA</a> *srcRGBA, <a class="el" href="a04558.html#a7">uint8</a> *dstDXTC)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compress DXTC5 RGB only block, from a RGBA raw array. dstDXTC Alpha part is not modified. srcRGBA-&gt;A are setup to 0!! <a href="#NL3D_1_1CHLSColorTexturee0"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Static Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTextureh0">colorizeDXTCBlockRGB</a> (const <a class="el" href="a04558.html#a7">uint8</a> *srcPtr, <a class="el" href="a04558.html#a7">uint8</a> *dstPtr, <a class="el" href="a04558.html#a7">uint8</a> dHue, <a class="el" href="a04558.html#a15">uint</a> dLum, <a class="el" href="a04558.html#a15">uint</a> dSat)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">apply colDelta to the block. Alpha part is not modified. MMX with no EMMS called here !!! <a href="#NL3D_1_1CHLSColorTextureh0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTextureh1">computeMinMax</a> (<a class="el" href="a04558.html#a14">sint</a> *diffBlock, <a class="el" href="a02634.html">CVectorInt</a> &amp;<a class="el" href="a04223.html#a576">v</a>, <a class="el" href="a04558.html#a14">sint</a> mean[3], <a class="el" href="a04558.html#a14">sint</a> rgb0[3], <a class="el" href="a04558.html#a14">sint</a> rgb1[3])</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">used by <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturee0">compressBlockRGB()</a> <a href="#NL3D_1_1CHLSColorTextureh1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTextureh2">uncompressBlockRGB</a> (const <a class="el" href="a04558.html#a7">uint8</a> *srcDXTC, <a class="el" href="a03337.html">CRGBA</a> *dstRGBA)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">uncompress DXTC5 RGB only block, into a RGBA raw array. Alpha is setup with undefined values <a href="#NL3D_1_1CHLSColorTextureh2"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer1">_Height</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02633.html">CMask</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer2">_Masks</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer3">_NumMipMap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a7">uint8</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer5">_Width</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea2" doxytag="NL3D::CHLSColorTexture::CHLSColorTexture" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NL3D::CHLSColorTexture::CHLSColorTexture </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00076">76</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05790.html#l00082">reset()</a>.
+<p>
+<div class="fragment"><pre>00077 {
+00078 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturea4">reset</a>();
+00079 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea0" doxytag="NL3D::CHLSColorTexture::addMask" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::addMask </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02268.html">NLMISC::CBitmap</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>bmp</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>threshold</em> = 15</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+add a mask to the texture. R is taken as the mask value. must be same size as in <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturea6">setBitmap()</a> <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>threshold</em>&nbsp;</td><td>used to know if a pixel mask value is or not an intermediate (ie not 0 or 255)</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00152">152</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05791.html#l00126">_BlockToCompressIndex</a>, <a class="el" href="a05791.html#l00130">_Masks</a>, <a class="el" href="a05791.html#l00125">_NumMipMap</a>, <a class="el" href="a05790.html#l00045">BLOCK_ALPHA_SIZE</a>, <a class="el" href="a05790.html#l00148">NL3D::CMaskInfo::Blocks</a>, <a class="el" href="a05486.html#l01422">NLMISC::CBitmap::buildMipMaps()</a>, <a class="el" href="a05486.html#l00926">NLMISC::CBitmap::convertToType()</a>, <a class="el" href="a05791.html#l00109">NL3D::CHLSColorTexture::CMask::Data</a>, <a class="el" href="a05791.html#l00106">NL3D::CHLSColorTexture::CMask::FullBlockIndex</a>, <a class="el" href="a05486.html#l01388">NLMISC::CBitmap::getHeight()</a>, <a class="el" href="a05487.html#l00369">NLMISC::CBitmap::getMipMapCount()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a05486.html#l01363">NLMISC::CBitmap::getWidth()</a>, <a class="el" href="a05790.html#l00146">NL3D::CMaskInfo::HBlock</a>, <a class="el" href="a05790.html#l00140">MASK_BLOCK_EMPTY</a>, <a class="el" href="a05790.html#l00141">MASK_BLOCK_FULL</a>, <a class="el" href="a05790.html#l00142">MASK_BLOCK_MIXT</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05791.html#l00107">NL3D::CHLSColorTexture::CMask::MixtBlockIndex</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05790.html#l00147">NL3D::CMaskInfo::NumBlock</a>, <a class="el" href="a05790.html#l00068">NL3D::CHLSColorTexture::CMask::setBit()</a>, <a class="el" href="a05646.html#l01124">src</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05646.html#l00236">w</a>, <a class="el" href="a05790.html#l00146">NL3D::CMaskInfo::WBlock</a>, <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>00153 {
+00154 <span class="comment">// copy the bitmap and set RGBA/mipmaps.</span>
+00155 <a class="code" href="a02268.html">CBitmap</a> bmp= bmpIn;
+00156 bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea6">convertToType</a>(CBitmap::RGBA);
+00157 bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea3">buildMipMaps</a>();
+00158
+00159 <span class="comment">// verify widht...</span>
+00160 <a class="code" href="a04199.html#a6">nlassert</a>(bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea20">getWidth</a>()== <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer5">_Width</a>);
+00161 <a class="code" href="a04199.html#a6">nlassert</a>(bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea12">getHeight</a>()== <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer1">_Height</a>);
+00162 <a class="code" href="a04199.html#a6">nlassert</a>(bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea13">getMipMapCount</a>()== <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer3">_NumMipMap</a>);
+00163
+00164 <span class="comment">// ***** build the information for all mipmaps</span>
+00165 vector&lt;CMaskInfo&gt; masks;
+00166 masks.resize(_NumMipMap);
+00167 <a class="code" href="a04558.html#a15">uint</a> m;
+00168 <a class="code" href="a04558.html#a15">uint</a> numMixtBlock= 0;
+00169 <a class="code" href="a04558.html#a15">uint</a> numTotalBlock= 0;
+00170 <span class="keywordflow">for</span>(m=0;m&lt;<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer3">_NumMipMap</a>;m++)
+00171 {
+00172 CMaskInfo &amp;mask= masks[m];
+00173 <a class="code" href="a04558.html#a15">uint</a> mmWidth= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea20">getWidth</a>(m);
+00174 <a class="code" href="a04558.html#a15">uint</a> mmHeight= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea12">getHeight</a>(m);
+00175 mask.WBlock= (mmWidth+3)/4;
+00176 mask.HBlock= (mmHeight+3)/4;
+00177 mask.NumBlock= mask.WBlock*mask.HBlock;
+00178 mask.Blocks.resize(mask.NumBlock);
+00179
+00180 numTotalBlock+= mask.NumBlock;
+00181
+00182 <a class="code" href="a03337.html">CRGBA</a> *<a class="code" href="a04223.html#a652">src</a>= (<a class="code" href="a03337.html">CRGBA</a>*)(&amp;bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m)[0]);
+00183
+00184 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> yB=0;yB&lt;mask.HBlock;yB++)
+00185 {
+00186 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> xB=0;xB&lt;mask.WBlock;xB++)
+00187 {
+00188 <a class="code" href="a04558.html#a15">uint</a> accum= 0;
+00189 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a575">w</a>= <a class="code" href="a04061.html#a0">min</a>(mmWidth, 4U);
+00190 <a class="code" href="a04558.html#a15">uint</a> h= <a class="code" href="a04061.html#a0">min</a>(mmHeight, 4U);
+00191 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a573">y</a>= 0;<a class="code" href="a04223.html#a573">y</a>&lt; h;<a class="code" href="a04223.html#a573">y</a>++)
+00192 {
+00193 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a572">x</a>= 0;<a class="code" href="a04223.html#a572">x</a>&lt; <a class="code" href="a04223.html#a575">w</a>;<a class="code" href="a04223.html#a572">x</a>++)
+00194 {
+00195 <a class="code" href="a04558.html#a15">uint</a> yPix= yB*4+<a class="code" href="a04223.html#a573">y</a>;
+00196 <a class="code" href="a04558.html#a15">uint</a> xPix= xB*4+<a class="code" href="a04223.html#a572">x</a>;
+00197 <span class="comment">// read the color</span>
+00198 <a class="code" href="a04558.html#a7">uint8</a> alphaMask = <a class="code" href="a04223.html#a652">src</a>[yPix*mmWidth+xPix].R;
+00199 <span class="comment">// remove some dummy precision.</span>
+00200 <span class="keywordflow">if</span>(alphaMask&lt;threshold)
+00201 alphaMask= 0;
+00202 <span class="keywordflow">if</span>(alphaMask&gt;255-threshold)
+00203 alphaMask= 255;
+00204 <span class="comment">// Add to the accum</span>
+00205 accum+= alphaMask;
+00206 }
+00207 }
+00208
+00209 <span class="comment">// full black?</span>
+00210 <span class="keywordflow">if</span>(accum==0)
+00211 mask.Blocks[yB*mask.WBlock+xB]= <a class="code" href="a04367.html#a3">MASK_BLOCK_EMPTY</a>;
+00212 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(accum==<a class="code" href="a04223.html#a575">w</a>*h*255)
+00213 mask.Blocks[yB*mask.WBlock+xB]= <a class="code" href="a04367.html#a4">MASK_BLOCK_FULL</a>;
+00214 <span class="comment">// if not full white or full black, mixt block</span>
+00215 <span class="keywordflow">else</span>
+00216 {
+00217 mask.Blocks[yB*mask.WBlock+xB]= <a class="code" href="a04367.html#a5">MASK_BLOCK_MIXT</a>;
+00218 numMixtBlock++;
+00219 }
+00220 }
+00221 }
+00222 }
+00223
+00224 <span class="comment">// ***** compress into CMask</span>
+00225 CMask newMask;
+00226 <a class="code" href="a04558.html#a15">uint</a> newMaskDataSize= 0;
+00227
+00228 <span class="comment">// add the mixt block data size (16*uint8 per block)</span>
+00229 newMaskDataSize+= numMixtBlock*<a class="code" href="a04367.html#a2">BLOCK_ALPHA_SIZE</a>;
+00230 <span class="comment">// compute the bit size. NB: use uint32 to blocks bits. =&gt; data is aligned.</span>
+00231 <a class="code" href="a04558.html#a15">uint</a> bitDataSize= 4*((numTotalBlock+31)/32);
+00232 <span class="comment">// add fullBlock bits</span>
+00233 newMask.FullBlockIndex= newMaskDataSize;
+00234 newMaskDataSize+= bitDataSize;
+00235 <span class="comment">// add mixtBlock bits</span>
+00236 newMask.MixtBlockIndex= newMaskDataSize;
+00237 newMaskDataSize+= bitDataSize;
+00238
+00239 <span class="comment">// allocate. Fill with 0 to initialize bits per default EMPTY value</span>
+00240 newMask.Data.resize(newMaskDataSize, 0);
+00241
+00242 <span class="comment">// compress each mipMaps from bigger to smaller</span>
+00243 <a class="code" href="a04558.html#a15">uint</a> bitId= 0;
+00244 <a class="code" href="a04558.html#a15">uint</a> mixtBlockId= 0;
+00245 <span class="keywordflow">for</span>(m=0;m&lt;_NumMipMap;m++)
+00246 {
+00247 CMaskInfo &amp;mask= masks[m];
+00248
+00249 <span class="comment">// ---- build the mixtBlock alpha Mask</span>
+00250 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> yB=0;yB&lt;mask.HBlock;yB++)
+00251 {
+00252 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> xB=0;xB&lt;mask.WBlock;xB++)
+00253 {
+00254 <a class="code" href="a04558.html#a15">uint</a> <span class="keywordtype">id</span>= yB*mask.WBlock+xB;
+00255 <span class="comment">// if mixt block</span>
+00256 <span class="keywordflow">if</span>(mask.Blocks[<span class="keywordtype">id</span>]==<a class="code" href="a04367.html#a5">MASK_BLOCK_MIXT</a>)
+00257 {
+00258 <a class="code" href="a04199.html#a6">nlassert</a>(mixtBlockId&lt;numMixtBlock);
+00259 <span class="comment">// Fill Alpha data.</span>
+00260 <a class="code" href="a04558.html#a7">uint8</a> *dst= &amp;newMask.Data[mixtBlockId*<a class="code" href="a04367.html#a2">BLOCK_ALPHA_SIZE</a>];
+00261 <a class="code" href="a04558.html#a15">uint</a> mmWidth= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea20">getWidth</a>(m);
+00262 <a class="code" href="a04558.html#a15">uint</a> mmHeight= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea12">getHeight</a>(m);
+00263 <span class="comment">// point to the src alpha color</span>
+00264 <a class="code" href="a03337.html">CRGBA</a> *<a class="code" href="a04223.html#a652">src</a>= (<a class="code" href="a03337.html">CRGBA</a>*)(&amp;bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m)[0]);
+00265 <a class="code" href="a04223.html#a652">src</a>= <a class="code" href="a04223.html#a652">src</a> + yB*4*mmWidth + xB*4;
+00266
+00267 <span class="comment">// for the 4*4 pixels</span>
+00268 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a575">w</a>= <a class="code" href="a04061.html#a0">min</a>(mmWidth, 4U);
+00269 <a class="code" href="a04558.html#a15">uint</a> h= <a class="code" href="a04061.html#a0">min</a>(mmHeight, 4U);
+00270 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a573">y</a>=0;<a class="code" href="a04223.html#a573">y</a>&lt;h;<a class="code" href="a04223.html#a573">y</a>++)
+00271 {
+00272 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a572">x</a>=0;<a class="code" href="a04223.html#a572">x</a>&lt;<a class="code" href="a04223.html#a575">w</a>;<a class="code" href="a04223.html#a572">x</a>++)
+00273 {
+00274 dst[<a class="code" href="a04223.html#a573">y</a>*4+<a class="code" href="a04223.html#a572">x</a>]= <a class="code" href="a04223.html#a652">src</a>[<a class="code" href="a04223.html#a573">y</a>*mmWidth+<a class="code" href="a04223.html#a572">x</a>].R;
+00275 }
+00276 }
+00277
+00278 <span class="comment">// inc</span>
+00279 mixtBlockId++;
+00280 }
+00281 }
+00282 }
+00283
+00284 <span class="comment">// ---- build the fullBlock and mixtBlocks bits.</span>
+00285 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0; i&lt;mask.NumBlock; i++)
+00286 {
+00287 <a class="code" href="a04199.html#a6">nlassert</a>(bitId&lt;numTotalBlock);
+00288
+00289 <span class="comment">// fill bits</span>
+00290 <span class="keywordflow">if</span>(mask.Blocks[i]==<a class="code" href="a04367.html#a4">MASK_BLOCK_FULL</a>)
+00291 newMask.setBit(newMask.FullBlockIndex*8 + bitId);
+00292 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mask.Blocks[i]==<a class="code" href="a04367.html#a5">MASK_BLOCK_MIXT</a>)
+00293 newMask.setBit(newMask.MixtBlockIndex*8 + bitId);
+00294
+00295 <span class="comment">// inc</span>
+00296 bitId++;
+00297 }
+00298 }
+00299
+00300 <span class="comment">// ***** Add the CMask</span>
+00301 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer2">_Masks</a>.push_back(newMask);
+00302
+00303 <span class="comment">// Or the BlockToCompress info with the MixtBlocks bits.</span>
+00304 <a class="code" href="a04199.html#a6">nlassert</a>(bitDataSize==<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a>.size()-<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>);
+00305 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;bitDataSize;i++)
+00306 {
+00307 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a>[<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>+i]|= newMask.Data[newMask.MixtBlockIndex+i];
+00308 }
+00309 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea1" doxytag="NL3D::CHLSColorTexture::buildColorVersion" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::buildColorVersion </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02631.html">CHLSColorDelta</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>colDeltaList</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02268.html">NLMISC::CBitmap</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>out</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+build a texture with a HLS Color Delta <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>colDelta</em>&nbsp;</td><td>array of delta to apply to the bitmap (must be of numMasks entries) </td></tr>
+ <tr><td valign=top><em>out</em>&nbsp;</td><td>a colorised bitmap with DXTC5/mipMaps generated</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00337">337</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05791.html#l00126">_BlockToCompressIndex</a>, <a class="el" href="a05791.html#l00130">_Masks</a>, <a class="el" href="a05791.html#l00125">_NumMipMap</a>, <a class="el" href="a06340.html#l00227">NLMISC::CRGBA::blendFromuiRGBOnly()</a>, <a class="el" href="a05790.html#l00044">BLOCK_DXTC_SIZE</a>, <a class="el" href="a05790.html#l00043">BLOCK_NUM_PIXEL</a>, <a class="el" href="a05790.html#l00545">colorizeDXTCBlockRGB()</a>, <a class="el" href="a05790.html#l00628">compressBlockRGB()</a>, <a class="el" href="a05791.html#l00109">NL3D::CHLSColorTexture::CMask::Data</a>, <a class="el" href="a05791.html#l00053">NL3D::CHLSColorDelta::DHue</a>, <a class="el" href="a05791.html#l00106">NL3D::CHLSColorTexture::CMask::FullBlockIndex</a>, <a class="el" href="a05790.html#l00324">NL3D::getBitPack()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05791.html#l00107">NL3D::CHLSColorTexture::CMask::MixtBlockIndex</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05486.html#l01599">NLMISC::CBitmap::reset()</a>, <a class="el" href="a05486.html#l01545">NLMISC::CBitmap::resize()</a>, <a class="el" href="a05486.html#l01565">NLMISC::CBitmap::resizeMipMap()</a>, <a class="el" href="a05486.html#l01590">NLMISC::CBitmap::setMipMapCount()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; uint8 &gt;::size()</a>, <a class="el" href="a05646.html#l00645">size</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05790.html#l00557">uncompressBlockRGB()</a>, and <a class="el" href="a05646.html#l00236">w</a>.
+<p>
+Referenced by <a class="el" href="a05792.html#l00185">NL3D::CHLSTextureBank::CTextureInstance::buildColorVersion()</a>.
+<p>
+<div class="fragment"><pre>00338 {
+00339 <span class="comment">// static to avoid realloc</span>
+00340 <span class="keyword">static</span> vector&lt;uint8&gt; dstTexture;
+00341 <span class="keyword">static</span> vector&lt;CRGBA&gt; dstUnCompTexture;
+00342 <a class="code" href="a04558.html#a11">uint32</a> *bitPtr;
+00343 <a class="code" href="a04558.html#a7">uint8</a> *srcPtr;
+00344 <a class="code" href="a04558.html#a7">uint8</a> *dstPtr;
+00345 <a class="code" href="a03337.html">CRGBA</a> *dstUnCompPtr;
+00346 <a class="code" href="a04558.html#a11">uint32</a> bitMask;
+00347
+00348 <span class="comment">// **** prepare Data</span>
+00349
+00350 <span class="comment">// count number of DXTC5 block in _Texture.</span>
+00351 <a class="code" href="a04558.html#a15">uint</a> numBlocks= <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>/<a class="code" href="a04367.html#a1">BLOCK_DXTC_SIZE</a>;
+00352
+00353 <span class="comment">// create a tmp compressed block array, copy of Texture.</span>
+00354 dstTexture.resize(numBlocks*BLOCK_DXTC_SIZE);
+00355 <span class="comment">// copy from texture (to have non colored version already copied, and also ALPHA ok)</span>
+00356 memcpy(&amp;dstTexture[0], &amp;_Texture[0], dstTexture.size());
+00357
+00358 <span class="comment">// create a tmp uncompressed block array, which will receive coloring of mixt blocks</span>
+00359 dstUnCompTexture.resize(numBlocks*BLOCK_NUM_PIXEL);
+00360
+00361 <span class="comment">// For all blockToCompress, uncompress them in dstUnCompTexture, because they will blend with future mask coloring</span>
+00362 <a class="code" href="a04558.html#a15">uint</a> n= numBlocks;
+00363 bitPtr= (<a class="code" href="a04558.html#a11">uint32</a>*)(&amp;<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a>[<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>]);
+00364 dstUnCompPtr= &amp;dstUnCompTexture[0];
+00365 srcPtr= &amp;<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a>[0];
+00366 <span class="keywordflow">while</span>(n&gt;0)
+00367 {
+00368 <a class="code" href="a04558.html#a15">uint</a> nBits= <a class="code" href="a04061.html#a0">min</a>(n, 32U);
+00369 <a class="code" href="a05363.html#a421">getBitPack</a>(bitPtr, bitMask);
+00370 n-= nBits;
+00371 bitPtr++;
+00372 <span class="keywordflow">for</span>(;nBits&gt;0;nBits--)
+00373 {
+00374 <span class="comment">// need to compress/uncompress ??</span>
+00375 <span class="keywordflow">if</span>(bitMask&amp;1)
+00376 {
+00377 <span class="comment">// uncompress this block. ignore alpha</span>
+00378 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTextureh2">uncompressBlockRGB</a>(srcPtr, dstUnCompPtr);
+00379 }
+00380 bitMask&gt;&gt;=1;
+00381 dstUnCompPtr+= <a class="code" href="a04367.html#a0">BLOCK_NUM_PIXEL</a>;
+00382 srcPtr+= <a class="code" href="a04367.html#a1">BLOCK_DXTC_SIZE</a>;
+00383 }
+00384 }
+00385
+00386 <span class="comment">// **** build the color version for all masks.</span>
+00387
+00388 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> maskId= 0; maskId&lt;<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer2">_Masks</a>.size();maskId++)
+00389 {
+00390 CMask &amp;mask= <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer2">_Masks</a>[maskId];
+00391 <span class="comment">// unpack colDelta, and prepare for use with CFastHLSModifier.</span>
+00392 <a class="code" href="a04558.html#a7">uint8</a> dHue= colDeltaList[maskId].DHue;
+00393 <a class="code" href="a04558.html#a15">uint</a> dLum= 0xFFFFFF00 + colDeltaList[maskId].DLum*2;
+00394 <a class="code" href="a04558.html#a15">uint</a> dSat= 0xFFFFFF00 + colDeltaList[maskId].DSat*2;
+00395
+00396 <span class="comment">// get a ptr on alpha of mixt block.</span>
+00397 <a class="code" href="a04558.html#a7">uint8</a> *alphaMixtBlock= &amp;mask.Data[0];
+00398
+00399
+00400 <span class="comment">// ---- for all Fullblock ot this mask, color and store in dstTexture</span>
+00401 <span class="comment">// start at full Block bits desc</span>
+00402 bitPtr= (<a class="code" href="a04558.html#a11">uint32</a>*)(&amp;mask.Data[mask.FullBlockIndex]);
+00403 <a class="code" href="a04558.html#a11">uint32</a> *bitCompPtr= (<a class="code" href="a04558.html#a11">uint32</a>*)(&amp;_Texture[<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>]);
+00404 srcPtr= &amp;_Texture[0];
+00405 dstPtr= &amp;dstTexture[0];
+00406 dstUnCompPtr= &amp;dstUnCompTexture[0];
+00407 n= numBlocks;
+00408 <span class="comment">// run all blocks.</span>
+00409 <span class="keywordflow">while</span>(n&gt;0)
+00410 {
+00411 <a class="code" href="a04558.html#a15">uint</a> nBits= <a class="code" href="a04061.html#a0">min</a>(n, 32U);
+00412 <span class="comment">// get Full block mask.</span>
+00413 <a class="code" href="a05363.html#a421">getBitPack</a>(bitPtr, bitMask);
+00414 n-= nBits;
+00415 bitPtr++;
+00416 <span class="comment">// get Compress mask.</span>
+00417 <a class="code" href="a04558.html#a11">uint32</a> bitCompMask;
+00418 <a class="code" href="a05363.html#a421">getBitPack</a>(bitCompPtr, bitCompMask);
+00419 bitCompPtr++;
+00420 <span class="comment">// for all bits</span>
+00421 <span class="keywordflow">for</span>(;nBits&gt;0;nBits--)
+00422 {
+00423 <span class="comment">// need to colorize??</span>
+00424 <span class="keywordflow">if</span>(bitMask&amp;1)
+00425 {
+00426 <span class="comment">// colorize this block. ignore alpha</span>
+00427 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTextureh0">colorizeDXTCBlockRGB</a>(srcPtr, dstPtr, dHue, dLum, dSat);
+00428 <span class="comment">// If this block is "a block to recompress", then must uncompress it in dstUnCompPtr</span>
+00429 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTextureh2">uncompressBlockRGB</a>(dstPtr, dstUnCompPtr);
+00430 }
+00431 bitMask&gt;&gt;=1;
+00432 bitCompMask&gt;&gt;=1;
+00433 srcPtr+= <a class="code" href="a04367.html#a1">BLOCK_DXTC_SIZE</a>;
+00434 dstPtr+= <a class="code" href="a04367.html#a1">BLOCK_DXTC_SIZE</a>;
+00435 dstUnCompPtr+= <a class="code" href="a04367.html#a0">BLOCK_NUM_PIXEL</a>;
+00436 }
+00437 }
+00438
+00439 <span class="comment">// ---- for all mixtblock ot this mask, color, uncompress and blend in store in dstUnCompTexture</span>
+00440 <span class="keyword">static</span> <a class="code" href="a04558.html#a7">uint8</a> tmpColoredBlockDXTC[<a class="code" href="a04367.html#a0">BLOCK_NUM_PIXEL</a>];
+00441 <span class="keyword">static</span> <a class="code" href="a03337.html">CRGBA</a> tmpColoredBlockRGBA[<a class="code" href="a04367.html#a0">BLOCK_NUM_PIXEL</a>];
+00442 <span class="comment">// start at mixt Block bits desc</span>
+00443 bitPtr= (<a class="code" href="a04558.html#a11">uint32</a>*)(&amp;mask.Data[mask.MixtBlockIndex]);
+00444 srcPtr= &amp;_Texture[0];
+00445 dstUnCompPtr= &amp;dstUnCompTexture[0];
+00446 n= numBlocks;
+00447 <span class="comment">// run all blocks.</span>
+00448 <span class="keywordflow">while</span>(n&gt;0)
+00449 {
+00450 <a class="code" href="a04558.html#a15">uint</a> nBits= <a class="code" href="a04061.html#a0">min</a>(n, 32U);
+00451 <a class="code" href="a05363.html#a421">getBitPack</a>(bitPtr, bitMask);
+00452 n-= nBits;
+00453 bitPtr++;
+00454 <span class="keywordflow">for</span>(;nBits&gt;0;nBits--)
+00455 {
+00456 <span class="comment">// need to colorize??</span>
+00457 <span class="keywordflow">if</span>(bitMask&amp;1)
+00458 {
+00459 <span class="comment">// colorize this block. store 2 colors in tmp</span>
+00460 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTextureh0">colorizeDXTCBlockRGB</a>(srcPtr, tmpColoredBlockDXTC, dHue, dLum, dSat);
+00461 <span class="comment">// copy RGB bits from src to tmp</span>
+00462 ((<a class="code" href="a04558.html#a11">uint32</a>*)tmpColoredBlockDXTC)[3]= ((<a class="code" href="a04558.html#a11">uint32</a>*)srcPtr)[3];
+00463
+00464 <span class="comment">// uncompress the block.</span>
+00465 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTextureh2">uncompressBlockRGB</a>(tmpColoredBlockDXTC, tmpColoredBlockRGBA);
+00466
+00467 <span class="comment">// blend tmpColoredBlockRGBA into dstUnCompPtr, according to alphaMixtBlock.</span>
+00468 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;16;i++)
+00469 {
+00470 dstUnCompPtr[i].<a class="code" href="a03337.html#NLMISC_1_1CRGBAz2022_3">blendFromuiRGBOnly</a>(dstUnCompPtr[i], tmpColoredBlockRGBA[i], *alphaMixtBlock);
+00471 <span class="comment">// next pixel</span>
+00472 alphaMixtBlock++;
+00473 }
+00474 }
+00475 bitMask&gt;&gt;=1;
+00476 srcPtr+= <a class="code" href="a04367.html#a1">BLOCK_DXTC_SIZE</a>;
+00477 dstUnCompPtr+= <a class="code" href="a04367.html#a0">BLOCK_NUM_PIXEL</a>;
+00478 }
+00479 }
+00480
+00481 }
+00482
+00483
+00484 <span class="comment">// Since colorizeDXTCBlockRGB() use MMX, must end with emms.</span>
+00485 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00486 <span class="preprocessor"></span> <span class="keywordflow">if</span>(CSystemInfo::hasMMX())
+00487 _asm emms;
+00488 <span class="preprocessor">#endif</span>
+00489 <span class="preprocessor"></span>
+00490
+00491 <span class="comment">// **** compress needed blocks</span>
+00492 n= numBlocks;
+00493 bitPtr= (<a class="code" href="a04558.html#a11">uint32</a>*)(&amp;_Texture[<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>]);
+00494 dstUnCompPtr= &amp;dstUnCompTexture[0];
+00495 dstPtr= &amp;dstTexture[0];
+00496 <span class="keywordflow">while</span>(n&gt;0)
+00497 {
+00498 <a class="code" href="a04558.html#a15">uint</a> nBits= <a class="code" href="a04061.html#a0">min</a>(n, 32U);
+00499 <a class="code" href="a05363.html#a421">getBitPack</a>(bitPtr, bitMask);
+00500 n-= nBits;
+00501 bitPtr++;
+00502 <span class="keywordflow">for</span>(;nBits&gt;0;nBits--)
+00503 {
+00504 <span class="comment">// need to compress ??</span>
+00505 <span class="keywordflow">if</span>(bitMask&amp;1)
+00506 {
+00507 <span class="comment">// uncompress this block. ignore alpha</span>
+00508 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturee0">compressBlockRGB</a>(dstUnCompPtr, dstPtr);
+00509 }
+00510 bitMask&gt;&gt;=1;
+00511 dstUnCompPtr+= <a class="code" href="a04367.html#a0">BLOCK_NUM_PIXEL</a>;
+00512 dstPtr+= <a class="code" href="a04367.html#a1">BLOCK_DXTC_SIZE</a>;
+00513 }
+00514 }
+00515
+00516 <span class="comment">// **** format bitmap out with dstTexture.</span>
+00517 out.<a class="code" href="a02268.html#NL3D_1_1ITexturea32">reset</a>(CBitmap::DXTC5);
+00518 out.<a class="code" href="a02268.html#NL3D_1_1ITexturea33">resize</a>(_Width, _Height, CBitmap::DXTC5);
+00519
+00520 <span class="comment">// create and fill all the mipMaps</span>
+00521 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a575">w</a>= <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer5">_Width</a>, h=<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer1">_Height</a>;
+00522 dstPtr= &amp;dstTexture[0];
+00523 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> m=0;m&lt;<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer3">_NumMipMap</a>;m++)
+00524 {
+00525 <span class="comment">// allocate.</span>
+00526 out.<a class="code" href="a02268.html#NL3D_1_1ITexturea34">resizeMipMap</a>(m, w, h);
+00527 <span class="comment">// get the size of this DXTC5 level.</span>
+00528 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a587">size</a>= out.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m).<a class="code" href="a03000.html#NLMISC_1_1CObjectVectorz1984_3">size</a>();
+00529 <span class="comment">// fill</span>
+00530 memcpy(&amp;out.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m)[0], dstPtr, <a class="code" href="a04223.html#a587">size</a>);
+00531 <span class="comment">// next mipmap</span>
+00532 dstPtr+= <a class="code" href="a04223.html#a587">size</a>;
+00533 <a class="code" href="a04223.html#a575">w</a>= (<a class="code" href="a04223.html#a575">w</a>+1)/2;
+00534 h= (h+1)/2;
+00535 }
+00536 <span class="comment">// verify all filled</span>
+00537 <a class="code" href="a04199.html#a6">nlassert</a>( dstPtr== (&amp;dstTexture[0] + dstTexture.size()) );
+00538
+00539 <span class="comment">// set the correct num of mipmap</span>
+00540 out.<a class="code" href="a02268.html#NL3D_1_1ITexturea40">setMipMapCount</a>(_NumMipMap);
+00541 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTextureh0" doxytag="NL3D::CHLSColorTexture::colorizeDXTCBlockRGB" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::colorizeDXTCBlockRGB </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>srcPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>dstPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>dHue</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>dLum</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>dSat</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+apply colDelta to the block. Alpha part is not modified. MMX with no EMMS called here !!!
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00545">545</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05706.html#l00110">NL3D::CFastHLSModifier::applyHLSMod()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00337">buildColorVersion()</a>.
+<p>
+<div class="fragment"><pre>00546 {
+00547 <span class="comment">// get modifier.</span>
+00548 CFastHLSModifier &amp;fastHLS= CFastHLSModifier::getInstance();
+00549
+00550 <span class="comment">// apply the color on the 2 DXTC colors</span>
+00551 *(<a class="code" href="a04558.html#a9">uint16</a>*)(dstPtr+8 )= fastHLS.applyHLSMod(*(<a class="code" href="a04558.html#a9">uint16</a>*)(srcPtr+8 ) , dHue, dLum, dSat);
+00552 *(<a class="code" href="a04558.html#a9">uint16</a>*)(dstPtr+10)= fastHLS.applyHLSMod(*(<a class="code" href="a04558.html#a9">uint16</a>*)(srcPtr+10) , dHue, dLum, dSat);
+00553 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturee0" doxytag="NL3D::CHLSColorTexture::compressBlockRGB" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::compressBlockRGB </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03337.html">CRGBA</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>srcRGBA</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>dstDXTC</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+compress DXTC5 RGB only block, from a RGBA raw array. dstDXTC Alpha part is not modified. srcRGBA-&gt;A are setup to 0!!
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00628">628</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a06340.html#l00340">NLMISC::CRGBA::A</a>, <a class="el" href="a06340.html#l00338">NLMISC::CRGBA::B</a>, <a class="el" href="a06340.html#l00104">NLMISC::CRGBA::blendFromui()</a>, <a class="el" href="a05790.html#l00586">computeMinMax()</a>, <a class="el" href="a06340.html#l00336">NLMISC::CRGBA::G</a>, <a class="el" href="a05701.html#l00125">NLMISC::OptFastFloor()</a>, <a class="el" href="a06340.html#l00334">NLMISC::CRGBA::R</a>, <a class="el" href="a06340.html#l00162">NLMISC::CRGBA::set565()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05646.html#l00645">size</a>, <a class="el" href="a05587.html#l00107">NLMISC::sqr()</a>, <a class="el" href="a05646.html#l01124">src</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00102">uint64</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05646.html#l00237">v</a>, <a class="el" href="a05791.html#l00120">NL3D::CHLSColorTexture::CVectorInt::x</a>, <a class="el" href="a05791.html#l00120">NL3D::CHLSColorTexture::CVectorInt::y</a>, and <a class="el" href="a05791.html#l00120">NL3D::CHLSColorTexture::CVectorInt::z</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00337">buildColorVersion()</a>.
+<p>
+<div class="fragment"><pre>00629 {
+00630 <span class="comment">// skip alpha part.</span>
+00631 <a class="code" href="a04558.html#a7">uint8</a> *dstBlock= dstDXTC+8;
+00632
+00633
+00634 <span class="comment">// **** compute RGB0 and RGB1.</span>
+00635 <a class="code" href="a04558.html#a15">uint</a> i,j,n;
+00636
+00637 <span class="comment">// compute the mean color of 16 pixels</span>
+00638 <a class="code" href="a04558.html#a14">sint</a> mean[3];
+00639 mean[0]= 0;
+00640 mean[1]= 0;
+00641 mean[2]= 0;
+00642 <a class="code" href="a03337.html">CRGBA</a> *<a class="code" href="a04223.html#a652">src</a>= srcRGBA;
+00643 <span class="keywordflow">for</span>(n=16;n&gt;0;n--,<a class="code" href="a04223.html#a652">src</a>++)
+00644 {
+00645 mean[0]+= <a class="code" href="a04223.html#a652">src</a>-&gt;R;
+00646 mean[1]+= <a class="code" href="a04223.html#a652">src</a>-&gt;G;
+00647 mean[2]+= <a class="code" href="a04223.html#a652">src</a>-&gt;B;
+00648 <span class="comment">// at same time, setup alpha to 0. Important for "compute bits" part (see MMX)!!</span>
+00649 <a class="code" href="a04223.html#a652">src</a>-&gt;A= 0;
+00650 }
+00651 mean[0]&gt;&gt;= 4;
+00652 mean[1]&gt;&gt;= 4;
+00653 mean[2]&gt;&gt;= 4;
+00654
+00655 <span class="comment">// compute col-mean</span>
+00656 <a class="code" href="a04558.html#a14">sint</a> diffBlock[16*3];
+00657 <a class="code" href="a04223.html#a652">src</a>= srcRGBA;
+00658 <a class="code" href="a04558.html#a14">sint</a> *srcDiff= diffBlock;
+00659 <span class="keywordflow">for</span>(n=16;n&gt;0;n--,<a class="code" href="a04223.html#a652">src</a>++,srcDiff+=3)
+00660 {
+00661 srcDiff[0]= (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a04223.html#a652">src</a>-&gt;R - mean[0];
+00662 srcDiff[1]= (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a04223.html#a652">src</a>-&gt;G - mean[1];
+00663 srcDiff[2]= (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a04223.html#a652">src</a>-&gt;B - mean[2];
+00664 }
+00665
+00666
+00667 <span class="comment">// compute the covariant matrix.</span>
+00668 <a class="code" href="a04558.html#a14">sint</a> coMat[3][3];
+00669 <span class="comment">// Apply std RGB factor (0.3, 0.56, 0.14) to choose the best Axis. This give far much best results.</span>
+00670 <a class="code" href="a04558.html#a14">sint</a> rgbFact[3]= {77, 143, 36};
+00671 <span class="keywordflow">for</span>(i=0;i&lt;3;i++)
+00672 {
+00673 <span class="comment">// OPTIMIZE SINCE SYMETRIX MATRIX</span>
+00674 <span class="keywordflow">for</span>(j=i;j&lt;3;j++)
+00675 {
+00676 <a class="code" href="a04558.html#a10">sint32</a> factor= 0;
+00677 <span class="comment">// divide / 16 to avoid overflow sint32</span>
+00678 <a class="code" href="a04558.html#a15">uint</a> colFactor= (rgbFact[i]*rgbFact[j]) &gt;&gt; 4;
+00679 <span class="comment">// run all 16 pixels.</span>
+00680 <a class="code" href="a04558.html#a14">sint</a> *srcDiff= diffBlock;
+00681 <span class="keywordflow">for</span>(n=16;n&gt;0;n--,srcDiff+=3)
+00682 {
+00683 factor+= srcDiff[i] * srcDiff[j] * colFactor;
+00684 }
+00685 coMat[i][j]= factor;
+00686 }
+00687 }
+00688 <span class="comment">// Fill symetrix matrix</span>
+00689 coMat[1][0]= coMat[0][1];
+00690 coMat[2][0]= coMat[0][2];
+00691 coMat[2][1]= coMat[1][2];
+00692
+00693
+00694 <span class="comment">// take the bigger vector</span>
+00695 <a class="code" href="a04558.html#a14">sint</a> maxSize= 0;
+00696 <a class="code" href="a04558.html#a15">uint</a> axis= 0;
+00697 <span class="keywordflow">for</span>(i=0;i&lt;3;i++)
+00698 {
+00699 <span class="comment">// Use abs since sqr fails because all sint32 range may be used.</span>
+00700 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a04223.html#a587">size</a>= abs(coMat[i][0]) + abs(coMat[i][1]) + abs(coMat[i][2]);
+00701 <span class="keywordflow">if</span>(<a class="code" href="a04223.html#a587">size</a>&gt;maxSize)
+00702 {
+00703 maxSize= <a class="code" href="a04223.html#a587">size</a>;
+00704 axis= i;
+00705 }
+00706 }
+00707
+00708 <span class="comment">// normalize this vector</span>
+00709 CVector <a class="code" href="a04223.html#a576">v</a>;
+00710 <span class="comment">// remove some rgb factor...</span>
+00711 <a class="code" href="a04223.html#a576">v</a>.x= (<span class="keywordtype">float</span>)coMat[axis][0]/rgbFact[0];
+00712 <a class="code" href="a04223.html#a576">v</a>.y= (<span class="keywordtype">float</span>)coMat[axis][1]/rgbFact[1];
+00713 <a class="code" href="a04223.html#a576">v</a>.z= (<span class="keywordtype">float</span>)coMat[axis][2]/rgbFact[2];
+00714 <a class="code" href="a04223.html#a576">v</a>.normalize();
+00715 <span class="comment">// set a Fixed 16:16.</span>
+00716 CVectorInt vInt;
+00717 <span class="comment">// don't bother if OptFastFloorBegin() has been called. 16:16 precision is sufficient.</span>
+00718 vInt.x= <a class="code" href="a05378.html#a397">OptFastFloor</a>(<a class="code" href="a04223.html#a576">v</a>.x*65536);
+00719 vInt.y= <a class="code" href="a05378.html#a397">OptFastFloor</a>(<a class="code" href="a04223.html#a576">v</a>.y*65536);
+00720 vInt.z= <a class="code" href="a05378.html#a397">OptFastFloor</a>(<a class="code" href="a04223.html#a576">v</a>.z*65536);
+00721
+00722
+00723 <span class="comment">// For all pixels, choose the 2 colors along the axis</span>
+00724 <a class="code" href="a04558.html#a14">sint</a> rgb0[3];
+00725 <a class="code" href="a04558.html#a14">sint</a> rgb1[3];
+00726 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTextureh1">computeMinMax</a>(diffBlock, vInt, mean, rgb0, rgb1);
+00727
+00728 <span class="comment">// Average to 16 bits. NB: correclty encode 0..255 to 0.31 or 0..63.</span>
+00729 <a class="code" href="a04558.html#a15">uint</a> R,G,B;
+00730 R= ((rgb0[0]*7967+32768)&gt;&gt;16);
+00731 G= ((rgb0[1]*16191+32768)&gt;&gt;16);
+00732 B= ((rgb0[2]*7967+32768)&gt;&gt;16);
+00733 <a class="code" href="a04558.html#a9">uint16</a> rgb016= (R&lt;&lt;11) + (G&lt;&lt;5) + (B);
+00734 R= ((rgb1[0]*7967+32768)&gt;&gt;16);
+00735 G= ((rgb1[1]*16191+32768)&gt;&gt;16);
+00736 B= ((rgb1[2]*7967+32768)&gt;&gt;16);
+00737 <a class="code" href="a04558.html#a9">uint16</a> rgb116= (R&lt;&lt;11) + (G&lt;&lt;5) + (B);
+00738 <span class="comment">// copy to block</span>
+00739 ((<a class="code" href="a04558.html#a9">uint16</a>*)dstBlock)[0]= rgb016;
+00740 ((<a class="code" href="a04558.html#a9">uint16</a>*)dstBlock)[1]= rgb116;
+00741
+00742
+00743 <span class="comment">// **** compute bits</span>
+00744 <a class="code" href="a03337.html">CRGBA</a> c[4];
+00745 c[0].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa15">set565</a>(rgb016);
+00746 c[1].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa15">set565</a>(rgb116);
+00747 c[2].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(c[0],c[1],85);
+00748 c[3].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(c[0],c[1],171);
+00749 <span class="comment">// it is important that c[] and src Alpha are set to 0, because of "pmaddwd" use in MMX code...</span>
+00750 c[0].<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>= 0;
+00751 c[1].<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>= 0;
+00752 c[2].<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>= 0;
+00753 c[3].<a class="code" href="a03337.html#NLMISC_1_1CRGBAo0">A</a>= 0;
+00754 <a class="code" href="a03337.html">CRGBA</a> *cPtr= c;
+00755
+00756 <span class="comment">// result.</span>
+00757 <a class="code" href="a04558.html#a11">uint32</a> bits= 0;
+00758
+00759 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00760 <span class="preprocessor"></span> <span class="keywordflow">if</span>(CSystemInfo::hasMMX())
+00761 {
+00762 <span class="comment">// preapre mmx</span>
+00763 <a class="code" href="a04558.html#a13">uint64</a> blank= 0;
+00764 __asm
+00765 {
+00766 movq mm7, blank
+00767 }
+00768
+00769 <span class="comment">// for 16 pixels</span>
+00770 <a class="code" href="a04223.html#a652">src</a>= srcRGBA;
+00771 <span class="keywordflow">for</span>(n=16;n&gt;0;n--,<a class="code" href="a04223.html#a652">src</a>++)
+00772 {
+00773 <span class="comment">/* // C Version (+ little asm).</span>
+00774 <span class="comment"> uint minDist= 0xFFFFFFFF;</span>
+00775 <span class="comment"> uint id= 0;</span>
+00776 <span class="comment"> for(i=0;i&lt;4;i++)</span>
+00777 <span class="comment"> {</span>
+00778 <span class="comment"> // applying factors such *23, *80, *6 gives better results, but slower (in MMX).</span>
+00779 <span class="comment"> uint dist= sqr((sint)src-&gt;R-(sint)c[i].R);</span>
+00780 <span class="comment"> dist+= sqr((sint)src-&gt;G-(sint)c[i].G);</span>
+00781 <span class="comment"> dist+= sqr((sint)src-&gt;B-(sint)c[i].B);</span>
+00782 <span class="comment"> if(dist&lt;minDist)</span>
+00783 <span class="comment"> {</span>
+00784 <span class="comment"> minDist= dist;</span>
+00785 <span class="comment"> id= i;</span>
+00786 <span class="comment"> }</span>
+00787 <span class="comment"> }</span>
+00788 <span class="comment"> bits|=id;</span>
+00789 <span class="comment"> __asm</span>
+00790 <span class="comment"> {</span>
+00791 <span class="comment"> mov eax, bits</span>
+00792 <span class="comment"> ror eax, 2</span>
+00793 <span class="comment"> mov bits, eax</span>
+00794 <span class="comment"> }*/</span>
+00795 __asm
+00796 {
+00797 mov esi, <a class="code" href="a04223.html#a652">src</a>
+00798 mov edi, cPtr
+00799
+00800 mov ecx, 4
+00801 mov edx, 0xFFFFFFFF <span class="comment">// edx= minDist</span>
+00802
+00803 movd mm0, [esi]
+00804 punpcklbw mm0, mm7
+00805
+00806 mov esi, 4 <span class="comment">// esi= id MinDist (inverted)</span>
+00807
+00808 <span class="comment">// compare 4 cases.</span>
+00809 myLoop:
+00810 movd mm1, [edi]
+00811 punpcklbw mm1, mm7
+00812 psubsw mm1, mm0
+00813 pmaddwd mm1, mm1
+00814 movd eax, mm1
+00815 psrlq mm1, 32
+00816 movd ebx, mm1
+00817 add eax, ebx
+00818
+00819 <span class="comment">// take smaller of A and B. here: eax= A, edx= B</span>
+00820 sub eax, edx <span class="comment">// eax= A-B</span>
+00821 sbb ebx, ebx <span class="comment">// ebx= FF if A&lt;B.</span>
+00822 and eax, ebx <span class="comment">// eax= A-B if A&lt;B</span>
+00823 add edx, eax <span class="comment">// if A&lt;B, edx= B+A-B= A, else, edx= B. =&gt; minimum</span>
+00824 <span class="comment">// setup the "smaller" id. here esi= iB, ecx= iA</span>
+00825 not ebx <span class="comment">// ebx= 0 if A&lt;B, FF else</span>
+00826 sub esi, ecx <span class="comment">// esi= iB-iA</span>
+00827 and esi, ebx <span class="comment">// esi= 0 if A&lt;B, iB-iA else</span>
+00828 add esi, ecx <span class="comment">// esi= 0+iA= iA if A&lt;B, else esi= iB-iA+iA= iB</span>
+00829
+00830 add edi, 4
+00831 dec ecx
+00832 jnz myLoop
+00833
+00834 <span class="comment">// reverse id</span>
+00835 mov edx, 4
+00836 mov eax, bits
+00837 sub edx, esi
+00838 <span class="comment">// and store into bits</span>
+00839 or eax, edx
+00840 ror eax, 2
+00841 mov bits, eax
+00842 }
+00843 }
+00844
+00845
+00846 <span class="comment">// end MMX block.</span>
+00847 __asm emms;
+00848 }
+00849 <span class="keywordflow">else</span>
+00850 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+00851 <span class="preprocessor"></span> {
+00852 <a class="code" href="a04223.html#a652">src</a>= srcRGBA;
+00853 <span class="keywordflow">for</span>(n=16;n&gt;0;n--,<a class="code" href="a04223.html#a652">src</a>++)
+00854 {
+00855 <span class="comment">// C Version (+ little asm).</span>
+00856 <a class="code" href="a04558.html#a15">uint</a> minDist= 0xFFFFFFFF;
+00857 <a class="code" href="a04558.html#a15">uint</a> <span class="keywordtype">id</span>= 0;
+00858 <span class="keywordflow">for</span>(i=0;i&lt;4;i++)
+00859 {
+00860 <span class="comment">// applying factors such *23, *80, *6 gives better results, but slower (in MMX).</span>
+00861 <a class="code" href="a04558.html#a15">uint</a> dist= <a class="code" href="a05378.html#a373">sqr</a>((<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a04223.html#a652">src</a>-&gt;R-(<a class="code" href="a04558.html#a14">sint</a>)c[i].R);
+00862 dist+= <a class="code" href="a05378.html#a373">sqr</a>((<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a04223.html#a652">src</a>-&gt;G-(<a class="code" href="a04558.html#a14">sint</a>)c[i].G);
+00863 dist+= <a class="code" href="a05378.html#a373">sqr</a>((<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a04223.html#a652">src</a>-&gt;B-(<a class="code" href="a04558.html#a14">sint</a>)c[i].B);
+00864 <span class="keywordflow">if</span>(dist&lt;minDist)
+00865 {
+00866 minDist= dist;
+00867 <span class="keywordtype">id</span>= i;
+00868 }
+00869 }
+00870 <span class="comment">// a ror is faster, but full C version</span>
+00871 bits|= <span class="keywordtype">id</span>&lt;&lt;30;
+00872 <span class="comment">// don't do it for the last.</span>
+00873 <span class="keywordflow">if</span>(n&gt;1)
+00874 bits&gt;&gt;=2;
+00875 }
+00876 }
+00877
+00878 <span class="comment">// copy</span>
+00879 ((<a class="code" href="a04558.html#a11">uint32</a>*)dstBlock)[1]= bits;
+00880 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTextureh1" doxytag="NL3D::CHLSColorTexture::computeMinMax" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::computeMinMax </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a14">sint</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>diffBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02634.html">CVectorInt</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>mean</em>[3], </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rgb0</em>[3], </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rgb1</em>[3]</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+used by <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturee0">compressBlockRGB()</a>
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00586">586</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05646.html#l00237">v</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00628">compressBlockRGB()</a>.
+<p>
+<div class="fragment"><pre>00587 {
+00588 <span class="comment">// compute the min and max distance along the axis v.</span>
+00589 <a class="code" href="a04558.html#a14">sint</a> mind= INT_MAX;
+00590 <a class="code" href="a04558.html#a14">sint</a> maxd= INT_MIN;
+00591 <a class="code" href="a04558.html#a14">sint</a> *srcDiff= diffBlock;
+00592 <span class="comment">// for the 16 pixels</span>
+00593 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> n=16;n&gt;0;n--,srcDiff+=3)
+00594 {
+00595 <a class="code" href="a04558.html#a14">sint</a> R= srcDiff[0];
+00596 <a class="code" href="a04558.html#a14">sint</a> G= srcDiff[1];
+00597 <a class="code" href="a04558.html#a14">sint</a> B= srcDiff[2];
+00598 <a class="code" href="a04558.html#a14">sint</a> d= R*<a class="code" href="a04223.html#a576">v</a>.x + G*<a class="code" href="a04223.html#a576">v</a>.y + B*<a class="code" href="a04223.html#a576">v</a>.z;
+00599 <span class="keywordflow">if</span>(d&lt;mind)
+00600 mind= d;
+00601 <span class="keywordflow">if</span>(d&gt;maxd)
+00602 maxd= d;
+00603 }
+00604
+00605 <span class="comment">// avoid overflow. here, Higher possible bit is 16+8+2 (add of 3 values=&gt; *4) == 26</span>
+00606 <span class="comment">// 26-12= 14. 14+16=30 =&gt; ok.</span>
+00607 mind&gt;&gt;= 12;
+00608 maxd&gt;&gt;= 12;
+00609
+00610 <span class="comment">// compute the 2 colors: rgb0 on the min, and rgb1 on the max</span>
+00611 rgb0[0]= mean[0]+ (mind*<a class="code" href="a04223.html#a576">v</a>.x&gt;&gt;20);
+00612 rgb0[1]= mean[1]+ (mind*<a class="code" href="a04223.html#a576">v</a>.y&gt;&gt;20);
+00613 rgb0[2]= mean[2]+ (mind*<a class="code" href="a04223.html#a576">v</a>.z&gt;&gt;20);
+00614 rgb1[0]= mean[0]+ (maxd*<a class="code" href="a04223.html#a576">v</a>.x&gt;&gt;20);
+00615 rgb1[1]= mean[1]+ (maxd*<a class="code" href="a04223.html#a576">v</a>.y&gt;&gt;20);
+00616 rgb1[2]= mean[2]+ (maxd*<a class="code" href="a04223.html#a576">v</a>.z&gt;&gt;20);
+00617 <span class="comment">// clamp to 0..255</span>
+00618 fastClamp8(rgb0[0]);
+00619 fastClamp8(rgb0[1]);
+00620 fastClamp8(rgb0[2]);
+00621 fastClamp8(rgb1[0]);
+00622 fastClamp8(rgb1[1]);
+00623 fastClamp8(rgb1[2]);
+00624 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea3" doxytag="NL3D::CHLSColorTexture::getNumMasks" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> NL3D::CHLSColorTexture::getNumMasks </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+get num of masks
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00090">90</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>.
+<p>
+References <a class="el" href="a05791.html#l00130">_Masks</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05792.html#l00062">NL3D::CHLSTextureBank::addTextureInstance()</a>.
+<p>
+<div class="fragment"><pre>00090 {<span class="keywordflow">return</span> <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer2">_Masks</a>.size();}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea4" doxytag="NL3D::CHLSColorTexture::reset" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::reset </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+reset the build
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00082">82</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05791.html#l00130">_Masks</a>, and <a class="el" href="a05791.html#l00125">_NumMipMap</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00076">CHLSColorTexture()</a>, and <a class="el" href="a05790.html#l00092">setBitmap()</a>.
+<p>
+<div class="fragment"><pre>00083 {
+00084 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer5">_Width</a>= 0;
+00085 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer1">_Height</a>= 0;
+00086 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer3">_NumMipMap</a>= 0;
+00087 <a class="code" href="a05378.html#a381">contReset</a>(_Texture);
+00088 <a class="code" href="a05378.html#a381">contReset</a>(_Masks);
+00089 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea5" doxytag="NL3D::CHLSColorTexture::serial" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::serial </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00313">313</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05791.html#l00126">_BlockToCompressIndex</a>, <a class="el" href="a05791.html#l00130">_Masks</a>, <a class="el" href="a05791.html#l00125">_NumMipMap</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, <a class="el" href="a06462.html#l00324">NLMISC::IStream::serialCont()</a>, and <a class="el" href="a06461.html#l00266">NLMISC::IStream::serialVersion()</a>.
+<p>
+<div class="fragment"><pre>00314 {
+00315 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(0);
+00316
+00317 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Width, _Height, _NumMipMap, _BlockToCompressIndex);
+00318 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_Texture);
+00319 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_Masks);
+00320 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturea6" doxytag="NL3D::CHLSColorTexture::setBitmap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::setBitmap </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02268.html">NLMISC::CBitmap</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>bmp</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+setup the un-colored bitmap for the texture. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>bmp</em>&nbsp;</td><td>a bitmap which must be a DXTC5 with all mipmaps.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00092">92</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a05791.html#l00126">_BlockToCompressIndex</a>, <a class="el" href="a05791.html#l00125">_NumMipMap</a>, <a class="el" href="a05486.html#l01388">NLMISC::CBitmap::getHeight()</a>, <a class="el" href="a05487.html#l00369">NLMISC::CBitmap::getMipMapCount()</a>, <a class="el" href="a05487.html#l00335">NLMISC::CBitmap::getPixelFormat()</a>, <a class="el" href="a05487.html#l00308">NLMISC::CBitmap::getPixels()</a>, <a class="el" href="a05486.html#l01363">NLMISC::CBitmap::getWidth()</a>, <a class="el" href="a05646.html#l01013">height</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05790.html#l00082">reset()</a>, <a class="el" href="a06116.html#l00184">NLMISC::CObjectVector&lt; uint8 &gt;::size()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00096">uint8</a>, and <a class="el" href="a05646.html#l01013">width</a>.
+<p>
+<div class="fragment"><pre>00093 {
+00094 <a class="code" href="a04199.html#a6">nlassert</a>(bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea15">getPixelFormat</a>()==CBitmap::DXTC5);
+00095 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a632">width</a>= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea20">getWidth</a>();
+00096 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a633">height</a>= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea12">getHeight</a>();
+00097 <a class="code" href="a04558.html#a15">uint</a> mmCount= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea13">getMipMapCount</a>();
+00098 <a class="code" href="a04199.html#a6">nlassert</a>(width&gt;=1 &amp;&amp; height&gt;=1);
+00099 <a class="code" href="a04199.html#a6">nlassert</a>(mmCount&gt;1 || width*height==1);
+00100
+00101 <span class="comment">// restart</span>
+00102 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturea4">reset</a>();
+00103
+00104 <span class="comment">// resize.</span>
+00105 <a class="code" href="a04558.html#a15">uint</a> m;
+00106 <a class="code" href="a04558.html#a15">uint</a> pixelSize= 0;
+00107 <a class="code" href="a04558.html#a15">uint</a> numTotalBlock= 0;
+00108 <span class="keywordflow">for</span>(m=0;m&lt;mmCount;m++)
+00109 {
+00110 pixelSize+= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m).<a class="code" href="a03000.html#NLMISC_1_1CObjectVectorz1984_3">size</a>();
+00111 <a class="code" href="a04558.html#a15">uint</a> mmWidth= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea20">getWidth</a>(m);
+00112 <a class="code" href="a04558.html#a15">uint</a> mmHeight= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturea12">getHeight</a>(m);
+00113 <a class="code" href="a04558.html#a15">uint</a> wBlock= (mmWidth+3)/4;
+00114 <a class="code" href="a04558.html#a15">uint</a> hBlock= (mmHeight+3)/4;
+00115 numTotalBlock+= wBlock*hBlock;
+00116 }
+00117 <span class="comment">// add the info for the "Block to compress"</span>
+00118 <a class="code" href="a04558.html#a15">uint</a> blockToCompressSize= 4*((numTotalBlock+31)/32);
+00119 <span class="comment">// allocate good size, and reset to 0 =&gt; no block to re-compress.</span>
+00120 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a>.resize(pixelSize+blockToCompressSize, 0);
+00121
+00122 <span class="comment">// fill texture</span>
+00123 <a class="code" href="a04558.html#a7">uint8</a> *ptr= &amp;<a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer4">_Texture</a>[0];
+00124 <span class="keywordflow">for</span>(m=0;m&lt;mmCount;m++)
+00125 {
+00126 <a class="code" href="a04558.html#a15">uint</a> mSize= bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m).<a class="code" href="a03000.html#NLMISC_1_1CObjectVectorz1984_3">size</a>();
+00127 memcpy(ptr, &amp;bmp.<a class="code" href="a02268.html#NL3D_1_1ITexturez1927_1">getPixels</a>(m)[0], mSize);
+00128 ptr+= mSize;
+00129 }
+00130
+00131 <span class="comment">// header</span>
+00132 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer0">_BlockToCompressIndex</a>= pixelSize;
+00133 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer5">_Width</a>= <a class="code" href="a04223.html#a632">width</a>;
+00134 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer1">_Height</a>= <a class="code" href="a04223.html#a633">height</a>;
+00135 <a class="code" href="a02632.html#NL3D_1_1CHLSColorTexturer3">_NumMipMap</a>= mmCount;
+00136 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTextureh2" doxytag="NL3D::CHLSColorTexture::uncompressBlockRGB" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NL3D::CHLSColorTexture::uncompressBlockRGB </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a04558.html#a7">uint8</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>srcDXTC</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a03337.html">CRGBA</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>dstRGBA</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+uncompress DXTC5 RGB only block, into a RGBA raw array. Alpha is setup with undefined values
+<p>
+
+<p>
+Definition at line <a class="el" href="a05790.html#l00557">557</a> of file <a class="el" href="a05790.html">hls_color_texture.cpp</a>.
+<p>
+References <a class="el" href="a06340.html#l00104">NLMISC::CRGBA::blendFromui()</a>, <a class="el" href="a06340.html#l00162">NLMISC::CRGBA::set565()</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00337">buildColorVersion()</a>.
+<p>
+<div class="fragment"><pre>00558 {
+00559 <a class="code" href="a03337.html">CRGBA</a> c[4];
+00560
+00561 <a class="code" href="a04558.html#a9">uint16</a> color0;
+00562 <a class="code" href="a04558.html#a9">uint16</a> color1;
+00563 <a class="code" href="a04558.html#a11">uint32</a> bits;
+00564 color0= *(<a class="code" href="a04558.html#a9">uint16</a>*)(srcDXTC+8);
+00565 color1= *(<a class="code" href="a04558.html#a9">uint16</a>*)(srcDXTC+10);
+00566 bits= *(<a class="code" href="a04558.html#a11">uint32</a>*)(srcDXTC+12);
+00567
+00568 c[0].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa15">set565</a>(color0);
+00569 c[1].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa15">set565</a>(color1);
+00570
+00571 <span class="comment">// ignore color0&gt;color1 for DXT3 and DXT5.</span>
+00572 c[2].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(c[0],c[1],85);
+00573 c[3].<a class="code" href="a03337.html#NLMISC_1_1CRGBAa3">blendFromui</a>(c[0],c[1],171);
+00574
+00575 <span class="comment">// bits to color (ignore alpha result)</span>
+00576 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> n= 16;n&gt;0;n--)
+00577 {
+00578 *dstRGBA= c[bits&amp;3];
+00579 bits&gt;&gt;=2;
+00580 dstRGBA++;
+00581 }
+00582 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturer0" doxytag="NL3D::CHLSColorTexture::_BlockToCompressIndex" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer0">NL3D::CHLSColorTexture::_BlockToCompressIndex</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00126">126</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00152">addMask()</a>, <a class="el" href="a05790.html#l00337">buildColorVersion()</a>, <a class="el" href="a05790.html#l00313">serial()</a>, and <a class="el" href="a05790.html#l00092">setBitmap()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturer1" doxytag="NL3D::CHLSColorTexture::_Height" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer1">NL3D::CHLSColorTexture::_Height</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00125">125</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturer2" doxytag="NL3D::CHLSColorTexture::_Masks" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02633.html">CMask</a>&gt; <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer2">NL3D::CHLSColorTexture::_Masks</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00130">130</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00152">addMask()</a>, <a class="el" href="a05790.html#l00337">buildColorVersion()</a>, <a class="el" href="a05791.html#l00090">getNumMasks()</a>, <a class="el" href="a05790.html#l00082">reset()</a>, and <a class="el" href="a05790.html#l00313">serial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturer3" doxytag="NL3D::CHLSColorTexture::_NumMipMap" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer3">NL3D::CHLSColorTexture::_NumMipMap</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00125">125</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>.
+<p>
+Referenced by <a class="el" href="a05790.html#l00152">addMask()</a>, <a class="el" href="a05790.html#l00337">buildColorVersion()</a>, <a class="el" href="a05790.html#l00082">reset()</a>, <a class="el" href="a05790.html#l00313">serial()</a>, and <a class="el" href="a05790.html#l00092">setBitmap()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturer4" doxytag="NL3D::CHLSColorTexture::_Texture" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a7">uint8</a>&gt; <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer4">NL3D::CHLSColorTexture::_Texture</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00128">128</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NL3D_1_1CHLSColorTexturer5" doxytag="NL3D::CHLSColorTexture::_Width" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a02632.html#NL3D_1_1CHLSColorTexturer5">NL3D::CHLSColorTexture::_Width</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05791.html#l00125">125</a> of file <a class="el" href="a05791.html">hls_color_texture.h</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a05791.html">hls_color_texture.h</a><li><a class="el" href="a05790.html">hls_color_texture.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 06:47:06 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>