求解释,cocos2d-x 3.0+版本的渲染机制

求解释,为什么cocos2d-x 3.0+版本,跟官方宣传的draw thread与main thread分离使用单独的线程渲染,不一样
还是在主线程中渲染,只是做了一个渲染队列

卤煮细心人啊。

我猜测下。

异步渲染理论应该来自于opengl insights的async buffer transfer。这种优化主要在使用dma通道的x86构架下比较有优势。

手机的cpu和gpu是集成在一起的。本身就具有超高速同步传输能力,使用async buffer transfer甚至可能会稍微降低性能。

cocos2d-x没有把矩阵转换、zorder排序等比较消耗cpu的操作放到异步线程中,主要是因为它的command队列的维护方式。
command大多是和Node静态捆绑的,多线程很难维护生命周期。它的那个所谓内存池好像也不支持多线程。

倒是可以用顶点buffer作为循环队列,主线程分段填充,渲染线程分段unmap渲染并维护opengl状态。

但是,但是,cocos2d-x支持custom command。这给设计者一个直接操作opengl的机会。这就至少需要两个单独的
opengl shared context。姑且不谈这两个context怎么同步,如果同步就失去了异步传输的意义。在上面提到的那篇文章
中,两个context不能得到明显的性能提升甚至可能下降。

我们做过异步渲染的demo,由于OpenGL状态机不允许多个线程同时访问,所以主线程和渲染线程分开后,整个引擎就变得不易用了,不按照规则来调用就非常容易崩溃,所以不同线程的事情就停留在demo阶段没有继续往前推进。易用性还是非常重要的一点。

其实我公开场合只说了分离逻辑和渲染器两层,通过渲染器可以做auto-batching和auto-culling,并没有说完成了独立渲染线程的事情。

首先,谢谢出来回复澄清
但是,http://cn.cocos2d-x.org/article/index?type=wiki&url=/doc/cocos-docs-master/manual/framework/native/wiki/renderer/zh.md,这里面明确说了是独立的渲染线程
这可是中文官方网站,还有引文wiki里面3.0的roadmap,都是一直在强调是独立线程!!!
如果你公开场合只说了分离逻辑和渲染器两层,这么解释,官方文档以后还权威吗?(不要说这不是官方人员提供的)

ps》求权威的文档,也祝cocos2d-x越来越好

顶起,我也在迷糊现在的渲染机制到底什么情况

单线程。visit不再进行绘制工作,而是丢一个render command给render queue。绘制工作由render queue统一绘制。