使用 GL_SEPARATE_ATTRIBS 而不是像 GL_INTERLEAVED_ATTRIBS 那样只读取一个时,如何回读多个变换反馈缓冲区?在此示例中,我设置了两个缓冲区并将它们设置为转换反馈。
//gen,bind,buffer GL_ARRAY_BUFFER buffer0
//gen,bind,buffer GL_ARRAY_BUFFER buffer1
//gen,bind GL_TRANSFORM_FEEDBACK feedback
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, buffer0);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1, buffer1);
const GLchar* _varyings[] = { "pos", "color" };
glTransformFeedbackVaryings(program, 2, _varyings, GL_SEPARATE_ATTRIBS);
glLinkProgram(program);
//bind VAO and draw with TF enabled
glBeginTransformFeedback(GL_TRIANGLES);
glDrawArrays(GL_TRIANGLES, 0, numberOfVertices);
glEndTransformFeedback();
使用单个缓冲区,GL_INTERLEAVED_ATTRIBS
我可以通过调用来读回单个glGetBufferSubData
缓冲区GL_TRANSFORM_FEEDBACK_BUFFER
:
std::vector<float> fb;
fb.resize(3*numberOfVertices);
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, fb.size() * sizeof(float), fb.data());
但是,我如何告诉 OpenGL 我想读回两个缓冲区buffer0
并用 ofbuffer1
索引?(0,1)
glBindBufferBase
GL_TRANSFORM_FEEDBACK_BUFFER
我发现的所有教程总是将其简化为单个缓冲区,GL_INTERLEAVED_ATTRIBS
并仅说明可以根据 VAO 输入布局使用单独的缓冲区来匹配 TF 输出,或者根本不读回缓冲区数据。