我正在编写一个小工具,允许开发人员使用 WebGL 在画布上渲染某些 3D 内容。
它将通过指定视图和相机来使用,就像这个简化的例子:
displayView( '#myCanvas1', [0, 5, 2] );
可能会被多次调用以在多个画布中显示:
displayView( '#myFrontCanvas', [0, 5, 2] );
displayView( '#mySideCanvas', [5, 0, 2] );
或者可能在同一个画布上多次调用以更改视图:
displayView( '#myCanvas', [0, 5, 2] );
// later
displayView( '#myCanvas', [5, 0, 2] );
// later
displayView( '.thisCanvasIsActuallyTheSameOneAgain', [5, 0, 0] );
每次在新画布上调用它时,都需要设置缓冲区、着色器等。但是当在以前使用的画布上调用时,它应该重新使用旧的缓冲区和着色器。我认为不可能在上下文之间共享资源,所以我需要自己复制和跟踪它们。
我的想法是每次在画布上调用它时将所有缓冲区、着色器等存储在一个数组中,然后在以后的调用中搜索这个数组。我不能将画布对象存储在数组中,因为它会弄乱垃圾收集,所以我的 XY 问题是:我可以检查特定的着色器、程序或缓冲区是否属于特定的上下文?我是否也相信当画布被移除时,着色器和缓冲区将被移除,即使它们仍然在数组中被引用?
正如标题所暗示的,我也愿意为整个问题提供更好的解决方案。