Fission FSN
Loading...
Searching...
No Matches
fsCNativeRenderTexture.h
Go to the documentation of this file.
1/********************************************************************
2*
3* File: fsCRenderTexture.h
4*
5* Purpose: Cocos2d-x implementation of a render texture.
6*
7*********************************************************************/
8
9#ifndef fsCNativeRenderTexturehdr
10#define fsCNativeRenderTexturehdr
11
12#include <math/Mat4.h>
13#include <fsCore/fsPoint.h>
14
16
17namespace cocos2d
18{
19 class RenderTexture;
20 class Sprite;
21 class Texture2D;
22}
23
24class fsAffineMtx2d;
25class fsIImage;
26class fsRect;
27
28
30{
31 friend class fsITexture;
32
33public:
34
35 void initialiseScreenDo(fsPoint pDimensions);
37
40
41protected:
42
43 void resizeDo(fsPoint const& pSize) override;
44
45 void screenShotStartDo() override;
46 void screenShotEndDo(const fsStr& pSceneName) override;
47
48 void shadersCreateDo(const fsStr& pVertex, const fsStr& pFragment) override;
49
50 void targetSetDo() override;
51 void partialEndDo() override;
52 void partialStartDo() override;
53 void targetClearDo() override;
54
55 void brushSetDo(fsCResourceName const& pBrushFilename) override;
56 void saveDo(fsCResourceName const& pFilename) override;
57 void captureRegionSaveDo(const fsRect& pCaptureRect, fsPoint const& pOutputDimensions, fsCResourceName const& pFilename) override;
58
59
60 void recolourDo(fsSColour4B const& pOld, fsSColour4B const& pNew) override;
61 void paintWithSpriteBrushDo(fsPoint const& pPos) override;
62 void paintDo(std::vector<fsPoint> const& pPos, fsSColour4B const& pColour) override;
63
64 void renderDo() override;
65 void matrixApplyDo(fsAffineMtx2d const& pTransform) override;
66
67private:
68
69 struct fsSMutableTexture
70 {
71 ~fsSMutableTexture();
72 fsSMutableTexture(fsIImage* pCanvas);
73 void paint(fsS32 x, fsS32 y)
74 {
75 mPixels[y * stride() + x * bytesPerPixel() + 0] = mPaintColour.mR;
76 mPixels[y * stride() + x * bytesPerPixel() + 1] = mPaintColour.mG;
77 mPixels[y * stride() + x * bytesPerPixel() + 2] = mPaintColour.mB;
78 mPixels[y * stride() + x * bytesPerPixel() + 3] = mPaintColour.mA;
79 }
80
81 fsSColour4B get(fsS32 x, fsS32 y) const
82 {
83 return fsSColour4B(
84 mPixels[y * stride() + x * bytesPerPixel() + 0],
85 mPixels[y * stride() + x * bytesPerPixel() + 1],
86 mPixels[y * stride() + x * bytesPerPixel() + 2],
87 mPixels[y * stride() + x * bytesPerPixel() + 3]);
88 }
89
90 fsU32 bytesPerPixel() const { return mBpp / 8; }
91 fsS32 stride() const { return mWidth * bytesPerPixel(); }
92 fsS32 len() const { return stride() * mHeight; }
93 fsS32 mWidth;
94 fsS32 mHeight;
95 fsU32 mBpp;
96 fsU8* mPixels;
97 fsSColour4B mPaintColour;
98 };
99
100 void updateShaderParams() const;
101 fsPoint screenEffectFocusPosGet() const;
102
103 cocos2d::Node* implGet() const override;
104
105 void updateDynamicTexturePixels() const;
106 void getDynamicTexturePixels();
107 void screenEffectParamsSetDo(fsPoint const& pFocusPos, fsF32 pRadius) override;
108 void screenEffectParamsClearDo() override;
109
110 static void pixelCallback(const unsigned char* pPixels, std::size_t pWidth, std::size_t pHeigth);
111
112 fsCResourceName mSaveFilename;
113 fsStr mFragmentShader;
114 fsPoint mScreenEffectFocusPos;
115 fsF32 mScreenEffectRadius;
116 fsBool mScreenEffectFocusOverrideActive;
117
118 cocos2d::Mat4 mCanvasMatrix;
119 cocos2d::Mat4 mBrushMatrix;
120
121 cocos2d::RenderTexture* mDynamicScreenTexture;
122 cocos2d::RenderTexture* mDynamicTexture;
123 cocos2d::Sprite* mBrush;
124
125 std::unique_ptr<fsSMutableTexture> mMutableTexture;
126 static fsSMutableTexture* mCurrMutableTexture;
127};
128
129#endif
Definition fsAffineMtx2d.h:27
Definition fsCNativeRenderTexture.h:31
void initialiseScreenDo(fsPoint pDimensions)
void resizeDo(fsPoint const &pSize) override
void updateShaderParams()
Definition fsCNativeRenderTexture.cpp:303
void paintWithSpriteBrushDo(fsPoint const &pPos) override
void matrixApplyDo(fsAffineMtx2d const &pTransform) override
void saveDo(fsCResourceName const &pFilename) override
fsPoint screenEffectFocusPosGet() const
Definition fsCNativeRenderTexture.cpp:554
void renderDo() override
void partialEndDo() override
void partialStartDo() override
void paintDo(std::vector< fsPoint > const &pPos, fsSColour4B const &pColour) override
friend class fsITexture
Definition fsCNativeRenderTexture.h:32
void targetSetDo() override
void shadersCreateDo(const fsStr &pVertex, const fsStr &pFragment) override
void initialiseSolutionDo(fsIImage *pSolution)
void screenShotEndDo(const fsStr &pSceneName) override
void targetClearDo() override
void recolourDo(fsSColour4B const &pOld, fsSColour4B const &pNew) override
virtual ~fsCNativeRenderTexture()
void screenEffectParamsSetDo(fsPoint const &pFocusPos, fsF32 pRadius) override
Definition fsCNativeRenderTexture.cpp:442
void screenEffectParamsClearDo() override
Definition fsCNativeRenderTexture.cpp:450
void captureRegionSaveDo(const fsRect &pCaptureRect, fsPoint const &pOutputDimensions, fsCResourceName const &pFilename) override
void screenShotStartDo() override
void brushSetDo(fsCResourceName const &pBrushFilename) override
Definition fsCResourceName.h:32
Definition fsIImage.h:21
Definition fsIRenderableTexture.h:38
void paint(std::vector< fsPoint > const &pPos, fsSColour4B const &pColour)
Definition fsIRenderableTexture.cpp:97
Definition fsRect.h:16
Definition fsStr.h:23
unsigned int fsU32
Definition fsBaseTypes.h:21
bool fsBool
Definition fsBaseTypes.h:26
unsigned char fsU8
Definition fsBaseTypes.h:15
int fsS32
Definition fsBaseTypes.h:20
float fsF32
Definition fsBaseTypes.h:28
Definition fsC3dLight.h:19
decltype(sizeof(void *)) size_t
Definition doctest.h:524
Definition fsPoint.h:17
Definition fsSColour.h:54
fsU8 mG
Definition fsSColour.h:82
fsU8 mR
Definition fsSColour.h:81
fsU8 mB
Definition fsSColour.h:83
fsU8 mA
Definition fsSColour.h:84