PuzzleSDK
ShaderNode类 参考

#include <ShaderTest.h>

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

Public 成员函数

 CREATE_FUNC (ShaderNode)
 
virtual void update (float dt) override
 
virtual void setPosition (const cocos2d::Vec2 &newPosition) override
 
virtual void draw (cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t flags) override
 

静态 Public 成员函数

static ShaderNodeshaderNodeWithVertex (const std::string &vert, const std::string &frag)
 

Protected 成员函数

 ShaderNode ()
 
 ~ShaderNode ()
 
bool initWithVertex (const std::string &vert, const std::string &frag)
 
void loadShaderVertex (const std::string &vert, const std::string &frag)
 
virtual void setProgramState (cocos2d::backend::ProgramState *programState) override
 
void updateUniforms ()
 

Protected 属性

cocos2d::Vec2 _center
 
cocos2d::Vec2 _resolution
 
float _time
 
std::string _vertFileName
 
std::string _fragFileName
 
cocos2d::CustomCommand _customCommand
 
cocos2d::backend::UniformLocation _locResolution
 
cocos2d::backend::UniformLocation _locCenter
 
cocos2d::backend::UniformLocation _locMVP
 
cocos2d::backend::UniformLocation _locTime
 
cocos2d::backend::UniformLocation _locSinTime
 
cocos2d::backend::UniformLocation _locCosTime
 
cocos2d::backend::UniformLocation _locScreenSize
 

详细描述

在文件 ShaderTest.h138 行定义.

构造及析构函数说明

◆ ShaderNode()

ShaderNode::ShaderNode ( )
protected

在文件 ShaderTest.cpp74 行定义.

75:_center(Vec2(0.0f, 0.0f))
76,_resolution(Vec2(0.0f, 0.0f))
77,_time(0.0f)
78{
79}
cocos2d::Vec2 _resolution
Definition: ShaderTest.h:170
float _time
Definition: ShaderTest.h:171
cocos2d::Vec2 _center
Definition: ShaderTest.h:169

被这些函数引用 shaderNodeWithVertex().

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

◆ ~ShaderNode()

ShaderNode::~ShaderNode ( )
protected

在文件 ShaderTest.cpp81 行定义.

82{
83}

成员函数说明

◆ CREATE_FUNC()

ShaderNode::CREATE_FUNC ( ShaderNode  )

◆ draw()

void ShaderNode::draw ( cocos2d::Renderer *  renderer,
const cocos2d::Mat4 &  transform,
uint32_t  flags 
)
overridevirtual

在文件 ShaderTest.cpp169 行定义.

170{
171 _customCommand.init(_globalZOrder, transform, flags);
172
173 _programState->setUniform(_locResolution, &_resolution, sizeof(_resolution));
174 _programState->setUniform(_locCenter, &_center, sizeof(_center));
175
176
177 auto projectionMatrix = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
178 auto finalMatrix = projectionMatrix * transform;
179
180 _programState->setUniform(_locMVP, finalMatrix.m, sizeof(finalMatrix.m));
181
182 float time = Director::getInstance()->getTotalFrames() * Director::getInstance()->getAnimationInterval();
183 Vec4 uTime(time / 10.0f, time, time * 2.0f, time * 4.0f);
184 Vec4 sinTime(time / 8.0f, time / 4.0f, time / 2.0f, sinf(time));
185 Vec4 cosTime(time / 8.0f, time / 4.0f, time / 2.0f, cosf(time));
186
187 _programState->setUniform(_locTime, &uTime, sizeof(uTime));
188 _programState->setUniform(_locSinTime, &sinTime, sizeof(sinTime));
189 _programState->setUniform(_locCosTime, &cosTime, sizeof(cosTime));
190
191 renderer->addCommand(&_customCommand);
192 CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, 6);
193}
cocos2d::backend::UniformLocation _locSinTime
Definition: ShaderTest.h:180
cocos2d::backend::UniformLocation _locCosTime
Definition: ShaderTest.h:181
cocos2d::backend::UniformLocation _locTime
Definition: ShaderTest.h:179
cocos2d::backend::UniformLocation _locMVP
Definition: ShaderTest.h:178
cocos2d::backend::UniformLocation _locResolution
Definition: ShaderTest.h:176
cocos2d::CustomCommand _customCommand
Definition: ShaderTest.h:174
cocos2d::backend::UniformLocation _locCenter
Definition: ShaderTest.h:177

引用了 _center, _customCommand, _locCenter, _locCosTime, _locMVP, _locResolution, _locSinTime, _locTime , 以及 _resolution.

◆ initWithVertex()

bool ShaderNode::initWithVertex ( const std::string &  vert,
const std::string &  frag 
)
protected

在文件 ShaderTest.cpp94 行定义.

95{
96 _vertFileName = vert;
97 _fragFileName = frag;
98
99 loadShaderVertex(vert, frag);
100
101 _time = 0;
102 _resolution = Vec2(SIZE_X, SIZE_Y);
103
104 scheduleUpdate();
105
106 setContentSize(Size(SIZE_X, SIZE_Y));
107 setAnchorPoint(Vec2(0.5f, 0.5f));
108
109 // init custom command
110 auto layout = _programState->getVertexLayout();
111 layout->setAttribute("a_position", 0, backend::VertexFormat::FLOAT2, 0, false);
112
113 float w = SIZE_X, h = SIZE_Y;
114 Vec2 vertices[6] = { Vec2(0.0f,0.0f), Vec2(w,0.0f), Vec2(w,h), Vec2(0.0f,0.0f), Vec2(0.0f,h), Vec2(w,h) };
115 layout->setLayout(sizeof(Vec2));
116
117 /*
118 * TODO: the Y-coordinate of subclasses are flipped in metal
119 *
120 * keywords: CC_USE_METAL , CC_USE_GL
121 */
122
123 _customCommand.createVertexBuffer(sizeof(Vec2), 6, CustomCommand::BufferUsage::STATIC);
124 _customCommand.updateVertexBuffer(vertices, sizeof(vertices));
125
126 _customCommand.setDrawType(CustomCommand::DrawType::ARRAY);
127
128 return true;
129}
@ SIZE_Y
Definition: ShaderTest.cpp:71
@ SIZE_X
Definition: ShaderTest.cpp:70
std::string _fragFileName
Definition: ShaderTest.h:173
void loadShaderVertex(const std::string &vert, const std::string &frag)
Definition: ShaderTest.cpp:131
std::string _vertFileName
Definition: ShaderTest.h:172

引用了 _customCommand, _fragFileName, _resolution, _time, _vertFileName, loadShaderVertex(), SIZE_X , 以及 SIZE_Y.

+ 函数调用图:

◆ loadShaderVertex()

void ShaderNode::loadShaderVertex ( const std::string &  vert,
const std::string &  frag 
)
protected

在文件 ShaderTest.cpp131 行定义.

132{
133 auto fileUtiles = FileUtils::getInstance();
134
135 // frag
136 auto fragmentFilePath = fileUtiles->fullPathForFilename(frag);
137 auto fragSource = fileUtiles->getStringFromFile(fragmentFilePath);
138
139 // vert
140 std::string vertSource;
141 if (vert.empty()) {
142 vertSource = position_vert;
143 } else {
144 std::string vertexFilePath = fileUtiles->fullPathForFilename(vert);
145 vertSource = fileUtiles->getStringFromFile(vertexFilePath);
146 }
147 auto program = backend::Device::getInstance()->newProgram(vertSource.c_str(), fragSource.c_str());
148 auto programState = new backend::ProgramState(program);
149 setProgramState(programState);
150 CC_SAFE_RELEASE(programState);
151 CC_SAFE_RELEASE(program);
152}
virtual void setProgramState(cocos2d::backend::ProgramState *programState) override
Definition: ShaderTest.h:155

引用了 setProgramState().

被这些函数引用 initWithVertex().

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

◆ setPosition()

void ShaderNode::setPosition ( const cocos2d::Vec2 &  newPosition)
overridevirtual

在文件 ShaderTest.cpp159 行定义.

160{
161 Node::setPosition(newPosition);
162 auto position = getPosition();
163 auto frameSize = Director::getInstance()->getOpenGLView()->getFrameSize();
164 auto visibleSize = Director::getInstance()->getVisibleSize();
165 auto retinaFactor = Director::getInstance()->getOpenGLView()->getRetinaFactor();
166 _center = Vec2(position.x * frameSize.width / visibleSize.width * retinaFactor, position.y * frameSize.height / visibleSize.height * retinaFactor);
167}

引用了 _center.

◆ setProgramState()

virtual void ShaderNode::setProgramState ( cocos2d::backend::ProgramState *  programState)
inlineoverrideprotectedvirtual

在文件 ShaderTest.h155 行定义.

156 {
157 if (programState != _programState)
158 {
159 CC_SAFE_RELEASE_NULL(_programState);
160 _programState = programState;
161 CC_SAFE_RETAIN(_programState);
162 }
163 _customCommand.getPipelineDescriptor().programState = programState;
165 }
void updateUniforms()
Definition: ShaderTest.cpp:195

引用了 _customCommand , 以及 updateUniforms().

被这些函数引用 loadShaderVertex().

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

◆ shaderNodeWithVertex()

ShaderNode * ShaderNode::shaderNodeWithVertex ( const std::string &  vert,
const std::string &  frag 
)
static

在文件 ShaderTest.cpp85 行定义.

86{
87 auto node = new (std::nothrow) ShaderNode();
88 node->initWithVertex(vert, frag);
89 node->autorelease();
90
91 return node;
92}

引用了 ShaderNode().

被这些函数引用 ShaderMonjori::init(), ShaderMandelbrot::init(), ShaderJulia::init(), ShaderHeart::init(), ShaderFlower::init(), ShaderPlasma::init(), ShaderLensFlare::init() , 以及 ShaderGlow::init().

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

◆ update()

void ShaderNode::update ( float  dt)
overridevirtual

在文件 ShaderTest.cpp154 行定义.

155{
156 _time += dt;
157}

引用了 _time.

◆ updateUniforms()

void ShaderNode::updateUniforms ( )
protected

在文件 ShaderTest.cpp195 行定义.

196{
197 if(_programState == nullptr)
198 return;
199
200 _locResolution = _programState->getUniformLocation("resolution");
201 _locCenter = _programState->getUniformLocation("center");
202 _locMVP = _programState->getUniformLocation("u_MVPMatrix");
203 _locTime = _programState->getUniformLocation("u_Time");
204 _locSinTime = _programState->getUniformLocation("u_SinTime");
205 _locCosTime = _programState->getUniformLocation("u_CosTime");
206 _locScreenSize = _programState->getUniformLocation("u_screenSize");
207
208 const Vec2& frameSize = Director::getInstance()->getOpenGLView()->getFrameSize();
209 float retinaFactor = Director::getInstance()->getOpenGLView()->getRetinaFactor();
210 auto screenSizeInPixels = frameSize * retinaFactor;
211 _programState->setUniform(_locScreenSize, &screenSizeInPixels, sizeof(screenSizeInPixels));
212}
cocos2d::backend::UniformLocation _locScreenSize
Definition: ShaderTest.h:182

引用了 _locCenter, _locCosTime, _locMVP, _locResolution, _locScreenSize, _locSinTime , 以及 _locTime.

被这些函数引用 setProgramState().

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

类成员变量说明

◆ _center

cocos2d::Vec2 ShaderNode::_center
protected

在文件 ShaderTest.h169 行定义.

被这些函数引用 draw() , 以及 setPosition().

◆ _customCommand

cocos2d::CustomCommand ShaderNode::_customCommand
protected

在文件 ShaderTest.h174 行定义.

被这些函数引用 draw(), initWithVertex() , 以及 setProgramState().

◆ _fragFileName

std::string ShaderNode::_fragFileName
protected

在文件 ShaderTest.h173 行定义.

被这些函数引用 initWithVertex().

◆ _locCenter

cocos2d::backend::UniformLocation ShaderNode::_locCenter
protected

在文件 ShaderTest.h177 行定义.

被这些函数引用 draw() , 以及 updateUniforms().

◆ _locCosTime

cocos2d::backend::UniformLocation ShaderNode::_locCosTime
protected

在文件 ShaderTest.h181 行定义.

被这些函数引用 draw() , 以及 updateUniforms().

◆ _locMVP

cocos2d::backend::UniformLocation ShaderNode::_locMVP
protected

在文件 ShaderTest.h178 行定义.

被这些函数引用 draw() , 以及 updateUniforms().

◆ _locResolution

cocos2d::backend::UniformLocation ShaderNode::_locResolution
protected

在文件 ShaderTest.h176 行定义.

被这些函数引用 draw() , 以及 updateUniforms().

◆ _locScreenSize

cocos2d::backend::UniformLocation ShaderNode::_locScreenSize
protected

在文件 ShaderTest.h182 行定义.

被这些函数引用 updateUniforms().

◆ _locSinTime

cocos2d::backend::UniformLocation ShaderNode::_locSinTime
protected

在文件 ShaderTest.h180 行定义.

被这些函数引用 draw() , 以及 updateUniforms().

◆ _locTime

cocos2d::backend::UniformLocation ShaderNode::_locTime
protected

在文件 ShaderTest.h179 行定义.

被这些函数引用 draw() , 以及 updateUniforms().

◆ _resolution

cocos2d::Vec2 ShaderNode::_resolution
protected

在文件 ShaderTest.h170 行定义.

被这些函数引用 draw() , 以及 initWithVertex().

◆ _time

float ShaderNode::_time
protected

在文件 ShaderTest.h171 行定义.

被这些函数引用 initWithVertex() , 以及 update().

◆ _vertFileName

std::string ShaderNode::_vertFileName
protected

在文件 ShaderTest.h172 行定义.

被这些函数引用 initWithVertex().


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