alexjet73
@alexjet73

Как перезапустить полностью pixijs?

Есть код инициализации, где создается app, изменяется размер и рисуется canvas в виде меша. Если это сделать первый раз всё отлично, однако если допустим выставить app = null и сделать другой размер холста canvC и запустить код инициализации опять то холст самого pixijs становится черным и появляется предупреждение в консоли "[.WebGL-0000082802A50D00] GL_INVALID_VALUE: Offset overflows texture dimensions."
Возник вопрос правильно ли я пересоздаю pixijs или требуется еще что то сделать? Потому что возникает чувство, что что-то накладывается друг на друга, а не создается с чистого листа.
app = new PIXI.Application();
        await app.init({resizeTo:canvC});
        app.renderer.resize(canvC.width,canvC.height);
        document.querySelector('#pix').innerHTML='';
        document.querySelector('#pix').appendChild(app.canvas);
        texture = new PIXI.Texture.from(canvC);
        plane = new PIXI.MeshPlane({ texture, verticesX: vert, verticesY: vert });
        app.stage.addChild(plane);
        buffer = plane.geometry.getAttribute('aPosition').buffer;
        buffer.on('update',()=>{
            setTimeout(()=>{
                fPix();
            },100);
        });
        bufferCopy = [...buffer.data];
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
GL_INVALID_VALUE: Offset overflows texture dimensions.

Ошибки такого рода в мире WebGL обычно связаны с тем фактом, что мы пытаемся использовать текстуру, но у нас левые ее размеры, и мы, например, пытаемся получать из нее пиксели за ее границами. Искать проблему нужно вокруг этого факта. На сайте PixiJS можно найти описание основ работы с текстурами, и там сказано, что они кешируются. Если мы делаем Texture.from с тем же источником, то получаем не новую текстуру, а ту, которая уже была. Но в вашем коде где-то по дороге меняются размеры. А сама текстура, сам буфер с пикселями, получается старый, закешированный. Это, вполне вероятно, и вызывает несоответствие. Решением должно быть использование метода destroy() у текстуры, чтобы ее уничтожить с концами при переинициализации. Альтернативно у конструктора Texture.from есть второй параметр skipCache, который по идее даст схожий результат.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 17:47
7000 руб./за проект
21 нояб. 2024, в 17:30
1500 руб./за проект
21 нояб. 2024, в 17:22
7000 руб./за проект