頂点シェーダーを使用して、レンダリングされた出力を生成せずにバッファーを処理することに興味があります。関連するスニペットは次のとおりです。
glUseProgram(program);
GLuint tfOutputBuffer;
glGenBuffers(1, &tfOutputBuffer);
glBindBuffer(GL_ARRAY_BUFFER, tfOutputBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(double)*4*3, NULL, GL_STATIC_READ);
glEnable(GL_RASTERIZER_DISCARD_EXT);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfOutputBuffer);
glBeginTransformFeedbackEXT(GL_TRIANGLES);
glBindBuffer(GL_ARRAY_BUFFER, positionBuffer);
glEnableVertexAttribArray(positionAttribute);
glVertexAttribPointer(positionAttribute, 4, GL_FLOAT, GL_FALSE, sizeof(double)*4, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer);
glDrawElements(GL_TRIANGLES, 1, GL_UNSIGNED_INT, 0);
glDrawElements()
これは、呼び出しまで正常に機能し、 GL_INVALID_FRAMEBUFFER_OPERATION
. そしてglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
戻りますGL_FRAMEBUFFER_UNDEFINED
。
これは、私の GL コンテキストにデフォルトのフレームバッファがなく、別の FBO をバインドしていないためだと思います。しかし、レンダリングされた出力は気にせず、有効GL_RASTERIZER_DISCARD_EXT
にしたので、フレームバッファは必要ないと思いました。
それで、 framebuffer なしで変換フィードバックを使用する方法はありますか、またはその内容を気にしなくても、フレームバッファを生成してバインドする必要がありますか?