我正在使用三个 v 67 的 WebGLRenderTarget 将第二个相机/场景渲染到缓冲区以供将来在纹理中使用。Three.js 中的标准东西,但它在 CocoonJS 中无声无息地消亡。
我尝试过类似的方式来访问 CocoonJS 中的数据(直接从上下文访问 gl.readPixels,类似于Three.js Retrieve data from WebGLRenderTarget (water sim))。但似乎没有任何效果。有没有其他人遇到过这个?
我正在使用三个 v 67 的 WebGLRenderTarget 将第二个相机/场景渲染到缓冲区以供将来在纹理中使用。Three.js 中的标准东西,但它在 CocoonJS 中无声无息地消亡。
我尝试过类似的方式来访问 CocoonJS 中的数据(直接从上下文访问 gl.readPixels,类似于Three.js Retrieve data from WebGLRenderTarget (water sim))。但似乎没有任何效果。有没有其他人遇到过这个?
我已经调试了运行 Three.js 演示的 CocoonJS 的本机 C++ 代码,我发现了问题所在。
Three.js 为 WebGLRenderTarget 对象创建一个帧缓冲区,附加颜色缓冲区(纹理),创建一个渲染缓冲区并为其附加一个深度/模板渲染缓冲区。问题出在 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)
祝你的游戏好运:)