Обновите texture_2d_array в webgl через twgl.js

Я использую twgl для рендеринга некоторых изображений в webgl. Мне нужно динамически добавить изображение к этому массиву 2d текстур. Я использовал twgl.createTexture Функция, чтобы сделать это, пока не знаю, но есть проблема. после того, как я добавляю новое изображение в мой массив изображений и вызываю twgl.createTexture чтобы передать его в webgl и после этого отрендерить мои объекты, изображения не будут отображаться правильно, и вместо изображения появится синий квадрат. и когда я вручную отрендерю его снова, он исправится и не сломается до использования twgl.createTexture снова.

Я думаю, потому что эта функция создаст новую webglTexture вместо обновления предыдущей

Я хочу знать, есть ли способ обновить последнюю текстуру последним специальным массивом, который вставил в нее новое изображение?

** когда я говорю image, я имею в виду строку base64 или загруженный и кэшированный URL **

1 ответ

С v4.4.0 нет пути. Twgl просто помощник, он не делает все, поэтому вы всегда можете сделать это вручную.

function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.onload = resolve;
    img.onerror = reject;
    img.src = url;
  };
});

function updateSlice(gl, texture, slice, img, options);
  const format = options.format || gl.RGBA; 
  const type = options.type || gl.UNSIGNED.BYTE;
  const level = options.level || 0;

  gl.bindTexture(gl.TEXTURE_2D_ARRAY, texture);
  gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, level, 0, 0, slice, img.width, img.height, 1,
                   format, type, img);
  gl.generateMipmap(gl.TEXTURE_2D_ARRAY);
}

function updateSliceFromImage(gl, texture, slice, url, options) {
  loadImage(url)
  .then((e) => {
    updateSlice(gl, texture, slice, e.target, options);
  });
}
Другие вопросы по тегам