/*---------------------------------------------------------------------------* Copyright (C) Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ // ------------------------------------------------------- // DDS_Helpers.h // // Declares helper functions for DDS Reader. // ------------------------------------------------------- #ifndef DDS_HELPERS_H #define DDS_HELPERS_H #include "DDS.h" namespace DDSReader { #define FOURCC_BC1 MAKEFOURCC('B', 'C', '1', ' ') #define FOURCC_BC2 MAKEFOURCC('B', 'C', '2', ' ') #define FOURCC_BC3 MAKEFOURCC('B', 'C', '3', ' ') #define FOURCC_BC4 MAKEFOURCC('B', 'C', '4', ' ') #define FOURCC_BC5 MAKEFOURCC('B', 'C', '5', ' ') #define FOURCC_BC4S MAKEFOURCC('B', 'C', '4', 'S') #define FOURCC_BC4U MAKEFOURCC('B', 'C', '4', 'U') #define FOURCC_BC5S MAKEFOURCC('B', 'C', '5', 'S') typedef struct _ARGB8888Struct { int nFlags; void* pMemory; int nRMask; int nRShift; int nGMask; int nGShift; int nBMask; int nBShift; } ARGB8888Struct; typedef enum _ExtraFlags { EF_None = 0, EF_UseBitMasks = 0x1, } ExtraFlags; typedef TU_Error (PreLoopFunction)(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); typedef TU_Error (LoopFunction)(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); typedef TU_Error (PostLoopFunction)(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); TU_Error GenericLoadFunction(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra, ChannelFormat channelFormat, TextureDataType textureDataType, PreLoopFunction fnPreLoop, LoopFunction fnLoop, PostLoopFunction fnPostLoop); bool IsD3D10Format(const GX2Surface* pSurface); void DetermineTextureType(const DDSD2* pDDSD, GX2Surface* pSurface); TU_Error GenericLoadFunction(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra, ChannelFormat channelFormat, TextureDataType textureDataType, PreLoopFunction fnPreLoop, LoopFunction fnLoop, PostLoopFunction fnPostLoop); TU_Error GenericFreeFunction(GX2Surface*& pSurface); TU_Error PreLoopDefault(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error LoopDefault(FILE*& pFile, DDSD2*&, GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopDefault(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopFourCC(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); TU_Error LoopFourCC(FILE*& pFile, DDSD2*&, GX2Surface*& pSurface, void*& /*extra*/, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopFourCC(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopRGB565(FILE*&, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); TU_Error LoopRGB565(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopRGB565(FILE*&, DDSD2*&, GX2Surface*&, void*& extra); TU_Error PreLoopRGB888(FILE*&, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); TU_Error LoopRGB888(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopRGB888(FILE*&, DDSD2*&, GX2Surface*&, void*& extra); TU_Error PreLoopRGB8888(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopRGB8888(FILE*& pFile, DDSD2*&, GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopRGB8888(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopABGR32F(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopABGR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopGR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopABGR32F(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error LoopGR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PreLoopABGR16F(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopABGR16F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopGR16F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR16F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopABGR16F(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopG8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopG8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopG8(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopA4L4(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopA4L4(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopA4L4(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopA8L8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopA8L8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopA8L8(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopAG8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopAG8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopAG8(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopG16(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopG16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopG16(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopA8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopA8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopA8(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopABGR16(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopABGR16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopABGR16(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopG16R16(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopG16R16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopG16R16(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopARGB1555(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopARGB1555(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopARGB1555(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopARGB4444(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopARGB4444(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopARGB4444(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error PreLoopABGR32(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); TU_Error LoopABGR32(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error PostLoopABGR32(FILE*&, DDSD2*&, GX2Surface*&, void*&); TU_Error LoopR32G32(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopA2R10G10B10(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR16G16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR32(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR8G8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); TU_Error LoopR8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); bool SetupDDSD(DDSD2& ddsd2, const GX2Surface* pSurface, bool bCompressed); bool SetupDDSD_DDS10(DDSD2& ddsd2, const GX2Surface* pSurface, bool bCompressed); } //namespace DDSReader #endif //#ifndef DDS_HELPERS_H