/********************************************************************
*
* File: fsISpriteRenderData.h
*
* Purpose: To hold the sprite data sent to the renderer.
*
*********************************************************************/
#ifndef fsISpriteRenderDatahdr
#define fsISpriteRenderDatahdr
#include <memory>
#include <vector>
#include <fsCore/fsBaseTypes.h>
#include <fsCore/fsVec2d.h>
#include "fsIVertexRenderData.h"
class fsCMaterial;
class fsCBrush;
class fsRect;
class fsISpriteRenderData : public fsIVertexRenderData
{
public:
enum eVertIndexOrder
{
eINDEX_TL = 0,
eINDEX_BL,
eINDEX_BR,
eINDEX_TR
};
// not NVI but saves speed with no double hop for massively called methods...
virtual void vertsCopyToImpl(fsS32 pIndex, void* const pImpl) const {}
virtual void uvsCopyToImpl(fsS32 pIndex, void* const pImpl) const {}
virtual void colourCopyToImpl(void* const pImpl) const {}
const fsCMaterial* materialGet() const;
void textureWrapSet();
void uvScroll(const fsVec2d& pOffest);
void polyInfoSet(fsSPolyInfo const& pPolyInfo);
void widthSet(fsS32 pWidth);
void heightSet(fsS32 pHeight);
void brushSet(std::shared_ptr<fsCBrush> pBrush);
void alphaBlendModeSet(fsS32 pAlphaBlendMode);
void uvsSetFromBrush(std::shared_ptr<fsCBrush> pBrush);
virtual ~fsISpriteRenderData();<--- Destructor in derived class
std::vector<fsVec2d> mUVs;
fsVec2d mUVOffset;
fsCMaterial* mMaterial;
protected:
void passToEngineRendererDo(fsIRenderer* pRenderer, fsS32 pFirstMaterialIndex, fsS32 pLastMaterialInJob) override;
void renderDo() override;
virtual void polyInfoSetDo(fsSPolyInfo const& pPolyInfo) {}
virtual void textureWrapSetDo() {};
virtual void uvScrollDo(const fsRect& pOffSet) {}
virtual void brushSetDo(std::shared_ptr<fsCBrush> pBrush) {}
virtual void widthSetDo(fsS32 pWidth) {}
virtual void heightSetDo(fsS32 pHeight) {}
virtual void alphaBlendModeSetDo(fsS32 pAlphaBlendMode) {}
fsISpriteRenderData();
private:
};
#endif