0

我正在尝试检索两个不同的变量pos_xpos_y并将它们的值存储到output_data_xandoutput_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:索引超出范围

4

0 回答 0