mirror of https://github.com/axmolengine/axmol.git
Take care _programState use
This commit is contained in:
parent
d90aa8708f
commit
a735abaf65
|
@ -46,7 +46,7 @@ AtlasNode::AtlasNode()
|
||||||
{
|
{
|
||||||
auto& pipelineDescriptor = _quadCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _quadCommand.getPipelineDescriptor();
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
||||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) backend::ProgramState(program));
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
||||||
_textureLocation = pipelineDescriptor.programState->getUniformLocation("u_texture");
|
_textureLocation = pipelineDescriptor.programState->getUniformLocation("u_texture");
|
||||||
|
|
|
@ -72,7 +72,6 @@ DrawNode::~DrawNode()
|
||||||
free(_bufferGLLine);
|
free(_bufferGLLine);
|
||||||
_bufferGLLine = nullptr;
|
_bufferGLLine = nullptr;
|
||||||
|
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
CC_SAFE_RELEASE(_programStatePoint);
|
CC_SAFE_RELEASE(_programStatePoint);
|
||||||
CC_SAFE_RELEASE(_programStateLine);
|
CC_SAFE_RELEASE(_programStateLine);
|
||||||
}
|
}
|
||||||
|
@ -150,9 +149,8 @@ bool DrawNode::init()
|
||||||
|
|
||||||
void DrawNode::updateShader()
|
void DrawNode::updateShader()
|
||||||
{
|
{
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_COLOR_LENGTH_TEXTURE);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_COLOR_LENGTH_TEXTURE);
|
||||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
setProgramState(new (std::nothrow) backend::ProgramState(program));
|
||||||
_customCommand.getPipelineDescriptor().programState = _programState;
|
_customCommand.getPipelineDescriptor().programState = _programState;
|
||||||
setVertexLayout(_customCommand);
|
setVertexLayout(_customCommand);
|
||||||
_customCommand.setDrawType(CustomCommand::DrawType::ARRAY);
|
_customCommand.setDrawType(CustomCommand::DrawType::ARRAY);
|
||||||
|
|
|
@ -664,12 +664,7 @@ void Label::setVertexLayout(PipelineDescriptor& pipelineDescriptor)
|
||||||
|
|
||||||
void Label::setProgramState(backend::ProgramState *programState)
|
void Label::setProgramState(backend::ProgramState *programState)
|
||||||
{
|
{
|
||||||
if (_programState != programState)
|
Node::setProgramState(programState);
|
||||||
{
|
|
||||||
CC_SAFE_RELEASE_NULL(_programState);
|
|
||||||
_programState = programState;
|
|
||||||
CC_SAFE_RETAIN(programState);
|
|
||||||
}
|
|
||||||
updateUniformLocations();
|
updateUniformLocations();
|
||||||
for (auto &batch : _batchCommands)
|
for (auto &batch : _batchCommands)
|
||||||
{
|
{
|
||||||
|
@ -730,9 +725,8 @@ void Label::updateShaderProgram()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
auto* program = backend::Program::getBuiltinProgram(programType);
|
auto* program = backend::Program::getBuiltinProgram(programType);
|
||||||
_programState = new backend::ProgramState(program);
|
attachProgramState(new backend::ProgramState(program));
|
||||||
|
|
||||||
updateUniformLocations();
|
updateUniformLocations();
|
||||||
|
|
||||||
|
|
|
@ -246,7 +246,7 @@ LayerColor::LayerColor()
|
||||||
|
|
||||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_COLOR); // TODO: noMVP?
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_COLOR); // TODO: noMVP?
|
||||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) backend::ProgramState(program));
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
|
|
||||||
auto vertexLayout = _programState->getVertexLayout();
|
auto vertexLayout = _programState->getVertexLayout();
|
||||||
|
@ -662,7 +662,7 @@ LayerRadialGradient::LayerRadialGradient()
|
||||||
{
|
{
|
||||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::LAYER_RADIA_GRADIENT);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::LAYER_RADIA_GRADIENT);
|
||||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) backend::ProgramState(program));
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
||||||
_startColorLocation = pipelineDescriptor.programState->getUniformLocation("u_startColor");
|
_startColorLocation = pipelineDescriptor.programState->getUniformLocation("u_startColor");
|
||||||
|
|
|
@ -221,12 +221,7 @@ void MotionStreak::setProgramState(backend::ProgramState* programState)
|
||||||
{
|
{
|
||||||
CCASSERT(programState, "argument should not be nullptr");
|
CCASSERT(programState, "argument should not be nullptr");
|
||||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
if (_programState != programState)
|
Node::setProgramState(programState);
|
||||||
{
|
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
_programState = programState;
|
|
||||||
CC_SAFE_RETAIN(programState);
|
|
||||||
}
|
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
|
|
||||||
_mvpMatrixLocaiton = _programState->getUniformLocation("u_MVPMatrix");
|
_mvpMatrixLocaiton = _programState->getUniformLocation("u_MVPMatrix");
|
||||||
|
|
|
@ -2143,13 +2143,20 @@ void Node::updateProgramStateTexture(Texture2D* texture)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::setProgramState(backend::ProgramState* programState)
|
void Node::setProgramState(backend::ProgramState* programState)
|
||||||
|
{
|
||||||
|
if(attachProgramState(programState))
|
||||||
|
programState->retain();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Node::attachProgramState(backend::ProgramState* programState)
|
||||||
{
|
{
|
||||||
if (_programState != programState)
|
if (_programState != programState)
|
||||||
{
|
{
|
||||||
CC_SAFE_RELEASE(_programState);
|
CC_SAFE_RELEASE(_programState);
|
||||||
_programState = programState;
|
_programState = programState;
|
||||||
CC_SAFE_RETAIN(programState);
|
return !!_programState;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
backend::ProgramState* Node::getProgramState() const
|
backend::ProgramState* Node::getProgramState() const
|
||||||
|
|
|
@ -178,7 +178,8 @@ public:
|
||||||
* Sets the arrival order when this node has a same ZOrder with other children.
|
* Sets the arrival order when this node has a same ZOrder with other children.
|
||||||
*
|
*
|
||||||
* A node which called addChild subsequently will take a larger arrival order,
|
* A node which called addChild subsequently will take a larger arrival order,
|
||||||
* If two children have the same Z order, the child with larger arrival order will be drawn later.
|
* If two children have the same Z order, the child with larger arrival order will be
|
||||||
|
n later.
|
||||||
*
|
*
|
||||||
* @warning This method is used internally for localZOrder sorting, don't change this manually
|
* @warning This method is used internally for localZOrder sorting, don't change this manually
|
||||||
*
|
*
|
||||||
|
@ -1768,6 +1769,7 @@ public:
|
||||||
virtual void setCameraMask(unsigned short mask, bool applyChildren = true);
|
virtual void setCameraMask(unsigned short mask, bool applyChildren = true);
|
||||||
|
|
||||||
virtual void setProgramState(backend::ProgramState* programState);
|
virtual void setProgramState(backend::ProgramState* programState);
|
||||||
|
bool attachProgramState(backend::ProgramState* programState);
|
||||||
|
|
||||||
void setProgramStateWithRegistry(backend::ProgramType programType, Texture2D* texture);
|
void setProgramStateWithRegistry(backend::ProgramType programType, Texture2D* texture);
|
||||||
void updateProgramStateTexture(Texture2D* texture);
|
void updateProgramStateTexture(Texture2D* texture);
|
||||||
|
|
|
@ -49,7 +49,7 @@ ParticleBatchNode::ParticleBatchNode()
|
||||||
{
|
{
|
||||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
||||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) backend::ProgramState(program));
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
_mvpMatrixLocaiton = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
_mvpMatrixLocaiton = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
||||||
_textureLocation = pipelineDescriptor.programState->getUniformLocation("u_texture");
|
_textureLocation = pipelineDescriptor.programState->getUniformLocation("u_texture");
|
||||||
|
|
|
@ -49,7 +49,7 @@ ParticleSystemQuad::ParticleSystemQuad()
|
||||||
{
|
{
|
||||||
auto& pipelieDescriptor = _quadCommand.getPipelineDescriptor();
|
auto& pipelieDescriptor = _quadCommand.getPipelineDescriptor();
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
||||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) backend::ProgramState(program));
|
||||||
pipelieDescriptor.programState = _programState;
|
pipelieDescriptor.programState = _programState;
|
||||||
_mvpMatrixLocaiton = pipelieDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
_mvpMatrixLocaiton = pipelieDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
||||||
_textureLocation = pipelieDescriptor.programState->getUniformLocation("u_texture");
|
_textureLocation = pipelieDescriptor.programState->getUniformLocation("u_texture");
|
||||||
|
|
|
@ -112,9 +112,9 @@ bool ProgressTimer::initWithSprite(Sprite* sp)
|
||||||
setBarChangeRate(Vec2(1,1));
|
setBarChangeRate(Vec2(1,1));
|
||||||
setSprite(sp);
|
setSprite(sp);
|
||||||
|
|
||||||
CC_SAFE_RELEASE(_programState);
|
// TODO: Use ProgramState Vector to Node
|
||||||
CC_SAFE_RELEASE(_programState2);
|
CC_SAFE_RELEASE(_programState2);
|
||||||
_programState = initPipelineDescriptor(_customCommand, true, _locMVP1, _locTex1);
|
attachProgramState(initPipelineDescriptor(_customCommand, true, _locMVP1, _locTex1));
|
||||||
_programState2 = initPipelineDescriptor(_customCommand2, false, _locMVP2, _locTex2);
|
_programState2 = initPipelineDescriptor(_customCommand2, false, _locMVP2, _locTex2);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -123,7 +123,6 @@ bool ProgressTimer::initWithSprite(Sprite* sp)
|
||||||
ProgressTimer::~ProgressTimer()
|
ProgressTimer::~ProgressTimer()
|
||||||
{
|
{
|
||||||
CC_SAFE_RELEASE(_sprite);
|
CC_SAFE_RELEASE(_sprite);
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
CC_SAFE_RELEASE(_programState2);
|
CC_SAFE_RELEASE(_programState2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -399,12 +399,7 @@ void Sprite::setProgramState(backend::ProgramState *programState)
|
||||||
{
|
{
|
||||||
CCASSERT(programState, "argument should not be nullptr");
|
CCASSERT(programState, "argument should not be nullptr");
|
||||||
auto& pipelineDescriptor = _trianglesCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _trianglesCommand.getPipelineDescriptor();
|
||||||
if (_programState != programState)
|
Node::setProgramState(programState);
|
||||||
{
|
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
_programState = programState;
|
|
||||||
CC_SAFE_RETAIN(programState);
|
|
||||||
}
|
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
|
|
||||||
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation(backend::Uniform::MVP_MATRIX);
|
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation(backend::Uniform::MVP_MATRIX);
|
||||||
|
|
|
@ -152,12 +152,7 @@ void SpriteBatchNode::setProgramState(backend::ProgramState *programState)
|
||||||
{
|
{
|
||||||
CCASSERT(programState, "programState should not be nullptr");
|
CCASSERT(programState, "programState should not be nullptr");
|
||||||
auto& pipelineDescriptor = _quadCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _quadCommand.getPipelineDescriptor();
|
||||||
if (_programState != programState)
|
Node::setProgramState(programState);
|
||||||
{
|
|
||||||
CC_SAFE_RELEASE(_programState);
|
|
||||||
_programState = programState;
|
|
||||||
CC_SAFE_RETAIN(programState);
|
|
||||||
}
|
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
|
|
||||||
setVertexLayout();
|
setVertexLayout();
|
||||||
|
|
|
@ -119,7 +119,7 @@ bool MotionStreak3D::initWithFade(float fade, float minSeg, float stroke, const
|
||||||
|
|
||||||
// shader state
|
// shader state
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_TEXTURE_COLOR);
|
||||||
_programState = new backend::ProgramState(program);
|
attachProgramState(new backend::ProgramState(program));
|
||||||
|
|
||||||
_customCommand.getPipelineDescriptor().programState = _programState;
|
_customCommand.getPipelineDescriptor().programState = _programState;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ bool Skybox::init()
|
||||||
|
|
||||||
// create and set our custom shader
|
// create and set our custom shader
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::SKYBOX_3D);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::SKYBOX_3D);
|
||||||
_programState = new backend::ProgramState(program);
|
attachProgramState(new backend::ProgramState(program));
|
||||||
|
|
||||||
auto &pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto &pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
auto layout = _programState->getVertexLayout();
|
auto layout = _programState->getVertexLayout();
|
||||||
|
|
|
@ -118,7 +118,7 @@ void cocos2d::Terrain::setLightDir(const Vec3& lightDir)
|
||||||
bool Terrain::initProperties()
|
bool Terrain::initProperties()
|
||||||
{
|
{
|
||||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::TERRAIN_3D);
|
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::TERRAIN_3D);
|
||||||
_programState = new backend::ProgramState(program);
|
attachProgramState(new backend::ProgramState(program));
|
||||||
|
|
||||||
_stateBlock.depthWrite = true;
|
_stateBlock.depthWrite = true;
|
||||||
_stateBlock.depthTest = true;
|
_stateBlock.depthTest = true;
|
||||||
|
|
|
@ -415,7 +415,7 @@ bool BoneNode::init()
|
||||||
|
|
||||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
auto* program = cocos2d::backend::Program::getBuiltinProgram(cocos2d::backend::ProgramType::POSITION_COLOR); // TODO: noMVP?
|
auto* program = cocos2d::backend::Program::getBuiltinProgram(cocos2d::backend::ProgramType::POSITION_COLOR); // TODO: noMVP?
|
||||||
_programState = new (std::nothrow) cocos2d::backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) cocos2d::backend::ProgramState(program));
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
|
|
||||||
_mvpLocation = _programState->getUniformLocation("u_MVPMatrix");
|
_mvpLocation = _programState->getUniformLocation("u_MVPMatrix");
|
||||||
|
|
|
@ -54,7 +54,7 @@ bool SkeletonNode::init()
|
||||||
// init _customCommand
|
// init _customCommand
|
||||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||||
auto* program = cocos2d::backend::Program::getBuiltinProgram(cocos2d::backend::ProgramType::POSITION_COLOR); // TODO: noMVP?
|
auto* program = cocos2d::backend::Program::getBuiltinProgram(cocos2d::backend::ProgramType::POSITION_COLOR); // TODO: noMVP?
|
||||||
_programState = new (std::nothrow) cocos2d::backend::ProgramState(program);
|
attachProgramState(new (std::nothrow) cocos2d::backend::ProgramState(program));
|
||||||
pipelineDescriptor.programState = _programState;
|
pipelineDescriptor.programState = _programState;
|
||||||
|
|
||||||
_mvpLocation = _programState->getUniformLocation("u_MVPMatrix");
|
_mvpLocation = _programState->getUniformLocation("u_MVPMatrix");
|
||||||
|
|
Loading…
Reference in New Issue