cocos渲染引擎分析(六)-----shader渲染流程之内置shader构建

u单纯使用OPENGl写一个场景渲染时,可以很容易的看出OEPNGL整个渲染流程,cocos引擎将整个渲染流程进行了封装分类,各司其职。虽然很多人说cocos渲染底层是学生写的,不少问题,然而cocos这个小巧的引擎,确是一个很好的学习引擎渲染架构的方式,本篇主要讲,引擎底层怎么组织shader,读取模型,材质,创建生成渲染指令的过程进行剖析,本章记录内置shader的构建过程。

内置shader和材质构建:

    首先,程序创建scene后,会创建一个默认相机,相机创建过程中,会创建一个CameraBackgroundBrush,用于刷黑屏幕,代码如下:

Camera::Camera()
{
    _clearBrush = CameraBackgroundBrush::createDepthBrush(1.f);
    _clearBrush->retain();
}
CameraBackgroundBrush创建过程会调用下面的函数:
bool CameraBackgroundDepthBrush::init()
{
    //获取擦除相机的shader
    auto shader = GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_CAMERA_CLEAR);
    //创建ProgramState,具体而言就是材质,shader的具体化
    _glProgramState = GLProgramState::getOrCreateWithGLProgram(shader);
    _glProgramState->retain();
    
     。。。。。。。
    //绘制矩形背景
    。。。。。。。。
    return true;
}

其中,程序CameraBackgroundBrush初始过程中会调用GLProgramCache::getInstance(),如果GLProgramCache( 内置shader的集合)不存在,就创建,并返回,单例模式,运行过程中只有一个。

GLProgramCache* GLProgramCache::getInstance()
{
    if (!_sharedGLProgramCache) {
        _sharedGLProgramCache = new (std::nothrow) GLProgramCache();
        if (!_sharedGLProgramCache->init())
        {
            CC_SAFE_DELETE(_sharedGLProgramCache);
        }
    }
    return _sharedGLProgramCache;
}

GLProgramCache的初始化函数如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值