www.pudn.com > bookcode.rar > d3dfmtutils.cpp


//d3dfmtutils.cpp
//Ernest Pazera
//05OCT2001
//TGO-01-F
//Libs: d3d8.lib

//include the header
#include "d3dfmtutils.h"

//get string name for format
void GetFormatName ( D3DFORMAT Format , char* FormatName )
{
//set default response
strcpy ( FormatName , "Unknown" ) ;
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
strcpy ( FormatName , "R8G8B8" ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
strcpy ( FormatName , "A8R8G8B8" ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
strcpy ( FormatName , "X8R8G8B8" ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
strcpy ( FormatName , "R5G6B5" ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
strcpy ( FormatName , "X1R5G5B5" ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
strcpy ( FormatName , "A1R5G5B5" ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
strcpy ( FormatName , "A4R4G4B4" ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
strcpy ( FormatName , "R3G3B2" ) ;
} break ;
case D3DFMT_A8 ://8bpp, 8 for a
{
strcpy ( FormatName , "A8" ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
strcpy ( FormatName , "A8R3G3B2" ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
strcpy ( FormatName , "X4R4G4B4" ) ;
} break ;
}
}

//get bits for components
UINT GetFormatRBits ( D3DFORMAT Format ) //red
{
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
return ( 8 ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
return ( 5 ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
return ( 5 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 5 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 4 ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
return ( 3 ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 3 ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
return ( 4 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatGBits ( D3DFORMAT Format ) //green
{
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
return ( 8 ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
return ( 6 ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
return ( 5 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 5 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 4 ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
return ( 3 ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 3 ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
return ( 4 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatBBits ( D3DFORMAT Format ) //blue
{
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
return ( 8 ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
return ( 5 ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
return ( 5 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 5 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 4 ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
return ( 2 ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 2 ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
return ( 4 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatABits ( D3DFORMAT Format ) //alpha
{
//which format do we have?
switch ( Format )
{
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 8 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 1 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 4 ) ;
} break ;
case D3DFMT_A8 ://8bpp, 8 for a
{
return ( 8 ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 8 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatDBits ( D3DFORMAT Format ) //depth
{
//which format do we have?
switch ( Format )
{
case D3DFMT_D16_LOCKABLE :
{
return ( 16 ) ;
} break ;
case D3DFMT_D32 :
{
return ( 32 ) ;
} break ;
case D3DFMT_D15S1 :
{
return ( 15 ) ;
} break ;
case D3DFMT_D24S8 :
{
return ( 24 ) ;
} break ;
case D3DFMT_D16 :
{
return ( 16 ) ;
} break ;
case D3DFMT_D24X8 :
{
return ( 24 ) ;
} break ;
case D3DFMT_D24X4S4 :
{
return ( 24 ) ;
} break ;
}
//not found, return 0
return ( 0 ) ;
}

UINT GetFormatSBits ( D3DFORMAT Format ) //stencil
{
//which format do we have?
switch ( Format )
{
case D3DFMT_D15S1 :
{
return ( 1 ) ;
} break ;
case D3DFMT_D24S8 :
{
return ( 8 ) ;
} break ;
case D3DFMT_D24X4S4 :
{
return ( 4 ) ;
} break ;
}
//not found, return 0
return ( 0 ) ;
}

//get bit masks for components
UINT GetFormatRMask ( D3DFORMAT Format ) //red
{
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
return ( 0x00FF0000 ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 0x00FF0000 ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
return ( 0x00FF0000 ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
return ( 0xF800 ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
return ( 0x7C00 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 0x7C00 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 0x0F00 ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
return ( 0xE0 ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 0x00E0 ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
return ( 0x0F00 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatGMask ( D3DFORMAT Format ) //green
{
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
return ( 0x0000FF00 ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 0x0000FF00 ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
return ( 0x0000FF00 ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
return ( 0x07E0 ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
return ( 0x03E0 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 0x03E0 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 0x00F0 ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
return ( 0x1C ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 0x001C ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
return ( 0x00F0 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatBMask ( D3DFORMAT Format ) //blue
{
//which format do we have?
switch ( Format )
{
case D3DFMT_R8G8B8 ://24 bpp, 8 for r,g,b
{
return ( 0x000000FF ) ;
} break ;
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 0x000000FF ) ;
} break ;
case D3DFMT_X8R8G8B8 ://32 bpp, 8 for r, g, b
{
return ( 0x000000FF ) ;
} break ;
case D3DFMT_R5G6B5 ://16bpp, 5 for r,b, 6 for g
{
return ( 0x001F ) ;
} break ;
case D3DFMT_X1R5G5B5 ://16 bpp, 5 for r,g,b
{
return ( 0x001F ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 0x001F ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 0x000F ) ;
} break ;
case D3DFMT_R3G3B2 ://8bpp, 3 for r,g, 2 for b
{
return ( 0x03 ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 0x03 ) ;
} break ;
case D3DFMT_X4R4G4B4 ://16bpp, 4 for r,g,b
{
return ( 0x000f ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatAMask ( D3DFORMAT Format ) //alpha
{
//which format do we have?
switch ( Format )
{
case D3DFMT_A8R8G8B8 ://32 bpp, 8 for a,r,g,b
{
return ( 0xFF000000 ) ;
} break ;
case D3DFMT_A1R5G5B5 ://16 bpp, 5 for r,g,b, 1 for a
{
return ( 0x8000 ) ;
} break ;
case D3DFMT_A4R4G4B4 ://16 bpp, 4 for a,r,g,b
{
return ( 0xF000 ) ;
} break ;
case D3DFMT_A8 ://8bpp, 8 for a
{
return ( 0xFF ) ;
} break ;
case D3DFMT_A8R3G3B2 ://16bpp, 8 for a, 3 for r,g, 2 for b
{
return ( 0xFF00 ) ;
} break ;
}
//not one of the above, return 0
return ( 0 ) ;
}

UINT GetFormatDMask ( D3DFORMAT Format ) //depth
{
//which format do we have?
switch ( Format )
{
case D3DFMT_D16_LOCKABLE :
{
return ( 0xFFFF ) ;
} break ;
case D3DFMT_D32 :
{
return ( 0xFFFFFFFF ) ;
} break ;
case D3DFMT_D15S1 :
{
return ( 0xFFFE ) ;
} break ;
case D3DFMT_D24S8 :
{
return ( 0xFFFFFF00 ) ;
} break ;
case D3DFMT_D16 :
{
return ( 0xFFFF ) ;
} break ;
case D3DFMT_D24X8 :
{
return ( 0xFFFFFF00 ) ;
} break ;
case D3DFMT_D24X4S4 :
{
return ( 0xFFFFFF00 ) ;
} break ;
}
//not found, return 0
return ( 0 ) ;
}

UINT GetFormatSMask ( D3DFORMAT Format ) //stencil
{
//which format do we have?
switch ( Format )
{
case D3DFMT_D15S1 :
{
return ( 0x0001 ) ;
} break ;
case D3DFMT_D24S8 :
{
return ( 0x000000FF ) ;
} break ;
case D3DFMT_D24X4S4 :
{
return ( 0x0000000F ) ;
} break ;
}
//not found, return 0
return ( 0 ) ;
}