我使用三个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)
祝你好运!