| /****************************************************************************** | |
| @File PVRTTexture.cpp | |
| @Title PVRTTexture | |
| @Version | |
| @Copyright Copyright (c) Imagination Technologies Limited. | |
| @Platform ANSI compatible | |
| @Description Texture loading. | |
| ******************************************************************************/ | |
| #include <string.h> | |
| #include <stdlib.h> | |
| #include "PVRTTexture.h" | |
| #include "PVRTMap.h" | |
| /***************************************************************************** | |
| ** Functions | |
| *****************************************************************************/ | |
| /*!*************************************************************************** | |
| @Function ReadFromPtr | |
| @Input pDataCursor The data to read | |
| @Description Reads from a pointer of memory in to the meta data block. | |
| *****************************************************************************/ | |
| bool MetaDataBlock::ReadFromPtr(const unsigned char** pDataCursor) | |
| { | |
| memcpy(&DevFOURCC, *pDataCursor, sizeof(PVRTuint32)); *pDataCursor += sizeof(PVRTuint32); | |
| memcpy(&u32Key, *pDataCursor, sizeof(PVRTuint32)); *pDataCursor += sizeof(PVRTuint32); | |
| memcpy(&u32DataSize, *pDataCursor, sizeof(PVRTuint32)); *pDataCursor += sizeof(PVRTuint32); | |
| if(u32DataSize > 0) | |
| { | |
| Data = new PVRTuint8[u32DataSize]; | |
| memcpy(Data, *pDataCursor, u32DataSize); | |
| *pDataCursor += u32DataSize; | |
| } | |
| return true; | |
| } | |
| /*!*************************************************************************** | |
| @Function PVRTTextureLoadTiled | |
| @Modified pDst Texture to place the tiled data | |
| @Input nWidthDst Width of destination texture | |
| @Input nHeightDst Height of destination texture | |
| @Input pSrc Texture to tile | |
| @Input nWidthSrc Width of source texture | |
| @Input nHeightSrc Height of source texture | |
| @Input nElementSize Bytes per pixel | |
| @Input bTwiddled True if the data is twiddled | |
| @Description Needed by PVRTTextureTile() in the various PVRTTextureAPIs | |
| *****************************************************************************/ | |
| void PVRTTextureLoadTiled( | |
| PVRTuint8 * const pDst, | |
| const unsigned int nWidthDst, | |
| const unsigned int nHeightDst, | |
| const PVRTuint8 * const pSrc, | |
| const unsigned int nWidthSrc, | |
| const unsigned int nHeightSrc, | |
| const unsigned int nElementSize, | |
| const bool bTwiddled) | |
| { | |
| unsigned int nXs, nYs; | |
| unsigned int nXd, nYd; | |
| unsigned int nIdxSrc, nIdxDst; | |
| for(nIdxDst = 0; nIdxDst < nWidthDst*nHeightDst; ++nIdxDst) | |
| { | |
| if(bTwiddled) | |
| { | |
| PVRTTextureDeTwiddle(nXd, nYd, nIdxDst); | |
| } | |
| else | |
| { | |
| nXd = nIdxDst % nWidthDst; | |
| nYd = nIdxDst / nWidthDst; | |
| } | |
| nXs = nXd % nWidthSrc; | |
| nYs = nYd % nHeightSrc; | |
| if(bTwiddled) | |
| { | |
| PVRTTextureTwiddle(nIdxSrc, nXs, nYs); | |
| } | |
| else | |
| { | |
| nIdxSrc = nYs * nWidthSrc + nXs; | |
| } | |
| memcpy(pDst + nIdxDst*nElementSize, pSrc + nIdxSrc*nElementSize, nElementSize); | |
| } | |
| } | |
| /*!*************************************************************************** | |
| @Function PVRTTextureCreate | |
| @Input w Size of the texture | |
| @Input h Size of the texture | |
| @Input wMin Minimum size of a texture level | |
| @Input hMin Minimum size of a texture level | |
| @Input nBPP Bits per pixel of the format | |
| @Input bMIPMap Create memory for MIP-map levels also? | |
| @Return Allocated texture memory (must be free()d) | |
| @Description Creates a PVRTextureHeaderV3 structure, including room for | |
| the specified texture, in memory. | |
| *****************************************************************************/ | |
| PVRTextureHeaderV3 *PVRTTextureCreate( | |
| const unsigned int w, | |
| const unsigned int h, | |
| const unsigned int wMin, | |
| const unsigned int hMin, | |
| const unsigned int nBPP, | |
| const bool bMIPMap) | |
| { | |
| size_t len; | |
| unsigned char *p; | |
| { | |
| unsigned int wTmp = w, hTmp = h; | |
| len = 0; | |
| do | |
| { | |
| len += PVRT_MAX(wTmp, wMin) * PVRT_MAX(hTmp, hMin); | |
| wTmp >>= 1; | |
| hTmp >>= 1; | |
| } | |
| while(bMIPMap && (wTmp || hTmp)); | |
| } | |
| len = (len * nBPP) / 8; | |
| len += PVRTEX3_HEADERSIZE; | |
| p = (unsigned char*)malloc(len); | |
| _ASSERT(p); | |
| if(p) | |
| { | |
| PVRTextureHeaderV3 * const psTexHeader = (PVRTextureHeaderV3*)p; | |
| *psTexHeader=PVRTextureHeaderV3(); | |
| psTexHeader->u32Width=w; | |
| psTexHeader->u32Height=h; | |
| return psTexHeader; | |
| } | |
| else | |
| { | |
| return 0; | |
| } | |
| } | |
| /*!*************************************************************************** | |
| @Function PVRTTextureTwiddle | |
| @Output a Twiddled value | |
| @Input u Coordinate axis 0 | |
| @Input v Coordinate axis 1 | |
| @Description Combine a 2D coordinate into a twiddled value | |
| *****************************************************************************/ | |
| void PVRTTextureTwiddle(unsigned int &a, const unsigned int u, const unsigned int v) | |
| { | |
| _ASSERT(!((u|v) & 0xFFFF0000)); | |
| a = 0; | |
| for(int i = 0; i < 16; ++i) | |
| { | |
| a |= ((u & (1 << i)) << (i+1)); | |
| a |= ((v & (1 << i)) << (i+0)); | |
| } | |
| } | |
| /*!*************************************************************************** | |
| @Function PVRTTextureDeTwiddle | |
| @Output u Coordinate axis 0 | |
| @Output v Coordinate axis 1 | |
| @Input a Twiddled value | |
| @Description Extract 2D coordinates from a twiddled value. | |
| *****************************************************************************/ | |
| void PVRTTextureDeTwiddle(unsigned int &u, unsigned int &v, const unsigned int a) | |
| { | |
| u = 0; | |
| v = 0; | |
| for(int i = 0; i < 16; ++i) | |
| { | |
| u |= (a & (1 << ((2*i)+1))) >> (i+1); | |
| v |= (a & (1 << ((2*i)+0))) >> (i+0); | |
| } | |
| } | |
| /*!*********************************************************************** | |
| @Function PVRTGetBitsPerPixel | |
| @Input u64PixelFormat A PVR Pixel Format ID. | |
| @Return const PVRTuint32 Number of bits per pixel. | |
| @Description Returns the number of bits per pixel in a PVR Pixel Format | |
| identifier. | |
| *************************************************************************/ | |
| PVRTuint32 PVRTGetBitsPerPixel(PVRTuint64 u64PixelFormat) | |
| { | |
| if((u64PixelFormat&PVRTEX_PFHIGHMASK)!=0) | |
| { | |
| PVRTuint8* PixelFormatChar=(PVRTuint8*)&u64PixelFormat; | |
| return PixelFormatChar[4]+PixelFormatChar[5]+PixelFormatChar[6]+PixelFormatChar[7]; | |
| } | |
| else | |
| { | |
| switch (u64PixelFormat) | |
| { | |
| case ePVRTPF_BW1bpp: | |
| return 1; | |
| case ePVRTPF_PVRTCI_2bpp_RGB: | |
| case ePVRTPF_PVRTCI_2bpp_RGBA: | |
| case ePVRTPF_PVRTCII_2bpp: | |
| return 2; | |
| case ePVRTPF_PVRTCI_4bpp_RGB: | |
| case ePVRTPF_PVRTCI_4bpp_RGBA: | |
| case ePVRTPF_PVRTCII_4bpp: | |
| case ePVRTPF_ETC1: | |
| case ePVRTPF_EAC_R11: | |
| case ePVRTPF_ETC2_RGB: | |
| case ePVRTPF_ETC2_RGB_A1: | |
| case ePVRTPF_DXT1: | |
| case ePVRTPF_BC4: | |
| return 4; | |
| case ePVRTPF_DXT2: | |
| case ePVRTPF_DXT3: | |
| case ePVRTPF_DXT4: | |
| case ePVRTPF_DXT5: | |
| case ePVRTPF_BC5: | |
| case ePVRTPF_EAC_RG11: | |
| case ePVRTPF_ETC2_RGBA: | |
| return 8; | |
| case ePVRTPF_YUY2: | |
| case ePVRTPF_UYVY: | |
| case ePVRTPF_RGBG8888: | |
| case ePVRTPF_GRGB8888: | |
| return 16; | |
| case ePVRTPF_SharedExponentR9G9B9E5: | |
| return 32; | |
| case ePVRTPF_NumCompressedPFs: | |
| return 0; | |
| } | |
| } | |
| return 0; | |
| } | |
| /*!*********************************************************************** | |
| @Function PVRTGetFormatMinDims | |
| @Input u64PixelFormat A PVR Pixel Format ID. | |
| @Modified minX Returns the minimum width. | |
| @Modified minY Returns the minimum height. | |
| @Modified minZ Returns the minimum depth. | |
| @Description Gets the minimum dimensions (x,y,z) for a given pixel format. | |
| *************************************************************************/ | |
| void PVRTGetFormatMinDims(PVRTuint64 u64PixelFormat, PVRTuint32 &minX, PVRTuint32 &minY, PVRTuint32 &minZ) | |
| { | |
| switch(u64PixelFormat) | |
| { | |
| case ePVRTPF_DXT1: | |
| case ePVRTPF_DXT2: | |
| case ePVRTPF_DXT3: | |
| case ePVRTPF_DXT4: | |
| case ePVRTPF_DXT5: | |
| case ePVRTPF_BC4: | |
| case ePVRTPF_BC5: | |
| case ePVRTPF_ETC1: | |
| case ePVRTPF_ETC2_RGB: | |
| case ePVRTPF_ETC2_RGBA: | |
| case ePVRTPF_ETC2_RGB_A1: | |
| case ePVRTPF_EAC_R11: | |
| case ePVRTPF_EAC_RG11: | |
| minX = 4; | |
| minY = 4; | |
| minZ = 1; | |
| break; | |
| case ePVRTPF_PVRTCI_4bpp_RGB: | |
| case ePVRTPF_PVRTCI_4bpp_RGBA: | |
| minX = 8; | |
| minY = 8; | |
| minZ = 1; | |
| break; | |
| case ePVRTPF_PVRTCI_2bpp_RGB: | |
| case ePVRTPF_PVRTCI_2bpp_RGBA: | |
| minX = 16; | |
| minY = 8; | |
| minZ = 1; | |
| break; | |
| case ePVRTPF_PVRTCII_4bpp: | |
| minX = 4; | |
| minY = 4; | |
| minZ = 1; | |
| break; | |
| case ePVRTPF_PVRTCII_2bpp: | |
| minX = 8; | |
| minY = 4; | |
| minZ = 1; | |
| break; | |
| case ePVRTPF_UYVY: | |
| case ePVRTPF_YUY2: | |
| case ePVRTPF_RGBG8888: | |
| case ePVRTPF_GRGB8888: | |
| minX = 2; | |
| minY = 1; | |
| minZ = 1; | |
| break; | |
| case ePVRTPF_BW1bpp: | |
| minX = 8; | |
| minY = 1; | |
| minZ = 1; | |
| break; | |
| default: //Non-compressed formats all return 1. | |
| minX = 1; | |
| minY = 1; | |
| minZ = 1; | |
| break; | |
| } | |
| } | |
| /*!*********************************************************************** | |
| @Function PVRTGetTextureDataSize | |
| @Input iMipLevel Specifies a mip level to check, 'PVRTEX_ALLMIPLEVELS' | |
| can be passed to get the size of all MIP levels. | |
| @Input bAllSurfs Size of all surfaces is calculated if true, | |
| only a single surface if false. | |
| @Input bAllFaces Size of all faces is calculated if true, | |
| only a single face if false. | |
| @Return PVRTuint32 Size in BYTES of the specified texture area. | |
| @Description Gets the size in BYTES of the texture, given various input | |
| parameters. User can retrieve the size of either all | |
| surfaces or a single surface, all faces or a single face and | |
| all MIP-Maps or a single specified MIP level. | |
| *************************************************************************/ | |
| PVRTuint32 PVRTGetTextureDataSize(PVRTextureHeaderV3 sTextureHeader, PVRTint32 iMipLevel, bool bAllSurfaces, bool bAllFaces) | |
| { | |
| //The smallest divisible sizes for a pixel format | |
| PVRTuint32 uiSmallestWidth=1; | |
| PVRTuint32 uiSmallestHeight=1; | |
| PVRTuint32 uiSmallestDepth=1; | |
| PVRTuint64 PixelFormatPartHigh = sTextureHeader.u64PixelFormat&PVRTEX_PFHIGHMASK; | |
| //If the pixel format is compressed, get the pixel format's minimum dimensions. | |
| if (PixelFormatPartHigh==0) | |
| { | |
| PVRTGetFormatMinDims((EPVRTPixelFormat)sTextureHeader.u64PixelFormat, uiSmallestWidth, uiSmallestHeight, uiSmallestDepth); | |
| } | |
| //Needs to be 64-bit integer to support 16kx16k and higher sizes. | |
| PVRTuint64 uiDataSize = 0; | |
| if (iMipLevel==-1) | |
| { | |
| for (PVRTuint8 uiCurrentMIP = 0; uiCurrentMIP<sTextureHeader.u32MIPMapCount; ++uiCurrentMIP) | |
| { | |
| //Get the dimensions of the current MIP Map level. | |
| PVRTuint32 uiWidth = PVRT_MAX(1,sTextureHeader.u32Width>>uiCurrentMIP); | |
| PVRTuint32 uiHeight = PVRT_MAX(1,sTextureHeader.u32Height>>uiCurrentMIP); | |
| PVRTuint32 uiDepth = PVRT_MAX(1,sTextureHeader.u32Depth>>uiCurrentMIP); | |
| //If pixel format is compressed, the dimensions need to be padded. | |
| if (PixelFormatPartHigh==0) | |
| { | |
| uiWidth=uiWidth+( (-1*uiWidth)%uiSmallestWidth); | |
| uiHeight=uiHeight+( (-1*uiHeight)%uiSmallestHeight); | |
| uiDepth=uiDepth+( (-1*uiDepth)%uiSmallestDepth); | |
| } | |
| //Add the current MIP Map's data size to the total. | |
| uiDataSize+=(PVRTuint64)PVRTGetBitsPerPixel(sTextureHeader.u64PixelFormat)*(PVRTuint64)uiWidth*(PVRTuint64)uiHeight*(PVRTuint64)uiDepth; | |
| } | |
| } | |
| else | |
| { | |
| //Get the dimensions of the specified MIP Map level. | |
| PVRTuint32 uiWidth = PVRT_MAX(1,sTextureHeader.u32Width>>iMipLevel); | |
| PVRTuint32 uiHeight = PVRT_MAX(1,sTextureHeader.u32Height>>iMipLevel); | |
| PVRTuint32 uiDepth = PVRT_MAX(1,sTextureHeader.u32Depth>>iMipLevel); | |
| //If pixel format is compressed, the dimensions need to be padded. | |
| if (PixelFormatPartHigh==0) | |
| { | |
| uiWidth=uiWidth+( (-1*uiWidth)%uiSmallestWidth); | |
| uiHeight=uiHeight+( (-1*uiHeight)%uiSmallestHeight); | |
| uiDepth=uiDepth+( (-1*uiDepth)%uiSmallestDepth); | |
| } | |
| //Work out the specified MIP Map's data size | |
| uiDataSize=PVRTGetBitsPerPixel(sTextureHeader.u64PixelFormat)*uiWidth*uiHeight*uiDepth; | |
| } | |
| //The number of faces/surfaces to register the size of. | |
| PVRTuint32 numfaces = ((bAllFaces)?(sTextureHeader.u32NumFaces):(1)); | |
| PVRTuint32 numsurfs = ((bAllSurfaces)?(sTextureHeader.u32NumSurfaces):(1)); | |
| //Multiply the data size by number of faces and surfaces specified, and return. | |
| return (PVRTuint32)(uiDataSize/8)*numsurfs*numfaces; | |
| } | |
| /*!*********************************************************************** | |
| @Function PVRTConvertOldTextureHeaderToV3 | |
| @Input LegacyHeader Legacy header for conversion. | |
| @Modified NewHeader New header to output into. | |
| @Modified MetaData MetaData Map to output into. | |
| @Description Converts a legacy texture header (V1 or V2) to a current | |
| generation header (V3) | |
| *************************************************************************/ | |
| void PVRTConvertOldTextureHeaderToV3(const PVR_Texture_Header* LegacyHeader, PVRTextureHeaderV3& NewHeader, CPVRTMap<PVRTuint32, CPVRTMap<PVRTuint32,MetaDataBlock> >* pMetaData) | |
| { | |
| //Setup variables | |
| bool isPreMult; | |
| PVRTuint64 ptNew; | |
| EPVRTColourSpace cSpaceNew; | |
| EPVRTVariableType chanTypeNew; | |
| //Map the old enum to the new format. | |
| PVRTMapLegacyTextureEnumToNewFormat((PVRTPixelType)(LegacyHeader->dwpfFlags&0xff),ptNew,cSpaceNew,chanTypeNew,isPreMult); | |
| //Check if this is a cube map. | |
| bool isCubeMap = (LegacyHeader->dwpfFlags&PVRTEX_CUBEMAP)!=0; | |
| //Setup the new header. | |
| NewHeader.u64PixelFormat=ptNew; | |
| NewHeader.u32ChannelType=chanTypeNew; | |
| NewHeader.u32ColourSpace=cSpaceNew; | |
| NewHeader.u32Depth=1; | |
| NewHeader.u32Flags=isPreMult?PVRTEX3_PREMULTIPLIED:0; | |
| NewHeader.u32Height=LegacyHeader->dwHeight; | |
| NewHeader.u32MetaDataSize=0; | |
| NewHeader.u32MIPMapCount=(LegacyHeader->dwpfFlags&PVRTEX_MIPMAP?LegacyHeader->dwMipMapCount+1:1); //Legacy headers have a MIP Map count of 0 if there is only the top level. New Headers have a count of 1. | |
| NewHeader.u32NumFaces=(isCubeMap?6:1); | |
| //Only compute the number of surfaces if it's a V2 header, else default to 1 surface. | |
| if (LegacyHeader->dwHeaderSize==sizeof(PVR_Texture_Header)) | |
| NewHeader.u32NumSurfaces=(LegacyHeader->dwNumSurfs/(isCubeMap?6:1)); | |
| else | |
| NewHeader.u32NumSurfaces=1; | |
| NewHeader.u32Version=PVRTEX3_IDENT; | |
| NewHeader.u32Width=LegacyHeader->dwWidth; | |
| //Clear any currently stored MetaData, or it will be inaccurate. | |
| if (pMetaData) | |
| { | |
| pMetaData->Clear(); | |
| } | |
| //Check if this is a normal map. | |
| if (LegacyHeader->dwpfFlags&PVRTEX_BUMPMAP && pMetaData) | |
| { | |
| //Get a reference to the correct block. | |
| MetaDataBlock& mbBumpData=(*pMetaData)[PVRTEX_CURR_IDENT][ePVRTMetaDataBumpData]; | |
| //Set up the block. | |
| mbBumpData.DevFOURCC=PVRTEX_CURR_IDENT; | |
| mbBumpData.u32Key=ePVRTMetaDataBumpData; | |
| mbBumpData.u32DataSize=8; | |
| mbBumpData.Data=new PVRTuint8[8]; | |
| //Setup the data for the block. | |
| float bumpScale = 1.0f; | |
| const char* bumpOrder = "xyz"; | |
| //Copy the bumpScale into the data. | |
| memcpy(mbBumpData.Data,&bumpScale,4); | |
| //Clear the string | |
| memset(mbBumpData.Data+4,0,4); | |
| //Copy the bumpOrder into the data. | |
| memcpy(mbBumpData.Data+4, bumpOrder,3); | |
| //Increment the meta data size. | |
| NewHeader.u32MetaDataSize+=(12+mbBumpData.u32DataSize); | |
| } | |
| //Check if for vertical flip orientation. | |
| if (LegacyHeader->dwpfFlags&PVRTEX_VERTICAL_FLIP && pMetaData) | |
| { | |
| //Get the correct meta data block | |
| MetaDataBlock& mbTexOrientation=(*pMetaData)[PVRTEX_CURR_IDENT][ePVRTMetaDataTextureOrientation]; | |
| //Set the block up. | |
| mbTexOrientation.u32DataSize=3; | |
| mbTexOrientation.Data=new PVRTuint8[3]; | |
| mbTexOrientation.DevFOURCC=PVRTEX_CURR_IDENT; | |
| mbTexOrientation.u32Key=ePVRTMetaDataTextureOrientation; | |
| //Initialise the block to default orientation. | |
| memset(mbTexOrientation.Data,0,3); | |
| //Set the block oriented upwards. | |
| mbTexOrientation.Data[ePVRTAxisY]=ePVRTOrientUp; | |
| //Increment the meta data size. | |
| NewHeader.u32MetaDataSize+=(12+mbTexOrientation.u32DataSize); | |
| } | |
| } | |
| /*!*********************************************************************** | |
| @Function PVRTMapLegacyTextureEnumToNewFormat | |
| @Input OldFormat Legacy Enumeration Value | |
| @Modified newType New PixelType identifier. | |
| @Modified newCSpace New ColourSpace | |
| @Modified newChanType New Channel Type | |
| @Modified isPreMult Whether format is pre-multiplied | |
| @Description Maps a legacy enumeration value to the new PVR3 style format. | |
| *************************************************************************/ | |
| void PVRTMapLegacyTextureEnumToNewFormat(PVRTPixelType OldFormat, PVRTuint64& newType, EPVRTColourSpace& newCSpace, EPVRTVariableType& newChanType, bool& isPreMult) | |
| { | |
| //Default value. | |
| isPreMult=false; | |
| switch (OldFormat) | |
| { | |
| case MGLPT_ARGB_4444: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',4,4,4,4); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case MGLPT_ARGB_1555: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',1,5,5,5); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case MGLPT_RGB_565: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',5,6,5); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case MGLPT_RGB_555: | |
| { | |
| newType=PVRTGENPIXELID4('x','r','g','b',1,5,5,5); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case MGLPT_RGB_888: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case MGLPT_ARGB_8888: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case MGLPT_ARGB_8332: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',8,3,3,2); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case MGLPT_I_8: | |
| { | |
| newType=PVRTGENPIXELID1('i',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case MGLPT_AI_88: | |
| { | |
| newType=PVRTGENPIXELID2('a','i',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case MGLPT_1_BPP: | |
| { | |
| newType=ePVRTPF_BW1bpp; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case MGLPT_VY1UY0: | |
| { | |
| newType=ePVRTPF_YUY2; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case MGLPT_Y1VY0U: | |
| { | |
| newType=ePVRTPF_UYVY; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case MGLPT_PVRTC2: | |
| { | |
| newType=ePVRTPF_PVRTCI_2bpp_RGBA; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case MGLPT_PVRTC4: | |
| { | |
| newType=ePVRTPF_PVRTCI_4bpp_RGBA; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_RGBA_4444: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',4,4,4,4); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case OGL_RGBA_5551: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',5,5,5,1); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case OGL_RGBA_8888: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_RGB_565: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',5,6,5); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case OGL_RGB_555: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','x',5,5,5,1); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case OGL_RGB_888: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_I_8: | |
| { | |
| newType=PVRTGENPIXELID1('l',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_AI_88: | |
| { | |
| newType=PVRTGENPIXELID2('l','a',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_PVRTC2: | |
| { | |
| newType=ePVRTPF_PVRTCI_2bpp_RGBA; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_PVRTC4: | |
| { | |
| newType=ePVRTPF_PVRTCI_4bpp_RGBA; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_BGRA_8888: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_A_8: | |
| { | |
| newType=PVRTGENPIXELID1('a',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_PVRTCII4: | |
| { | |
| newType=ePVRTPF_PVRTCII_4bpp; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case OGL_PVRTCII2: | |
| { | |
| newType=ePVRTPF_PVRTCII_2bpp; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| #ifdef _WIN32 | |
| case D3D_DXT1: | |
| { | |
| newType=ePVRTPF_DXT1; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case D3D_DXT2: | |
| { | |
| newType=ePVRTPF_DXT2; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case D3D_DXT3: | |
| { | |
| newType=ePVRTPF_DXT3; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case D3D_DXT4: | |
| { | |
| newType=ePVRTPF_DXT4; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case D3D_DXT5: | |
| { | |
| newType=ePVRTPF_DXT5; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| #endif | |
| case D3D_RGB_332: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',3,3,2); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_AL_44: | |
| { | |
| newType=PVRTGENPIXELID2('a','l',4,4); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_LVU_655: | |
| { | |
| newType=PVRTGENPIXELID3('l','g','r',6,5,5); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_XLVU_8888: | |
| { | |
| newType=PVRTGENPIXELID4('x','l','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_QWVU_8888: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_ABGR_2101010: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',2,10,10,10); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_ARGB_2101010: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',2,10,10,10); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_AWVU_2101010: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',2,10,10,10); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_GR_1616: | |
| { | |
| newType=PVRTGENPIXELID2('g','r',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_VU_1616: | |
| { | |
| newType=PVRTGENPIXELID2('g','r',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_ABGR_16161616: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_R16F: | |
| { | |
| newType=PVRTGENPIXELID1('r',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case D3D_GR_1616F: | |
| { | |
| newType=PVRTGENPIXELID2('g','r',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case D3D_ABGR_16161616F: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case D3D_R32F: | |
| { | |
| newType=PVRTGENPIXELID1('r',32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case D3D_GR_3232F: | |
| { | |
| newType=PVRTGENPIXELID2('g','r',32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case D3D_ABGR_32323232F: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',32,32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case ETC_RGB_4BPP: | |
| { | |
| newType=ePVRTPF_ETC1; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case D3D_A8: | |
| { | |
| newType=PVRTGENPIXELID1('a',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_V8U8: | |
| { | |
| newType=PVRTGENPIXELID2('g','r',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_L16: | |
| { | |
| newType=PVRTGENPIXELID1('l',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_L8: | |
| { | |
| newType=PVRTGENPIXELID1('l',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_AL_88: | |
| { | |
| newType=PVRTGENPIXELID2('a','l',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case D3D_UYVY: | |
| { | |
| newType=ePVRTPF_UYVY; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case D3D_YUY2: | |
| { | |
| newType=ePVRTPF_YUY2; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R32G32B32A32_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',32,32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R32G32B32A32_UINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',32,32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedInteger; | |
| break; | |
| } | |
| case DX10_R32G32B32A32_SINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',32,32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedInteger; | |
| break; | |
| } | |
| case DX10_R32G32B32_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R32G32B32_UINT: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedInteger; | |
| break; | |
| } | |
| case DX10_R32G32B32_SINT: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',32,32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedInteger; | |
| break; | |
| } | |
| case DX10_R16G16B16A16_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R16G16B16A16_UNORM: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case DX10_R16G16B16A16_UINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShort; | |
| break; | |
| } | |
| case DX10_R16G16B16A16_SNORM: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedShortNorm; | |
| break; | |
| } | |
| case DX10_R16G16B16A16_SINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',16,16,16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedShort; | |
| break; | |
| } | |
| case DX10_R32G32_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R32G32_UINT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedInteger; | |
| break; | |
| } | |
| case DX10_R32G32_SINT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',32,32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedInteger; | |
| break; | |
| } | |
| case DX10_R10G10B10A2_UNORM: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',10,10,10,2); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_R10G10B10A2_UINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',10,10,10,2); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedInteger; | |
| break; | |
| } | |
| case DX10_R11G11B10_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',11,11,10); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R8G8B8A8_UNORM: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8G8B8A8_UNORM_SRGB: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8G8B8A8_UINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByte; | |
| break; | |
| } | |
| case DX10_R8G8B8A8_SNORM: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8G8B8A8_SINT: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedByte; | |
| break; | |
| } | |
| case DX10_R16G16_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R16G16_UNORM: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case DX10_R16G16_UINT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShort; | |
| break; | |
| } | |
| case DX10_R16G16_SNORM: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedShortNorm; | |
| break; | |
| } | |
| case DX10_R16G16_SINT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',16,16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedShort; | |
| break; | |
| } | |
| case DX10_R32_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID1('r',32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R32_UINT: | |
| { | |
| newType=PVRTGENPIXELID1('r',32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedInteger; | |
| break; | |
| } | |
| case DX10_R32_SINT: | |
| { | |
| newType=PVRTGENPIXELID1('r',32); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedInteger; | |
| break; | |
| } | |
| case DX10_R8G8_UNORM: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8G8_UINT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByte; | |
| break; | |
| } | |
| case DX10_R8G8_SNORM: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8G8_SINT: | |
| { | |
| newType=PVRTGENPIXELID2('r','g',8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedByte; | |
| break; | |
| } | |
| case DX10_R16_FLOAT: | |
| { | |
| newType=PVRTGENPIXELID1('r',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R16_UNORM: | |
| { | |
| newType=PVRTGENPIXELID1('r',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case DX10_R16_UINT: | |
| { | |
| newType=PVRTGENPIXELID1('r',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedShort; | |
| break; | |
| } | |
| case DX10_R16_SNORM: | |
| { | |
| newType=PVRTGENPIXELID1('r',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedShortNorm; | |
| break; | |
| } | |
| case DX10_R16_SINT: | |
| { | |
| newType=PVRTGENPIXELID1('r',16); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedShort; | |
| break; | |
| } | |
| case DX10_R8_UNORM: | |
| { | |
| newType=PVRTGENPIXELID1('r',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8_UINT: | |
| { | |
| newType=PVRTGENPIXELID1('r',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByte; | |
| break; | |
| } | |
| case DX10_R8_SNORM: | |
| { | |
| newType=PVRTGENPIXELID1('r',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedByteNorm; | |
| break; | |
| } | |
| case DX10_R8_SINT: | |
| { | |
| newType=PVRTGENPIXELID1('r',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedByte; | |
| break; | |
| } | |
| case DX10_A8_UNORM: | |
| { | |
| newType=PVRTGENPIXELID1('r',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R1_UNORM: | |
| { | |
| newType=ePVRTPF_BW1bpp; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_R9G9B9E5_SHAREDEXP: | |
| { | |
| newType=ePVRTPF_SharedExponentR9G9B9E5; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedFloat; | |
| break; | |
| } | |
| case DX10_R8G8_B8G8_UNORM: | |
| { | |
| newType=ePVRTPF_RGBG8888; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case DX10_G8R8_G8B8_UNORM: | |
| { | |
| newType=ePVRTPF_GRGB8888; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| #ifdef _WIN32 | |
| case DX10_BC1_UNORM: | |
| { | |
| newType=ePVRTPF_DXT1; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC1_UNORM_SRGB: | |
| { | |
| newType=ePVRTPF_DXT1; | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC2_UNORM: | |
| { | |
| newType=ePVRTPF_DXT3; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC2_UNORM_SRGB: | |
| { | |
| newType=ePVRTPF_DXT3; | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC3_UNORM: | |
| { | |
| newType=ePVRTPF_DXT5; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC3_UNORM_SRGB: | |
| { | |
| newType=ePVRTPF_DXT5; | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC4_UNORM: | |
| { | |
| newType=ePVRTPF_BC4; | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC4_SNORM: | |
| { | |
| newType=ePVRTPF_BC4; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC5_UNORM: | |
| { | |
| newType=ePVRTPF_BC5; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedIntegerNorm; | |
| break; | |
| } | |
| case DX10_BC5_SNORM: | |
| { | |
| newType=ePVRTPF_BC5; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeSignedIntegerNorm; | |
| break; | |
| } | |
| #endif | |
| case ePT_VG_sRGBX_8888: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','x',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sRGBA_8888: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sRGBA_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_sRGB_565: | |
| { | |
| newType=PVRTGENPIXELID3('r','g','b',5,6,5); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sRGBA_5551: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',5,5,5,1); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sRGBA_4444: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',4,4,4,4); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sL_8: | |
| { | |
| newType=PVRTGENPIXELID1('l',8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lRGBX_8888: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','x',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lRGBA_8888: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lRGBA_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('r','g','b','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_lL_8: | |
| { | |
| newType=PVRTGENPIXELID1('l',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_A_8: | |
| { | |
| newType=PVRTGENPIXELID1('a',8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_BW_1: | |
| { | |
| newType=ePVRTPF_BW1bpp; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sXRGB_8888: | |
| { | |
| newType=PVRTGENPIXELID4('x','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sARGB_8888: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sARGB_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_sARGB_1555: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',1,5,5,5); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sARGB_4444: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',4,4,4,4); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_lXRGB_8888: | |
| { | |
| newType=PVRTGENPIXELID4('x','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lARGB_8888: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lARGB_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('a','r','g','b',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_sBGRX_8888: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','x',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sBGRA_8888: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sBGRA_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_sBGR_565: | |
| { | |
| newType=PVRTGENPIXELID3('b','g','r',5,6,5); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sBGRA_5551: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','a',5,5,5,1); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sBGRA_4444: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','x',4,4,4,4); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_lBGRX_8888: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','x',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lBGRA_8888: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lBGRA_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('b','g','r','a',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_sXBGR_8888: | |
| { | |
| newType=PVRTGENPIXELID4('x','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sABGR_8888: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_sABGR_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| case ePT_VG_sABGR_1555: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',1,5,5,5); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_sABGR_4444: | |
| { | |
| newType=PVRTGENPIXELID4('x','b','g','r',4,4,4,4); | |
| newCSpace=ePVRTCSpacesRGB; | |
| newChanType=ePVRTVarTypeUnsignedShortNorm; | |
| break; | |
| } | |
| case ePT_VG_lXBGR_8888: | |
| { | |
| newType=PVRTGENPIXELID4('x','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lABGR_8888: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| break; | |
| } | |
| case ePT_VG_lABGR_8888_PRE: | |
| { | |
| newType=PVRTGENPIXELID4('a','b','g','r',8,8,8,8); | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeUnsignedByteNorm; | |
| isPreMult=true; | |
| break; | |
| } | |
| default: | |
| { | |
| newType=ePVRTPF_NumCompressedPFs; | |
| newCSpace=ePVRTCSpacelRGB; | |
| newChanType=ePVRTVarTypeNumVarTypes; | |
| break; | |
| } | |
| } | |
| } | |
| /***************************************************************************** | |
| End of file (PVRTTexture.cpp) | |
| *****************************************************************************/ |