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 mWorldMtx = -1;
64 int8_t mUvOffsetScale0 = -1;
65 int8_t mUvOffsetScale1 = -1;
66 int8_t mUvMaps = -1;
67 int8_t mUvSources = -1;
68 int8_t mColorMult = -1;
69};
70
71struct SkeletalMeshUniformLocations
72{
73 int8_t mWorldViewMtx = -1;
74 int8_t mNormalMtx = -1;
75 int8_t mProjMtx = -1;
76 int8_t mWorldMtx = -1;
77 int8_t mBoneMtx = -1;
78 int8_t mUvOffsetScale0 = -1;
79 int8_t mUvOffsetScale1 = -1;
80 int8_t mUvMaps = -1;
81 int8_t mUvSources = -1;
82 int8_t mUniformColor = -1;
83};
84
85struct ParticleUniformLocations
86{
87 int8_t mWorldViewMtx = -1;
88 int8_t mProjMtx = -1;
89 int8_t mUvOffsetScale = -1;
90};
91
92struct QuadUniformLocations
93{
94 int8_t mProjMtx = -1;
95};
96
97struct TextUniformLocations
98{
99 int8_t mWorldViewMtx = -1;
100 int8_t mProjMtx = -1;
101};
102
103struct LightEnv
104{
105 C3D_LightEnv mLightEnv = {};
106 C3D_LightLutDA mLightAttenuationLuts[8] = {};
107 float mLightRadii[8] = {};
108 C3D_LightLut mLightSpotLuts[8] = {};
109 float mLightSpotInner[8] = {};
110 float mLightSpotOuter[8] = {};
111 C3D_Light mLights[8] = {};
112 // Initialize to 0 so first draw triggers SetupLighting (primitives default to 0x01)
113 uint8_t mLightingChannels = 0;
114 bool mBakedLighting = false;
115};
116
117struct C3dContext
118{
119 World* mWorld = nullptr;
120 C3D_RenderTarget* mRenderTargetLeft = nullptr;
121 C3D_RenderTarget* mRenderTargetRight = nullptr;
122 C3D_RenderTarget* mRenderTargetBottom = nullptr;
123 float mIod = 0.0f;
124 uint32_t mCurrentView = 0;
125 uint32_t mFrameIndex = 0;
126 uint32_t mCurrentScreen = 0;
127
128 DVLB_s* mShaderDvlbs[uint32_t(ShaderId::Count)] = {};
129 shaderProgram_s mShaderPrograms[uint32_t(ShaderId::Count)] = {};
130
131 LightEnv mLightEnv;
132 C3D_LightEnv mNoLightEnv = {};
133 C3D_LightLut mLightLut[NumShininessLevels] = {};
134 C3D_LightLut mFresnelLut[NumFresnelPowerLevels] = {};
135 C3D_LightLut mToonLut[NumToonLevels] = {};
136
137 C3D_FogLut mFogLut = {};
138 float mFogNear = 0.0f;
139 float mFogFar = 0.0f;
140 FogDensityFunc mFogDensityFunc = FogDensityFunc::Count;
141 bool mMaterialApplyFog = true;
142 bool mFogEnabled = false;
143
144 float mColorScale = 1.0f;
145 float mInvColorScale = 1.0f;
146 GPU_TEVSCALE mColorScaleEnum = GPU_TEVSCALE_1;
147
148 ShaderId mLastBoundShaderId = ShaderId::Count;
149 Material* mLastBoundMaterial = nullptr;
150 bool mLastUseBakedLighting = false;
151 bool mLastUseVertexColor = false;
152 uint8_t mLastLightingChannels = 0;
153
154 std::vector<void*> mLinearDestroyQueue[MAX_FRAMES];
155 std::vector<C3D_Tex> mTexDestroyQueue[MAX_FRAMES];
156
157 StaticMeshUniformLocations mStaticMeshLocs;
158 SkeletalMeshUniformLocations mSkeletalMeshLocs;
159 ParticleUniformLocations mParticleLocs;
160 QuadUniformLocations mQuadLocs;
161 TextUniformLocations mTextLocs;
162};
163
164extern C3dContext gC3dContext;
165
166#endif
FogDensityFunc
Definition EngineTypes.h:598
Definition Material.h:48
Definition Quad.h:20
Definition SkeletalMesh.h:114
Definition StaticMesh.h:18
Definition Text.h:24
Definition World.h:26
Definition Particle3d.h:21