CocoonJS + Three.js webGLRenderTarget无声死亡



我使用三个v 67的WebGLRenderTarget来渲染第二个相机/场景到缓冲区,以便将来在纹理中使用。这是Three.js中的标准内容,但它在CocoonJS中悄然死亡。

我尝试过在CocoonJS中访问数据的类似方法(从上下文中直接访问gl.readPixels,类似于Three.js从WebGLRenderTarget (water sim)检索数据))。但似乎什么都不起作用。还有人遇到过这种情况吗?

我已经调试了CocoonJS运行Three.js演示的本地c++代码,并发现了问题。

Three.js为WebGLRenderTarget对象创建了一个framebuffer,附加了颜色缓冲区(纹理),创建了一个renderBuffer,并附加了一个深度/模板渲染缓冲区。问题是在WebGL renderbufferStorage方法的第二个参数,导致不完整的framebuffer状态。Three.js应该检查这个错误(使用checkFramebufferStatus方法)来避免无声错误,但它似乎没有。

我已经提交了修复,它将在下一个CocoonJS版本中准备好。

现在你可以在你的JS代码中修复它(在下一个版本中你将不需要这个修复)

请替换Three.js

中的这一行
j.renderbufferStorage(j.RENDERBUFFER,j.DEPTH_STENCIL,b.width,b.height)

和这个:

j.renderbufferStorage(j.RENDERBUFFER,navigator.isCocoonJS?35056:j.DEPTH_STENCIL,b.width,b.height)

祝你好运!

最新更新