/********************************************************************
*
* File: fsCTexture.h
*
* Purpose: Cocos2d-x implementation of a texture.
*
*********************************************************************/
#ifndef fsCTexturehdr
#define fsCTexturehdr
#include "../../fsITexture.h"
namespace ax
{
class Texture2D;
class Image;
}
class fsCTexture : public fsITexture
{
friend class fsITexture;
public:
ax::Texture2D* textureGet() const { return mTexture.get(); }
fsS32 imageWidthGet() const override;
fsS32 imageHeightGet() const override;
fsS32 textureWidthGet() const override;
fsS32 textureHeightGet() const override;
fsBool hasAlphaChannelGet() const override;
fsU8 alphaGet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow) const override;
virtual ~fsCTexture();<--- Destructor in derived class
protected:
void filterModeSetDo(fsFilterMode pNewMode) override;
void wrapModeSetDo(fsWrapMode pNewMode) override;
std::shared_ptr<fsITexture> doCloneSubSection(fsCBrush const* pBlend, fsPoint const& pOffset) const override;
void doBlend(fsCBrush const* pBlend, fsPoint const& pOffset) override;
fsSColour4B pixelGetDo(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow) override;
void doPixelSet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow, const fsSColour4B& pPixel) override;
void doTextureCopyThroughStencil(std::shared_ptr<fsITexture> pSrc, std::shared_ptr<fsITexture> pStencil, fsS32 pU,
fsS32 pV, fsS32 pX, fsS32 pY, fsS32 pAlphaHitMaskThreshold) override;
void doTextureCopyInto(std::shared_ptr<fsITexture> pSrc, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY) override;
fsU8 alphaValueGet(fsS32 pImgX, fsS32 pImgY) override;
void createFromAlpha8Data(std::vector<fsU8>& pAlphaData, fsS32 pImgW, fsS32 pImgH,
fsPoint const& pPOTDimenions) override;
void createFromImage(fsIImage const* pImage) override;
fsCTexture();
private:
fsU32 v3FilterModes(fsFilterMode pNewMode);
fsU32 v3WrapModes(fsWrapMode pNewMode);
void alphaChannelsCombine(fsCBrush const* pBlend, fsPoint const& pOffset);
void premultipliedAlphaReverse();
fsS32 strideGet() const;
std::shared_ptr<ax::Texture2D> mTexture;
};
#endif