cocos2d-xでシェーダーを書いていて、setUniformFloat
とかで値をシェーダー側に渡したかったのですが、うまく渡せなくてかなりハマったのでメモ。
setUniformFloat
等したあとに、applyUniforms()
を呼び出す必要がありました!なるほど・・・・。
auto spr = Sprite::create("hoge.png"); spr->setPosition(center); this->addChild(spr); auto fileUtiles = FileUtils::getInstance(); auto fragmentShaderPath = fileUtiles->fullPathForFilename("shaders/supershader.fsh"); auto fragSource = fileUtiles->getStringFromFile(fragmentShaderPath); auto glprogram = GLProgram::createWithByteArrays(ccPositionTextureColor_vert, fragSource.c_str()); auto _glprogramstate = GLProgramState::create(glprogram); CC_SAFE_RETAIN(_glprogramstate); // ここでtime変数をわたす float time = _director->getTotalFrames() * _director->getAnimationInterval(); _glprogramstate->setUniformFloat("u_CurrentTime", time); // これ!!!!!!!!!!!!!!!! _glprogramstate->applyUniforms(); spr->setGLProgramState(_glprogramstate);