博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos Uniforms值的赋值
阅读量:4693 次
发布时间:2019-06-09

本文共 3426 字,大约阅读时间需要 11 分钟。

cocos Uniforms值的赋值举个void Renderer::drawBatchedTriangles()的渲染://Start drawing verties in batch    for(const auto& cmd : _batchedCommands)    {        auto newMaterialID = cmd->getMaterialID();        if(_lastMaterialID != newMaterialID || newMaterialID == MATERIAL_ID_DO_NOT_BATCH)        {            //Draw quads            if(indexToDraw > 0)            {                    //使用前面绑定的定点数据,绘制图元                glDrawElements(GL_TRIANGLES, (GLsizei) indexToDraw, GL_UNSIGNED_SHORT, (GLvoid*) (startIndex*sizeof(_indices[0])) );                _drawnBatches++;                _drawnVertices += indexToDraw;                startIndex += indexToDraw;                indexToDraw = 0;            }            //Use new material            //这个函数内部就是对Uniforms赋值            cmd->useMaterial();            _lastMaterialID = newMaterialID;        }        indexToDraw += cmd->getIndexCount();    }    2、void TrianglesCommand::useMaterial() const{    //Set texture    //设置纹理    GL::bindTexture2D(_textureID);        //set blend mode    GL::blendFunc(_blendType.src, _blendType.dst);        _glProgramState->apply(_mv);}3、void GLProgramState::apply(const Mat4& modelView){    //设置cocos内置的Uniforms值    applyGLProgram(modelView);        //一般用不到    applyAttributes();        //设置用户自定义的Uniforms值,当然也可以通过其他方式直接设置    applyUniforms();}4、这个函数就是真正的设置Uniform的值void GLProgram::setUniformsForBuiltins(const Mat4 &matrixMV){    auto& matrixP = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);    if (_flags.usesP)        setUniformLocationWithMatrix4fv(_builtInUniforms[UNIFORM_P_MATRIX], matrixP.m, 1);    if (_flags.usesMV)        setUniformLocationWithMatrix4fv(_builtInUniforms[UNIFORM_MV_MATRIX], matrixMV.m, 1);    if (_flags.usesMVP) {        Mat4 matrixMVP = matrixP * matrixMV;        setUniformLocationWithMatrix4fv(_builtInUniforms[UNIFORM_MVP_MATRIX], matrixMVP.m, 1);    }    if (_flags.usesNormal)    {        Mat4 mvInverse = matrixMV;        mvInverse.m[12] = mvInverse.m[13] = mvInverse.m[14] = 0.0f;        mvInverse.inverse();        mvInverse.transpose();        GLfloat normalMat[9];        normalMat[0] = mvInverse.m[0];normalMat[1] = mvInverse.m[1];normalMat[2] = mvInverse.m[2];        normalMat[3] = mvInverse.m[4];normalMat[4] = mvInverse.m[5];normalMat[5] = mvInverse.m[6];        normalMat[6] = mvInverse.m[8];normalMat[7] = mvInverse.m[9];normalMat[8] = mvInverse.m[10];        setUniformLocationWithMatrix3fv(_builtInUniforms[UNIFORM_NORMAL_MATRIX], normalMat, 1);    }    if (_flags.usesTime) {        // This doesn't give the most accurate global time value.        // Cocos2D doesn't store a high precision time value, so this will have to do.        // Getting Mach time per frame per shader using time could be extremely expensive.        float time = _director->getTotalFrames() * _director->getAnimationInterval();        setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_TIME], time/10.0, time, time*2, time*4);        setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_SIN_TIME], time/8.0, time/4.0, time/2.0, sinf(time));        setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_COS_TIME], time/8.0, time/4.0, time/2.0, cosf(time));    }    if (_flags.usesRandom)        setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_RANDOM01], CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1());}

 

转载于:https://www.cnblogs.com/ZhYQ-Note/p/5941944.html

你可能感兴趣的文章
【webpack4】webpack4配置及需要注意的问题
查看>>
typescript用vue-property-decorator在vue中的遇到的坑
查看>>
Mysql存储引擎--MyISAM与InnoDB的底层数据结构
查看>>
Mysql索引底层数据结构
查看>>
sublime Emmet的用法及相关语法
查看>>
如何安装 Composer
查看>>
Laravel 的 Blade 模板引擎,当数据存在时输出变量
查看>>
指针的小细节
查看>>
c++多态的一个示范
查看>>
c++纯虚函数和抽象类
查看>>
c++内存分区模型(四个区)
查看>>
线性求逆元
查看>>
欧拉函数求法(N)
查看>>
HDU6581 Vacation (HDU2019多校第一场1004)
查看>>
Keen On Everything But Triangle(2019 HDU 2019 Multi-University Training Contest 2 )
查看>>
类型与非类型模板函数
查看>>
c++引用
查看>>
树的dfs序直径深度重心以及拓扑排序
查看>>
结构体指针
查看>>
随机数生成函数
查看>>