diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2024-06-06 23:24:25 -0400 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2024-06-06 23:24:25 -0400 |
| commit | b0b02bbedf460a7305c91f6befaf054323c8d0cd (patch) | |
| tree | 4afe5037a3367a52b485ba84529ad8cfed78b720 /src | |
| parent | afbcb57c6270464d781206c562f680b91b4660f7 (diff) | |
lyt_texMap OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/nw4r/lyt/lyt_texMap.cpp | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/src/nw4r/lyt/lyt_texMap.cpp b/src/nw4r/lyt/lyt_texMap.cpp index e69de29b..6b65164a 100644 --- a/src/nw4r/lyt/lyt_texMap.cpp +++ b/src/nw4r/lyt/lyt_texMap.cpp @@ -0,0 +1,205 @@ +#include <nw4r/lyt/lyt_texMap.h> + +// NOTICE: This file seems to have been reworked. Not sure if all functions exist anymore, ReplaceImage doesnt even +// appear stripped in BBA, but is in tokyo friend park 2 DWARF. In NSMBW there seems to be more parameters for +// ReplaceImage as well. BBA map also shows calls to SetNoWrap from Set (GXTexObj variant), but the actual function +// shows no sign + +namespace nw4r { +namespace lyt { + +namespace { + +// CountLeadingZeros__24@unnamed@lyt_texMap_cpp@FUl + +} // namespace + +// Get__Q34nw4r3lyt6TexMapCFP9_GXTexObj +void TexMap::Get(GXTexObj *pTexObj) const { + if (detail::IsCITexelFormat(GetTexelFormat())) { + u32 tlutName = GXGetTexObjTlut(pTexObj); + GXInitTexObjCI(pTexObj, GetImage(), GetWidth(), GetHeight(), GetTexelFormat(), GetWrapModeS(), GetWrapModeT(), + IsMipMap(), tlutName); + } else { + GXInitTexObj(pTexObj, GetImage(), GetWidth(), GetHeight(), GetTexelFormat(), GetWrapModeS(), GetWrapModeT(), + IsMipMap()); + } + + GXInitTexObjLOD(pTexObj, GetMinFilter(), GetMagFilter(), GetMinLOD(), GetMaxLOD(), GetLODBias(), + IsBiasClampEnable(), IsEdgeLODEnable(), GetAnisotropy()); +} + +// Get__Q34nw4r3lyt6TexMapCFP10_GXTlutObj +void TexMap::Get(GXTlutObj *pTLUTObj) const { + GXInitTlutObj(pTLUTObj, GetPalette(), GetPaletteFormat(), GetPaletteEntryNum()); +} + +// Set__Q34nw4r3lyt6TexMapFRC9_GXTexObj +void TexMap::Set(const GXTexObj &pTexObj) { + void *pImage; + u16 width, height; + GXTexFmt format; + GXTexWrapMode wrapS, wrapT; + u8 mipmap; + GXGetTexObjAll(&pTexObj, &pImage, &width, &height, &format, &wrapS, &wrapT, &mipmap); + SetImage(pImage); + SetSize(width, height); + SetTexelFormat(format); + SetWrapMode(wrapS, wrapT); + SetMipMap(mipmap); + + GXTexFilter minFilter, magFilter; + f32 minLOD, maxLOD, LODBias; + u8 biasClampEnable, edgeLODEnable; + GXAnisotropy anisotropy; + GXGetTexObjLODAll(&pTexObj, &minFilter, &magFilter, &minLOD, &maxLOD, &LODBias, &biasClampEnable, &edgeLODEnable, + &anisotropy); + SetFilter(minFilter, magFilter); + SetLOD(minLOD, maxLOD); + SetLODBias(LODBias); + SetBiasClampEnable(biasClampEnable); + SetEdgeLODEnable(edgeLODEnable); + SetAnisotropy(anisotropy); +} + +// Set__Q34nw4r3lyt6TexMapFRC10_GXTlutObj + +// Set__Q34nw4r3lyt6TexMapFP10TPLPaletteUl +void TexMap::Set(TPLPalette *pal, u32 id) { + // Not yet converted from offset to pointer (unbound) + if ((unsigned int)pal->descriptors < 0x80000000) { + TPLBind(pal); + } + + Set(TPLGet(pal, id)); +} + +// Set__Q34nw4r3lyt6TexMapFPC13TPLDescriptor +void TexMap::Set(const TPLDescriptor *pTPLDesc) { + TPLHeader *tplHead = pTPLDesc->texHeader; + SetImage(tplHead->data); + SetSize(tplHead->width, tplHead->height); + SetTexelFormat(static_cast<GXTexFmt>(tplHead->format)); + + bool bMipMap = (tplHead->minLod != tplHead->maxLod); + SetMipMap(bMipMap); + + SetFilter(tplHead->minFilt, tplHead->magFilt); + SetLOD(tplHead->minLod, tplHead->maxLod); + SetLODBias(tplHead->lodBias); + SetEdgeLODEnable(tplHead->edgeLodEnable); + + TPLClutHeader *pTPLCLUTHeader = pTPLDesc->clutHeader; + if (pTPLCLUTHeader != NULL) { + SetPalette(pTPLCLUTHeader->data); + SetPaletteFormat(pTPLCLUTHeader->format); + SetPaletteEntryNum(pTPLCLUTHeader->numEntries); + } else { + SetPalette(NULL); + SetPaletteFormat(GX_TL_IA8); + SetPaletteEntryNum(0); + } +} + +// ReplaceImage__Q34nw4r3lyt6TexMapFRC10_GXTlutObj +void TexMap::ReplaceImage(const GXTexObj &pTexObj) { + void *pImage; + u16 width, height; + GXTexFmt format; + GXTexWrapMode wrapS, wrapT; + u8 mipmap; + GXGetTexObjAll(&pTexObj, &pImage, &width, &height, &format, &wrapS, &wrapT, &mipmap); + SetImage(pImage); + SetSize(width, height); + SetTexelFormat(format); +} + +// ReplaceImage__Q34nw4r3lyt6TexMapFP10TPLPaletteUl +void TexMap::ReplaceImage(TPLPalette *pal, u32 id) { + // Not yet converted from offset to pointer (unbound) + if ((unsigned int)pal->descriptors < 0x80000000) { + TPLBind(pal); + } + + ReplaceImage(TPLGet(pal, id)); +} + +// ReplaceImage__Q34nw4r3lyt6TexMapFPC13TPLDescriptor +void TexMap::ReplaceImage(const TPLDescriptor *pTPLDesc) { + TPLHeader *tplHead = pTPLDesc->texHeader; + SetImage(tplHead->data); + SetSize(tplHead->width, tplHead->height); + SetTexelFormat(static_cast<GXTexFmt>(tplHead->format)); + + TPLClutHeader *pTPLCLUTHeader = pTPLDesc->clutHeader; + if (pTPLCLUTHeader != NULL) { + SetPalette(pTPLCLUTHeader->data); + SetPaletteFormat(pTPLCLUTHeader->format); + SetPaletteEntryNum(pTPLCLUTHeader->numEntries); + } else { + SetPalette(NULL); + SetPaletteFormat(GX_TL_IA8); + SetPaletteEntryNum(0); + } +} + +// SetNoWrap__Q34nw4r3lyt6TexMapFRCQ34nw4r3lyt6TexMap +void TexMap::SetNoWrap(const TexMap &map) { + GXTexWrapMode wrapS = GetWrapModeS(); + GXTexWrapMode wrapT = GetWrapModeT(); + + Set(map); + SetWrapMode(wrapS, wrapT); +} + +// SetNoWrap__Q34nw4r3lyt6TexMapFRC9_GXTexObj +void TexMap::SetNoWrap(const GXTexObj &pTexObj) { + void *pImage; + u16 width, height; + GXTexFmt format; + GXTexWrapMode wrapS, wrapT; + u8 mipmap; + GXGetTexObjAll(&pTexObj, &pImage, &width, &height, &format, &wrapS, &wrapT, &mipmap); + SetImage(pImage); + SetSize(width, height); + SetTexelFormat(format); +} + +// SetNoWrap__Q34nw4r3lyt6TexMapFP10TPLPaletteUl +void TexMap::SetNoWrap(TPLPalette *pal, u32 id) {} + +// SetNoWrap__Q34nw4r3lyt6TexMapFPC13TPLDescriptor +void TexMap::SetNoWrap(const TPLDescriptor *pDescriptor) { + TPLHeader *tex = pDescriptor->texHeader; + SetImage(tex->data); + SetSize(tex->width, tex->height); + SetTexelFormat(static_cast<GXTexFmt>(tex->format)); + + bool bMipMap = (tex->minLod != tex->maxLod); + SetMipMap(bMipMap); + + SetFilter(tex->minFilt, tex->magFilt); + SetLOD(tex->minLod, tex->maxLod); + SetLODBias(tex->lodBias); + SetEdgeLODEnable(tex->edgeLodEnable); + + TPLClutHeader *clut = pDescriptor->clutHeader; + if (clut != NULL) { + SetPalette(clut->data); + SetPaletteFormat(clut->format); + SetPaletteEntryNum(clut->numEntries); + } else { + SetPalette(NULL); + SetPaletteFormat(GX_TL_IA8); + SetPaletteEntryNum(0); + } +} + +// SetTexParam__Q34nw4r3lyt6TexMapFPvUsUs9_GXTexFmt14_GXTexWrapMode14_GXTexWrapModeb + +// SetLODParam__Q34nw4r3lyt6TexMapF12_GXTexFilter12_GXTexFilterfffbb13_GXAnisotropy + +// SetPaletteParam__Q34nw4r3lyt6TexMapFPv10_GXTlutFmtUs + +} // namespace lyt +} // namespace nw4r |
