Fission FSN
Loading...
Searching...
No Matches
fsIRenderer.h
Go to the documentation of this file.
1/***********************************************************************************
2*
3* File: fsIRenderer.h
4*
5* Purpose: Batch rendering interface.
6*
7*
8* Rendering
9* ---------
10*
11* fsIRenderableQuantum - simplest things we can render, a sprite, a line, a text entry.
12* Each renderable quantum has renderable data which is created dependent on the
13* renderable data factory that is active. The factory currently creates vertex stream
14* data, or native data objects. This render data is per quantum.
15*
16* All components run their render command each frame. If they have a renderable
17* quantum then the renderable quanta's renderable data member gets processed by the
18* renderer which batches up similar render calls - all sprites in the same
19* texture, lines together, text together to reduce the number of render / draw calls.
20* This produces a list of render jobs where like rendering is batched together.
21*
22* e.g. render job 1 - 10 sprites in texture page 1
23* render job 2 - 5 text sprites
24* render job 3 - 2 sprites in texture page 2
25*
26* These render jobs are then rendered at the end of the frame by the renderer when
27* flush is called. For the native renderer this means basically nothing but calling
28* render for the render data which is just native engine objects as the render
29* command for native render data hands the object off to the native renderer to
30* cache and render - passToEngineRenderer. (so we don't need to batch native data)
31*
32*
33* Vertex rendering
34* ----------------
35*
36* When the end of frame render jobs are rendered the passToEngineRenderer
37* for the render data calls the renderer which gets a command from the cache
38* and populates it with the data from the render data. This command is then
39* instantly executed.
40*
41* fsIRenderData -> fsIVertexRenderData -> fsISpriteRenderData
42* -> fsCVertexStreamSpriteRenderData
43* -> (fsINative -> fsCNativeSpriteRenderData)
44*
45***********************************************************************************/
46
47#ifndef fsIRendererhdr
48#define fsIRendererhdr
49
50#include <vector>
51
52#include <fsCore/fsBaseTypes.h>
53#include <fsCore/fsStr.h>
54
61class fsCMaterial;
62class fsIRenderJob;
63class fsCUniqueId;
64class fsIFont;
65class fsAffineMtx2d;
66struct fsVec3d;
69
70class fsI3dLight;
71
73{
75 friend class fsCRenderJobSprites;
76 friend class fsCRenderJobText;
77 friend class fsCRenderJobLine;
80
82 friend class fsISpriteRenderData;
83 friend class fsITextRenderData;
84 friend class fsILineRenderData;
85
86public:
87
94
95#if defined fsCacheCheck
96 virtual void cacheSizeReset() {}
97 virtual fsS32 freeCachePercentageGet() const { return 0; }
98#endif
99
100#if defined fs3d
101 void sprite3dAddToBatch(fsC3dSceneSprite* const pScene);
102#endif
103
104 void renderTexturedAddToBatch(fsIRenderTextureRenderData* const pRenderTextureRenderData);
105 void spriteAddToBatch(fsISpriteRenderData* pSprRenderData);
106 void textAddToBatch(fsITextRenderData* pTxtRenderData);
107 void textEntryAddToBatch(fsITextEntryRenderData* pTxtEntry);
108 void lineAddToBatch(fsILineRenderData* pLineRenderData);
109
110 void prepareFor2d();
111 void prepareFor3d();
112 void frameStart();
113 void frameEnd();
114 void flush();
115
116 static fsIRenderer* instanceGet();
117 static void create(fsS32 pMaxSprites, fsS32 pMaxMaterialChanges);
118 static void destroy();
119
120 virtual ~fsIRenderer();
121
122 void begin2d();
123
124protected:
125
133
134 virtual void initialise();
135 virtual void uninitialise();
136
137 virtual void frameStartDo() = 0;
138 virtual void begin2dDo() = 0;
139 virtual void end2dDo() = 0;
140 virtual void begin3dDo() = 0;
141 virtual void end3dDo() = 0;
142 virtual void frameEndDo() = 0;
143
144 virtual void initialiseDo() = 0;
145 virtual void uninitialiseDo() = 0;
146
147 fsIRenderer(fsS32 pMaxSprites, fsS32 pMaxMaterialChanges);
148
149 std::vector<fsIRenderJob*> mRenderJobs;
150
152
154
158
162
165
168
171
174
177
178private:
179
180 void end2d();
181 void begin3d();
182 void end3d();
183
184 virtual void spriteBatchRender(fsS32 pFirstMaterialIndex, fsS32 pLastMaterialIndex) = 0;
185 virtual void textBatchRender(fsS32 pFirstFontIndex, fsS32 pLastFontIndex) = 0;
186 virtual void lineBatchRender(fsS32 pFirstMaterialIndex) = 0;
187 virtual void textEntryBatchRender(fsITextEntryRenderData* const pTextEntry) {}
188 virtual void renderTextureBatchRender(fsIRenderTextureRenderData* const pRenderTextureEntry) {}
189
190#if defined fs3d
191 virtual void sprite3dBatchRender(fsC3dSceneSprite* const p3dScene) = 0;
192#endif
193
194 fsBool batchJobSwitchCheck(const fsCUniqueId& pJobTypeId) const;
195
196 void materialIncrementIfChanged(const fsISpriteRenderData* pSprRenderData);
197 void fontIncrementIfChanged(const fsITextRenderData* pTxtRenderData);
198
199 void buffersCreate();
200 void buffersDestroy() const;
201};
202
203#endif
Definition fsAffineMtx2d.h:27
Definition fsC3dSceneSprite.h:33
Definition fsCMaterial.h:25
Definition fsCRenderTexture.h:24
Definition fsCUniqueId.h:21
Definition fsI3dLight.h:23
Definition fsI3dSpriteRenderData.h:29
Definition fsIFont.h:34
Definition fsILineRenderData.h:25
Definition fsIRenderJob.h:24
Definition fsIRenderTextureRenderData.h:29
static fsIRenderer * instanceGet()
Definition fsIRenderer.cpp:285
void spriteAddToBatch(fsISpriteRenderData *pSprRenderData)
Definition fsIRenderer.cpp:48
friend class fsCRenderJobTextEntry
Definition fsIRenderer.h:78
void frameStart()
Definition fsIRenderer.cpp:38
fsS32 mCurrentFont
Definition fsIRenderer.h:170
void prepareFor3d()
Definition fsIRenderer.cpp:152
virtual void uninitialise()
Definition fsIRenderer.cpp:264
fsS32 * mLinesPerBatch
Definition fsIRenderer.h:164
fsITextRenderData ** mTextRenderData
Definition fsIRenderer.h:159
void sprite3dAddToBatch(fsC3dSceneSprite *const pScene)
Definition fsIRenderer.cpp:32
void textAddToBatch(fsITextRenderData *pTxtRenderData)
Definition fsIRenderer.cpp:71
fsS32 mCurrentMaterial
Definition fsIRenderer.h:167
fsS32 * mTextStringsPerFont
Definition fsIRenderer.h:161
eSPRITE_STRIP_PLACE
Definition fsIRenderer.h:89
@ eLAST
Definition fsIRenderer.h:92
@ eSTRIPPED
Definition fsIRenderer.h:91
@ eFIRST
Definition fsIRenderer.h:90
eRENDER_STATE mState
Definition fsIRenderer.h:151
static void destroy()
Definition fsIRenderer.cpp:291
friend class fsISpriteRenderData
Definition fsIRenderer.h:82
virtual ~fsIRenderer()
Definition fsIRenderer.cpp:321
std::vector< fsIRenderJob * > mRenderJobs
Definition fsIRenderer.h:149
static void create(fsS32 pMaxSprites, fsS32 pMaxMaterialChanges)
Definition fsIRenderer.cpp:230
virtual void end2dDo()=0
friend class fsITextRenderData
Definition fsIRenderer.h:83
virtual void begin3dDo()=0
friend class fsCRenderJobSprites
Definition fsIRenderer.h:75
void flush()
Definition fsIRenderer.cpp:199
fsS32 * mSpritesPerMaterial
Definition fsIRenderer.h:157
const fsS32 mMaxSprites
Definition fsIRenderer.h:175
friend class fsILineRenderData
Definition fsIRenderer.h:84
eRENDER_STATE
Definition fsIRenderer.h:127
@ eDRAW_2D
Definition fsIRenderer.h:129
@ eNONE
Definition fsIRenderer.h:128
@ eDRAW_3D
Definition fsIRenderer.h:131
@ eDRAW_TO_TEXTURE_2D
Definition fsIRenderer.h:130
void frameEnd()
Definition fsIRenderer.cpp:224
const fsISpriteRenderData ** mSpriteRenderData
Definition fsIRenderer.h:155
void renderTexturedAddToBatch(fsIRenderTextureRenderData *const pRenderTextureRenderData)
Definition fsIRenderer.cpp:43
friend class fsCRenderJobText
Definition fsIRenderer.h:76
virtual void initialise()
Definition fsIRenderer.cpp:243
fsS32 mCurrentTextSprite
Definition fsIRenderer.h:169
const fsCMaterial ** mMaterials
Definition fsIRenderer.h:156
fsS32 mCurrentLineBatch
Definition fsIRenderer.h:173
virtual void begin2dDo()=0
void prepareFor2d()
Definition fsIRenderer.cpp:138
virtual void uninitialiseDo()=0
void textEntryAddToBatch(fsITextEntryRenderData *pTxtEntry)
Definition fsIRenderer.cpp:89
void begin2d()
Definition fsIRenderer.cpp:166
friend class fsCRenderJobRenderTextures
Definition fsIRenderer.h:74
virtual void initialiseDo()=0
fsS32 mCurrentSprite
Definition fsIRenderer.h:166
fsIRenderer(fsS32 pMaxSprites, fsS32 pMaxMaterialChanges)
Definition fsIRenderer.cpp:299
const fsS32 mMaxMaterials
Definition fsIRenderer.h:176
friend class fsCRenderJobLine
Definition fsIRenderer.h:77
fsS32 mCurrentLine
Definition fsIRenderer.h:172
void lineAddToBatch(fsILineRenderData *pLineRenderData)
Definition fsIRenderer.cpp:96
const fsIFont ** mFonts
Definition fsIRenderer.h:160
const fsILineRenderData ** mLineRenderData
Definition fsIRenderer.h:163
virtual void frameStartDo()=0
friend class fsCRenderJobSprite3d
Definition fsIRenderer.h:79
static fsIRenderer * mInstance
Definition fsIRenderer.h:153
friend class fsIRenderTextureRenderData
Definition fsIRenderer.h:81
virtual void end3dDo()=0
virtual void frameEndDo()=0
Definition fsISpriteRenderData.h:25
Definition fsITextEntryRenderData.h:24
Definition fsITextRenderData.h:19
bool fsBool
Definition fsBaseTypes.h:26
int fsS32
Definition fsBaseTypes.h:20
Definition fsVec3d.h:16