Работа с двумя буферами с обратной связью преобразования

#javascript #webgl #webgl2 #transform-feedback

Вопрос:

Я пытаюсь извлечь две переменные pos_x pos_y и сохранить их значения в output_data_x и output_data_y . Я очень новичок в webgl, и у меня возникли некоторые проблемы с поиском учебных пособий по обратной связи с преобразованиями в Google, поэтому у меня возникают всевозможные проблемы, когда я использую приведенный ниже код для работы. Приведенный ниже код в значительной степени работает, если я удалю все, что связано со значениями y.

 const transform_feedback = gl.createTransformFeedback();
gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, transform_feedback);
gl.transformFeedbackVaryings(program, ['pos_x', 'pos_y'], gl.INTERLEAVED_ATTRIBS);
gl.linkProgram(program);
const feedback_x_buffer = gl.createBuffer();
const feedback_y_buffer = gl.createBuffer();

const data_length = 2;
const output_data_x = new Float32Array(data_length);
const output_data_y = new Float32Array(data_length);

gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, feedback_x_buffer);
gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, output_data_x, gl.STATIC_READ);
gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, feedback_x_buffer);

gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, feedback_y_buffer);
gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, output_data_y, gl.STATIC_READ);
const float_size = 4; //is there a reliable way to get this value?
gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, data_length * float_size, feedback_y_buffer);

gl.beginTransformFeedback(gl.POINTS);
gl.drawArrays(gl.POINTS, 0, data_length);
gl.endTransformFeedback();

gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, output_data_x);
gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 1, output_data_y);
 

Я получаю следующие ошибки:

[.WebGL-000027D000342D80] GL_INVALID_ОПЕРАЦИЯ: Недостаточно места в буферах обратной связи связанных преобразований.

[.WebGL-000027D000342D80] Значение GL_INVALID_VALUE: Отображенный диапазон не вписывается в размеры буфера.

WebGL: ЗНАЧЕНИЕ INVALID_VALUE: база привязки: индекс вне диапазона