sead
Loading...
Searching...
No Matches
aglTextureData.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglTextureEnum.h>
4#include <math/seadMathCalcCommon.h>
5
6#include <cafe/gx2.h>
7
8namespace agl {
9
11{
12public:
14 virtual ~TextureData() { }
15
16 bool operator==(const TextureData& rhs) const;
17 bool operator!=(const TextureData& rhs) const { return !(*this == rhs); }
18
20 TextureType getTextureType() const { return TextureType(mSurface.dim); }
21
22 u32 getWidth(s32 mip_level = 0) const { return sead::Mathi::max(mSurface.width >> mip_level, mMinWidth); }
23 u32 getHeight(s32 mip_level = 0) const { return sead::Mathi::max(mSurface.height >> mip_level, mMinHeight); }
24
25 MultiSampleType getMultiSampleType() const { return MultiSampleType(mSurface.aa); }
26
27 u32 getSliceNum(s32 mip_level = 0) const { return sead::Mathi::max(mSurface.depth >> mip_level, mMinSlice); }
28
29 void* getImagePtr() const { return mSurface.imagePtr; }
30 void setImagePtr(void* ptr) { mSurface.imagePtr = ptr; }
31
32 u32 getImageByteSize() const { return mSurface.imageSize; }
33
34 void* getMipPtr() const { return mSurface.mipPtr; }
35 void setMipPtr(void* ptr) { mSurface.mipPtr = ptr; }
36
37 u32 getMipByteSize() const { return mSurface.mipSize; }
38
39 u32 getAlignment() const { return mSurface.alignment; }
40
41 const GX2Surface& getSurface() const { return mSurface; }
42
47
49 {
50 mCompR = r;
51 mCompG = g;
52 mCompB = b;
53 mCompA = a;
54 }
55
56 void initialize(TextureFormat format, u32 width, u32 height, u32 mip_level_num)
57 {
58 initialize_(cTextureType_2D, format, width, height, 1, mip_level_num, cMultiSampleType_1x);
59 }
60
61 void initialize3D(TextureFormat format, u32 width, u32 height, u32 slice_num, u32 mip_level_num)
62 {
63 initialize_(cTextureType_3D, format, width, height, slice_num, mip_level_num, cMultiSampleType_1x);
64 }
65
66 void initializeCubeMap(TextureFormat format, u32 width, u32 height, u32 mip_level_num)
67 {
68 initialize_(cTextureType_CubeMap, format, width, height, 6, mip_level_num, cMultiSampleType_1x);
69 }
70
71 void initializeCubeMapArray(TextureFormat format, u32 width, u32 height, u32 array_num, u32 mip_level_num)
72 {
73 initialize_(cTextureType_CubeMap, format, width, height, array_num * 6, mip_level_num, cMultiSampleType_1x);
74 }
75
76 void initializeArray(TextureFormat format, u32 width, u32 height, u32 array_num, u32 mip_level_num)
77 {
78 initialize_(cTextureType_2D_Array, format, width, height, array_num, mip_level_num, cMultiSampleType_1x);
79 }
80
81 void initializeMultiSample(TextureFormat format, u32 width, u32 height, MultiSampleType multi_sample_type)
82 {
83 initialize_(cTextureType_2D_MSAA, format, width, height, 1, 1, multi_sample_type);
84 }
85
86 u32 getMipLevelNum() const { return mSurface.numMips; }
87 void setMipLevelNum(u32 mip_level_num);
88
89 void setSurfaceSwizzle(u32 swizzle) { GX2SetSurfaceSwizzle(&mSurface, swizzle); }
90
91 void invalidateGPUCache() const;
92
93private:
94 void copyTo_(const TextureData* dst, s32 dst_slice, s32 dst_mip_level, s32 src_slice, s32 src_mip_level, bool restore_state) const;
95
96public:
97 void copyTo(const TextureData* dst, s32 slice, s32 mip_level) const
98 {
99 copyTo_(dst, slice, mip_level, slice, mip_level, false);
100 }
101
102 void copyTo(const TextureData* dst, s32 dst_slice, s32 dst_mip_level, s32 src_slice, s32 src_mip_level) const
103 {
104 copyTo_(dst, dst_slice, dst_mip_level, src_slice, src_mip_level, false);
105 }
106
107 void copyToAll(const TextureData* dst) const;
108
109private:
110 void initialize_(TextureType type, TextureFormat format, u32 width, u32 height, u32 slice_num, u32 mip_level_num, MultiSampleType multi_sample_type);
111 void initializeSize_(u32 width, u32 height, u32 slice_num);
112
113public:
114 void initializeFromSurface(const GX2Surface& surface);
115
116private:
127};
128static_assert(sizeof(TextureData) == 0x9C, "agl::TextureData size mismatch");
129
130inline bool
131TextureData::operator==(const TextureData& rhs) const
132{
133 return (
134 mSurface.dim == rhs.mSurface.dim &&
135 mSurface.width == rhs.mSurface.width &&
136 mSurface.height == rhs.mSurface.height &&
137 mSurface.depth == rhs.mSurface.depth &&
138 mSurface.numMips == rhs.mSurface.numMips &&
139 mSurface.format == rhs.mSurface.format &&
140 mSurface.swizzle == rhs.mSurface.swizzle &&
141 mSurface.tileMode == rhs.mSurface.tileMode &&
142 mSurface.aa == rhs.mSurface.aa
143 );
144}
145
146}
Definition aglTextureData.h:11
u32 getWidth(s32 mip_level=0) const
Definition aglTextureData.h:22
u32 getHeight(s32 mip_level=0) const
Definition aglTextureData.h:23
TextureType getTextureType() const
Definition aglTextureData.h:20
void initializeSize_(u32 width, u32 height, u32 slice_num)
Definition aglTextureData.cpp:106
u32 mMinWidth
Definition aglTextureData.h:119
GX2Surface mSurface
Definition aglTextureData.h:118
void setImagePtr(void *ptr)
Definition aglTextureData.h:30
void setMipPtr(void *ptr)
Definition aglTextureData.h:35
void copyTo(const TextureData *dst, s32 slice, s32 mip_level) const
Definition aglTextureData.h:97
const GX2Surface & getSurface() const
Definition aglTextureData.h:41
MultiSampleType getMultiSampleType() const
Definition aglTextureData.h:25
void initialize(TextureFormat format, u32 width, u32 height, u32 mip_level_num)
Definition aglTextureData.h:56
void copyToAll(const TextureData *dst) const
Definition aglTextureData.cpp:65
void copyTo_(const TextureData *dst, s32 dst_slice, s32 dst_mip_level, s32 src_slice, s32 src_mip_level, bool restore_state) const
Definition aglTextureData.cpp:38
void * getImagePtr() const
Definition aglTextureData.h:29
u32 mMinSlice
Definition aglTextureData.h:121
void copyTo(const TextureData *dst, s32 dst_slice, s32 dst_mip_level, s32 src_slice, s32 src_mip_level) const
Definition aglTextureData.h:102
u32 getMipByteSize() const
Definition aglTextureData.h:37
TextureCompSel mCompA
Definition aglTextureData.h:126
void invalidateGPUCache() const
Definition aglTextureData.cpp:29
TextureCompSel mCompB
Definition aglTextureData.h:125
TextureCompSel getComponentA() const
Definition aglTextureData.h:46
virtual ~TextureData()
Definition aglTextureData.h:14
u32 mMinHeight
Definition aglTextureData.h:120
void initializeCubeMapArray(TextureFormat format, u32 width, u32 height, u32 array_num, u32 mip_level_num)
Definition aglTextureData.h:71
void initializeCubeMap(TextureFormat format, u32 width, u32 height, u32 mip_level_num)
Definition aglTextureData.h:66
u32 getMipLevelNum() const
Definition aglTextureData.h:86
TextureFormat mFormat
Definition aglTextureData.h:117
void setMipLevelNum(u32 mip_level_num)
Definition aglTextureData.cpp:23
void initialize3D(TextureFormat format, u32 width, u32 height, u32 slice_num, u32 mip_level_num)
Definition aglTextureData.h:61
TextureFormat getTextureFormat() const
Definition aglTextureData.h:19
u32 mMaxMipLevel
Definition aglTextureData.h:122
void setTextureCompSel(TextureCompSel r, TextureCompSel g, TextureCompSel b, TextureCompSel a)
Definition aglTextureData.h:48
TextureCompSel getComponentB() const
Definition aglTextureData.h:45
TextureCompSel mCompG
Definition aglTextureData.h:124
u32 getImageByteSize() const
Definition aglTextureData.h:32
TextureCompSel getComponentG() const
Definition aglTextureData.h:44
bool operator==(const TextureData &rhs) const
Definition aglTextureData.h:131
bool operator!=(const TextureData &rhs) const
Definition aglTextureData.h:17
void setSurfaceSwizzle(u32 swizzle)
Definition aglTextureData.h:89
void * getMipPtr() const
Definition aglTextureData.h:34
u32 getAlignment() const
Definition aglTextureData.h:39
TextureCompSel getComponentR() const
Definition aglTextureData.h:43
void initialize_(TextureType type, TextureFormat format, u32 width, u32 height, u32 slice_num, u32 mip_level_num, MultiSampleType multi_sample_type)
Definition aglTextureData.cpp:77
TextureCompSel mCompR
Definition aglTextureData.h:123
TextureData()
Definition aglTextureData.cpp:10
void initializeMultiSample(TextureFormat format, u32 width, u32 height, MultiSampleType multi_sample_type)
Definition aglTextureData.h:81
u32 getSliceNum(s32 mip_level=0) const
Definition aglTextureData.h:27
void initializeFromSurface(const GX2Surface &surface)
Definition aglTextureData.cpp:143
void initializeArray(TextureFormat format, u32 width, u32 height, u32 array_num, u32 mip_level_num)
Definition aglTextureData.h:76
Definition aglDisplayList.cpp:5
TextureFormat
Definition aglTextureEnum.h:10
MultiSampleType
Definition aglTextureEnum.h:139
TextureCompSel
Definition aglTextureEnum.h:92
TextureType
Definition aglTextureEnum.h:77