Как задать данные для текстуры с плавающей запятой?

#webgl

Вопрос:

Я пытаюсь установить числовые данные в текстуру, я хотел бы сохранить один незамкнутый 32-битный поплавок в 4-байтовом пикселе, я использую JavaScript для WebGL2, вот мой текущий код:

   const level = 0;
  const internalFormat = gl.RGBA32F;
  const width = 3;
  const height = 2;
  const border = 0;
  const format = gl.RGBA;
  const type = gl.FLOAT;
  const data = new Float32Array([ ... 24 values ...]);
  gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, width, height, border, format, type, data);
 

Насколько я понимаю, эта настройка должна сработать, но она работает только в том случае, если я задам 24 значения в массиве, т. Е. 4 фиксированных значения для канала RGBA каждого пикселя в отдельности.

Если я задам 6 значений, я получу ошибку «ArrayBufferView недостаточно велик для запроса», как мне заставить его работать?

Комментарии:

1. Я думаю, что это один 32-битный поплавок на цветовой компонент. Это будет 4 поплавка (16 байт) на пиксель. Ты пробовал new Float32Array(96); ?

2. итак, каков формат для хранения 32-битной плавающей точки (например, стандартной однократной точности ieee754) в 4-байтовом пикселе?

3. Я не знаю, но, похоже, вам нужен R32F. Может быть, это поможет: webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html

4. да, вы правы, спасибо!