2.4.3版,cc.Mesh的init函数如下:
init (vertexFormat, vertexCount, dynamic = false, index = 0) {
let data = new Uint8Array(vertexFormat._bytes * vertexCount);
let meshData = new MeshData();
meshData.vData = data;
meshData.vfm = vertexFormat;
meshData.vDirty = true;
meshData.canBatch = this._canVertexFormatBatch(vertexFormat);
if (!(CC_JSB && CC_NATIVERENDERER)) {
let vb = new gfx.VertexBuffer(
renderer.device,
vertexFormat,
dynamic ? gfx.USAGE_DYNAMIC : gfx.USAGE_STATIC,
data,
);
meshData.vb = vb;
this._subMeshes[index] = new InputAssembler(meshData.vb);
}
let oldSubData = this._subDatas[index];
if (oldSubData) {
if (oldSubData.vb) {
oldSubData.vb.destroy();
}
if (oldSubData.ib) {
oldSubData.ib.destroy();
}
}
this._subDatas[index] = meshData;
this.loaded = true;
this.emit('load');
this.emit('init-format');
}
重点看if (!(CC_JSB && CC_NATIVERENDERER))代码块,这里是否缺少个else,不然原生上手动创建的Mesh不就少了_subMeshes[index]的子网格么?