/********************************************************************
*
* File: fsCTexture.h
*
* Purpose: bgfx implementation of a texture.
*
*********************************************************************/
#ifndef fsCTexturehdr
#define fsCTexturehdr
#include <bgfx/bgfx.h>
#include "fsIImage.h"
#include "../../fsITexture.h"
class fsCTexture : public fsITexture
{
friend class fsITexture;
public:
bgfx::TextureHandle textureGet() const { return mTexture; }
fsU32 samplerFlagsGet() const { return mSamplerFlags; }
fsS32 imageWidthGet() const override;
fsS32 imageHeightGet() const override;
fsS32 textureWidthGet() const override;
fsS32 textureHeightGet() const override;
fsBool hasAlphaChannelGet() const override;<--- Function in derived class
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 filterModes(fsFilterMode pNewMode) const;
fsU32 wrapModes(fsWrapMode pNewMode) const;
void textureRelease();
bgfx::TextureHandle mTexture = BGFX_INVALID_HANDLE;
fsU32 mSamplerFlags = 0;
fsU32 mFilterFlags = 0;
fsU32 mWrapFlags = 0;
fsS32 mTexWidth = 0;
fsS32 mTexHeight = 0;
};
#endif