mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 16:44:36 +00:00
Image format code tweaks.
This commit is contained in:
parent
b4a1d18f42
commit
0c3fc59ccc
4 changed files with 83 additions and 4 deletions
|
|
@ -174,9 +174,57 @@ void bitmapExtrudeRGBA_c(const void *srcMip, void *mip, U32 srcHeight, U32 srcWi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bitmapExtrudeFPRGBA_c(const void *srcMip, void *mip, U32 srcHeight, U32 srcWidth)
|
||||||
|
{
|
||||||
|
const U16 *src = (const U16 *)srcMip;
|
||||||
|
U16 *dst = (U16 *)mip;
|
||||||
|
U32 stride = srcHeight != 1 ? (srcWidth) * 8 : 0;
|
||||||
|
|
||||||
|
U32 width = srcWidth >> 1;
|
||||||
|
U32 height = srcHeight >> 1;
|
||||||
|
if (width == 0) width = 1;
|
||||||
|
if (height == 0) height = 1;
|
||||||
|
|
||||||
|
if (srcWidth != 1)
|
||||||
|
{
|
||||||
|
for (U32 y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
for (U32 x = 0; x < width; x++)
|
||||||
|
{
|
||||||
|
*dst++ = (U32(*src) + U32(src[4]) + U32(src[stride]) + U32(src[stride + 4]) + 2) >> 2;
|
||||||
|
src++;
|
||||||
|
*dst++ = (U32(*src) + U32(src[4]) + U32(src[stride]) + U32(src[stride + 4]) + 2) >> 2;
|
||||||
|
src++;
|
||||||
|
*dst++ = (U32(*src) + U32(src[4]) + U32(src[stride]) + U32(src[stride + 4]) + 2) >> 2;
|
||||||
|
src++;
|
||||||
|
*dst++ = (U32(*src) + U32(src[4]) + U32(src[stride]) + U32(src[stride + 4]) + 2) >> 2;
|
||||||
|
src += 5;
|
||||||
|
}
|
||||||
|
src += stride; // skip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (U32 y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
*dst++ = (U32(*src) + U32(src[stride]) + 1) >> 1;
|
||||||
|
src++;
|
||||||
|
*dst++ = (U32(*src) + U32(src[stride]) + 1) >> 1;
|
||||||
|
src++;
|
||||||
|
*dst++ = (U32(*src) + U32(src[stride]) + 1) >> 1;
|
||||||
|
src++;
|
||||||
|
*dst++ = (U32(*src) + U32(src[stride]) + 1) >> 1;
|
||||||
|
src += 5;
|
||||||
|
|
||||||
|
src += stride; // skip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void (*bitmapExtrude5551)(const void *srcMip, void *mip, U32 height, U32 width) = bitmapExtrude5551_c;
|
void (*bitmapExtrude5551)(const void *srcMip, void *mip, U32 height, U32 width) = bitmapExtrude5551_c;
|
||||||
void (*bitmapExtrudeRGB)(const void *srcMip, void *mip, U32 srcHeight, U32 srcWidth) = bitmapExtrudeRGB_c;
|
void (*bitmapExtrudeRGB)(const void *srcMip, void *mip, U32 srcHeight, U32 srcWidth) = bitmapExtrudeRGB_c;
|
||||||
void (*bitmapExtrudeRGBA)(const void *srcMip, void *mip, U32 srcHeight, U32 srcWidth) = bitmapExtrudeRGBA_c;
|
void (*bitmapExtrudeRGBA)(const void *srcMip, void *mip, U32 srcHeight, U32 srcWidth) = bitmapExtrudeRGBA_c;
|
||||||
|
void (*bitmapExtrudeFPRGBA)(const void *srcMip, void *mip, U32 srcHeight, U32 srcWidth) = bitmapExtrudeFPRGBA_c;
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
extern void (*bitmapExtrude5551)(const void *srcMip, void *mip, U32 height, U32 width);
|
extern void (*bitmapExtrude5551)(const void *srcMip, void *mip, U32 height, U32 width);
|
||||||
extern void (*bitmapExtrudeRGB)(const void *srcMip, void *mip, U32 height, U32 width);
|
extern void (*bitmapExtrudeRGB)(const void *srcMip, void *mip, U32 height, U32 width);
|
||||||
extern void (*bitmapExtrudeRGBA)(const void *srcMip, void *mip, U32 height, U32 width);
|
extern void (*bitmapExtrudeRGBA)(const void *srcMip, void *mip, U32 height, U32 width);
|
||||||
|
extern void(*bitmapExtrudeFPRGBA)(const void *srcMip, void *mip, U32 height, U32 width);
|
||||||
extern void (*bitmapConvertRGB_to_5551)(U8 *src, U32 pixels);
|
extern void (*bitmapConvertRGB_to_5551)(U8 *src, U32 pixels);
|
||||||
extern void (*bitmapConvertRGB_to_1555)(U8 *src, U32 pixels);
|
extern void (*bitmapConvertRGB_to_1555)(U8 *src, U32 pixels);
|
||||||
extern void (*bitmapConvertRGB_to_RGBX)( U8 **src, U32 pixels );
|
extern void (*bitmapConvertRGB_to_RGBX)( U8 **src, U32 pixels );
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,34 @@ bool DDSFile::readHeader(Stream &s)
|
||||||
mFlags.set(CompressedData);
|
mFlags.set(CompressedData);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mBytesPerPixel = header.ddspf.bpp / 8;
|
switch (header.ddspf.fourCC)
|
||||||
|
{
|
||||||
|
case 36: // D3DFMT_A16B16G16R16
|
||||||
|
mBytesPerPixel = 8;
|
||||||
|
break;
|
||||||
|
case 110: // D3DFMT_Q16W16V16U16
|
||||||
|
mBytesPerPixel = 8;
|
||||||
|
break;
|
||||||
|
case 111: // D3DFMT_R16F
|
||||||
|
mBytesPerPixel = 2;
|
||||||
|
break;
|
||||||
|
case 112: // D3DFMT_G16R16F
|
||||||
|
mBytesPerPixel = 4;
|
||||||
|
break;
|
||||||
|
case 113: // D3DFMT_A16B16G16R16F
|
||||||
|
mBytesPerPixel = 8;
|
||||||
|
break;
|
||||||
|
case 114: // D3DFMT_R32F
|
||||||
|
mBytesPerPixel = 4;
|
||||||
|
break;
|
||||||
|
case 115: // D3DFMT_G32R32F
|
||||||
|
mBytesPerPixel = 8;
|
||||||
|
break;
|
||||||
|
case 116: // D3DFMT_A32B32G32R32F
|
||||||
|
mBytesPerPixel = 16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
mFlags.set(RGBData);
|
mFlags.set(RGBData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -301,9 +301,12 @@ void GBitmap::allocateBitmap(const U32 in_width, const U32 in_height, const bool
|
||||||
case GFXFormatR5G6B5:
|
case GFXFormatR5G6B5:
|
||||||
case GFXFormatR5G5B5A1: mBytesPerPixel = 2;
|
case GFXFormatR5G5B5A1: mBytesPerPixel = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
case GFXFormatR16G16B16A16F:
|
||||||
AssertFatal(false, "GBitmap::GBitmap: misunderstood format specifier");
|
case GFXFormatR16G16B16A16: mBytesPerPixel = 8;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(false, "GBitmap::GBitmap: misunderstood format specifier");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up the mip levels, if necessary...
|
// Set up the mip levels, if necessary...
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue