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
#include "fsISpriteRenderData.h"

#include "src/fsCBrush.h"
#include "src/fsCMaterial.h"

#include "fsITexture.h"
#include "fsIRenderer.h"
#include "fsCore/fsRect.h"


void fsISpriteRenderData::polyInfoSet(fsSPolyInfo const& pPolyInfo)
{
	polyInfoSetDo(pPolyInfo);
}

void fsISpriteRenderData::passToEngineRendererDo(fsIRenderer* const pRenderer, fsS32 pFirstMaterialIndex,
                                                 fsS32 pLastMaterialInJob)
{
	pRenderer->spriteBatchRender(pFirstMaterialIndex, pLastMaterialInJob);
};

void fsISpriteRenderData::renderDo()
{
	fsIRenderer::instanceGet()->spriteAddToBatch(this);
};

const fsCMaterial* fsISpriteRenderData::materialGet() const
{
	return mMaterial;
}

void fsISpriteRenderData::widthSet(fsS32 pWidth)
{
	widthSetDo(pWidth);
}

void fsISpriteRenderData::heightSet(fsS32 pHeight)
{
	heightSetDo(pHeight);
}

void fsISpriteRenderData::textureWrapSet()
{
	textureWrapSetDo();
}

void fsISpriteRenderData::uvScroll(const fsVec2d& pOffest)
{
	const fsF32 fullTexW = static_cast<fsF32>(mMaterial->texturePtrGet()->textureWidthGet());
	const fsF32 fullTexH = static_cast<fsF32>(mMaterial->texturePtrGet()->textureHeightGet());
	mUVOffset = pOffest;
	uvScrollDo(fsRect(
		(mUVs[eINDEX_TL].x + pOffest.x) * fullTexW,
		(mUVs[eINDEX_TR].x + pOffest.x) * fullTexW,
		(mUVs[eINDEX_TL].y + pOffest.y) * fullTexH,
		(mUVs[eINDEX_BL].y + pOffest.y) * fullTexH
	));
}

void fsISpriteRenderData::brushSet(std::shared_ptr<fsCBrush> pBrush)
{
	mMaterial->propertiesSet(pBrush);
	uvsSetFromBrush(pBrush);
	brushSetDo(pBrush);
}

void fsISpriteRenderData::alphaBlendModeSet(fsS32 pAlphaBlendMode)
{
	mMaterial->alphaBlendSet(pAlphaBlendMode);
	alphaBlendModeSetDo(pAlphaBlendMode);
}

void fsISpriteRenderData::uvsSetFromBrush(std::shared_ptr<fsCBrush> pBrush)
{
	const fsF32 fullTexW = static_cast<fsF32>(pBrush->textureGet()->textureWidthGet());
	const fsF32 fullTexH = static_cast<fsF32>(pBrush->textureGet()->textureHeightGet());

	const fsF32 l = static_cast<fsF32>(pBrush->offsetGet().x) / fullTexW;
	const fsF32 r = static_cast<fsF32>(pBrush->offsetGet().x + pBrush->dimensionsGet().x) / fullTexW;
	const fsF32 t = static_cast<fsF32>(pBrush->offsetGet().y) / fullTexH;
	const fsF32 b = static_cast<fsF32>(pBrush->offsetGet().y + pBrush->dimensionsGet().y) / fullTexH;

	mUVs[eINDEX_TL].x = mUVs[eINDEX_BL].x = l;
	mUVs[eINDEX_BR].x = mUVs[eINDEX_TR].x = r;
	mUVs[eINDEX_TL].y = mUVs[eINDEX_TR].y = t;
	mUVs[eINDEX_BL].y = mUVs[eINDEX_BR].y = b;
}

fsISpriteRenderData::fsISpriteRenderData():
	mUVs(4),
	mMaterial(new fsCMaterial())<--- Class 'fsISpriteRenderData' does not have a copy constructor which is recommended since it has dynamic memory/resource management.<--- Class 'fsISpriteRenderData' does not have a operator= which is recommended since it has dynamic memory/resource management.
{
}

fsISpriteRenderData::~fsISpriteRenderData()
{
	delete mMaterial;
}