seamless cubemap filtering.

This commit is contained in:
castano
2011-10-11 06:40:40 +00:00
parent 2ec37026be
commit d11d7a5f38
12 changed files with 981 additions and 385 deletions

View File

@ -36,32 +36,9 @@
using namespace nv;
const uint nv::FOURCC_NVTT = MAKEFOURCC('N', 'V', 'T', 'T');
const uint nv::FOURCC_DDS = MAKEFOURCC('D', 'D', 'S', ' ');
const uint nv::FOURCC_DXT1 = MAKEFOURCC('D', 'X', 'T', '1');
const uint nv::FOURCC_DXT2 = MAKEFOURCC('D', 'X', 'T', '2');
const uint nv::FOURCC_DXT3 = MAKEFOURCC('D', 'X', 'T', '3');
const uint nv::FOURCC_DXT4 = MAKEFOURCC('D', 'X', 'T', '4');
const uint nv::FOURCC_DXT5 = MAKEFOURCC('D', 'X', 'T', '5');
const uint nv::FOURCC_RXGB = MAKEFOURCC('R', 'X', 'G', 'B');
const uint nv::FOURCC_ATI1 = MAKEFOURCC('A', 'T', 'I', '1');
const uint nv::FOURCC_ATI2 = MAKEFOURCC('A', 'T', 'I', '2');
namespace
{
static const uint FOURCC_A2XY = MAKEFOURCC('A', '2', 'X', 'Y');
static const uint FOURCC_DX10 = MAKEFOURCC('D', 'X', '1', '0');
static const uint FOURCC_UVER = MAKEFOURCC('U', 'V', 'E', 'R');
static const uint DDSD_CAPS = 0x00000001U;
static const uint DDSD_PIXELFORMAT = 0x00001000U;
static const uint DDSD_WIDTH = 0x00000004U;
@ -210,16 +187,16 @@ namespace
#undef CASE
}
const char * getD3d10ResourceDimensionString(D3D10_RESOURCE_DIMENSION resourceDimension)
const char * getD3d10ResourceDimensionString(DDS_DIMENSION resourceDimension)
{
switch(resourceDimension)
{
default:
case D3D10_RESOURCE_DIMENSION_UNKNOWN: return "UNKNOWN";
case D3D10_RESOURCE_DIMENSION_BUFFER: return "BUFFER";
case D3D10_RESOURCE_DIMENSION_TEXTURE1D: return "TEXTURE1D";
case D3D10_RESOURCE_DIMENSION_TEXTURE2D: return "TEXTURE2D";
case D3D10_RESOURCE_DIMENSION_TEXTURE3D: return "TEXTURE3D";
case DDS_DIMENSION_UNKNOWN: return "UNKNOWN";
case DDS_DIMENSION_BUFFER: return "BUFFER";
case DDS_DIMENSION_TEXTURE1D: return "TEXTURE1D";
case DDS_DIMENSION_TEXTURE2D: return "TEXTURE2D";
case DDS_DIMENSION_TEXTURE3D: return "TEXTURE3D";
}
}
@ -531,7 +508,7 @@ DDSHeader::DDSHeader()
this->notused = 0;
this->header10.dxgiFormat = DXGI_FORMAT_UNKNOWN;
this->header10.resourceDimension = D3D10_RESOURCE_DIMENSION_UNKNOWN;
this->header10.resourceDimension = DDS_DIMENSION_UNKNOWN;
this->header10.miscFlag = 0;
this->header10.arraySize = 0;
this->header10.reserved = 0;
@ -580,7 +557,8 @@ void DDSHeader::setMipmapCount(uint count)
void DDSHeader::setTexture2D()
{
this->header10.resourceDimension = D3D10_RESOURCE_DIMENSION_TEXTURE2D;
this->header10.resourceDimension = DDS_DIMENSION_TEXTURE2D;
this->header10.miscFlag = 0;
this->header10.arraySize = 1;
}
@ -588,7 +566,8 @@ void DDSHeader::setTexture3D()
{
this->caps.caps2 = DDSCAPS2_VOLUME;
this->header10.resourceDimension = D3D10_RESOURCE_DIMENSION_TEXTURE3D;
this->header10.resourceDimension = DDS_DIMENSION_TEXTURE3D;
this->header10.miscFlag = 0;
this->header10.arraySize = 1;
}
@ -597,8 +576,9 @@ void DDSHeader::setTextureCube()
this->caps.caps1 |= DDSCAPS_COMPLEX;
this->caps.caps2 = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_ALL_FACES;
this->header10.resourceDimension = D3D10_RESOURCE_DIMENSION_TEXTURE2D;
this->header10.arraySize = 6;
this->header10.resourceDimension = DDS_DIMENSION_TEXTURE2D;
this->header10.miscFlag = DDS_MISC_TEXTURECUBE;
this->header10.arraySize = 1;
}
void DDSHeader::setLinearSize(uint size)
@ -1084,7 +1064,7 @@ bool DirectDrawSurface::isTexture1D() const
nvDebugCheck(isValid());
if (header.hasDX10Header())
{
return header.header10.resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE1D;
return header.header10.resourceDimension == DDS_DIMENSION_TEXTURE1D;
}
return false;
}
@ -1094,7 +1074,7 @@ bool DirectDrawSurface::isTexture2D() const
nvDebugCheck(isValid());
if (header.hasDX10Header())
{
return header.header10.resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE2D;
return header.header10.resourceDimension == DDS_DIMENSION_TEXTURE2D;
}
else
{
@ -1107,7 +1087,7 @@ bool DirectDrawSurface::isTexture3D() const
nvDebugCheck(isValid());
if (header.hasDX10Header())
{
return header.header10.resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE3D;
return header.header10.resourceDimension == DDS_DIMENSION_TEXTURE3D;
}
else
{
@ -1597,7 +1577,7 @@ void DirectDrawSurface::printInfo() const
{
printf("DX10 Header:\n");
printf("\tDXGI Format: %u (%s)\n", header.header10.dxgiFormat, getDxgiFormatString((DXGI_FORMAT)header.header10.dxgiFormat));
printf("\tResource dimension: %u (%s)\n", header.header10.resourceDimension, getD3d10ResourceDimensionString((D3D10_RESOURCE_DIMENSION)header.header10.resourceDimension));
printf("\tResource dimension: %u (%s)\n", header.header10.resourceDimension, getD3d10ResourceDimensionString((DDS_DIMENSION)header.header10.resourceDimension));
printf("\tMisc flag: %u\n", header.header10.miscFlag);
printf("\tArray size: %u\n", header.header10.arraySize);
}

View File

@ -39,17 +39,6 @@ namespace nv
class Stream;
struct ColorBlock;
extern const uint FOURCC_NVTT;
extern const uint FOURCC_DDS;
extern const uint FOURCC_DXT1;
extern const uint FOURCC_DXT2;
extern const uint FOURCC_DXT3;
extern const uint FOURCC_DXT4;
extern const uint FOURCC_DXT5;
extern const uint FOURCC_RXGB;
extern const uint FOURCC_ATI1;
extern const uint FOURCC_ATI2;
enum DDPF
{
DDPF_ALPHAPIXELS = 0x00000001U,
@ -110,15 +99,37 @@ namespace nv
D3DFMT_A32B32G32R32F = 116,
};
enum FOURCC
{
FOURCC_NVTT = MAKEFOURCC('N', 'V', 'T', 'T'),
FOURCC_DDS = MAKEFOURCC('D', 'D', 'S', ' '),
FOURCC_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
FOURCC_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
FOURCC_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
FOURCC_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
FOURCC_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
FOURCC_RXGB = MAKEFOURCC('R', 'X', 'G', 'B'),
FOURCC_ATI1 = MAKEFOURCC('A', 'T', 'I', '1'),
FOURCC_ATI2 = MAKEFOURCC('A', 'T', 'I', '2'),
FOURCC_A2XY = MAKEFOURCC('A', '2', 'X', 'Y'),
FOURCC_DX10 = MAKEFOURCC('D', 'X', '1', '0'),
FOURCC_UVER = MAKEFOURCC('U', 'V', 'E', 'R'),
};
// D3D1x resource dimensions.
enum D3D10_RESOURCE_DIMENSION
enum DDS_DIMENSION // D3D10_RESOURCE_DIMENSION
{
D3D10_RESOURCE_DIMENSION_UNKNOWN = 0,
D3D10_RESOURCE_DIMENSION_BUFFER = 1,
D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2,
D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3,
D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4,
DDS_DIMENSION_UNKNOWN = 0,
DDS_DIMENSION_BUFFER = 1,
DDS_DIMENSION_TEXTURE1D = 2,
DDS_DIMENSION_TEXTURE2D = 3,
DDS_DIMENSION_TEXTURE3D = 4,
};
enum DDS_MISC_FLAG
{
DDS_MISC_TEXTURECUBE = 0x4,
};
// DXGI formats.