PuzzleSDK
RenderTextureSave类 参考

#include <RenderTextureTest.h>

+ 类 RenderTextureSave 继承关系图:
+ RenderTextureSave 的协作图:

Public 成员函数

 CREATE_FUNC (RenderTextureSave)
 
 RenderTextureSave ()
 
 ~RenderTextureSave ()
 
virtual std::string title () const override
 
virtual std::string subtitle () const override
 
void onTouchesMoved (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void clearImage (cocos2d::Ref *pSender)
 
void clearImageTransparent (cocos2d::Ref *sender)
 
void saveImageWithPremultipliedAlpha (cocos2d::Ref *pSender)
 
void saveImageWithNonPremultipliedAlpha (cocos2d::Ref *pSender)
 
void addImage (cocos2d::Ref *sender)
 
- Public 成员函数 继承自 TestCase
 TestCase ()
 
 ~TestCase ()
 
virtual Type getTestType () const
 
virtual float getDuration () const
 
virtual std::string getExpectedOutput () const
 
virtual std::string getActualOutput () const
 
virtual void restartTestCallback (cocos2d::Ref *sender)
 
virtual void nextTestCallback (cocos2d::Ref *sender)
 
virtual void priorTestCallback (cocos2d::Ref *sender)
 
virtual void onBackCallback (cocos2d::Ref *sender)
 
void setTestSuite (TestSuite *testSuite)
 
TestSuitegetTestSuite () const
 
float getRunTime () const
 
void setTestCaseName (const std::string &name)
 
std::string getTestCaseName () const
 
const cocos2d::Label * getSubtitleLable () const
 
const cocos2d::MenuItemImage * getRestartTestItem () const
 
virtual void onEnter () override
 

Private 属性

cocos2d::RenderTexture * _target
 
cocos2d::Vector< cocos2d::Sprite * > _brushs
 

额外继承的成员函数

- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 
- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

详细描述

在文件 RenderTextureTest.h37 行定义.

构造及析构函数说明

◆ RenderTextureSave()

RenderTextureSave::RenderTextureSave ( )

Implementation of RenderTextureSave

在文件 RenderTextureTest.cpp46 行定义.

47{
48 auto s = Director::getInstance()->getWinSize();
49
50 // create a render texture, this is what we are going to draw into
51 _target = RenderTexture::create(s.width, s.height, backend::PixelFormat::RGBA8888);
52 _target->retain();
53 _target->setPosition(Vec2(s.width / 2, s.height / 2));
54
55 // note that the render texture is a Node, and contains a sprite of its texture for convenience,
56 // so we can just parent it to the scene like any other Node
57 this->addChild(_target, -1);
58
59 auto listener = EventListenerTouchAllAtOnce::create();
60 listener->onTouchesMoved = CC_CALLBACK_2(RenderTextureSave::onTouchesMoved, this);
61 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
62
63 // Save Image menu
64 MenuItemFont::setFontSize(16);
65 auto item1 = MenuItemFont::create("Save Image PMA", CC_CALLBACK_1(RenderTextureSave::saveImageWithPremultipliedAlpha, this));
66 auto item2 = MenuItemFont::create("Save Image Non-PMA", CC_CALLBACK_1(RenderTextureSave::saveImageWithNonPremultipliedAlpha, this));
67 auto item3 = MenuItemFont::create("Add Image", CC_CALLBACK_1(RenderTextureSave::addImage, this));
68 auto item4 = MenuItemFont::create("Clear to Random", CC_CALLBACK_1(RenderTextureSave::clearImage, this));
69 auto item5 = MenuItemFont::create("Clear to Transparent", CC_CALLBACK_1(RenderTextureSave::clearImageTransparent, this));
70 auto menu = Menu::create(item1, item2, item3, item4, item5, nullptr);
71 this->addChild(menu);
72 menu->alignItemsVertically();
73 menu->setPosition(Vec2(VisibleRect::rightTop().x - 80, VisibleRect::rightTop().y - 100));
74}
void clearImage(cocos2d::Ref *pSender)
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
cocos2d::RenderTexture * _target
void saveImageWithNonPremultipliedAlpha(cocos2d::Ref *pSender)
void saveImageWithPremultipliedAlpha(cocos2d::Ref *pSender)
void addImage(cocos2d::Ref *sender)
void clearImageTransparent(cocos2d::Ref *sender)
static cocos2d::Vec2 rightTop()
Definition: VisibleRect.cpp:81

引用了 _target, addImage(), clearImage(), clearImageTransparent(), onTouchesMoved(), VisibleRect::rightTop(), saveImageWithNonPremultipliedAlpha() , 以及 saveImageWithPremultipliedAlpha().

+ 函数调用图:

◆ ~RenderTextureSave()

RenderTextureSave::~RenderTextureSave ( )

在文件 RenderTextureTest.cpp164 行定义.

165{
166 _target->release();
167 Director::getInstance()->getTextureCache()->removeUnusedTextures();
168}

引用了 _target.

成员函数说明

◆ addImage()

void RenderTextureSave::addImage ( cocos2d::Ref *  sender)

在文件 RenderTextureTest.cpp149 行定义.

150{
151 auto s = Director::getInstance()->getWinSize();
152
153 // begin drawing to the render texture
154 _target->begin();
155
156 Sprite* sprite = Sprite::create("Images/test-rgba1.png");
157 sprite->setPosition(sprite->getContentSize().width + CCRANDOM_0_1() * (s.width - sprite->getContentSize().width), sprite->getContentSize().height + CCRANDOM_0_1() * (s.height - sprite->getContentSize().height));
158 sprite->visit();
159
160 // finish drawing and return context back to the screen
161 _target->end();
162}

引用了 _target.

被这些函数引用 RenderTextureSave().

+ 这是这个函数的调用关系图:

◆ clearImage()

void RenderTextureSave::clearImage ( cocos2d::Ref *  pSender)

在文件 RenderTextureTest.cpp86 行定义.

87{
88 _target->clear(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1());
89}

引用了 _target.

被这些函数引用 RenderTextureSave().

+ 这是这个函数的调用关系图:

◆ clearImageTransparent()

void RenderTextureSave::clearImageTransparent ( cocos2d::Ref *  sender)

在文件 RenderTextureTest.cpp91 行定义.

92{
93 _target->clear(0, 0, 0, 0);
94}

引用了 _target.

被这些函数引用 RenderTextureSave().

+ 这是这个函数的调用关系图:

◆ CREATE_FUNC()

RenderTextureSave::CREATE_FUNC ( RenderTextureSave  )

◆ onTouchesMoved()

void RenderTextureSave::onTouchesMoved ( const std::vector< cocos2d::Touch * > &  touches,
cocos2d::Event *  event 
)

在文件 RenderTextureTest.cpp170 行定义.

171{
172 auto touch = touches[0];
173 auto start = touch->getLocation();
174 auto end = touch->getPreviousLocation();
175
176 // begin drawing to the render texture
177 _target->begin();
178
179 // for extra points, we'll draw this smoothly from the last position and vary the sprite's
180 // scale/rotation/offset
181 float distance = start.getDistance(end);
182 if (distance > 1)
183 {
184 int d = (int)distance;
185 _brushs.clear();
186 for(int i = 0; i < d; ++i)
187 {
188 Sprite * sprite = Sprite::create("Images/fire.png");
189 sprite->setColor(Color3B::RED);
190 sprite->setOpacity(20);
191 _brushs.pushBack(sprite);
192 }
193 for (int i = 0; i < d; i++)
194 {
195 float difx = end.x - start.x;
196 float dify = end.y - start.y;
197 float delta = (float)i / distance;
198 _brushs.at(i)->setPosition(Vec2(start.x + (difx * delta), start.y + (dify * delta)));
199 _brushs.at(i)->setRotation(rand() % 360);
200 float r = (float)(rand() % 50 / 50.f) + 0.25f;
201 _brushs.at(i)->setScale(r);
202 /*_brush->setColor(Color3B(CCRANDOM_0_1() * 127 + 128, 255, 255));*/
203 // Use CCRANDOM_0_1() will cause error when loading libtests.so on android, I don't know why.
204 _brushs.at(i)->setColor(Color3B(rand() % 127 + 128, 255, 255));
205 // Call visit to draw the brush, don't call draw..
206 _brushs.at(i)->visit();
207 }
208 }
209
210 // finish drawing and return context back to the screen
211 _target->end();
212}
cocos2d::Vector< cocos2d::Sprite * > _brushs

引用了 _brushs , 以及 _target.

被这些函数引用 RenderTextureSave().

+ 这是这个函数的调用关系图:

◆ saveImageWithNonPremultipliedAlpha()

void RenderTextureSave::saveImageWithNonPremultipliedAlpha ( cocos2d::Ref *  pSender)

在文件 RenderTextureTest.cpp122 行定义.

123{
124 static int counter = 0;
125
126 char png[20];
127 sprintf(png, "image-no-pma-%d.png", counter);
128
129 auto callback = [&](RenderTexture* rt, const std::string& path)
130 {
131 auto sprite = Sprite::create(path);
132 addChild(sprite);
133 sprite->setScale(0.3f);
134 sprite->setPosition(Vec2(40.0f, 40.0f));
135 sprite->setRotation(counter * 3);
136 rt->release();
137 };
138
139 _target->retain();
140 _target->saveToFileAsNonPMA(png, Image::Format::PNG, true, callback);
141
142 //Add this function to avoid crash if we switch to a new scene.
143 Director::getInstance()->getRenderer()->render();
144 CCLOG("Image saved %s", png);
145
146 counter++;
147}

引用了 _target.

被这些函数引用 RenderTextureSave().

+ 这是这个函数的调用关系图:

◆ saveImageWithPremultipliedAlpha()

void RenderTextureSave::saveImageWithPremultipliedAlpha ( cocos2d::Ref *  pSender)

在文件 RenderTextureTest.cpp96 行定义.

97{
98 static int counter = 0;
99
100 char png[20];
101 sprintf(png, "image-pma-%d.png", counter);
102
103 auto callback = [&](RenderTexture* rt, const std::string& path)
104 {
105 auto sprite = Sprite::create(path);
106 addChild(sprite);
107 sprite->setScale(0.3f);
108 sprite->setPosition(Vec2(40.0f, 40.0f));
109 sprite->setRotation(counter * 3);
110 _target->release();
111 };
112
113 _target->retain();
114 _target->saveToFile(png, Image::Format::PNG, true, callback);
115 //Add this function to avoid crash if we switch to a new scene.
116 Director::getInstance()->getRenderer()->render();
117 CCLOG("Image saved %s", png);
118
119 counter++;
120}

引用了 _target.

被这些函数引用 RenderTextureSave().

+ 这是这个函数的调用关系图:

◆ subtitle()

std::string RenderTextureSave::subtitle ( ) const
overridevirtual

重载 TestCase .

在文件 RenderTextureTest.cpp81 行定义.

82{
83 return "Press 'Save Image' to create an snapshot of the render texture";
84}

◆ title()

std::string RenderTextureSave::title ( ) const
overridevirtual

重载 TestCase .

在文件 RenderTextureTest.cpp76 行定义.

77{
78 return "Touch the screen";
79}

类成员变量说明

◆ _brushs

cocos2d::Vector<cocos2d::Sprite*> RenderTextureSave::_brushs
private

在文件 RenderTextureTest.h54 行定义.

被这些函数引用 onTouchesMoved().

◆ _target

cocos2d::RenderTexture* RenderTextureSave::_target
private

该类的文档由以下文件生成: