Date: 2016/10/14 Cate: C++, cocos2d-x Tags:  

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);

Leave a Reply