Fission FSN
Loading...
Searching...
No Matches
fsCVertexRenderer.h
Go to the documentation of this file.
1/********************************************************************
2*
3* File: fsCRenderer.h
4*
5* Purpose: cocos2d-x implementation for fsIRenderer
6*
7*********************************************************************/
8
9#ifndef fsCRendererhdr
10#define fsCRendererhdr
11
13
14#if defined fsVertexRenderer
15
16#include "fsIRenderCommand.h"
17
18class fsCTexture;
19
23
24class fsCRenderer : public fsIRenderer
25{
26 friend class fsIRenderer;
27 friend class fsCVertexStreamSpriteRenderData;
28 friend class fsCVertexStreamLineRenderData;
29
30public:
31
32 virtual ~fsCRenderer();
33
34protected:
35
36 void frameStartDo() override;
37 void begin2dDo() override;
38 void end2dDo() override;
39 void begin3dDo() override;
40 void end3dDo() override;
41 void frameEndDo() override;
42
43 void initialiseDo() override;
44 void uninitialiseDo() override;
45
46 void spriteBatchRender(fsS32 pFirstMaterialIndex, fsS32 pLastMaterialIndex) override;
47 void textBatchRender(fsS32 pFirstFontIndex, fsS32 pLastFontIndex) override;
48 void lineBatchRender(fsS32 pBatchIndex) override;
49 void textEntryBatchRender(fsITextEntryRenderData* pTextEntry) override;
50
51#if defined fs3d
52 virtual void sprite3dBatchRender(fsC3dSceneSprite* const pScene) override;
53#endif
54
55 fsCRenderer(fsS32 pMaxSprites, fsS32 pMaxMaterialChanges);
56
57private:
58
59 fsS32 numVertsGet(fsS32 pMaterial) const;
60
61 fsIRendererCommand* spriteBatchDataAllocateFromCache(fsCTexture const* pTexture, fsS32 pNumVerts);
62 void spriteBatchDataPopulate(fsIRendererCommand* pRenderCommand, fsS32 pMaterial);
63
64 fsIRendererCommand* lineBatchDataAllocateFromCache(fsS32 pNumVerts);
65 void lineBatchDataPopulate(fsIRendererCommand* pRenderCommand, fsS32 pBatchIndex);
66
67 fsS32 mSpriteIndex;
68 fsS32 mTxtSprIndex;
69 fsS32 mLineBatch;
70
71 fsF32 mZoom;
72 fsF32 mTrackingScale;
73
74 std::vector<fsIRendererCommand*> mRenderCommands;
75
76
77 template <typename TRenderCommand>
78 struct fsRenderCommandCache
79 {
80 std::vector<std::unique_ptr<TRenderCommand>> mRenderTriangleCommands;
81 typename std::vector<std::unique_ptr<TRenderCommand>>::iterator mCurr;
82
83 void init();
84 TRenderCommand* get(fsCTexture const* pTexture, fsS32 pNumVerts);
85 TRenderCommand* get(fsS32 pNumVerts);
86 };
87
88 fsRenderCommandCache<fsCRenderCommandTriangle> mTriangleCache;
89 fsRenderCommandCache<fsCRenderCommandTriangleShaded> mTriangleShadedCache;
90 fsRenderCommandCache<fsCRenderCommandLine> mLineCache;
91};
92
93
94template <typename TRenderCommand>
95TRenderCommand* const fsCRenderer::fsRenderCommandCache<TRenderCommand>::get(
96 fsCTexture const* const pTexture, fsS32 pNumVerts)
97{
98 if (mCurr != mRenderTriangleCommands.end())
99 {
100 auto command = (*mCurr++).get();
101 command->init(pTexture, pNumVerts);
102 return command;
103 }
104 mRenderTriangleCommands.emplace_back(new TRenderCommand(pTexture, pNumVerts));
105 mCurr = mRenderTriangleCommands.end();
106 return mRenderTriangleCommands.back().get();
107};
108
109template <typename TRenderCommand>
110TRenderCommand* const fsCRenderer::fsRenderCommandCache<TRenderCommand>::get(fsS32 pNumVerts)
111{
112 if (mCurr != mRenderTriangleCommands.end())
113 {
114 auto command = (*mCurr++).get();
115 command->init(pNumVerts);
116 return command;
117 }
118 mRenderTriangleCommands.emplace_back(new TRenderCommand(pNumVerts));
119 mCurr = mRenderTriangleCommands.end();
120 return mRenderTriangleCommands.back().get();
121};
122
123template <typename TRenderCommand>
124void fsCRenderer::fsRenderCommandCache<TRenderCommand>::init()
125{
126 mCurr = mRenderTriangleCommands.begin();
127};
128
129
130#endif
131#endif
Definition fsCRenderCommandLine.h:20
Definition fsCRenderCommandTriangle.h:22
Definition fsCRenderCommandTriangleShaded.h:22
Definition fsCTexture.h:22
Definition fsIRenderer.h:73
virtual void end2dDo()=0
virtual void begin3dDo()=0
virtual void begin2dDo()=0
virtual void uninitialiseDo()=0
virtual void initialiseDo()=0
virtual void frameStartDo()=0
virtual void end3dDo()=0
virtual void frameEndDo()=0
int fsS32
Definition fsBaseTypes.h:20
float fsF32
Definition fsBaseTypes.h:28