sead
Loading...
Searching...
No Matches
aglShader.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglShaderEnum.h>
4
5#ifdef cafe
6#include <cafe/gx2.h>
7#endif // cafe
8
9namespace agl {
10
12
13class Shader
14{
15public:
16 Shader();
17 virtual ~Shader() { }
18
19 virtual ShaderType getShaderType() const = 0;
20 virtual ShaderMode getShaderMode() const { return cShaderMode_Invalid; }
21 virtual u32 getRingItemSize() const { return 0; }
22
23 u32 setUp(bool compile_source, bool) const;
24
25 void* getBinary() { return const_cast<void*>(mBinary); }
26 const void* getBinary() const { return mBinary; }
27
28 void setBinary(const void* binary);
29
31
32 void setCompileInfo(ShaderCompileInfo* compile_info) const
33 {
34 mCompileInfo = compile_info;
35 }
36
37private:
38 const void* mBinary;
40};
41static_assert(sizeof(Shader) == 0xC, "agl::Shader size mismatch");
42
43class VertexShader : public Shader
44{
45public:
47 : Shader()
48 {
49 }
50
51 virtual ShaderType getShaderType() const
52 {
53 return cShaderType_Vertex;
54 }
55
56#ifdef cafe
58 {
59 return static_cast<GX2VertexShader*>(Shader::getBinary());
60 }
61
63 {
64 return static_cast<const GX2VertexShader*>(Shader::getBinary());
65 }
66
68 {
70 }
71#endif // cafe
72};
73
74class FragmentShader : public Shader
75{
76public:
78 : Shader()
79 {
80 }
81
82 virtual ShaderType getShaderType() const
83 {
85 }
86
87#ifdef cafe
89 {
90 return static_cast<GX2PixelShader*>(Shader::getBinary());
91 }
92
94 {
95 return static_cast<const GX2PixelShader*>(Shader::getBinary());
96 }
97
99 {
101 }
102#endif // cafe
103};
104
105class GeometryShader : public Shader
106{
107public:
109 : Shader()
110 {
111 }
112
113 virtual ShaderType getShaderType() const
114 {
116 }
117
118#ifdef cafe
120 {
121 return static_cast<GX2GeometryShader*>(Shader::getBinary());
122 }
123
125 {
126 return static_cast<const GX2GeometryShader*>(Shader::getBinary());
127 }
128
130 {
132 }
133#endif // cafe
134};
135
136}
Definition aglShader.h:75
FragmentShader()
Definition aglShader.h:77
virtual ShaderType getShaderType() const
Definition aglShader.h:82
Definition aglShader.h:106
GeometryShader()
Definition aglShader.h:108
virtual ShaderType getShaderType() const
Definition aglShader.h:113
Definition aglShaderCompileInfo.h:13
Definition aglShader.h:14
virtual ~Shader()
Definition aglShader.h:17
Shader()
Definition aglShader.cpp:8
virtual ShaderMode getShaderMode() const
Definition aglShader.h:20
virtual ShaderType getShaderType() const =0
ShaderCompileInfo * mCompileInfo
Definition aglShader.h:39
void * getBinary()
Definition aglShader.h:25
ShaderCompileInfo * getCompileInfo() const
Definition aglShader.h:30
void setBinary(const void *binary)
Definition aglShader.cpp:47
const void * mBinary
Definition aglShader.h:38
const void * getBinary() const
Definition aglShader.h:26
u32 setUp(bool compile_source, bool) const
Definition aglShader.cpp:14
void setCompileInfo(ShaderCompileInfo *compile_info) const
Definition aglShader.h:32
virtual u32 getRingItemSize() const
Definition aglShader.h:21
Definition aglShader.h:44
virtual ShaderType getShaderType() const
Definition aglShader.h:51
VertexShader()
Definition aglShader.h:46
Definition aglDisplayList.cpp:5
ShaderType
Definition aglShaderEnum.h:10
@ cShaderType_Geometry
Definition aglShaderEnum.h:13
@ cShaderType_Vertex
Definition aglShaderEnum.h:11
@ cShaderType_Fragment
Definition aglShaderEnum.h:12
ShaderMode
Definition aglShaderEnum.h:27
@ cShaderMode_Invalid
Definition aglShaderEnum.h:31