1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/********************************************************************
*
*	File:		fsCRenderer.h
*
*	Purpose:	cocos2d-x implementation for fsIRenderer
*
*********************************************************************/

#ifndef fsCRendererhdr
#define fsCRendererhdr

#include "../../../fsIRenderer.h"

#if defined fsVertexRenderer

class fsCRenderer : public fsIRenderer
{
	friend class fsIRenderer;
	friend class fsCVertexStreamSpriteRenderData;
	friend class fsCVertexStreamLineRenderData;

public:

	virtual ~fsCRenderer();<--- Destructor in derived class

protected:

	virtual void frameStartDo() override;
	virtual void begin2dDo() override;
	virtual void end2dDo() override;
	virtual void begin3dDo() override;
	virtual void end3dDo() override;
	virtual void frameEndDo() override;

	virtual void initialiseDo() override;
	virtual void uninitialiseDo() override;

	virtual void spriteBatchRender(fsS32 pFirstMaterialIndex, fsS32 pLastMaterialIndex) override;
	virtual void textBatchRender(fsS32 pFirstFontIndex, fsS32 pLastFontIndex) override;
	virtual void lineBatchRender(fsS32 pBatchIndex) override;
    virtual void textEntryBatchRender(fsITextEntryRenderData* const pTextEntry) override;

#if defined fs3d
	virtual void sprite3dBatchRender(fsC3dSceneSprite* const pScene) override;
#endif

	fsCRenderer(fsS32 pMaxSprites, fsS32 pMaxMaterialChanges);

private:

#if defined fs3d
	fsS32 unusedLightIndexGet();
#endif

	void blendModeSet(fsS32 pBlendMode);

    fsS32 numVertsGet(fsS32 pMaterial) const;

	void spriteBatchDataAllocateFromCache(fsS32 pNumVerts);
	void spriteBatchDataPopulate(fsS32 pMaterial);
	void spriteBatchDataRender(fsS32 pMaterial);

	void lineBatchDataAllocateFromCache(fsS32 pBatchIndex);
	void lineBatchDataPopulate(fsS32 pBatchIndex);
	void lineBatchDataRender(fsS32 pBatchIndex);

	struct fsSF32VertBuffer
	{
		fsSF32VertBuffer();
		~fsSF32VertBuffer();
		void init(fsS32 pSize);

		fsS32 mSize;
		fsF32* mBuffer;
	};

	struct fsRenderBuffers
	{
		fsRenderBuffers() = default;
		
		~fsRenderBuffers() = default;

		fsSF32VertBuffer mBatchedVerts;
		fsSF32VertBuffer mBatchedUVs;
		fsSF32VertBuffer mBatchedColours;
	};

	struct fsRenderBuffersPtr
	{
		fsRenderBuffersPtr(const fsRenderBuffers& pRenderBuffer)
		{
			mBatchedVerts = pRenderBuffer.mBatchedVerts.mBuffer;
			mBatchedUVs = pRenderBuffer.mBatchedUVs.mBuffer;
			mBatchedColours = pRenderBuffer.mBatchedColours.mBuffer;
		}

		~fsRenderBuffersPtr() {}

		fsF32* mBatchedVerts;
		fsF32* mBatchedUVs;
		fsF32* mBatchedColours;
	};

	fsRenderBuffers mRenderBuffers;

	fsS32 mSpriteIndex;
	fsS32 mTxtSprIndex;
	fsS32 mLineBatch;

	fsF32 mZoom;
	fsF32 mTrackingScale;
};

#endif
#endif