sead
Loading...
Searching...
No Matches
seadGraphics.h
Go to the documentation of this file.
1#ifndef SEAD_GRAPHICS_H_
2#define SEAD_GRAPHICS_H_
3
4#include <heap/seadDisposer.h>
5#include <thread/seadCriticalSection.h>
6
7#ifdef cafe
8#include <cafe/gx2.h>
9#endif // cafe
10
11namespace sead {
12
13struct Color4f;
14class Thread;
15
16class Graphics : public sead::IDisposer
17{
18public:
30
31public:
32 static const u32 cRenderTarget_Num = 8;
33
34public:
36 static f32 getDefaultDeviceZScale() { return sDefaultDeviceZScale; }
37 static f32 getDefaultDeviceZOffset() { return sDefaultDeviceZOffset; }
38
39public:
40 // The value for each enumerator in the following enums has been confirmed to be platform-specific
41 // when comparing sead between several platforms (3DS, Wii U, Switch)
42
56
58 {
59#ifdef cafe
64#endif // cafe
65 };
66
87
98
112
126
140
149
150public:
151 static Graphics* instance() { return sInstance; }
152 static void setInstance(Graphics* impl) { sInstance = impl; }
153
154public:
156 ~Graphics() override;
157
158private:
160 const Graphics& operator=(const Graphics&);
161
162protected:
163 virtual void initializeImpl();
164 virtual void setViewportImpl(f32 x, f32 y, f32 w, f32 h);
165 virtual void setScissorImpl(f32 x, f32 y, f32 w, f32 h);
166 virtual void setDepthTestEnableImpl(bool enable);
167 virtual void setDepthWriteEnableImpl(bool enable);
168 virtual void setDepthFuncImpl(DepthFunc func);
169 virtual bool setVBlankWaitIntervalImpl(u32 interval);
170 virtual void setCullingModeImpl(CullingMode mode);
171 virtual void setBlendEnableImpl(bool enable);
172 virtual void setBlendEnableMRTImpl(u32 target, bool enable);
173 virtual void setBlendFactorImpl(BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a);
174 virtual void setBlendFactorMRTImpl(u32 target, BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a);
175 virtual void setBlendEquationImpl(BlendEquation equation_rgb, BlendEquation equation_a);
176 virtual void setBlendEquationMRTImpl(u32 target, BlendEquation equation_rgb, BlendEquation equation_a);
177 virtual void setBlendConstantColorImpl(const Color4f& color);
178 virtual void lockDrawContextImpl();
179 virtual void unlockDrawContextImpl();
180 virtual void waitForVBlankImpl();
181 virtual void setColorMaskImpl(bool r, bool g, bool b, bool a);
182 virtual void setColorMaskMRTImpl(u32 target, bool r, bool g, bool b, bool a);
183 virtual void setAlphaTestEnableImpl(bool enable);
184 virtual void setAlphaTestFuncImpl(AlphaFunc func, f32 ref);
185 virtual void setStencilTestEnableImpl(bool enable);
186 virtual void setStencilTestFuncImpl(StencilFunc func, s32 ref, u32 mask);
187 virtual void setStencilTestOpImpl(StencilOp fail, StencilOp zfail, StencilOp zpass);
188 virtual void setPolygonModeImpl(PolygonMode front, PolygonMode back);
189 virtual void setPolygonOffsetEnableImpl(bool fill_front_enable, bool fill_back_enable, bool point_line_enable);
190
191public:
192 void setViewportRealPosition(f32 x, f32 y, f32 w, f32 h)
193 {
194 setViewportImpl(x, y, w, h);
195 }
196
197 void setScissorRealPosition(f32 x, f32 y, f32 w, f32 h)
198 {
199 setScissorImpl(x, y, w, h);
200 }
201
202 void setDepthEnable(bool test_enable, bool write_enable)
203 {
204 setDepthTestEnableImpl(test_enable);
205 setDepthWriteEnableImpl(write_enable);
206 }
207
209 {
211 }
212
213 void setBlendEnable(bool enable)
214 {
216 }
217
218 void setBlendFactor(BlendFactor src_factor, BlendFactor dst_factor)
219 {
220 setBlendFactorImpl(src_factor, dst_factor, src_factor, dst_factor);
221 }
222
223 void setBlendFactorSeparate(BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
224 {
225 setBlendFactorImpl(src_factor_rgb, dst_factor_rgb, src_factor_a, dst_factor_a);
226 }
227
228 void setBlendFactorMRT(u32 target, BlendFactor src_factor, BlendFactor dst_factor)
229 {
230 setBlendFactorMRTImpl(target, src_factor, dst_factor, src_factor, dst_factor);
231 }
232
233 void setBlendFactorSeparateMRT(u32 target, BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
234 {
235 setBlendFactorMRTImpl(target, src_factor_rgb, dst_factor_rgb, src_factor_a, dst_factor_a);
236 }
237
239 {
240 setBlendEquationImpl(equation, equation);
241 }
242
244 {
245 setBlendEquationImpl(equation_rgb, equation_a);
246 }
247
248 void setBlendEquationMRT(u32 target, BlendEquation equation)
249 {
250 setBlendEquationMRTImpl(target, equation, equation);
251 }
252
253 void setBlendEquationSeparateMRT(u32 target, BlendEquation equation_rgb, BlendEquation equation_a)
254 {
255 setBlendEquationMRTImpl(target, equation_rgb, equation_a);
256 }
257
258 void setAlphaTestEnable(bool enable)
259 {
261 }
262
263 void lockDrawContext();
264 void unlockDrawContext();
265
266protected:
270
272
276};
277#ifdef cafe
278static_assert(sizeof(Graphics) == 0x54, "sead::Graphics size mismatch");
279#endif // cafe
280
281} // namespace sead
282
283#endif // SEAD_GRAPHICS_H_
Definition seadCriticalSection.h:13
Definition seadGraphics.h:17
static void setInstance(Graphics *impl)
Definition seadGraphics.h:152
static DevicePosture sDefaultDevicePosture
Definition seadGraphics.h:273
void setBlendEquationSeparateMRT(u32 target, BlendEquation equation_rgb, BlendEquation equation_a)
Definition seadGraphics.h:253
void setViewportRealPosition(f32 x, f32 y, f32 w, f32 h)
Definition seadGraphics.h:192
virtual void setBlendEquationImpl(BlendEquation equation_rgb, BlendEquation equation_a)
virtual void setBlendEnableImpl(bool enable)
virtual void setDepthFuncImpl(DepthFunc func)
DepthFunc
Definition seadGraphics.h:44
BlendEquation
Definition seadGraphics.h:89
virtual void setScissorImpl(f32 x, f32 y, f32 w, f32 h)
virtual void lockDrawContextImpl()
CriticalSection mContextCriticalSection
Definition seadGraphics.h:269
void setAlphaTestEnable(bool enable)
Definition seadGraphics.h:258
void setDepthEnable(bool test_enable, bool write_enable)
Definition seadGraphics.h:202
static f32 getDefaultDeviceZScale()
Definition seadGraphics.h:36
s32 mContextRefCounter
Definition seadGraphics.h:268
static Graphics * instance()
Definition seadGraphics.h:151
static const u32 cRenderTarget_Num
Definition seadGraphics.h:32
void setBlendEquationMRT(u32 target, BlendEquation equation)
Definition seadGraphics.h:248
StencilFunc
Definition seadGraphics.h:114
static f32 sDefaultDeviceZScale
Definition seadGraphics.h:274
virtual void setDepthWriteEnableImpl(bool enable)
virtual void unlockDrawContextImpl()
static Graphics * sInstance
Definition seadGraphics.h:271
PolygonMode
Definition seadGraphics.h:142
static f32 getDefaultDeviceZOffset()
Definition seadGraphics.h:37
virtual void setStencilTestEnableImpl(bool enable)
void setScissorRealPosition(f32 x, f32 y, f32 w, f32 h)
Definition seadGraphics.h:197
virtual void setStencilTestFuncImpl(StencilFunc func, s32 ref, u32 mask)
virtual void setPolygonModeImpl(PolygonMode front, PolygonMode back)
AlphaFunc
Definition seadGraphics.h:100
void setBlendEquation(BlendEquation equation)
Definition seadGraphics.h:238
virtual bool setVBlankWaitIntervalImpl(u32 interval)
virtual void setViewportImpl(f32 x, f32 y, f32 w, f32 h)
Thread * mContextHolderThread
Definition seadGraphics.h:267
static f32 sDefaultDeviceZOffset
Definition seadGraphics.h:275
StencilOp
Definition seadGraphics.h:128
virtual void setAlphaTestFuncImpl(AlphaFunc func, f32 ref)
virtual void setColorMaskImpl(bool r, bool g, bool b, bool a)
virtual void setBlendConstantColorImpl(const Color4f &color)
Graphics(const Graphics &)
virtual void setAlphaTestEnableImpl(bool enable)
static DevicePosture getDefaultDevicePosture()
Definition seadGraphics.h:35
virtual void initializeImpl()
virtual void setBlendFactorImpl(BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
void unlockDrawContext()
Definition seadGraphics.cpp:31
void setBlendEnable(bool enable)
Definition seadGraphics.h:213
void setDepthFunc(Graphics::DepthFunc func)
Definition seadGraphics.h:208
virtual void setBlendEnableMRTImpl(u32 target, bool enable)
virtual void waitForVBlankImpl()
virtual void setBlendEquationMRTImpl(u32 target, BlendEquation equation_rgb, BlendEquation equation_a)
virtual void setBlendFactorMRTImpl(u32 target, BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
void setBlendFactorSeparate(BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
Definition seadGraphics.h:223
virtual void setColorMaskMRTImpl(u32 target, bool r, bool g, bool b, bool a)
virtual void setDepthTestEnableImpl(bool enable)
BlendFactor
Definition seadGraphics.h:68
virtual void setCullingModeImpl(CullingMode mode)
void setBlendFactorMRT(u32 target, BlendFactor src_factor, BlendFactor dst_factor)
Definition seadGraphics.h:228
void setBlendEquationSeparate(BlendEquation equation_rgb, BlendEquation equation_a)
Definition seadGraphics.h:243
void setBlendFactorSeparateMRT(u32 target, BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
Definition seadGraphics.h:233
CullingMode
Definition seadGraphics.h:58
~Graphics() override
DevicePosture
Definition seadGraphics.h:20
@ cDevicePosture_Invalid
Definition seadGraphics.h:28
@ cDevicePosture_RotateLeft
Definition seadGraphics.h:23
@ cDevicePosture_FlipY
Definition seadGraphics.h:26
@ cDevicePosture_FlipXY
Definition seadGraphics.h:27
@ cDevicePosture_RotateRight
Definition seadGraphics.h:22
@ cDevicePosture_RotateHalfAround
Definition seadGraphics.h:24
@ cDevicePosture_Same
Definition seadGraphics.h:21
@ cDevicePosture_FlipX
Definition seadGraphics.h:25
void lockDrawContext()
Definition seadGraphics.cpp:13
const Graphics & operator=(const Graphics &)
virtual void setStencilTestOpImpl(StencilOp fail, StencilOp zfail, StencilOp zpass)
void setBlendFactor(BlendFactor src_factor, BlendFactor dst_factor)
Definition seadGraphics.h:218
virtual void setPolygonOffsetEnableImpl(bool fill_front_enable, bool fill_back_enable, bool point_line_enable)
Definition seadDisposer.h:12
Definition seadThread.h:28
Definition seadAssert.h:44
Definition seadColor.h:9