Polyphase Game Engine
Loading...
Searching...
No Matches
C3dTypes.h
Go to the documentation of this file.
1#pragma once
2
3#if API_C3D
4
5#include <3ds.h>
6#include <citro3d.h>
7#include <vector>
8
10#include "EngineTypes.h"
11
12class World;
13
14enum class ShaderId
15{
19 Quad,
20 Text,
21
22 Count
23};
24
25enum Shininess
26{
27 Shininess2,
28 Shininess4,
29 Shininess8,
30 Shininess16,
31 Shininess32,
32 Shininess64,
33
34 NumShininessLevels
35};
36
37enum FresnelPower
38{
39 FresnelPower1,
40 FresnelPower1_5,
41 FresnelPower2,
42 FresnelPower4,
43
44 NumFresnelPowerLevels
45};
46
47enum ToonLevel
48{
49 ToonLevel2,
50 ToonLevel3,
51
52 NumToonLevels
53};
54
55// Uniform Location structs.
56// Prefetch the locations for possibly better performance.
57// TODO: Fill in with other primitive uniforms (staticmesh, skeletalmesh, etc)
58struct StaticMeshUniformLocations
59{
60 int8_t mWorldViewMtx = -1;
61 int8_t mNormalMtx = -1;
62 int8_t mProjMtx = -1;
63 int8_t mUvOffsetScale0 = -1;
64 int8_t mUvOffsetScale1 = -1;
65 int8_t mUvMaps = -1;
66 int8_t mColorMult = -1;
67};
68
69struct SkeletalMeshUniformLocations
70{
71 int8_t mWorldViewMtx = -1;
72 int8_t mNormalMtx = -1;
73 int8_t mProjMtx = -1;
74 int8_t mBoneMtx = -1;
75 int8_t mUvOffsetScale0 = -1;
76 int8_t mUvOffsetScale1 = -1;
77 int8_t mUvMaps = -1;
78 int8_t mUniformColor = -1;
79};
80
81struct ParticleUniformLocations
82{
83 int8_t mWorldViewMtx = -1;
84 int8_t mProjMtx = -1;
85 int8_t mUvOffsetScale = -1;
86};
87
88struct QuadUniformLocations
89{
90 int8_t mProjMtx = -1;
91};
92
93struct TextUniformLocations
94{
95 int8_t mWorldViewMtx = -1;
96 int8_t mProjMtx = -1;
97};
98
99struct LightEnv
100{
101 C3D_LightEnv mLightEnv = {};
102 C3D_LightLutDA mLightAttenuationLuts[8] = {};
103 float mLightRadii[8] = {};
104 C3D_Light mLights[8] = {};
105 // Initialize to 0 so first draw triggers SetupLighting (primitives default to 0x01)
106 uint8_t mLightingChannels = 0;
107 bool mBakedLighting = false;
108};
109
110struct C3dContext
111{
112 World* mWorld = nullptr;
113 C3D_RenderTarget* mRenderTargetLeft = nullptr;
114 C3D_RenderTarget* mRenderTargetRight = nullptr;
115 C3D_RenderTarget* mRenderTargetBottom = nullptr;
116 float mIod = 0.0f;
117 uint32_t mCurrentView = 0;
118 uint32_t mFrameIndex = 0;
119 uint32_t mCurrentScreen = 0;
120
121 DVLB_s* mShaderDvlbs[uint32_t(ShaderId::Count)] = {};
122 shaderProgram_s mShaderPrograms[uint32_t(ShaderId::Count)] = {};
123
124 LightEnv mLightEnv;
125 C3D_LightEnv mNoLightEnv = {};
126 C3D_LightLut mLightLut[NumShininessLevels] = {};
127 C3D_LightLut mFresnelLut[NumFresnelPowerLevels] = {};
128 C3D_LightLut mToonLut[NumToonLevels] = {};
129
130 C3D_FogLut mFogLut = {};
131 float mFogNear = 0.0f;
132 float mFogFar = 0.0f;
133 FogDensityFunc mFogDensityFunc = FogDensityFunc::Count;
134 bool mMaterialApplyFog = true;
135 bool mFogEnabled = false;
136
137 float mColorScale = 1.0f;
138 float mInvColorScale = 1.0f;
139 GPU_TEVSCALE mColorScaleEnum = GPU_TEVSCALE_1;
140
141 ShaderId mLastBoundShaderId = ShaderId::Count;
142 Material* mLastBoundMaterial = nullptr;
143 bool mLastUseBakedLighting = false;
144 bool mLastUseVertexColor = false;
145 uint8_t mLastLightingChannels = 0;
146
147 std::vector<void*> mLinearDestroyQueue[MAX_FRAMES];
148 std::vector<C3D_Tex> mTexDestroyQueue[MAX_FRAMES];
149
150 StaticMeshUniformLocations mStaticMeshLocs;
151 SkeletalMeshUniformLocations mSkeletalMeshLocs;
152 ParticleUniformLocations mParticleLocs;
153 QuadUniformLocations mQuadLocs;
154 TextUniformLocations mTextLocs;
155};
156
157extern C3dContext gC3dContext;
158
159#endif
FogDensityFunc
Definition EngineTypes.h:438
Definition Material.h:48
Definition Quad.h:20
Definition SkeletalMesh.h:86
Definition StaticMesh.h:18
Definition Text.h:24
Definition World.h:24
Definition Particle3d.h:21