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
17
18namespace ax
19{
20 class RenderTexture;
21 class Sprite;
22 class Texture2D;
23}
24
25class fsAffineMtx2d;
26class fsIImage;
27class fsRect;
28
29
31{
32 friend class fsITexture;
33
34public:
35
36 void initialiseScreenDo(fsPoint pDimensions);
37 void initialiseSolutionDo(fsIImage* pSolution);
38
41
42protected:
43
44
45 void resizeDo(fsPoint const& pSize) override;
46 void screenShotStartDo() override;
47 void screenShotEndDo(const fsStr& pSceneName) override;
48
49 void updateShaderParams();
50 void shaderEffectRefresh(const fsStr& pFragmentShader);
52
53 void shadersCreateDo(const fsStr& pVertex, const fsStr& pFragment) override;
54 void screenEffectParamsSetDo(fsPoint const& pFocusPos, fsF32 pRadius) override;
55 void screenEffectParamsClearDo() override;
56
57 void targetSetDo() override;
58 void partialEndDo() override;
59 void partialStartDo() override;
60 void targetClearDo() override;
61
62 void brushSetDo(fsCResourceName const& pBrushFilename) override;
63 void saveDo(fsCResourceName const& pFilename) override;
64 void captureRegionSaveDo(const fsRect& pCaptureRect, fsPoint const& pOutputDimensions, fsCResourceName const& pFilename) override;
65
66
67 void recolourDo(fsSColour4B const& pOld, fsSColour4B const& pNew) override;
68 void paintWithSpriteBrushDo(fsPoint const& pPos) override;
69 void paintDo(std::vector<fsPoint> const& pPos, fsSColour4B const& pColour) override;
70
71 void renderDo() override;
72 void matrixApplyDo(fsAffineMtx2d const& pTransform) override;
73
74private:
75
76 struct fsSMutableTexture
77 {
78 ~fsSMutableTexture();
79 fsSMutableTexture(fsIImage* pCanvas);
80 void paint(fsS32 x, fsS32 y)
81 {
82 mPixels[y * stride() + x * bytesPerPixel() + 0] = mPaintColour.mR;
83 mPixels[y * stride() + x * bytesPerPixel() + 1] = mPaintColour.mG;
84 mPixels[y * stride() + x * bytesPerPixel() + 2] = mPaintColour.mB;
85 mPixels[y * stride() + x * bytesPerPixel() + 3] = mPaintColour.mA;
86 }
87
88 fsSColour4B get(fsS32 x, fsS32 y) const
89 {
90 return fsSColour4B(
91 mPixels[y * stride() + x * bytesPerPixel() + 0],
92 mPixels[y * stride() + x * bytesPerPixel() + 1],
93 mPixels[y * stride() + x * bytesPerPixel() + 2],
94 mPixels[y * stride() + x * bytesPerPixel() + 3]);
95 }
96
97 fsU32 bytesPerPixel() const { return mBpp / 8; }
98 fsS32 stride() const { return mWidth * bytesPerPixel(); }
99 fsS32 len() const { return stride() * mHeight; }
100 fsS32 mWidth;
101 fsS32 mHeight;
102 fsU32 mBpp;
103 fsU8* mPixels;
104 fsSColour4B mPaintColour;
105 };
106
107 ax::Node* implGet() const override;
108
109 void updateDynamicTexturePixels() const;
110 ax::RenderTexture* screenshotTargetGet() const;
111 void screenTextureDestroy();
112
113 enum class eScreenEffect
114 {
115 eNONE,
116 eMAGNIFY,
117 eTORCH
118 };
119
120 fsCResourceName mSaveFilename;
121 fsStr mFragmentShader;
122 eScreenEffect mScreenEffect;
123 fsPoint mScreenEffectFocusPos;
124 fsF32 mScreenEffectRadius;
125 fsBool mScreenEffectFocusOverrideActive;
126
127 ax::Mat4 mCanvasMatrix;
128 ax::Mat4 mBrushMatrix;
129
130 fsCAxmolRenderTexture* mDynamicScreenTexture;
131 ax::RenderTexture* mDynamicTexture;
132
133 ax::Sprite* mBrush;
134
135 std::unique_ptr<fsSMutableTexture> mMutableTexture;
136};
137
138#endif
Definition fsAffineMtx2d.h:27
void initialiseScreenDo(fsPoint pDimensions)
Definition fsCNativeRenderTexture.cpp:456
void resizeDo(fsPoint const &pSize) override
Definition fsCNativeRenderTexture.cpp:387
void updateShaderParams()
Definition fsCNativeRenderTexture.cpp:303
void paintWithSpriteBrushDo(fsPoint const &pPos) override
Definition fsCNativeRenderTexture.cpp:166
void matrixApplyDo(fsAffineMtx2d const &pTransform) override
Definition fsCNativeRenderTexture.cpp:181
void saveDo(fsCResourceName const &pFilename) override
Definition fsCNativeRenderTexture.cpp:85
fsCNativeRenderTexture()
Definition fsCNativeRenderTexture.cpp:487
fsPoint screenEffectFocusPosGet() const
Definition fsCNativeRenderTexture.cpp:554
void renderDo() override
Definition fsCNativeRenderTexture.cpp:192
void partialEndDo() override
Definition fsCNativeRenderTexture.cpp:338
void partialStartDo() override
Definition fsCNativeRenderTexture.cpp:355
void shaderEffectRefresh(const fsStr &pFragmentShader)
Definition fsCNativeRenderTexture.cpp:528
void paintDo(std::vector< fsPoint > const &pPos, fsSColour4B const &pColour) override
Definition fsCNativeRenderTexture.cpp:146
friend class fsITexture
Definition fsCNativeRenderTexture.h:32
void targetSetDo() override
Definition fsCNativeRenderTexture.cpp:325
void shadersCreateDo(const fsStr &pVertex, const fsStr &pFragment) override
Definition fsCNativeRenderTexture.cpp:407
void initialiseSolutionDo(fsIImage *pSolution)
Definition fsCNativeRenderTexture.cpp:464
void screenShotEndDo(const fsStr &pSceneName) override
Definition fsCNativeRenderTexture.cpp:275
void targetClearDo() override
Definition fsCNativeRenderTexture.cpp:367
void recolourDo(fsSColour4B const &pOld, fsSColour4B const &pNew) override
Definition fsCNativeRenderTexture.cpp:123
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
Definition fsCNativeRenderTexture.cpp:214
virtual ~fsCNativeRenderTexture()
Definition fsCNativeRenderTexture.cpp:500
void screenShotStartDo() override
Definition fsCNativeRenderTexture.cpp:264
void brushSetDo(fsCResourceName const &pBrushFilename) override
Definition fsCNativeRenderTexture.cpp:203
Definition fsCResourceName.h:32
Definition fsIImage.h:21
void paint(std::vector< fsPoint > const &pPos, fsSColour4B const &pColour)
Definition fsIRenderableTexture.cpp:97
fsIRenderableTexture()
Definition fsIRenderableTexture.cpp:102
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
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