aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/texture__grouped_8cpp-source.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/doxygen/nel/texture__grouped_8cpp-source.html')
-rw-r--r--docs/doxygen/nel/texture__grouped_8cpp-source.html405
1 files changed, 405 insertions, 0 deletions
diff --git a/docs/doxygen/nel/texture__grouped_8cpp-source.html b/docs/doxygen/nel/texture__grouped_8cpp-source.html
new file mode 100644
index 00000000..de6172e8
--- /dev/null
+++ b/docs/doxygen/nel/texture__grouped_8cpp-source.html
@@ -0,0 +1,405 @@
+<!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_grouped.cpp</h1><a href="texture__grouped_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
+00007 <font class="comment">/* Copyright, 2001 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__grouped_8h.html">3d/texture_grouped.h</a>"</font>
+00029 <font class="preprocessor">#include "<a class="code" href="texture__file_8h.html">3d/texture_file.h</a>"</font>
+00030 <font class="preprocessor">#include "<a class="code" href="common_8h.html">nel/misc/common.h</a>"</font>
+00031 <font class="preprocessor">#include "<a class="code" href="path_8h.html">nel/misc/path.h</a>"</font>
+00032
+00033 <font class="preprocessor">#include &lt;algorithm&gt;</font>
+00034
+00035 <font class="keyword">namespace </font>NL3D {
+00036
+00039 <font class="keyword">static</font> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="namespaceNL3D.html#a465">GetTextureSize</a>(ITexture *tex, uint &amp;<a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>, uint &amp;<a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>)
+00040 {
+00041 <font class="keywordflow">if</font> (tex-&gt;getClassName() == <font class="stringliteral">"CTextureFile"</font>)
+00042 {
+00043 CTextureFile *tf = static_cast&lt;CTextureFile *&gt;(tex);
+00044 uint32 srcWidth, srcHeight;
+00045 <font class="keywordflow">if</font> (!tf-&gt;getFileName().empty())
+00046 {
+00047 <font class="keywordflow">try</font>
+00048 {
+00049 CBitmap::loadSize(<a class="code" href="classNLMISC_1_1CPath.html#d6">NLMISC::CPath::lookup</a>(tf-&gt;getFileName()), srcWidth, srcHeight);
+00050 <font class="keywordflow">if</font> (srcWidth == 0 || srcHeight == 0)
+00051 {
+00052 <a class="code" href="debug_8h.html#a1">nlinfo</a>(<font class="stringliteral">"Unable to get size of texture : %s"</font>, tf-&gt;getFileName().c_str());
+00053 <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = 0;
+00054 <font class="keywordflow">return</font>;
+00055 }
+00056 <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = srcWidth;
+00057 <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = srcHeight;
+00058 }
+00059 <font class="keywordflow">catch</font> (<a class="code" href="structNLMISC_1_1EPathNotFound.html">NLMISC::EPathNotFound</a> &amp;e)
+00060 {
+00061 <a class="code" href="debug_8h.html#a1">nlinfo</a>(<font class="stringliteral">"%s"</font>, e.what());
+00062 <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = 0;
+00063 }
+00064 <font class="keywordflow">catch</font> (<a class="code" href="structNLMISC_1_1EStream.html">NLMISC::EStream</a> &amp;e)
+00065 {
+00066 <a class="code" href="debug_8h.html#a1">nlinfo</a>(<font class="stringliteral">"unable to load size from a bitmap ! name = %s"</font>, tf-&gt;getFileName().c_str());
+00067 <a class="code" href="debug_8h.html#a1">nlinfo</a>(<font class="stringliteral">"reason = %s"</font>, e.what());
+00068 <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = 0;
+00069 }
+00070 }
+00071 <font class="keywordflow">else</font>
+00072 {
+00073 <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = 0;
+00074 }
+00075 }
+00076 <font class="keywordflow">else</font> <font class="comment">// we must generate the texture to get its size</font>
+00077 {
+00078 tex-&gt;generate();
+00079 <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = tex-&gt;getWidth();
+00080 <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = tex-&gt;getHeight();
+00081 <font class="keywordflow">if</font> (tex-&gt;getReleasable())
+00082 {
+00083 tex-&gt;release();
+00084 }
+00085 }
+00086 }
+00087
+<a name="l00089"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a0">00089</a> CTextureGrouped::CTextureGrouped() : _NbTex(0)
+00090 {
+00091 <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>);
+00092 }
+00093
+<a name="l00095"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a1">00095</a> CTextureGrouped::CTextureGrouped(<font class="keyword">const</font> CTextureGrouped &amp;<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>) : ITexture(<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>)
+00096 {
+00097 <font class="comment">// copy the part associated with us;</font>
+00098 <a class="code" href="classNL3D_1_1CTextureGrouped.html#b0">duplicate</a>(<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>);
+00099 }
+00100
+<a name="l00102"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#b0">00102</a> <font class="keywordtype">void</font> CTextureGrouped::duplicate(<font class="keyword">const</font> CTextureGrouped &amp;<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>)
+00103 {
+00104 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a> = <a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>._NbTex;
+00105 <a class="code" href="classNL3D_1_1CTextureGrouped.html#t0">TTexList</a> texCopy(<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>._Textures.begin(), <a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>._Textures.end());
+00106 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.swap(texCopy);
+00107 <a class="code" href="classNL3D_1_1CTextureGrouped.html#s0">TFourUVList</a> uvCopy(<a class="code" href="classNL3D_1_1CTextureGrouped.html#n3">_TexUVs</a>.begin(), <a class="code" href="classNL3D_1_1CTextureGrouped.html#n3">_TexUVs</a>.end());
+00108 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n3">_TexUVs</a>.swap(uvCopy);
+00109 }
+00110
+<a name="l00112"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a2">00112</a> CTextureGrouped &amp;CTextureGrouped::operator=(<font class="keyword">const</font> CTextureGrouped &amp;<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>)
+00113 {
+00114 ITexture::operator=(<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>); <font class="comment">// copy parent part</font>
+00115 <a class="code" href="classNL3D_1_1CTextureGrouped.html#b0">duplicate</a>(<a class="code" href="driver__opengl__extension__def_8h.html#a409">src</a>);
+00116 <font class="keywordflow">return</font> *<font class="keyword">this</font>;
+00117 }
+00118
+<a name="l00120"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a3">00120</a> <font class="keywordtype">bool</font> CTextureGrouped::areValid(CSmartPtr&lt;ITexture&gt; *textureTab, uint nbTex)
+00121 {
+00122 <font class="keywordtype">bool</font> result = <font class="keyword">true</font>;
+00123 uint k;
+00124 <font class="keywordflow">for</font>(k = 0; k &lt; nbTex; ++k)
+00125 {
+00126 textureTab[k]-&gt;generate();
+00127 <font class="keywordflow">if</font> (textureTab[k]-&gt;getWidth() != textureTab[0]-&gt;getWidth()
+00128 || textureTab[k]-&gt;getHeight() != textureTab[0]-&gt;getHeight()
+00129 || textureTab[k]-&gt;getPixelFormat() != textureTab[0]-&gt;getPixelFormat()
+00130 )
+00131 {
+00132 result = <font class="keyword">false</font>;
+00133 <font class="keywordflow">break</font>;
+00134 }
+00135 }
+00136
+00137
+00138 <font class="keywordflow">for</font> (k = 0; k &lt; nbTex; ++k)
+00139 {
+00140 <font class="keywordflow">if</font> (textureTab[k]-&gt;getReleasable()) textureTab[k]-&gt;release();
+00141 }
+00142 <font class="keywordflow">return</font> result;
+00143 }
+00144
+<a name="l00146"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a4">00146</a> <font class="keywordtype">void</font> CTextureGrouped::setTextures(CSmartPtr&lt;ITexture&gt; *textureTab, uint nbTex)
+00147 {
+00148 <a class="code" href="debug_8h.html#a6">nlassert</a>(nbTex &gt; 0);
+00149
+00150
+00151 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CTextureGrouped.html#a3">areValid</a>(textureTab, nbTex))
+00152 {
+00153 <a class="code" href="classNL3D_1_1CTextureGrouped.html#b2">displayIncompatibleTextureWarning</a>(textureTab, nbTex);
+00154 <a class="code" href="classNL3D_1_1CTextureGrouped.html#b1">makeDummies</a>(textureTab, nbTex);
+00155 }
+00156
+00157
+00158 <font class="comment">// Generate the first texture to get the size </font>
+00159 uint <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>;
+00160 <a class="code" href="namespaceNL3D.html#a465">GetTextureSize</a>(textureTab[0], <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>);
+00161
+00162 <font class="keyword">const</font> uint totalHeight = <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> * nbTex;
+00163 <font class="keyword">const</font> uint realHeight = totalHeight ? <a class="code" href="namespaceNLMISC.html#a223">NLMISC::raiseToNextPowerOf2</a>(totalHeight) : 0;
+00164
+00165 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n3">_TexUVs</a>.clear();
+00166 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.clear();
+00167
+00168 <font class="keyword">const</font> <font class="keywordtype">float</font> deltaV = realHeight ? (float(totalHeight) / float(realHeight)) * (1.0f / nbTex)
+00169 : 0.f;
+00170 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n2">_DeltaUV</a> = CUV(1, deltaV);
+00171 CUV currentUV(0, 0);
+00172
+00173 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.reserve(nbTex);
+00174 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n3">_TexUVs</a>.reserve(nbTex);
+00175
+00176 <font class="keywordflow">for</font>(uint k = 0; k &lt; nbTex; ++k)
+00177 {
+00178 TFourUV uvs;
+00179 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.push_back(textureTab[k]);
+00180
+00181 uvs.uv0 = currentUV;
+00182 uvs.uv1 = currentUV + CUV(1, 0);
+00183 uvs.uv2 = currentUV + <a class="code" href="classNL3D_1_1CTextureGrouped.html#n2">_DeltaUV</a>;
+00184 uvs.uv3 = currentUV + CUV(0, deltaV);
+00185 currentUV.V += deltaV;
+00186 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n3">_TexUVs</a>.push_back(uvs);
+00187 }
+00188 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a> = nbTex;
+00189 <a class="code" href="classNL3D_1_1ITexture.html#a0">touch</a>(); <font class="comment">// the texture need regeneration</font>
+00190
+00191 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a> == <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.size());
+00192 }
+00193
+<a name="l00195"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a12">00195</a> <font class="keywordtype">void</font> CTextureGrouped::doGenerate()
+00196 {
+00197 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a> == <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.size());
+00198 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a> == 0)
+00199 {
+00200 <a class="code" href="classNLMISC_1_1CBitmap.html#a3">makeDummy</a>();
+00201 }
+00202 <font class="keywordflow">else</font>
+00203 {
+00204 <font class="comment">// Generate the first texture to get the size </font>
+00205 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[0]-&gt;generate();
+00206 <font class="keyword">const</font> uint <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a> = <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[0]-&gt;getWidth(), <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> = <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[0]-&gt;getHeight();
+00207 <font class="keyword">const</font> uint totalHeight = <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a> * <a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a>;
+00208 <font class="keyword">const</font> uint realHeight = <a class="code" href="namespaceNLMISC.html#a223">NLMISC::raiseToNextPowerOf2</a>(totalHeight);
+00209
+00210 <a class="code" href="classNLMISC_1_1CBitmap.html#a15">resize</a>(<a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>, realHeight, <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[0]-&gt;<a class="code" href="classNLMISC_1_1CBitmap.html#a5">getPixelFormat</a>());
+00211
+00212 uint k;
+00213 sint32 currY = 0;
+00214 <font class="keywordflow">for</font>(k = 0; k &lt; <a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a>; ++k)
+00215 {
+00216 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;generate();
+00217 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;getWidth() != <a class="code" href="driver__opengl__extension__def_8h.html#a389">width</a>
+00218 || <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;getHeight() != <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>
+00219 || <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;getPixelFormat() != <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[0]-&gt;getPixelFormat())
+00220 {
+00221 <a class="code" href="classNLMISC_1_1CBitmap.html#a3">makeDummy</a>();
+00222 <font class="keywordflow">break</font>;
+00223 }
+00224 this-&gt;<a class="code" href="classNLMISC_1_1CBitmap.html#a22">blit</a>(<a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k], 0, currY);
+00225 currY += <a class="code" href="driver__opengl__extension__def_8h.html#a390">height</a>;
+00226 }
+00227
+00228 <font class="keywordflow">for</font>(k = 0; k &lt; <a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a>; ++k)
+00229 {
+00230 <font class="keywordflow">if</font> ( <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;getReleasable())
+00231 {
+00232 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;release();
+00233 }
+00234 }
+00235 }
+00236 }
+00237
+<a name="l00239"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a6">00239</a> <font class="keywordtype">void</font> CTextureGrouped::getTextures(CSmartPtr&lt;ITexture&gt; *textureTab)<font class="keyword"> const</font>
+00240 <font class="keyword"></font>{
+00241 CSmartPtr&lt;ITexture&gt; *dest = textureTab;
+00242
+00243 <font class="keywordflow">for</font>(TTexList::const_iterator it = <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.begin(); it != <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.end(); ++it, ++dest)
+00244 {
+00245 *dest = *it;
+00246 }
+00247 }
+00248
+<a name="l00250"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a10">00250</a> <font class="keywordtype">bool</font> CTextureGrouped::supportSharing()<font class="keyword"> const</font>
+00251 <font class="keyword"></font>{
+00252 <font class="comment">// all textures in this group must support sharing for this one to support it</font>
+00253 <font class="keywordflow">for</font>(TTexList::const_iterator it = <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.begin(); it != <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.end(); ++it)
+00254 {
+00255 <font class="keywordflow">if</font> (!(*it)-&gt;supportSharing()) <font class="keywordflow">return</font> <font class="keyword">false</font>;
+00256 }
+00257
+00258 <font class="keywordflow">return</font> <font class="keyword">true</font>;
+00259 }
+00260
+<a name="l00262"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a11">00262</a> std::string CTextureGrouped::getShareName()<font class="keyword"> const</font>
+00263 <font class="keyword"></font>{
+00264 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CTextureGrouped.html#a10">supportSharing</a>());
+00265
+00266 std::string shareName(<font class="stringliteral">"groupedTex:"</font>);
+00267 <font class="keywordflow">for</font>(TTexList::const_iterator it = <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.begin(); it != <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>.end(); ++it)
+00268 {
+00269 shareName += (*it)-&gt;getShareName() + std::string(<font class="stringliteral">"|"</font>);
+00270 }
+00271 <font class="keywordflow">return</font> shareName;
+00272 }
+00273
+<a name="l00275"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a13">00275</a> <font class="keywordtype">void</font> CTextureGrouped::serial(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &amp;f) <font class="keywordflow">throw</font>(NLMISC::EStream)
+00276 {
+00277 f.serialVersion(1);
+00278
+00279 <font class="keywordflow">if</font> (f.isReading())
+00280 {
+00281 TTexList texList;
+00282
+00284 uint32 nbTex;
+00285 f.serial(nbTex);
+00286
+00288 ITexture *ptTex = NULL;
+00289 texList.reserve(nbTex);
+00290 <font class="keywordflow">for</font> (uint k = 0; k &lt; nbTex; ++k)
+00291 {
+00292 f.serialPolyPtr(ptTex);
+00293 texList.push_back(ptTex);
+00294 }
+00295
+00296 <font class="comment">// setup the textures</font>
+00297 setTextures(&amp;texList[0], nbTex);
+00298 touch();
+00299 }
+00300 <font class="keywordflow">else</font>
+00301 {
+00302 f.serial(_NbTex);
+00303 ITexture *ptTex;
+00304 <font class="keywordflow">for</font> (TTexList::iterator it = _Textures.begin(); it != _Textures.end(); ++it)
+00305 {
+00306 ptTex = *it;
+00307 f.serialPolyPtr(ptTex);
+00308 }
+00309 }
+00310 }
+00311
+<a name="l00313"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#a15">00313</a> <font class="keywordtype">void</font> CTextureGrouped::release()
+00314 {
+00315 ITexture::release();
+00316 <font class="keywordflow">for</font>(uint k = 0; k &lt; <a class="code" href="classNL3D_1_1CTextureGrouped.html#n0">_NbTex</a>; ++k)
+00317 {
+00318 <font class="keywordflow">if</font> ( <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;getReleasable())
+00319 {
+00320 <a class="code" href="classNL3D_1_1CTextureGrouped.html#n1">_Textures</a>[k]-&gt;release();
+00321 }
+00322 }
+00323 }
+00324
+<a name="l00326"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#b1">00326</a> <font class="keywordtype">void</font> CTextureGrouped::makeDummies(CSmartPtr&lt;ITexture&gt; *textureTab,uint nbTex)
+00327 {
+00328 <font class="keywordflow">for</font>(uint k = 0; k &lt; nbTex; ++k)
+00329 {
+00330 textureTab[k] = <font class="keyword">new</font> CTextureFile(<font class="stringliteral">"DummyTex"</font>); <font class="comment">// well this shouldn't exist..</font>
+00331 }
+00332 }
+00333
+<a name="l00335"></a><a class="code" href="classNL3D_1_1CTextureGrouped.html#b2">00335</a> <font class="keywordtype">void</font> CTextureGrouped::displayIncompatibleTextureWarning(CSmartPtr&lt;ITexture&gt; *textureTab,uint nbTex)
+00336 {
+00337 <a class="code" href="debug_8h.html#a2">nlwarning</a>(<font class="stringliteral">"======================================================="</font>);
+00338 <a class="code" href="debug_8h.html#a2">nlwarning</a>(<font class="stringliteral">"CTextureGrouped : found incompatible textures, that differs by size or format :"</font> );
+00339 <font class="keywordflow">for</font>(uint k = 0; k &lt; nbTex; ++k)
+00340 {
+00341 <font class="keywordflow">if</font> (textureTab[k])
+00342 {
+00343 <a class="code" href="debug_8h.html#a2">nlwarning</a>((textureTab[k]-&gt;<a class="code" href="classNL3D_1_1CTextureGrouped.html#a11">getShareName</a>()).c_str());
+00344 }
+00345 <font class="keywordflow">else</font>
+00346 {
+00347 <a class="code" href="debug_8h.html#a2">nlwarning</a>(<font class="stringliteral">"NULL Texture found"</font>);
+00348 }
+00349 }
+00350 <a class="code" href="debug_8h.html#a2">nlwarning</a>(<font class="stringliteral">"======================================================="</font>);
+00351 }
+00352
+00353
+00354 } <font class="comment">// NL3D</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>