Assembler为何在原生平台无效

写了一个自定义Assembler的小demo,有updateRenderData和fillBuffers,浏览器可以跑,一个节点可以展示1万个格子,但是原生平台没有渲染图像。zip包如下,请大大们看下

AssemblerTest2.zip (1.4 MB)

1赞

@jare @jareguo @panda

用3.xx就不会有这问题了,2.x web端顶点填充会调用fillbuffer原生有差异需要修改一下,很久没用2.x忘记反正你自己在看看这块

换3.x不现实,一时看不明白源码,各位大大有没有修复方案,demo、截图都行

自定义assembler怎么适配原生平台 看看这个帖子

我这个需求其实不需要每帧setVertsDirty,因为顶点位置没变,所以一开始在updateRenderData里把顶点设置好就行了,因为我只需要改变颜色,按理在fillBuffers里更新颜色即可,如果每帧setVertsDirty的话,会造成不必要的消耗,有悖性能需求,因为用Assembler就是为了提升性能

updateRenderData(comp: BlockRenderer)
fillBuffers(comp: BlockRenderer, renderer: any)
而且updateRenderData里只暴露了comp参数,但是fillBuffers需要两个参数,所以理论上也不行,可能帖子问题依旧没解决,只是作者当时认为能解决

而且fillBuffers会暴露两个参数,updateRenderData只暴露一个参数,所以如果在updateRenderData里调用fillBuffers,第二个参数怎么获取?感觉理论上也不行

不是在updateRenderData里调用fillBuffers.
而是在updateRenderData里把 renderData.vData 填充好

没有fillBuffers,我怎么拿到引擎给他暴露的第二个参数renderer?


是叫你填充这个renderData, 不是renderer 那个,renderer的buffer在h5 是用于提交给webgl,你现在是只在native, 都告诉你js中的fillbuffer不会被调用, 所以你不用管renderer
而fillbuffer 代码也是把comp的renderData 拷贝到renderer 里
这是2.4.6 assembler2D的fillbuffer

大哥,我还是没明白,你发的这个fillBuffers还是会用到renderer,如果把这个fillBuffers里面的内容写到updateRenderData里,我怎么获取这个renderer

哥, 你是怎様阅读理解的?怎麽一直在钻牛角尖呢? 你没看 代码是把 renderData.vData[0] 拷贝到 renderer 的buffer(看清楚vbuf.set 到底在做其麽), 説了你不用管renderer, 你只需要把 this._renderData.vData[0] 填充好整个渲染顶点数据, 所以文章才説叫你在updateRenderData函数里把this._renderData.vData[0] 写好, 再不懂麻烦自己看一下assembler2D 里整个渲染处理是怎様的, 人家就是在updateRenderData填做了很多填充this._renderData.vData[0]数据的操作, 最后在fillBuffer里拷到renderer.buffer, 然在原生层只是不跑你js的fillBuffer, 跑自己的, 但updateRenderData和_renderData还是用js的, 但原理也是拿assembler的this._renderData.vData[0] 去考到renderer,所以你只需要操作在fillBuffer被调用前this._renderData.vData[0]已经处理好, 你的代码只需要把原本直接写到renderer.buffer 的数据改写到this._renderData.vData[0]里, 喂饭都喂到嘴边, 都想不明白那你另找高人