14#if defined fsVertexRenderer
26 friend class fsIRenderer;
27 friend class fsCVertexStreamSpriteRenderData;
28 friend class fsCVertexStreamLineRenderData;
32 virtual ~fsCRenderer();
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;
52 virtual void sprite3dBatchRender(fsC3dSceneSprite*
const pScene)
override;
55 fsCRenderer(
fsS32 pMaxSprites,
fsS32 pMaxMaterialChanges);
61 fsIRendererCommand* spriteBatchDataAllocateFromCache(fsCTexture
const* pTexture,
fsS32 pNumVerts);
62 void spriteBatchDataPopulate(fsIRendererCommand* pRenderCommand,
fsS32 pMaterial);
64 fsIRendererCommand* lineBatchDataAllocateFromCache(
fsS32 pNumVerts);
65 void lineBatchDataPopulate(fsIRendererCommand* pRenderCommand,
fsS32 pBatchIndex);
74 std::vector<fsIRendererCommand*> mRenderCommands;
77 template <
typename TRenderCommand>
78 struct fsRenderCommandCache
80 std::vector<std::unique_ptr<TRenderCommand>> mRenderTriangleCommands;
81 typename std::vector<std::unique_ptr<TRenderCommand>>::iterator mCurr;
84 TRenderCommand* get(fsCTexture
const* pTexture,
fsS32 pNumVerts);
85 TRenderCommand* get(
fsS32 pNumVerts);
88 fsRenderCommandCache<fsCRenderCommandTriangle> mTriangleCache;
89 fsRenderCommandCache<fsCRenderCommandTriangleShaded> mTriangleShadedCache;
90 fsRenderCommandCache<fsCRenderCommandLine> mLineCache;
94template <
typename TRenderCommand>
95TRenderCommand*
const fsCRenderer::fsRenderCommandCache<TRenderCommand>::get(
98 if (mCurr != mRenderTriangleCommands.end())
100 auto command = (*mCurr++).get();
101 command->init(pTexture, pNumVerts);
104 mRenderTriangleCommands.emplace_back(
new TRenderCommand(pTexture, pNumVerts));
105 mCurr = mRenderTriangleCommands.end();
106 return mRenderTriangleCommands.back().get();
109template <
typename TRenderCommand>
110TRenderCommand*
const fsCRenderer::fsRenderCommandCache<TRenderCommand>::get(
fsS32 pNumVerts)
112 if (mCurr != mRenderTriangleCommands.end())
114 auto command = (*mCurr++).get();
115 command->init(pNumVerts);
118 mRenderTriangleCommands.emplace_back(
new TRenderCommand(pNumVerts));
119 mCurr = mRenderTriangleCommands.end();
120 return mRenderTriangleCommands.back().get();
123template <
typename TRenderCommand>
124void fsCRenderer::fsRenderCommandCache<TRenderCommand>::init()
126 mCurr = mRenderTriangleCommands.begin();
Definition fsCRenderCommandLine.h:20
Definition fsCRenderCommandTriangle.h:22
Definition fsCRenderCommandTriangleShaded.h:22
Definition fsCTexture.h:22
Definition fsIRenderer.h:73
virtual void begin3dDo()=0
virtual void begin2dDo()=0
virtual void uninitialiseDo()=0
virtual void initialiseDo()=0
virtual void frameStartDo()=0
virtual void frameEndDo()=0
int fsS32
Definition fsBaseTypes.h:20
float fsF32
Definition fsBaseTypes.h:28