我正在使用三个v 67的WebGLRenderTarget将第二个摄像机/场景渲染到缓冲区中,以备将来在纹理中使用。 Three.js中的标准内容,但在CocoonJS中却死于无声。

我尝试了类似的方法来访问CocoonJS中的数据(直接从上下文访问gl.readPixels,类似于Three.js Retrieve data from WebGLRenderTarget (water sim))。但是似乎没有任何作用。
还有其他人遇到吗?

最佳答案

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

Three.js为WebGLRenderTarget对象创建一个帧缓冲区,附加颜色缓冲区(纹理),创建一个renderBuffer并向其附加一个深度/模板渲染缓冲区。问题出在WebGL renderbufferStorage方法的第二个参数中,该参数导致不完整的帧缓冲区状态。 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)


祝您比赛顺利:)

关于javascript - CocoonJS + Three.js webGLRenderTarget静默死亡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23621721/

10-16 17:51