cocos creator2.1渲染流程分析

核心類(lèi)與屬性

InputAssembler
  _vertexBuffer
  _indexBuffer
  _primitiveType
  _start
  _count
BaseRenderData
  material
  vertexCount
  indiceCount
RenderData extends BaseRenderData
  _data
  _indices
  _pivotX
  _pivotY
  _width
  _height
  uvDirty
  vertDirty
IARenderData extends BaseRenderData
  ia

assembler
  useModel
  datas

SimpleSpriteAssembler
  useModel:false
  updateRenderData
  fillBuffers
  createData
  updateVerts

組件持有_assembler_renderData
_renderDataInputAssembler都是數(shù)據(jù)容器,_assembler是數(shù)據(jù)操作
_assembler可以創(chuàng)建和updateRenderData,更新verts。
InputAssembler是在渲染時(shí)用到的,用于組織傳入GPU的數(shù)據(jù)。
在渲染時(shí),
core\renderer\index.js: render(scene) (渲染入口)
=> render-component-walker.visit (遍歷所有的render-component)
=> render-flow.render (構(gòu)建渲染數(shù)據(jù))
=> render-component-walker._commitComp
=> assembler.fillBuffers 將頂點(diǎn)坐標(biāo)數(shù)據(jù)、uv數(shù)據(jù)和顏色數(shù)據(jù)添加到buffer后。核心點(diǎn)!此處是_assembler、_renderData和InputAssembler三者發(fā)生關(guān)系的地方

似乎buffer只創(chuàng)建了4個(gè):

quadBuffer
meshBuffer
quadBuffer3D
meshBuffer3D
默認(rèn)的buffer是quadBuffer. InputAssembler記錄當(dāng)次渲染用到的:

ia._vertexBuffer = buffer._vb  // 頂點(diǎn)緩沖區(qū)
ia._indexBuffer = buffer._ib   //索引緩沖區(qū)
ia._start = indiceStart    //索引開(kāi)始偏移
ia._count = indiceCount //索引數(shù)量

合并DrawCall

render-component-walker._commitComp函數(shù),會(huì)比較組件的_material._hashrender-component-walker.material._hash,如果不同,會(huì)調(diào)用 _flush函數(shù),新建InputAssembler,新建Model, 前后的component就在不同的渲染批次中了

問(wèn)題來(lái)了

BaseRenderData.material 到底是用在什么地方?
官方人員的github項(xiàng)目heartfelt項(xiàng)目中,更新材質(zhì)用了以下代碼:

   this._material.updateHash();
   this.target._material = this._material;
   this.target._renderData._material = this._material;   

最后一行的意義是? 是不是版本不同的關(guān)系?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容