我正在尝试检索两个不同的变量pos_x
,pos_y
并将它们的值存储到output_data_x
andoutput_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_OPERATION:绑定的变换反馈缓冲区空间不足。
[.WebGL-000027D000342D80] GL_INVALID_VALUE:映射范围不适合缓冲区尺寸。
WebGL:INVALID_VALUE:bindBufferBase:索引超出范围