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_Light mLights[8] = {};
109 // Initialize to 0 so first draw triggers SetupLighting (primitives default to 0x01)
110 uint8_t mLightingChannels = 0;
111 bool mBakedLighting = false;
112};
113
114struct C3dContext
115{
116 World* mWorld = nullptr;
117 C3D_RenderTarget* mRenderTargetLeft = nullptr;
118 C3D_RenderTarget* mRenderTargetRight = nullptr;
119 C3D_RenderTarget* mRenderTargetBottom = nullptr;
120 float mIod = 0.0f;
121 uint32_t mCurrentView = 0;
122 uint32_t mFrameIndex = 0;
123 uint32_t mCurrentScreen = 0;
124
125 DVLB_s* mShaderDvlbs[uint32_t(ShaderId::Count)] = {};
126 shaderProgram_s mShaderPrograms[uint32_t(ShaderId::Count)] = {};
127
128 LightEnv mLightEnv;
129 C3D_LightEnv mNoLightEnv = {};
130 C3D_LightLut mLightLut[NumShininessLevels] = {};
131 C3D_LightLut mFresnelLut[NumFresnelPowerLevels] = {};
132 C3D_LightLut mToonLut[NumToonLevels] = {};
133
134 C3D_FogLut mFogLut = {};
135 float mFogNear = 0.0f;
136 float mFogFar = 0.0f;
137 FogDensityFunc mFogDensityFunc = FogDensityFunc::Count;
138 bool mMaterialApplyFog = true;
139 bool mFogEnabled = false;
140
141 float mColorScale = 1.0f;
142 float mInvColorScale = 1.0f;
143 GPU_TEVSCALE mColorScaleEnum = GPU_TEVSCALE_1;
144
145 ShaderId mLastBoundShaderId = ShaderId::Count;
146 Material* mLastBoundMaterial = nullptr;
147 bool mLastUseBakedLighting = false;
148 bool mLastUseVertexColor = false;
149 uint8_t mLastLightingChannels = 0;
150
151 std::vector<void*> mLinearDestroyQueue[MAX_FRAMES];
152 std::vector<C3D_Tex> mTexDestroyQueue[MAX_FRAMES];
153
154 StaticMeshUniformLocations mStaticMeshLocs;
155 SkeletalMeshUniformLocations mSkeletalMeshLocs;
156 ParticleUniformLocations mParticleLocs;
157 QuadUniformLocations mQuadLocs;
158 TextUniformLocations mTextLocs;
159};
160
161extern C3dContext gC3dContext;
162
163#endif
FogDensityFunc
Definition EngineTypes.h:454
Definition Material.h:48
Definition Quad.h:20
Definition SkeletalMesh.h:99
Definition StaticMesh.h:18
Definition Text.h:24
Definition World.h:24
Definition Particle3d.h:21