Skip to content

Commit

Permalink
Removed: DDS texture loader
Browse files Browse the repository at this point in the history
  • Loading branch information
dmsovetov committed Jan 18, 2017
1 parent 7b0be00 commit 9c371e8
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 234 deletions.
Binary file removed Build/Examples/Assets/Textures/coast2.dds
Binary file not shown.
7 changes: 0 additions & 7 deletions Source/Examples/5_Rendering/Examples.h
Original file line number Diff line number Diff line change
Expand Up @@ -304,13 +304,6 @@ namespace Examples
return renderItem;
}

// Creates an environment map from a texture
Texture_ createEnvTexture(RenderingContextWPtr renderingContext, const String& fileName)
{
CubeMap cubeMap = cubeFromDds(fileName);
return renderingContext->requestTextureCube(&cubeMap.pixels[0], cubeMap.size, cubeMap.mipLevels, cubeMap.format);
}

// Creates an environment map from a set of cube map faces.
Texture_ createEnvFromFiles(RenderingContextWPtr renderingContext, const String& path)
{
Expand Down
227 changes: 0 additions & 227 deletions Source/Examples/5_Rendering/TextureLoader.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@
#ifndef __Examples_TextureLoader_H__
#define __Examples_TextureLoader_H__

#ifndef MAKEFOURCC
#define MAKEFOURCC(a, b, c, d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
#endif

namespace Examples
{
DC_USE_DREEMCHEST
Expand Down Expand Up @@ -174,229 +170,6 @@ namespace Examples
return image;
}

//! Loads a cube map from a DDS file.
CubeMap cubeFromDds(const String& fileName)
{
enum
{
// Bit flags for header
DDS_CAPS = 0x00000001,
DDS_HEIGHT = 0x00000002,
DDS_WIDTH = 0x00000004,
DDS_PITCH = 0x00000008,
DDS_PIXELFORMAT = 0x00001000,
DDS_MIPMAPCOUNT = 0x00020000,
DDS_LINEARSIZE = 0x00080000,
DDS_DEPTH = 0x00800000,

// Flags for pixel formats
DDS_ALPHA_PIXELS = 0x00000001,
DDS_ALPHA = 0x00000002,
DDS_FOURCC = 0x00000004,
DDS_RGB = 0x00000040,
DDS_RGBA = 0x00000041,

// Flags for complex caps
DDS_COMPLEX = 0x00000008,
DDS_TEXTURE = 0x00001000,
DDS_MIPMAP = 0x00400000,

// Flags for cubemaps
DDS_CUBEMAP = 0x00000200,
DDS_CUBEMAP_POSITIVEX = 0x00000400,
DDS_CUBEMAP_NEGATIVEX = 0x00000800,
DDS_CUBEMAP_POSITIVEY = 0x00001000,
DDS_CUBEMAP_NEGATIVEY = 0x00002000,
DDS_CUBEMAP_POSITIVEZ = 0x00004000,
DDS_CUBEMAP_NEGATIVEZ = 0x00008000,
DDS_VOLUME = 0x00200000
};

struct DdsPixelFormat
{
s32 dwSize;
s32 dwFlags;
s32 dwFourCC;
s32 dwRGBBitCount;
s32 dwRBitMask;
s32 dwGBitMask;
s32 dwBBitMask;
s32 dwABitMask;
};

struct DdsHeader
{
s32 dwSize;
s32 dwFlags;
s32 dwHeight;
s32 dwWidth;
s32 dwPitchOrLinearSize;
s32 dwDepth;
s32 dwMipMapCount;
s32 dwReserved1[11];
DdsPixelFormat ddspf;
s32 dwCaps;
s32 dwCaps2;
s32 dwCaps3;
s32 dwCaps4;
s32 dwReserved2;
};

DdsHeader ddsd;
char header[4];
u32 mipFactor;
int sides[6] = {
DDS_CUBEMAP_POSITIVEX, DDS_CUBEMAP_NEGATIVEX,
DDS_CUBEMAP_POSITIVEY, DDS_CUBEMAP_NEGATIVEY,
DDS_CUBEMAP_POSITIVEZ, DDS_CUBEMAP_NEGATIVEZ
};

FILE* file = fopen(Platform::Application::sharedInstance()->pathForResource(fileName).c_str(), "rb");
if (!file)
{
return CubeMap();
}

fread(header, 1, 4, file);

if (strncmp(header, "DDS ", 4))
{
return CubeMap();
}

fread(&ddsd, 1, sizeof(ddsd), file);

// CheckCaps( ddsd );

//int numBlocks = ((ddsd.dwWidth + 3)/4) * ((ddsd.dwHeight + 3)/4); // number of 4*4 texel blocks
int blockSize = 0;

CubeMap cubeMap;
s32 channels = 0;

if ((ddsd.dwFlags & DDS_FOURCC) && ddsd.ddspf.dwFourCC)
{
switch (ddsd.ddspf.dwFourCC)
{
case MAKEFOURCC('D', 'X', 'T', '1'):
cubeMap.format = PixelDxtc1;
mipFactor = 2;
blockSize = 8;
break;

case MAKEFOURCC('D', 'X', 'T', '3'):
cubeMap.format = PixelDxtc3;
mipFactor = 4;
blockSize = 16;
break;

case MAKEFOURCC('D', 'X', 'T', '5'):
cubeMap.format = PixelDxtc5;
mipFactor = 4;
blockSize = 16;
break;

//case MAKEFOURCC('A', 'T', 'I', '1'):
// format = F_ATI1N;
// break;
//case MAKEFOURCC('A', 'T', 'I', '2'):
// format = F_ATI2N;
// break;

/*case 34: format = PixelRG16F;
channels = 2;
blockSize = 4;
break;
case 36: format = PixelRgba16F;
channels = 4;
blockSize = 8;
break;
case 111: format = PixelR16F;
channels = 1;
blockSize = 8;
break;
case 112: format = F_RG16F;
channels = 2;
blockSize = 2;
break;
case 113: format = F_RGBA16F;
channels = 4;
blockSize = 8;
break;
case 114: format = F_R32F;
channels = 1;
blockSize = 4;
break;
case 115: format = F_RG32F;
channels = 2;
blockSize = 8;
break;
case 116: format = F_RGBA32F;
channels = 4;
blockSize = 16;
break;
default: cException::Error( "cDDSTextureCubeLoader::LoadTextureCube : unhandled FOURCC" );
break;*/
default:
NIMBLE_NOT_IMPLEMENTED
}
}
else
{
// compression = TC_NONE;

if (ddsd.dwFlags & DDS_RGBA && ddsd.ddspf.dwRGBBitCount == 32)
{
channels = 4;
blockSize = 4;
cubeMap.format = PixelRgba8;
}
/*else if (ddsd.dwFlags & DDS_RGB && ddsd.ddspf.dwRGBBitCount == 32)
{
channels = 4;
blockSize = 4;
format = F_X8R8G8B8;
}*/
else if(ddsd.dwFlags & DDS_RGB && ddsd.ddspf.dwRGBBitCount == 24)
{
channels = 3;
blockSize = 3;
cubeMap.format = PixelRgb8;
}
else
{
NIMBLE_NOT_IMPLEMENTED;
}
}

NIMBLE_ABORT_IF(ddsd.dwWidth != ddsd.dwHeight, "width and height should be equal for cubemaps");
// _ASSERTE( ddsd.dwLinearSize != 0 );
//_ASSERTE( ddsd.dwWidth == ddsd.dwHeight );

if (channels == 0)
{
channels = ( ddsd.ddspf.dwFlags & DDS_ALPHA_PIXELS ) ? 4 : 3;
}

cubeMap.size = ddsd.dwWidth;
cubeMap.mipLevels = max2(1, ddsd.dwMipMapCount);

u32 imageSize = bytesPerMipChain(cubeMap.format, cubeMap.size, cubeMap.size, cubeMap.mipLevels);
cubeMap.pixels.resize(imageSize * 6);

for (s32 i = 0; i < 6; i++ )
{
if ((ddsd.dwCaps2 & sides[i]) == 0)
{
continue;
}

fread(&cubeMap.pixels[i * imageSize], 1, imageSize, file);
}

return cubeMap;
}

} // namespace Examples

#endif // __Examples_TextureLoader_H__

0 comments on commit 9c371e8

Please sign in to comment.