#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: база привязки: индекс вне диапазона