Fission FSN
Loading...
Searching...
No Matches
fsITexture.h
Go to the documentation of this file.
1/********************************************************************
2*
3* File: fsITexture.h
4*
5* Purpose: Container for textures that are uploaded to graphics
6* hardware. Accessible through the fsCTextureManager.
7*
8*********************************************************************/
9
10#ifndef fsITexturehdr
11#define fsITexturehdr
12
13#include <memory>
14#include <vector>
15
16#include <fsCore/fsSColour.h>
17#include <fsCore/fsBaseTypes.h>
19
20class fsIImage;
21struct fsPoint;
22class fsCBrush;
23class fsAffineMtx2d;
24
26{
27 friend class fsCBrushManager;
28 friend class fsCParticleData;
29 friend class fsCParticleCloud;
30 friend class fsIParticleCloud;
32 friend class gfCMazeSolution;
33
34public:
35
46
54
56 {
57 fsSOptions(fsCResourceName const& pImageFilename,
58 fsBool pCreateHitMap,
59 fsBool pDeferedUpload = false,
60 fsBool pUVAnimation = false):
61 mImageFilename(pImageFilename),
62 mCreateHitMap(pCreateHitMap),
63 mDeferedUpload(pDeferedUpload),
64 mUVAnimation(pUVAnimation)
65 {
66 }
67
73 };
74
75 void filterModeSet(fsFilterMode pNewMode);
76 void wrapModeSet(fsWrapMode pNewMode);
77
78 std::shared_ptr<fsITexture> cloneSubSection(fsCBrush const* pBlend, fsPoint const& pOffset);
79 void blend(fsCBrush const* pBlend, fsPoint const& pOffset);
80 void finalise();
81
82 fsSColour4B pixelGet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow);
83 void pixelSet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow, fsSColour4B const& pPixel);
84 void textureCopyThroughStencil(std::shared_ptr<fsITexture> pSrc, std::shared_ptr<fsITexture> pStencil,
85 fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY, fsS32 pAlphaHitMaskThreshold);
86 void textureCopyInto(std::shared_ptr<fsITexture> pSrc, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY);
87
88 virtual fsS32 imageWidthGet() const = 0;
89 virtual fsS32 imageHeightGet() const = 0;
90 virtual fsS32 textureWidthGet() const = 0;
91 virtual fsS32 textureHeightGet() const = 0;
92
93 fsBool hasHitMapGet() const;
94 fsBool hitTest(fsPoint const& pLocalPoint) const;
95
96 virtual fsU8 alphaGet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow) const { return 0; };
97 virtual fsBool hasAlphaChannelGet() const { return false; };
98
99 virtual ~fsITexture();
100
101protected:
102
103 static std::shared_ptr<fsITexture> createFromImageFile(fsSOptions const& pOptions);
104 static std::shared_ptr<fsITexture> createAlpha8FromTextureWithHitmap(
105 std::shared_ptr<fsITexture> pTextureWithHitmap, fsS32 pU, fsS32 pV, fsS32 pW, fsS32 pH);
106 static std::shared_ptr<fsITexture> createWithEmptyImage(fsS32 pWidth, fsS32 pHeight);
107
108 virtual void createFromAlpha8Data(std::vector<fsU8>& pAlphaData, fsS32 pImgW, fsS32 pImgH,
109 fsPoint const& pPOTDimenions) {};
110
111 virtual void createFromImage(fsIImage const* pImage) = 0;
112
113 virtual void filterModeSetDo(fsFilterMode pNewMode) = 0;
114 virtual void wrapModeSetDo(fsWrapMode pNewMode) = 0;
115 virtual fsU8 alphaValueGet(fsS32 pImgX, fsS32 pImgY) { return 0; };
116
117 virtual std::shared_ptr<fsITexture> doCloneSubSection(fsCBrush const* pBlend, fsPoint const& pOffset) const = 0;
118 virtual void doBlend(fsCBrush const* pBlend, fsPoint const& pOffset) = 0;
119
120 virtual fsSColour4B pixelGetDo(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow) { return fsSColour4B(); };
121
122 virtual void doPixelSet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow, fsSColour4B const& pPixel) {};
123
124 virtual void doTextureCopyThroughStencil(std::shared_ptr<fsITexture> pDest, std::shared_ptr<fsITexture> pStencil,
125 fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY, fsS32 pAlphaHitMaskThreshold) {};
126
127 virtual void doTextureCopyInto(std::shared_ptr<fsITexture> pDest, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY) {};
128
129
130 fsITexture();
131
132 void hitMapStore(fsU8 pAlphaThreshold = 0);
133 void emptyImageCreate(fsS32 pWidth, fsS32 pHeight);;
134 void imageLoad(fsCResourceName const& pImageFileName);
135 void imageFileLoad(fsCResourceName const& pImageFileName, fsBool pUVAnimation);
136 void maskFileLoad(fsCResourceName const& pImageFileName, fsBool pUVAnimation);
137
138 std::unique_ptr<fsIImage> mImage;
141
142private:
143
144 void alpha8TexDataGet(std::shared_ptr<fsITexture> pTextureWithHitmap, std::vector<fsU8>& pAlphaData, fsS32 pU, fsS32 pV,
145 fsS32 pW, fsS32 pH, fsPoint const& pPotDimensions) const;
146 static fsS32 roundToPow2(fsS32 pDimension);
147 static fsS32 scaleDownToBits(fsS32 pVal);
148
149 static const fsS32 mByteMask = 7;
150
151 std::vector<fsU8> mHitMap;
152};
153
154#endif
Definition fsAffineMtx2d.h:27
Definition fsCBrush.h:26
Definition fsCResourceName.h:32
Definition fsIImage.h:21
void textureCopyThroughStencil(std::shared_ptr< fsITexture > pSrc, std::shared_ptr< fsITexture > pStencil, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY, fsS32 pAlphaHitMaskThreshold)
Definition fsITexture.cpp:64
static std::shared_ptr< fsITexture > createWithEmptyImage(fsS32 pWidth, fsS32 pHeight)
Definition fsITexture.cpp:75
friend class fsCParticleData
Definition fsITexture.h:28
virtual fsBool hasAlphaChannelGet() const
Definition fsITexture.h:97
static std::shared_ptr< fsITexture > createFromImageFile(fsSOptions const &pOptions)
Definition fsITexture.cpp:82
friend class fsCSequenceParticleCloud
Definition fsITexture.h:31
fsFilterMode
Definition fsITexture.h:37
@ eDONT_CARE
Definition fsITexture.h:44
@ eNEAREST
Definition fsITexture.h:38
@ eLINEAR
Definition fsITexture.h:41
@ eNEAREST_MIPMAP_LINEAR
Definition fsITexture.h:40
@ eNEAREST_MIPMAP_NEAREST
Definition fsITexture.h:39
@ eLINEAR_MIPMAP_LINEAR
Definition fsITexture.h:42
@ eLINEAR_MIPMAP_NEAREST
Definition fsITexture.h:43
virtual void doPixelSet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow, fsSColour4B const &pPixel)
Definition fsITexture.h:122
fsWrapMode
Definition fsITexture.h:48
@ eREPEAT
Definition fsITexture.h:49
@ eCLAMP_TO_EDGE
Definition fsITexture.h:51
@ eMIRROR_REPEAT
Definition fsITexture.h:50
fsITexture()
Definition fsITexture.cpp:243
virtual fsU8 alphaValueGet(fsS32 pImgX, fsS32 pImgY)
Definition fsITexture.h:115
virtual void doBlend(fsCBrush const *pBlend, fsPoint const &pOffset)=0
virtual fsS32 imageHeightGet() const =0
fsS32 mWidth
Definition fsITexture.h:139
virtual fsS32 textureHeightGet() const =0
virtual void wrapModeSetDo(fsWrapMode pNewMode)=0
void wrapModeSet(fsWrapMode pNewMode)
Definition fsITexture.cpp:30
virtual fsU8 alphaGet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow) const
Definition fsITexture.h:96
virtual void createFromAlpha8Data(std::vector< fsU8 > &pAlphaData, fsS32 pImgW, fsS32 pImgH, fsPoint const &pPOTDimenions)
Definition fsITexture.h:108
fsBool hitTest(fsPoint const &pLocalPoint) const
Definition fsITexture.cpp:190
static std::shared_ptr< fsITexture > createAlpha8FromTextureWithHitmap(std::shared_ptr< fsITexture > pTextureWithHitmap, fsS32 pU, fsS32 pV, fsS32 pW, fsS32 pH)
Definition fsITexture.cpp:105
void pixelSet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow, fsSColour4B const &pPixel)
Definition fsITexture.cpp:59
virtual fsS32 textureWidthGet() const =0
friend class fsIParticleCloud
Definition fsITexture.h:30
std::unique_ptr< fsIImage > mImage
Definition fsITexture.h:138
fsSColour4B pixelGet(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow)
Definition fsITexture.cpp:54
fsBool hasHitMapGet() const
Definition fsITexture.cpp:185
fsS32 mHeight
Definition fsITexture.h:140
void emptyImageCreate(fsS32 pWidth, fsS32 pHeight)
Definition fsITexture.cpp:211
virtual std::shared_ptr< fsITexture > doCloneSubSection(fsCBrush const *pBlend, fsPoint const &pOffset) const =0
void hitMapStore(fsU8 pAlphaThreshold=0)
Definition fsITexture.cpp:145
virtual void doTextureCopyInto(std::shared_ptr< fsITexture > pDest, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY)
Definition fsITexture.h:127
void imageFileLoad(fsCResourceName const &pImageFileName, fsBool pUVAnimation)
Definition fsITexture.cpp:225
void imageLoad(fsCResourceName const &pImageFileName)
Definition fsITexture.cpp:218
void textureCopyInto(std::shared_ptr< fsITexture > pSrc, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY)
Definition fsITexture.cpp:70
void filterModeSet(fsFilterMode pNewMode)
Definition fsITexture.cpp:25
virtual void filterModeSetDo(fsFilterMode pNewMode)=0
virtual void doTextureCopyThroughStencil(std::shared_ptr< fsITexture > pDest, std::shared_ptr< fsITexture > pStencil, fsS32 pU, fsS32 pV, fsS32 pX, fsS32 pY, fsS32 pAlphaHitMaskThreshold)
Definition fsITexture.h:124
void finalise()
Definition fsITexture.cpp:45
virtual ~fsITexture()
Definition fsITexture.cpp:249
friend class fsCParticleCloud
Definition fsITexture.h:29
friend class fsCBrushManager
Definition fsITexture.h:27
std::shared_ptr< fsITexture > cloneSubSection(fsCBrush const *pBlend, fsPoint const &pOffset)
Definition fsITexture.cpp:35
friend class gfCMazeSolution
Definition fsITexture.h:32
void maskFileLoad(fsCResourceName const &pImageFileName, fsBool pUVAnimation)
Definition fsITexture.cpp:230
void blend(fsCBrush const *pBlend, fsPoint const &pOffset)
Definition fsITexture.cpp:40
virtual void createFromImage(fsIImage const *pImage)=0
virtual fsS32 imageWidthGet() const =0
virtual fsSColour4B pixelGetDo(fsS32 pU, fsS32 pV, fsS32 pCol, fsS32 pRow)
Definition fsITexture.h:120
bool fsBool
Definition fsBaseTypes.h:26
unsigned char fsU8
Definition fsBaseTypes.h:15
int fsS32
Definition fsBaseTypes.h:20
fsCResourceName mImageFilename
Definition fsITexture.h:68
fsBool mUVAnimation
Definition fsITexture.h:71
fsBool mDeferedUpload
Definition fsITexture.h:70
fsBool mMultiMask
Definition fsITexture.h:72
fsSOptions(fsCResourceName const &pImageFilename, fsBool pCreateHitMap, fsBool pDeferedUpload=false, fsBool pUVAnimation=false)
Definition fsITexture.h:57
fsBool mCreateHitMap
Definition fsITexture.h:69
Definition fsPoint.h:17
Definition fsSColour.h:54