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 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:
155 Graphics();
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 initialize();
193
194 void setViewportRealPosition(f32 x, f32 y, f32 w, f32 h)
195 {
196 setViewportImpl(x, y, w, h);
197 }
198
199 void setScissorRealPosition(f32 x, f32 y, f32 w, f32 h)
200 {
201 setScissorImpl(x, y, w, h);
202 }
203
204 void setDepthEnable(bool test_enable, bool write_enable)
205 {
206 setDepthTestEnableImpl(test_enable);
207 setDepthWriteEnableImpl(write_enable);
208 }
209
211 {
213 }
214
215 void setBlendEnable(bool enable)
216 {
218 }
219
220 void setBlendFactor(BlendFactor src_factor, BlendFactor dst_factor)
221 {
222 setBlendFactorImpl(src_factor, dst_factor, src_factor, dst_factor);
223 }
224
225 void setBlendFactorSeparate(BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
226 {
227 setBlendFactorImpl(src_factor_rgb, dst_factor_rgb, src_factor_a, dst_factor_a);
228 }
229
230 void setBlendFactorMRT(u32 target, BlendFactor src_factor, BlendFactor dst_factor)
231 {
232 setBlendFactorMRTImpl(target, src_factor, dst_factor, src_factor, dst_factor);
233 }
234
235 void setBlendFactorSeparateMRT(u32 target, BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
236 {
237 setBlendFactorMRTImpl(target, src_factor_rgb, dst_factor_rgb, src_factor_a, dst_factor_a);
238 }
239
241 {
242 setBlendEquationImpl(equation, equation);
243 }
244
246 {
247 setBlendEquationImpl(equation_rgb, equation_a);
248 }
249
250 void setBlendEquationMRT(u32 target, BlendEquation equation)
251 {
252 setBlendEquationMRTImpl(target, equation, equation);
253 }
254
255 void setBlendEquationSeparateMRT(u32 target, BlendEquation equation_rgb, BlendEquation equation_a)
256 {
257 setBlendEquationMRTImpl(target, equation_rgb, equation_a);
258 }
259
260 void setAlphaTestEnable(bool enable)
261 {
263 }
264
265 void lockDrawContext();
266 void unlockDrawContext();
267
268protected:
272
274
278};
279#ifdef cafe
280static_assert(sizeof(Graphics) == 0x54, "sead::Graphics size mismatch");
281#endif // cafe
282
283} // namespace sead
284
285#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:275
void setBlendEquationSeparateMRT(u32 target, BlendEquation equation_rgb, BlendEquation equation_a)
Definition seadGraphics.h:255
void setViewportRealPosition(f32 x, f32 y, f32 w, f32 h)
Definition seadGraphics.h:194
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:271
void setAlphaTestEnable(bool enable)
Definition seadGraphics.h:260
void setDepthEnable(bool test_enable, bool write_enable)
Definition seadGraphics.h:204
static f32 getDefaultDeviceZScale()
Definition seadGraphics.h:36
s32 mContextRefCounter
Definition seadGraphics.h:270
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:250
StencilFunc
Definition seadGraphics.h:114
static f32 sDefaultDeviceZScale
Definition seadGraphics.h:276
virtual void setDepthWriteEnableImpl(bool enable)
virtual void unlockDrawContextImpl()
static Graphics * sInstance
Definition seadGraphics.h:273
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:199
virtual void setStencilTestFuncImpl(StencilFunc func, s32 ref, u32 mask)
virtual void setPolygonModeImpl(PolygonMode front, PolygonMode back)
AlphaFunc
Definition seadGraphics.h:100
Graphics()
Definition seadGraphics.cpp:14
void setBlendEquation(BlendEquation equation)
Definition seadGraphics.h:240
virtual bool setVBlankWaitIntervalImpl(u32 interval)
virtual void setViewportImpl(f32 x, f32 y, f32 w, f32 h)
Thread * mContextHolderThread
Definition seadGraphics.h:269
static f32 sDefaultDeviceZOffset
Definition seadGraphics.h:277
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:54
void setBlendEnable(bool enable)
Definition seadGraphics.h:215
void setDepthFunc(Graphics::DepthFunc func)
Definition seadGraphics.h:210
virtual void setBlendEnableMRTImpl(u32 target, bool enable)
void initialize()
Definition seadGraphics.cpp:24
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:225
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:230
void setBlendEquationSeparate(BlendEquation equation_rgb, BlendEquation equation_a)
Definition seadGraphics.h:245
void setBlendFactorSeparateMRT(u32 target, BlendFactor src_factor_rgb, BlendFactor dst_factor_rgb, BlendFactor src_factor_a, BlendFactor dst_factor_a)
Definition seadGraphics.h:235
CullingMode
Definition seadGraphics.h:58
~Graphics() override
Definition seadGraphics.cpp:20
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:36
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:220
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