<html> <head> <title>OgrePixelConversions.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <!-- Generated by Doxygen 1.3.6 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div> <h1>OgrePixelConversions.h</h1><a href="OgrePixelConversions_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span> 00002 <span class="comment">-----------------------------------------------------------------------------</span> 00003 <span class="comment">This source file is part of OGRE</span> 00004 <span class="comment"> (Object-oriented Graphics Rendering Engine)</span> 00005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span> 00006 <span class="comment"></span> 00007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span> 00008 <span class="comment">Also see acknowledgements in Readme.html</span> 00009 <span class="comment"></span> 00010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span> 00011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span> 00012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span> 00013 <span class="comment">version.</span> 00014 <span class="comment"></span> 00015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span> 00016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span> 00017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span> 00018 <span class="comment"></span> 00019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span> 00020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span> 00021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span> 00022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span> 00023 <span class="comment">-----------------------------------------------------------------------------</span> 00024 <span class="comment">*/</span> 00026 <span class="keyword">using</span> <span class="keyword">namespace </span>Ogre; 00027 00028 <span class="comment">// NB VC6 can't handle these templates</span> 00029 <span class="preprocessor">#if OGRE_COMPILER != OGRE_COMPILER_MSVC || OGRE_COMP_VER >= 1300</span> 00030 <span class="preprocessor"></span> 00031 <span class="preprocessor">#define FMTCONVERTERID(from,to) (((from)<<8)|(to))</span> 00032 <span class="preprocessor"></span> 00043 <span class="keyword">template</span> <<span class="keyword">class</span> U> <span class="keyword">struct </span>PixelBoxConverter 00044 { 00045 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ID = U::ID; 00046 <span class="keyword">static</span> <span class="keywordtype">void</span> conversion(<span class="keyword">const</span> <a class="code" href="classOgre_1_1PixelBox.html">PixelBox</a> &src, <span class="keyword">const</span> <a class="code" href="classOgre_1_1PixelBox.html">PixelBox</a> &dst) 00047 { 00048 <span class="keyword">typename</span> U::SrcType *srcptr = static_cast<typename U::SrcType*>(src.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxo0">data</a>); 00049 <span class="keyword">typename</span> U::DstType *dstptr = static_cast<typename U::DstType*>(dst.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxo0">data</a>); 00050 <span class="keyword">const</span> size_t srcSliceSkip = src.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxa5">getSliceSkip</a>(); 00051 <span class="keyword">const</span> size_t dstSliceSkip = dst.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxa5">getSliceSkip</a>(); 00052 <span class="keyword">const</span> size_t k = src.<a class="code" href="structOgre_1_1Box.html#Ogre_1_1PixelBoxo6">right</a> - src.<a class="code" href="structOgre_1_1Box.html#Ogre_1_1PixelBoxo4">left</a>; 00053 <span class="keywordflow">for</span>(size_t z=src.<a class="code" href="structOgre_1_1Box.html#Ogre_1_1PixelBoxo8">front</a>; z<src.<a class="code" href="structOgre_1_1Box.html#Ogre_1_1PixelBoxo9">back</a>; z++) 00054 { 00055 <span class="keywordflow">for</span>(size_t y=src.<a class="code" href="structOgre_1_1Box.html#Ogre_1_1PixelBoxo5">top</a>; y<src.<a class="code" href="structOgre_1_1Box.html#Ogre_1_1PixelBoxo7">bottom</a>; y++) 00056 { 00057 <span class="keywordflow">for</span>(size_t x=0; x<k; x++) 00058 { 00059 dstptr[x] = U::pixelConvert(srcptr[x]); 00060 } 00061 srcptr += src.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxo2">rowPitch</a>; 00062 dstptr += dst.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxo2">rowPitch</a>; 00063 } 00064 srcptr += srcSliceSkip; 00065 dstptr += dstSliceSkip; 00066 } 00067 } 00068 }; 00069 00070 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keywordtype">int</span> <span class="keywordtype">id</span>> <span class="keyword">struct </span>PixelConverter { 00071 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ID = <span class="keywordtype">id</span>; 00072 <span class="keyword">typedef</span> T SrcType; 00073 <span class="keyword">typedef</span> U DstType; 00074 00075 <span class="comment">//inline static DstType pixelConvert(const SrcType &inp);</span> 00076 }; 00077 00078 00080 <span class="keyword">struct </span>Col3b { 00081 <a class="code" href="classCol3b.html">Col3b</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> a, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c): 00082 x((<a class="code" href="namespaceOgre.html#a414">uint8</a>)a), y((<a class="code" href="namespaceOgre.html#a414">uint8</a>)b), z((<a class="code" href="namespaceOgre.html#a414">uint8</a>)c) { } 00083 <a class="code" href="namespaceOgre.html#a414">uint8</a> x,y,z; 00084 }; 00086 <span class="keyword">struct </span>Col3f { 00087 <a class="code" href="classCol3f.html">Col3f</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b): 00088 r(r), g(g), b(b) { } 00089 <span class="keywordtype">float</span> r,g,b; 00090 }; 00092 <span class="keyword">struct </span>Col4f { 00093 <a class="code" href="classCol4f.html">Col4f</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a): 00094 r(r), g(g), b(b), a(a) { } 00095 <span class="keywordtype">float</span> r,g,b,a; 00096 }; 00097 00098 <span class="keyword">struct </span>A8R8G8B8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_A8R8G8B8, PF_A8B8G8R8)> 00099 { 00100 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00101 { 00102 <span class="keywordflow">return</span> ((inp&0x000000FF)<<16)|(inp&0xFF00FF00)|((inp&0x00FF0000)>>16); 00103 } 00104 }; 00105 00106 <span class="keyword">struct </span>A8R8G8B8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_A8R8G8B8, PF_B8G8R8A8)> 00107 { 00108 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00109 { 00110 <span class="keywordflow">return</span> ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24); 00111 } 00112 }; 00113 00114 <span class="keyword">struct </span>A8R8G8B8toR8G8B8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_A8R8G8B8, PF_R8G8B8A8)> 00115 { 00116 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00117 { 00118 <span class="keywordflow">return</span> ((inp&0x00FFFFFF)<<8)|((inp&0xFF000000)>>24); 00119 } 00120 }; 00121 00122 <span class="keyword">struct </span>A8B8G8R8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_A8B8G8R8, PF_A8R8G8B8)> 00123 { 00124 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00125 { 00126 <span class="keywordflow">return</span> ((inp&0x000000FF)<<16)|(inp&0xFF00FF00)|((inp&0x00FF0000)>>16); 00127 } 00128 }; 00129 00130 <span class="keyword">struct </span>A8B8G8R8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_A8B8G8R8, PF_B8G8R8A8)> 00131 { 00132 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00133 { 00134 <span class="keywordflow">return</span> ((inp&0x00FFFFFF)<<8)|((inp&0xFF000000)>>24); 00135 } 00136 }; 00137 00138 <span class="keyword">struct </span>A8B8G8R8toR8G8B8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_A8B8G8R8, PF_R8G8B8A8)> 00139 { 00140 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00141 { 00142 <span class="keywordflow">return</span> ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24); 00143 } 00144 }; 00145 00146 <span class="keyword">struct </span>B8G8R8A8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_B8G8R8A8, PF_A8R8G8B8)> 00147 { 00148 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00149 { 00150 <span class="keywordflow">return</span> ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24); 00151 } 00152 }; 00153 00154 <span class="keyword">struct </span>B8G8R8A8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_B8G8R8A8, PF_A8B8G8R8)> 00155 { 00156 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00157 { 00158 <span class="keywordflow">return</span> ((inp&0x000000FF)<<24)|((inp&0xFFFFFF00)>>8); 00159 } 00160 }; 00161 00162 <span class="keyword">struct </span>B8G8R8A8toR8G8B8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_B8G8R8A8, PF_R8G8B8A8)> 00163 { 00164 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00165 { 00166 <span class="keywordflow">return</span> ((inp&0x0000FF00)<<16)|(inp&0x00FF00FF)|((inp&0xFF000000)>>16); 00167 } 00168 }; 00169 00170 <span class="keyword">struct </span>R8G8B8A8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_R8G8B8A8, PF_A8R8G8B8)> 00171 { 00172 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00173 { 00174 <span class="keywordflow">return</span> ((inp&0x000000FF)<<24)|((inp&0xFFFFFF00)>>8); 00175 } 00176 }; 00177 00178 <span class="keyword">struct </span>R8G8B8A8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_R8G8B8A8, PF_A8B8G8R8)> 00179 { 00180 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00181 { 00182 <span class="keywordflow">return</span> ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24); 00183 } 00184 }; 00185 00186 <span class="keyword">struct </span>R8G8B8A8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_R8G8B8A8, PF_B8G8R8A8)> 00187 { 00188 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00189 { 00190 <span class="keywordflow">return</span> ((inp&0x0000FF00)<<16)|(inp&0x00FF00FF)|((inp&0xFF000000)>>16); 00191 } 00192 }; 00193 00194 <span class="keyword">struct </span>A8B8G8R8toL8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint8, FMTCONVERTERID(PF_A8B8G8R8, PF_L8)> 00195 { 00196 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00197 { 00198 <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp&0x000000FF); 00199 } 00200 }; 00201 00202 <span class="keyword">struct </span>L8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint8, uint32, FMTCONVERTERID(PF_L8, PF_A8B8G8R8)> 00203 { 00204 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00205 { 00206 <span class="keywordflow">return</span> 0xFF000000|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<0)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<8)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<16); 00207 } 00208 }; 00209 00210 <span class="keyword">struct </span>A8R8G8B8toL8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint8, FMTCONVERTERID(PF_A8R8G8B8, PF_L8)> 00211 { 00212 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00213 { 00214 <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a414">uint8</a>)((inp&0x00FF0000)>>16); 00215 } 00216 }; 00217 00218 <span class="keyword">struct </span>L8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint8, uint32, FMTCONVERTERID(PF_L8, PF_A8R8G8B8)> 00219 { 00220 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00221 { 00222 <span class="keywordflow">return</span> 0xFF000000|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<0)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<8)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<16); 00223 } 00224 }; 00225 00226 <span class="keyword">struct </span>B8G8R8A8toL8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint8, FMTCONVERTERID(PF_B8G8R8A8, PF_L8)> 00227 { 00228 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00229 { 00230 <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a414">uint8</a>)((inp&0x0000FF00)>>8); 00231 } 00232 }; 00233 00234 <span class="keyword">struct </span>L8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint8, uint32, FMTCONVERTERID(PF_L8, PF_B8G8R8A8)> 00235 { 00236 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00237 { 00238 <span class="keywordflow">return</span> 0x000000FF|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<8)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<16)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<24); 00239 } 00240 }; 00241 00242 <span class="keyword">struct </span>L8toL16: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint8, uint16, FMTCONVERTERID(PF_L8, PF_L16)> 00243 { 00244 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00245 { 00246 <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a413">uint16</a>)((((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp)<<8)|(((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp))); 00247 } 00248 }; 00249 00250 <span class="keyword">struct </span>L16toL8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint16, uint8, FMTCONVERTERID(PF_L16, PF_L8)> 00251 { 00252 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00253 { 00254 <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>8); 00255 } 00256 }; 00257 00258 <span class="keyword">struct </span>R8G8B8toB8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <Col3b, Col3b, FMTCONVERTERID(PF_R8G8B8, PF_B8G8R8)> 00259 { 00260 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(<span class="keyword">const</span> SrcType &inp) 00261 { 00262 <span class="keywordflow">return</span> <a class="code" href="classCol3b.html">Col3b</a>(inp.z, inp.y, inp.x); 00263 } 00264 }; 00265 00266 <span class="keyword">struct </span>B8G8R8toR8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <Col3b, Col3b, FMTCONVERTERID(PF_B8G8R8, PF_R8G8B8)> 00267 { 00268 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(<span class="keyword">const</span> SrcType &inp) 00269 { 00270 <span class="keywordflow">return</span> <a class="code" href="classCol3b.html">Col3b</a>(inp.z, inp.y, inp.x); 00271 } 00272 }; 00273 00274 <span class="comment">// X8Y8Z8 -> X8<<xshift Y8<<yshift Z8<<zshift A8<<ashift</span> 00275 <span class="keyword">template</span> <<span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xshift, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yshift, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zshift, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ashift> <span class="keyword">struct </span>Col3btoUint32swizzler: 00276 <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <Col3b, uint32, id> 00277 { 00278 <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="namespaceOgre.html#a412">uint32</a> pixelConvert(<span class="keyword">const</span> <a class="code" href="classCol3b.html">Col3b</a> &inp) 00279 { 00280 <span class="preprocessor">#if OGRE_ENDIAN == OGRE_ENDIAN_BIG</span> 00281 <span class="preprocessor"></span> <span class="keywordflow">return</span> (0xFF<<ashift) | (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp.x)<<xshift) | (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp.y)<<yshift) | (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp.z)<<zshift); 00282 <span class="preprocessor">#else</span> 00283 <span class="preprocessor"></span> <span class="keywordflow">return</span> (0xFF<<ashift) | (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp.x)<<zshift) | (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp.y)<<yshift) | (((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)inp.z)<<xshift); 00284 <span class="preprocessor">#endif</span> 00285 <span class="preprocessor"></span> } 00286 }; 00287 00288 <span class="keyword">struct </span>R8G8B8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classCol3btoUint32swizzler.html">Col3btoUint32swizzler</a><FMTCONVERTERID(PF_R8G8B8, PF_A8R8G8B8), 16, 8, 0, 24> { }; 00289 <span class="keyword">struct </span>B8G8R8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classCol3btoUint32swizzler.html">Col3btoUint32swizzler</a><FMTCONVERTERID(PF_B8G8R8, PF_A8R8G8B8), 0, 8, 16, 24> { }; 00290 <span class="keyword">struct </span>R8G8B8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classCol3btoUint32swizzler.html">Col3btoUint32swizzler</a><FMTCONVERTERID(PF_R8G8B8, PF_A8B8G8R8), 0, 8, 16, 24> { }; 00291 <span class="keyword">struct </span>B8G8R8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classCol3btoUint32swizzler.html">Col3btoUint32swizzler</a><FMTCONVERTERID(PF_B8G8R8, PF_A8B8G8R8), 16, 8, 0, 24> { }; 00292 <span class="keyword">struct </span>R8G8B8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classCol3btoUint32swizzler.html">Col3btoUint32swizzler</a><FMTCONVERTERID(PF_R8G8B8, PF_B8G8R8A8), 8, 16, 24, 0> { }; 00293 <span class="keyword">struct </span>B8G8R8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classCol3btoUint32swizzler.html">Col3btoUint32swizzler</a><FMTCONVERTERID(PF_B8G8R8, PF_B8G8R8A8), 24, 16, 8, 0> { }; 00294 00295 <span class="keyword">struct </span>A8R8G8B8toR8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, Col3b, FMTCONVERTERID(PF_A8R8G8B8, PF_BYTE_RGB)> 00296 { 00297 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(<a class="code" href="namespaceOgre.html#a412">uint32</a> inp) 00298 { 00299 <span class="keywordflow">return</span> <a class="code" href="classCol3b.html">Col3b</a>((<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>16)&0xFF, (<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>8)&0xFF, (<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>0)&0xFF); 00300 } 00301 }; 00302 <span class="keyword">struct </span>A8R8G8B8toB8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, Col3b, FMTCONVERTERID(PF_A8R8G8B8, PF_BYTE_BGR)> 00303 { 00304 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(<a class="code" href="namespaceOgre.html#a412">uint32</a> inp) 00305 { 00306 <span class="keywordflow">return</span> <a class="code" href="classCol3b.html">Col3b</a>((<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>0)&0xFF, (<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>8)&0xFF, (<a class="code" href="namespaceOgre.html#a414">uint8</a>)(inp>>16)&0xFF); 00307 } 00308 }; 00309 00310 <span class="comment">// Only conversions from X8R8G8B8 to formats with alpha need to be defined, the rest is implicitly the same</span> 00311 <span class="comment">// as A8R8G8B8</span> 00312 <span class="keyword">struct </span>X8R8G8B8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8R8G8B8, PF_A8R8G8B8)> 00313 { 00314 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00315 { 00316 <span class="keywordflow">return</span> inp | 0xFF000000; 00317 } 00318 }; 00319 <span class="keyword">struct </span>X8R8G8B8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8R8G8B8, PF_A8B8G8R8)> 00320 { 00321 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00322 { 00323 <span class="keywordflow">return</span> ((inp&0x0000FF)<<16)|((inp&0xFF0000)>>16)|(inp&0x00FF00)|0xFF000000; 00324 } 00325 }; 00326 <span class="keyword">struct </span>X8R8G8B8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8R8G8B8, PF_B8G8R8A8)> 00327 { 00328 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00329 { 00330 <span class="keywordflow">return</span> ((inp&0x0000FF)<<24)|((inp&0xFF0000)>>8)|((inp&0x00FF00)<<8)|0x000000FF; 00331 } 00332 }; 00333 <span class="keyword">struct </span>X8R8G8B8toR8G8B8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8R8G8B8, PF_R8G8B8A8)> 00334 { 00335 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00336 { 00337 <span class="keywordflow">return</span> ((inp&0xFFFFFF)<<8)|0x000000FF; 00338 } 00339 }; 00340 00341 <span class="comment">// X8B8G8R8</span> 00342 <span class="keyword">struct </span>X8B8G8R8toA8R8G8B8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8B8G8R8, PF_A8R8G8B8)> 00343 { 00344 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00345 { 00346 <span class="keywordflow">return</span> ((inp&0x0000FF)<<16)|((inp&0xFF0000)>>16)|(inp&0x00FF00)|0xFF000000; 00347 } 00348 }; 00349 <span class="keyword">struct </span>X8B8G8R8toA8B8G8R8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8B8G8R8, PF_A8B8G8R8)> 00350 { 00351 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00352 { 00353 <span class="keywordflow">return</span> inp | 0xFF000000; 00354 } 00355 }; 00356 <span class="keyword">struct </span>X8B8G8R8toB8G8R8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8B8G8R8, PF_B8G8R8A8)> 00357 { 00358 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00359 { 00360 <span class="keywordflow">return</span> ((inp&0xFFFFFF)<<8)|0x000000FF; 00361 } 00362 }; 00363 <span class="keyword">struct </span>X8B8G8R8toR8G8B8A8: <span class="keyword">public</span> <a class="code" href="classPixelConverter.html">PixelConverter</a> <uint32, uint32, FMTCONVERTERID(PF_X8B8G8R8, PF_R8G8B8A8)> 00364 { 00365 <span class="keyword">inline</span> <span class="keyword">static</span> DstType pixelConvert(SrcType inp) 00366 { 00367 <span class="keywordflow">return</span> ((inp&0x0000FF)<<24)|((inp&0xFF0000)>>8)|((inp&0x00FF00)<<8)|0x000000FF; 00368 } 00369 }; 00370 00371 00372 <span class="preprocessor">#define CASECONVERTER(type) case type::ID : PixelBoxConverter<type>::conversion(src, dst); return 1;</span> 00373 <span class="preprocessor"></span> 00374 <span class="keyword">inline</span> <span class="keywordtype">int</span> doOptimizedConversion(<span class="keyword">const</span> <a class="code" href="classOgre_1_1PixelBox.html">PixelBox</a> &src, <span class="keyword">const</span> <a class="code" href="classOgre_1_1PixelBox.html">PixelBox</a> &dst) 00375 {; 00376 <span class="keywordflow">switch</span>(FMTCONVERTERID(src.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxo1">format</a>, dst.<a class="code" href="classOgre_1_1PixelBox.html#Ogre_1_1PixelBoxo1">format</a>)) 00377 { 00378 <span class="comment">// Register converters here</span> 00379 CASECONVERTER(<a class="code" href="classA8R8G8B8toA8B8G8R8.html">A8R8G8B8toA8B8G8R8</a>); 00380 CASECONVERTER(<a class="code" href="classA8R8G8B8toB8G8R8A8.html">A8R8G8B8toB8G8R8A8</a>); 00381 CASECONVERTER(<a class="code" href="classA8R8G8B8toR8G8B8A8.html">A8R8G8B8toR8G8B8A8</a>); 00382 CASECONVERTER(<a class="code" href="classA8B8G8R8toA8R8G8B8.html">A8B8G8R8toA8R8G8B8</a>); 00383 CASECONVERTER(<a class="code" href="classA8B8G8R8toB8G8R8A8.html">A8B8G8R8toB8G8R8A8</a>); 00384 CASECONVERTER(<a class="code" href="classA8B8G8R8toR8G8B8A8.html">A8B8G8R8toR8G8B8A8</a>); 00385 CASECONVERTER(<a class="code" href="classB8G8R8A8toA8R8G8B8.html">B8G8R8A8toA8R8G8B8</a>); 00386 CASECONVERTER(<a class="code" href="classB8G8R8A8toA8B8G8R8.html">B8G8R8A8toA8B8G8R8</a>); 00387 CASECONVERTER(<a class="code" href="classB8G8R8A8toR8G8B8A8.html">B8G8R8A8toR8G8B8A8</a>); 00388 CASECONVERTER(<a class="code" href="classR8G8B8A8toA8R8G8B8.html">R8G8B8A8toA8R8G8B8</a>); 00389 CASECONVERTER(<a class="code" href="classR8G8B8A8toA8B8G8R8.html">R8G8B8A8toA8B8G8R8</a>); 00390 CASECONVERTER(<a class="code" href="classR8G8B8A8toB8G8R8A8.html">R8G8B8A8toB8G8R8A8</a>); 00391 CASECONVERTER(<a class="code" href="classA8B8G8R8toL8.html">A8B8G8R8toL8</a>); 00392 CASECONVERTER(<a class="code" href="classL8toA8B8G8R8.html">L8toA8B8G8R8</a>); 00393 CASECONVERTER(<a class="code" href="classA8R8G8B8toL8.html">A8R8G8B8toL8</a>); 00394 CASECONVERTER(<a class="code" href="classL8toA8R8G8B8.html">L8toA8R8G8B8</a>); 00395 CASECONVERTER(<a class="code" href="classB8G8R8A8toL8.html">B8G8R8A8toL8</a>); 00396 CASECONVERTER(<a class="code" href="classL8toB8G8R8A8.html">L8toB8G8R8A8</a>); 00397 CASECONVERTER(<a class="code" href="classL8toL16.html">L8toL16</a>); 00398 CASECONVERTER(<a class="code" href="classL16toL8.html">L16toL8</a>); 00399 CASECONVERTER(<a class="code" href="classB8G8R8toR8G8B8.html">B8G8R8toR8G8B8</a>); 00400 CASECONVERTER(<a class="code" href="classR8G8B8toB8G8R8.html">R8G8B8toB8G8R8</a>); 00401 CASECONVERTER(<a class="code" href="classR8G8B8toA8R8G8B8.html">R8G8B8toA8R8G8B8</a>); 00402 CASECONVERTER(<a class="code" href="classB8G8R8toA8R8G8B8.html">B8G8R8toA8R8G8B8</a>); 00403 CASECONVERTER(<a class="code" href="classR8G8B8toA8B8G8R8.html">R8G8B8toA8B8G8R8</a>); 00404 CASECONVERTER(<a class="code" href="classB8G8R8toA8B8G8R8.html">B8G8R8toA8B8G8R8</a>); 00405 CASECONVERTER(<a class="code" href="classR8G8B8toB8G8R8A8.html">R8G8B8toB8G8R8A8</a>); 00406 CASECONVERTER(<a class="code" href="classB8G8R8toB8G8R8A8.html">B8G8R8toB8G8R8A8</a>); 00407 CASECONVERTER(<a class="code" href="classA8R8G8B8toR8G8B8.html">A8R8G8B8toR8G8B8</a>); 00408 CASECONVERTER(<a class="code" href="classA8R8G8B8toB8G8R8.html">A8R8G8B8toB8G8R8</a>); 00409 CASECONVERTER(<a class="code" href="classX8R8G8B8toA8R8G8B8.html">X8R8G8B8toA8R8G8B8</a>); 00410 CASECONVERTER(<a class="code" href="classX8R8G8B8toA8B8G8R8.html">X8R8G8B8toA8B8G8R8</a>); 00411 CASECONVERTER(<a class="code" href="classX8R8G8B8toB8G8R8A8.html">X8R8G8B8toB8G8R8A8</a>); 00412 CASECONVERTER(<a class="code" href="classX8R8G8B8toR8G8B8A8.html">X8R8G8B8toR8G8B8A8</a>); 00413 CASECONVERTER(<a class="code" href="classX8B8G8R8toA8R8G8B8.html">X8B8G8R8toA8R8G8B8</a>); 00414 CASECONVERTER(<a class="code" href="classX8B8G8R8toA8B8G8R8.html">X8B8G8R8toA8B8G8R8</a>); 00415 CASECONVERTER(<a class="code" href="classX8B8G8R8toB8G8R8A8.html">X8B8G8R8toB8G8R8A8</a>); 00416 CASECONVERTER(<a class="code" href="classX8B8G8R8toR8G8B8A8.html">X8B8G8R8toR8G8B8A8</a>); 00417 00418 <span class="keywordflow">default</span>: 00419 <span class="keywordflow">return</span> 0; 00420 } 00421 } 00422 <span class="preprocessor">#undef CASECONVERTER</span> 00423 <span class="preprocessor"></span> 00424 <span class="preprocessor">#endif // VC6 protection</span> </pre></div><p> Copyright © 2000-2005 by The OGRE Team<br /> Last modified Wed Feb 23 00:19:11 2005 </p> </body> </html>