核心類(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
_renderData和InputAssembler都是數(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._hash與render-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)系?