2016-06-23 12 views
-1

GL_INTERLEAVED_ATTRIBSのようなGL_SEPARATE_ATTRIBSではなく、複数の変換フィードバックバッファを読み込むにはどうすればよいですか?この例では、2つのバッファをセットアップし、変換フィードバック用にセットアップします。私はGL_TRANSFORM_FEEDBACK_BUFFERglGetBufferSubDataを呼び出すことによって、単一のバッファをリードバックすることができるよ単一のバッファとGL_INTERLEAVED_ATTRIBSOpenGLで変換フィードバックを使用してGL_SEPARATE_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(); 

std::vector<float> fb; 
fb.resize(3*numberOfVertices); 
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, fb.size() * sizeof(float), fb.data()); 

をしかし、どのように私はOpenGLを教えてください、私は両方のバッファをリードバックしたいことbuffer0およびbuffer1インデックス付き(0,1)glBindBufferBaseGL_TRANSFORM_FEEDBACK_BUFFER

私が見つけたすべてのチュートリアルは、これを単一のバッファGL_INTERLEAVED_ATTRIBSで簡略化し、別々のバッファを使ってVA出力レイアウトに合わせてTF出力を一致させることも、すべて。

答えて

1

特定の質問に対して利用可能な例はありませんでした。複数のバッファーを変換フィードバックで読み返すことは、一般的に複数のバッファーを読み返すことと同じです。あなたはバッファをバインドします - それを読んでください。変換フィードバックオブジェクトとそのバッファベースは、OpenGLにキャプチャされた出力をどのように格納すべきかを伝えるだけです。

std::vector<float> _bufferfeedback0; 
_bufferfeedback0.resize(3*numberOfVertices);//e.g. x,y,z per vertex 
glBindBuffer(GL_ARRAY_BUFFER, buffer0);   
glGetBufferSubData(GL_ARRAY_BUFFER, 0, 3*numberOfVertices*sizeof(float), _bufferfeedback0.data()); 

std::vector<float> _bufferfeedback1; 
_bufferfeedback1.resize(3*numberOfVertices);//e.g. r,g,b per vertex 
glBindBuffer(GL_ARRAY_BUFFER, buffer1);   
glGetBufferSubData(GL_ARRAY_BUFFER, 0, 3*numberOfVertices*sizeof(float), _bufferfeedback1.data()); 
関連する問題