Hi there.
I tried to set a shader (gray or pixelshader) for the layers of the tiled map. But when I use the default gray shader which is built in of cocos2d-x, the layer is frozen (does not move) and is not scaled anymore.
If I use another shader, the layer is not visible anymore.
I set the shader per layer via this code:
mMap = TMXTiledMap::create(mFilename + ".tmx");
mMap->setAnchorPoint(Vec2(0, 1));
auto& children = mMap->getChildren();
SpriteBatchNode* child = nullptr;
GLProgram* shaderProgram = GLProgram::createWithByteArrays(ccPositionTextureColor_noMVP_vert, ccPositionTexture_GrayScale_frag);
CCASSERT(shaderProgram != nullptr, "Invalid operation. Cannot create shader program");
shaderProgram->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
shaderProgram->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD);
shaderProgram->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
shaderProgram->link();
CHECK_GL_ERROR_DEBUG();
shaderProgram->updateUniforms();
CHECK_GL_ERROR_DEBUG();
auto glProgramState = GLProgramState::getOrCreateWithGLProgram(shaderProgram);
for (const auto &obj : children)
{
child = dynamic_cast<SpriteBatchNode*>(obj);
child->setGLProgramState(glProgramState);
}
I am really stuck on this.
Thanks for any help!
@ stevetranby: If you are still active, maybe you can have a look?