私は、開発者が 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 問題は次のとおりです。特定のシェーダー、プログラム、またはバッファーが特定のコンテキストに属しているかどうかを確認できますか? また、キャンバスが削除されると、シェーダーとバッファーがまだ配列で参照されていても削除されるという私の信念は正しいですか?
タイトルが示すように、私は問題全体に対するより良い解決策にもオープンです。