mirror of
https://github.com/u0u0/Cocos2d-Lua-Community.git
synced 2026-06-20 12:52:15 +08:00
LayerColor support custom shader.
This commit is contained in:
@@ -58,26 +58,9 @@ LayerColor::LayerColor()
|
||||
// default blend function
|
||||
_blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
|
||||
|
||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||
auto* program = backend::Program::getBuiltinProgram(backend::ProgramType::POSITION_COLOR);
|
||||
_programState = new (std::nothrow) backend::ProgramState(program);
|
||||
pipelineDescriptor.programState = _programState;
|
||||
|
||||
auto vertexLayout = _programState->getVertexLayout();
|
||||
const auto& attributeInfo = _programState->getProgram()->getActiveAttributes();
|
||||
auto iter = attributeInfo.find("a_position");
|
||||
if(iter != attributeInfo.end())
|
||||
{
|
||||
vertexLayout->setAttribute("a_position", iter->second.location, backend::VertexFormat::FLOAT3, 0, false);
|
||||
}
|
||||
iter = attributeInfo.find("a_color");
|
||||
if(iter != attributeInfo.end())
|
||||
{
|
||||
vertexLayout->setAttribute("a_color", iter->second.location, backend::VertexFormat::FLOAT4, sizeof(_vertexData[0].vertices), false);
|
||||
}
|
||||
vertexLayout->setLayout(sizeof(_vertexData[0]));
|
||||
|
||||
_mvpMatrixLocation = pipelineDescriptor.programState->getUniformLocation("u_MVPMatrix");
|
||||
backend::ProgramState* programState = new (std::nothrow) backend::ProgramState(program);
|
||||
setProgramState(programState);
|
||||
|
||||
_customCommand.createIndexBuffer(CustomCommand::IndexFormat::U_SHORT, 6, CustomCommand::BufferUsage::STATIC);
|
||||
unsigned short indices[] = {0, 1, 2, 2, 1, 3};
|
||||
@@ -104,6 +87,27 @@ void LayerColor::setBlendFunc(const BlendFunc &var)
|
||||
_blendFunc = var;
|
||||
}
|
||||
|
||||
void LayerColor::setProgramState(backend::ProgramState* programState)
|
||||
{
|
||||
Node::setProgramState(programState);
|
||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||
pipelineDescriptor.programState = programState;
|
||||
|
||||
auto vertexLayout = _programState->getVertexLayout();
|
||||
const auto& attributeInfo = _programState->getProgram()->getActiveAttributes();
|
||||
auto iter = attributeInfo.find("a_position");
|
||||
if(iter != attributeInfo.end()) {
|
||||
vertexLayout->setAttribute("a_position", iter->second.location, backend::VertexFormat::FLOAT3, 0, false);
|
||||
}
|
||||
iter = attributeInfo.find("a_color");
|
||||
if(iter != attributeInfo.end()) {
|
||||
vertexLayout->setAttribute("a_color", iter->second.location, backend::VertexFormat::FLOAT4, sizeof(_vertexData[0].vertices), false);
|
||||
}
|
||||
vertexLayout->setLayout(sizeof(_vertexData[0]));
|
||||
|
||||
_mvpMatrixLocation = _programState->getUniformLocation("u_MVPMatrix");
|
||||
}
|
||||
|
||||
LayerColor* LayerColor::create()
|
||||
{
|
||||
LayerColor* ret = new (std::nothrow) LayerColor();
|
||||
|
||||
@@ -111,6 +111,8 @@ public:
|
||||
*@endcode
|
||||
*/
|
||||
virtual void setBlendFunc(const BlendFunc& blendFunc) override;
|
||||
// support custom shader
|
||||
virtual void setProgramState(backend::ProgramState* programState) override;
|
||||
|
||||
CC_CONSTRUCTOR_ACCESS:
|
||||
LayerColor();
|
||||
@@ -134,7 +136,6 @@ protected:
|
||||
backend::UniformLocation _mvpMatrixLocation;
|
||||
private:
|
||||
CC_DISALLOW_COPY_AND_ASSIGN(LayerColor);
|
||||
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user