Я пишу небольшой инструмент, который позволяет разработчикам отображать определенный 3D-контент на холсте с помощью WebGL.WebGL: повторно использовать ресурсы при повторном использовании холста
Он будет использоваться, указав вид и камеру, как этот упрощенный пример:
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]);
Каждый раз, когда он вызывается на новом холсте, ему нужно будет настроить буферы, шейдеры и т. Д. Но когда вызывается на ранее используемом холсте, он должен повторно использовать старые буферы и шейдеры. Я не думаю, что можно обмениваться ресурсами между контекстами, поэтому мне нужно дублировать & сами отслеживать их.
Моя мысль состоит в том, чтобы хранить все буферы, шейдеры и т. Д. В массиве каждый раз, когда он вызывается на холсте, а затем искать этот массив в последующих вызовах. Я не могу хранить объекты canvas в массиве, потому что это испортит сбор мусора, поэтому моя проблема XY: могу ли я проверить, принадлежит ли конкретный шейдер, программа или буфер к определенному контексту? Также я исхожу из того, что когда удаляется холст, шейдеры и буферы будут удалены , хотя они все еще упоминаются в массиве?
Как следует из названия, я также открыт для лучшего решения всей проблемы.
На самом деле не знаю, почему я об этом не думал. Благодаря! – Dave