GL_INTERLEAVED_ATTRIBS のように 1 つだけではなく GL_SEPARATE_ATTRIBS を使用する場合、複数の変換フィードバック バッファを読み戻すにはどうすればよいですか? この例では、2 つのバッファーをセットアップし、それらを変換フィードバック用にセットアップします。
//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();
単一のバッファを使用すると、 onGL_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());
buffer0
ただし、両方のバッファを読み戻し、 ofでbuffer1
インデックス付け(0,1)
し たいことを OpenGL に伝えるにはどうすればよいですか?glBindBufferBase
GL_TRANSFORM_FEEDBACK_BUFFER
私が見つけたすべてのチュートリアルでは、常にこれを単一のバッファーに単純化GL_INTERLEAVED_ATTRIBS
し、VAO 入力レイアウトに従って TF 出力を一致させるために個別のバッファーを使用するか、単にバッファー データをまったく読み戻さないことが可能であることを説明しています。