32 #if OGRE_COMPILER != OGRE_COMPILER_MSVC || OGRE_COMP_VER >= 1300
34 #define FMTCONVERTERID(from,to) (((from)<<8)|(to))
51 template <
class U>
struct PixelBoxConverter
53 static const int ID = U::ID;
56 typename U::SrcType *srcptr =
static_cast<typename U::SrcType*
>(src.
data)
58 typename U::DstType *dstptr =
static_cast<typename U::DstType*
>(dst.
data)
67 for(
size_t x=0; x<k; x++)
69 dstptr[x] = U::pixelConvert(srcptr[x]);
74 srcptr += srcSliceSkip;
75 dstptr += dstSliceSkip;
80 template <
typename T,
typename U,
int id>
struct PixelConverter {
81 static const int ID = id;
91 Col3b(
unsigned int a,
unsigned int b,
unsigned int c):
97 Col3f(
float inR,
float inG,
float inB):
98 r(inR), g(inG), b(inB) { }
103 Col4f(
float inR,
float inG,
float inB,
float inA):
104 r(inR), g(inG), b(inB), a(inA) { }
108 struct A8R8G8B8toA8B8G8R8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_A8R8G8B8, Ogre::PF_A8B8G8R8)>
110 inline static DstType pixelConvert(SrcType inp)
112 return ((inp&0x000000FF)<<16)|(inp&0xFF00FF00)|((inp&0x00FF0000)>>16);
116 struct A8R8G8B8toB8G8R8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_A8R8G8B8, Ogre::PF_B8G8R8A8)>
118 inline static DstType pixelConvert(SrcType inp)
120 return ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24);
124 struct A8R8G8B8toR8G8B8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_A8R8G8B8, Ogre::PF_R8G8B8A8)>
126 inline static DstType pixelConvert(SrcType inp)
128 return ((inp&0x00FFFFFF)<<8)|((inp&0xFF000000)>>24);
132 struct A8B8G8R8toA8R8G8B8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_A8B8G8R8, Ogre::PF_A8R8G8B8)>
134 inline static DstType pixelConvert(SrcType inp)
136 return ((inp&0x000000FF)<<16)|(inp&0xFF00FF00)|((inp&0x00FF0000)>>16);
140 struct A8B8G8R8toB8G8R8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_A8B8G8R8, Ogre::PF_B8G8R8A8)>
142 inline static DstType pixelConvert(SrcType inp)
144 return ((inp&0x00FFFFFF)<<8)|((inp&0xFF000000)>>24);
148 struct A8B8G8R8toR8G8B8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_A8B8G8R8, Ogre::PF_R8G8B8A8)>
150 inline static DstType pixelConvert(SrcType inp)
152 return ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24);
156 struct B8G8R8A8toA8R8G8B8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_B8G8R8A8, Ogre::PF_A8R8G8B8)>
158 inline static DstType pixelConvert(SrcType inp)
160 return ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24);
164 struct B8G8R8A8toA8B8G8R8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_B8G8R8A8, Ogre::PF_A8B8G8R8)>
166 inline static DstType pixelConvert(SrcType inp)
168 return ((inp&0x000000FF)<<24)|((inp&0xFFFFFF00)>>8);
172 struct B8G8R8A8toR8G8B8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_B8G8R8A8, Ogre::PF_R8G8B8A8)>
174 inline static DstType pixelConvert(SrcType inp)
176 return ((inp&0x0000FF00)<<16)|(inp&0x00FF00FF)|((inp&0xFF000000)>>16);
180 struct R8G8B8A8toA8R8G8B8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_R8G8B8A8, Ogre::PF_A8R8G8B8)>
182 inline static DstType pixelConvert(SrcType inp)
184 return ((inp&0x000000FF)<<24)|((inp&0xFFFFFF00)>>8);
188 struct R8G8B8A8toA8B8G8R8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_R8G8B8A8, Ogre::PF_A8B8G8R8)>
190 inline static DstType pixelConvert(SrcType inp)
192 return ((inp&0x000000FF)<<24)|((inp&0x0000FF00)<<8)|((inp&0x00FF0000)>>8)|((inp&0xFF000000)>>24);
196 struct R8G8B8A8toB8G8R8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_R8G8B8A8, Ogre::PF_B8G8R8A8)>
198 inline static DstType pixelConvert(SrcType inp)
200 return ((inp&0x0000FF00)<<16)|(inp&0x00FF00FF)|((inp&0xFF000000)>>16);
204 struct A8B8G8R8toL8:
public PixelConverter <Ogre::uint32, Ogre::uint8, FMTCONVERTERID(Ogre::PF_A8B8G8R8, Ogre::PF_L8)>
206 inline static DstType pixelConvert(SrcType inp)
212 struct L8toA8B8G8R8:
public PixelConverter <Ogre::uint8, Ogre::uint32, FMTCONVERTERID(Ogre::PF_L8, Ogre::PF_A8B8G8R8)>
214 inline static DstType pixelConvert(SrcType inp)
216 return 0xFF000000|(((
unsigned int)inp)<<0)|(((
unsigned int)inp)<<8)|(((
unsigned int)inp)<<16);
220 struct A8R8G8B8toL8:
public PixelConverter <Ogre::uint32, Ogre::uint8, FMTCONVERTERID(Ogre::PF_A8R8G8B8, Ogre::PF_L8)>
222 inline static DstType pixelConvert(SrcType inp)
228 struct L8toA8R8G8B8:
public PixelConverter <Ogre::uint8, Ogre::uint32, FMTCONVERTERID(Ogre::PF_L8, Ogre::PF_A8R8G8B8)>
230 inline static DstType pixelConvert(SrcType inp)
232 return 0xFF000000|(((
unsigned int)inp)<<0)|(((
unsigned int)inp)<<8)|(((
unsigned int)inp)<<16);
236 struct B8G8R8A8toL8:
public PixelConverter <Ogre::uint32, Ogre::uint8, FMTCONVERTERID(Ogre::PF_B8G8R8A8, Ogre::PF_L8)>
238 inline static DstType pixelConvert(SrcType inp)
244 struct L8toB8G8R8A8:
public PixelConverter <Ogre::uint8, Ogre::uint32, FMTCONVERTERID(Ogre::PF_L8, Ogre::PF_B8G8R8A8)>
246 inline static DstType pixelConvert(SrcType inp)
248 return 0x000000FF|(((
unsigned int)inp)<<8)|(((
unsigned int)inp)<<16)|(((
unsigned int)inp)<<24);
252 struct L8toL16:
public PixelConverter <Ogre::uint8, Ogre::uint16, FMTCONVERTERID(Ogre::PF_L8, Ogre::PF_L16)>
254 inline static DstType pixelConvert(SrcType inp)
256 return (
Ogre::uint16)((((
unsigned int)inp)<<8)|(((
unsigned int)inp)));
260 struct L16toL8:
public PixelConverter <Ogre::uint16, Ogre::uint8, FMTCONVERTERID(Ogre::PF_L16, Ogre::PF_L8)>
262 inline static DstType pixelConvert(SrcType inp)
268 struct R8G8B8toB8G8R8:
public PixelConverter <Col3b, Col3b, FMTCONVERTERID(Ogre::PF_R8G8B8, Ogre::PF_B8G8R8)>
270 inline static DstType pixelConvert(
const SrcType &inp)
272 return Col3b(inp.z, inp.y, inp.x);
276 struct B8G8R8toR8G8B8:
public PixelConverter <Col3b, Col3b, FMTCONVERTERID(Ogre::PF_B8G8R8, Ogre::PF_R8G8B8)>
278 inline static DstType pixelConvert(
const SrcType &inp)
280 return Col3b(inp.z, inp.y, inp.x);
285 template <
int id,
unsigned int xshift,
unsigned int yshift,
unsigned int zshift,
unsigned int ashift>
struct Col3btoUint32swizzler:
286 public PixelConverter <Col3b, Ogre::uint32, id>
288 inline static Ogre::uint32 pixelConvert(
const Col3b &inp)
290 #if OGRE_ENDIAN == OGRE_ENDIAN_BIG
291 return (0xFF<<ashift) | (((
unsigned int)inp.x)<<xshift) | (((
unsigned int)inp.y)<<yshift) | (((
unsigned int)inp.z)<<zshift);
293 return (0xFF<<ashift) | (((
unsigned int)inp.x)<<zshift) | (((
unsigned int)inp.y)<<yshift) | (((
unsigned int)inp.z)<<xshift);
298 struct R8G8B8toA8R8G8B8:
public Col3btoUint32swizzler<FMTCONVERTERID(Ogre::PF_R8G8B8, Ogre::PF_A8R8G8B8), 16, 8, 0, 24> { };
299 struct B8G8R8toA8R8G8B8:
public Col3btoUint32swizzler<FMTCONVERTERID(Ogre::PF_B8G8R8, Ogre::PF_A8R8G8B8), 0, 8, 16, 24> { };
300 struct R8G8B8toA8B8G8R8:
public Col3btoUint32swizzler<FMTCONVERTERID(Ogre::PF_R8G8B8, Ogre::PF_A8B8G8R8), 0, 8, 16, 24> { };
301 struct B8G8R8toA8B8G8R8:
public Col3btoUint32swizzler<FMTCONVERTERID(Ogre::PF_B8G8R8, Ogre::PF_A8B8G8R8), 16, 8, 0, 24> { };
302 struct R8G8B8toB8G8R8A8:
public Col3btoUint32swizzler<FMTCONVERTERID(Ogre::PF_R8G8B8, Ogre::PF_B8G8R8A8), 8, 16, 24, 0> { };
303 struct B8G8R8toB8G8R8A8:
public Col3btoUint32swizzler<FMTCONVERTERID(Ogre::PF_B8G8R8, Ogre::PF_B8G8R8A8), 24, 16, 8, 0> { };
305 struct A8R8G8B8toR8G8B8:
public PixelConverter <Ogre::uint32, Col3b, FMTCONVERTERID(Ogre::PF_A8R8G8B8, Ogre::PF_BYTE_RGB)>
312 struct A8R8G8B8toB8G8R8:
public PixelConverter <Ogre::uint32, Col3b, FMTCONVERTERID(Ogre::PF_A8R8G8B8, Ogre::PF_BYTE_BGR)>
322 struct X8R8G8B8toA8R8G8B8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8R8G8B8, Ogre::PF_A8R8G8B8)>
324 inline static DstType pixelConvert(SrcType inp)
326 return inp | 0xFF000000;
329 struct X8R8G8B8toA8B8G8R8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8R8G8B8, Ogre::PF_A8B8G8R8)>
331 inline static DstType pixelConvert(SrcType inp)
333 return ((inp&0x0000FF)<<16)|((inp&0xFF0000)>>16)|(inp&0x00FF00)|0xFF000000;
336 struct X8R8G8B8toB8G8R8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8R8G8B8, Ogre::PF_B8G8R8A8)>
338 inline static DstType pixelConvert(SrcType inp)
340 return ((inp&0x0000FF)<<24)|((inp&0xFF0000)>>8)|((inp&0x00FF00)<<8)|0x000000FF;
343 struct X8R8G8B8toR8G8B8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8R8G8B8, Ogre::PF_R8G8B8A8)>
345 inline static DstType pixelConvert(SrcType inp)
347 return ((inp&0xFFFFFF)<<8)|0x000000FF;
352 struct X8B8G8R8toA8R8G8B8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8B8G8R8, Ogre::PF_A8R8G8B8)>
354 inline static DstType pixelConvert(SrcType inp)
356 return ((inp&0x0000FF)<<16)|((inp&0xFF0000)>>16)|(inp&0x00FF00)|0xFF000000;
359 struct X8B8G8R8toA8B8G8R8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8B8G8R8, Ogre::PF_A8B8G8R8)>
361 inline static DstType pixelConvert(SrcType inp)
363 return inp | 0xFF000000;
366 struct X8B8G8R8toB8G8R8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8B8G8R8, Ogre::PF_B8G8R8A8)>
368 inline static DstType pixelConvert(SrcType inp)
370 return ((inp&0xFFFFFF)<<8)|0x000000FF;
373 struct X8B8G8R8toR8G8B8A8:
public PixelConverter <Ogre::uint32, Ogre::uint32, FMTCONVERTERID(Ogre::PF_X8B8G8R8, Ogre::PF_R8G8B8A8)>
375 inline static DstType pixelConvert(SrcType inp)
377 return ((inp&0x0000FF)<<24)|((inp&0xFF0000)>>8)|((inp&0x00FF00)<<8)|0x000000FF;
382 #define CASECONVERTER(type) case type::ID : PixelBoxConverter<type>::conversion(src, dst); return 1;
389 CASECONVERTER(A8R8G8B8toA8B8G8R8);
390 CASECONVERTER(A8R8G8B8toB8G8R8A8);
391 CASECONVERTER(A8R8G8B8toR8G8B8A8);
392 CASECONVERTER(A8B8G8R8toA8R8G8B8);
393 CASECONVERTER(A8B8G8R8toB8G8R8A8);
394 CASECONVERTER(A8B8G8R8toR8G8B8A8);
395 CASECONVERTER(B8G8R8A8toA8R8G8B8);
396 CASECONVERTER(B8G8R8A8toA8B8G8R8);
397 CASECONVERTER(B8G8R8A8toR8G8B8A8);
398 CASECONVERTER(R8G8B8A8toA8R8G8B8);
399 CASECONVERTER(R8G8B8A8toA8B8G8R8);
400 CASECONVERTER(R8G8B8A8toB8G8R8A8);
401 CASECONVERTER(A8B8G8R8toL8);
402 CASECONVERTER(L8toA8B8G8R8);
403 CASECONVERTER(A8R8G8B8toL8);
404 CASECONVERTER(L8toA8R8G8B8);
405 CASECONVERTER(B8G8R8A8toL8);
406 CASECONVERTER(L8toB8G8R8A8);
407 CASECONVERTER(L8toL16);
408 CASECONVERTER(L16toL8);
409 CASECONVERTER(B8G8R8toR8G8B8);
410 CASECONVERTER(R8G8B8toB8G8R8);
411 CASECONVERTER(R8G8B8toA8R8G8B8);
412 CASECONVERTER(B8G8R8toA8R8G8B8);
413 CASECONVERTER(R8G8B8toA8B8G8R8);
414 CASECONVERTER(B8G8R8toA8B8G8R8);
415 CASECONVERTER(R8G8B8toB8G8R8A8);
416 CASECONVERTER(B8G8R8toB8G8R8A8);
417 CASECONVERTER(A8R8G8B8toR8G8B8);
418 CASECONVERTER(A8R8G8B8toB8G8R8);
419 CASECONVERTER(X8R8G8B8toA8R8G8B8);
420 CASECONVERTER(X8R8G8B8toA8B8G8R8);
421 CASECONVERTER(X8R8G8B8toB8G8R8A8);
422 CASECONVERTER(X8R8G8B8toR8G8B8A8);
423 CASECONVERTER(X8B8G8R8toA8R8G8B8);
424 CASECONVERTER(X8B8G8R8toA8B8G8R8);
425 CASECONVERTER(X8B8G8R8toB8G8R8A8);
426 CASECONVERTER(X8B8G8R8toR8G8B8A8);
436 #endif // VC6 protection
size_t rowPitch
Number of elements between the leftmost pixel of one row and the left pixel of the next...
size_t getSliceSkip() const
Get the number of elements between one past the right bottom pixel of one slice and the left top pixe...
void * data
The data pointer.
PixelFormat format
The pixel format.
size_t slicePitch
Number of elements between the top left pixel of one (depth) slice and the top left pixel of the next...
A primitive describing a volume (3D), image (2D) or line (1D) of pixels in memory.