NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
lyt_texMap.h
1#ifndef NW4R_LYT_TEX_MAP_H
2#define NW4R_LYT_TEX_MAP_H
3#include <nw4r/types_nw4r.h>
4
5#include <revolution/GX.h>
6#include <revolution/TPL.h>
7
8namespace nw4r {
9namespace lyt {
10
11class TexMap {
12public:
13 TexMap() {
14 SetImage(NULL);
15 SetSize(0, 0);
16 SetTexelFormat(GX_TF_I4);
17 SetWrapMode(GX_CLAMP, GX_CLAMP);
18 SetMipMap(false);
19 SetFilter(GX_LINEAR, GX_LINEAR);
20 SetLOD(0.0f, 0.0f);
21 SetLODBias(0.0f);
22 SetBiasClampEnable(false);
23 SetEdgeLODEnable(false);
24 SetAnisotropy(GX_ANISO_1);
25 SetPalette(NULL);
26 SetPaletteFormat(GX_TL_IA8);
27 SetPaletteEntryNum(0);
28 }
29
30 TexMap(TPLPalette* pPalette, ulong id) {
31 Set(pPalette, id);
32 SetBiasClampEnable(false);
33 SetAnisotropy(GX_ANISO_1);
34 }
35
36 void Get(GXTexObj* pTexObj) const;
37 void Get(GXTlutObj* pTlutObj) const;
38
39 void Set(const TexMap& rOther) {
40 *this = rOther;
41 }
42 void Set(TPLPalette* pPalette, ulong id);
43 void Set(const TPLDescriptor* pDesc);
44
45 void SetNoWrap(const TexMap& rOther);
46 void SetNoWrap(const TPLDescriptor* pDesc);
47
48 void* GetImage() const {
49 return mpImage;
50 }
51 void SetImage(void* pImage) {
52 mpImage = pImage;
53 }
54
55 void* GetPalette() const {
56 return mpPalette;
57 }
58 void SetPalette(void* pPalette) {
59 mpPalette = pPalette;
60 }
61
62 u16 GetWidth() const {
63 return mWidth;
64 }
65 u16 GetHeight() const {
66 return mHeight;
67 }
68 Size GetSize() const {
69 return Size(static_cast<f32>(mWidth), static_cast<f32>(mHeight));
70 }
71 void SetSize(u16 width, u16 height) {
72 mWidth = width;
73 mHeight = height;
74 }
75
76 f32 GetMinLOD() const {
77 return mMinLOD;
78 }
79 f32 GetMaxLOD() const {
80 return mMaxLOD;
81 }
82 void SetLOD(f32 minLOD, f32 maxLOD) {
83 mMinLOD = minLOD;
84 mMaxLOD = maxLOD;
85 }
86
87 f32 GetLODBias() const {
88 return mLODBias / 256.0f;
89 }
90 void SetLODBias(f32 bias) {
91 mLODBias = static_cast<u16>(bias * 256.0f);
92 }
93
94 u16 GetPaletteEntryNum() const {
95 return mPaletteEntryNum;
96 }
97 void SetPaletteEntryNum(u16 entrynum) {
98 mPaletteEntryNum = entrynum;
99 }
100
101 GXTexFmt GetTexelFormat() const {
102 return static_cast<GXTexFmt>(mBits.textureFormat);
103 }
104 void SetTexelFormat(GXTexFmt format) {
105 mBits.textureFormat = format;
106 }
107
108 bool IsMipMap() const {
109 return mBits.mipmap;
110 }
111 void SetMipMap(bool mipmap) {
112 mBits.mipmap = mipmap;
113 }
114
115 GXTexWrapMode GetWrapModeS() const {
116 return static_cast<GXTexWrapMode>(mBits.wrapS);
117 }
118 GXTexWrapMode GetWrapModeT() const {
119 return static_cast<GXTexWrapMode>(mBits.wrapT);
120 }
121 void SetWrapMode(GXTexWrapMode wrapS, GXTexWrapMode wrapT) {
122 mBits.wrapS = wrapS;
123 mBits.wrapT = wrapT;
124 }
125
126 GXTexFilter GetMinFilter() const {
127 return static_cast<GXTexFilter>(mBits.minFilter);
128 }
129 GXTexFilter GetMagFilter() const {
130 return static_cast<GXTexFilter>(mBits.magFilter);
131 }
132 void SetFilter(GXTexFilter minFilt, GXTexFilter magFilt) {
133 mBits.minFilter = minFilt;
134 mBits.magFilter = magFilt;
135 }
136
137 bool IsBiasClampEnable() const {
138 return mBits.biasClampEnable;
139 }
140 void SetBiasClampEnable(bool enable) {
141 mBits.biasClampEnable = enable;
142 }
143
144 bool IsEdgeLODEnable() const {
145 return mBits.edgeLODEnable;
146 }
147 void SetEdgeLODEnable(bool enable) {
148 mBits.edgeLODEnable = enable;
149 }
150
151 GXAnisotropy GetAnisotropy() const {
152 return static_cast<GXAnisotropy>(mBits.anisotropy);
153 }
154 void SetAnisotropy(GXAnisotropy aniso) {
155 mBits.anisotropy = aniso;
156 }
157
158 GXTlutFmt GetPaletteFormat() const {
159 return static_cast<GXTlutFmt>(mBits.paletteFormat);
160 }
161 void SetPaletteFormat(GXTlutFmt format) {
162 mBits.paletteFormat = format;
163 }
164
165private:
166 void* mpImage; // at 0x0
167 void* mpPalette; // at 0x4
168 u16 mWidth; // at 0x8
169 u16 mHeight; // at 0xA
170 f32 mMinLOD; // at 0xC
171 f32 mMaxLOD; // at 0x10
172 u16 mLODBias; // at 0x14
173 u16 mPaletteEntryNum; // at 0x16
174
175 struct {
176 ulong textureFormat : 4;
177 ulong mipmap : 1;
178 ulong wrapS : 2;
179 ulong wrapT : 2;
180 ulong minFilter : 3;
181 ulong magFilter : 3;
182 ulong biasClampEnable : 1;
183 ulong edgeLODEnable : 1;
184 ulong anisotropy : 2;
185 ulong paletteFormat : 2;
186 } mBits; // at 0x18
187};
188
189} // namespace lyt
190} // namespace nw4r
191
192#endif
2D graphics drawing library.