変換フィードバックを使用してデバッグ用に頂点シェーダーからデータを取得しようとしていましたが、パースペクティブ マトリックスが正しく計算されていないように見えました。変換フィードバック バッファに何もありません。どのステップが間違っていたかを理解するのを手伝ってくれる人はいますか?
以下は、変換フィードバックを設定するコードのスニペットです。
//vertex to be passed into shader
const float vertexPos[] =
{
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f
};
//set up transform feedback
const char *variableName = "retrieve";//the variable to be retreived in shader
float dateFromShader[16];//receive the data from shader
GLuint tf_bo;//transform feedback buffer id
glTransformFeedbackVaryings(shaderProgram, 1, &variableName, GL_INTERLEAVED_ATTRIBS);
glLinkProgram(shaderProgram);
glGenBuffers(1, &tf_bo);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, tf_bo);// Is this necessary to call glBindBuffer before glBindBufferBase?
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tf_bo);
glBufferDate(GL_TRANSFORM_FEEDBACK_BUFFER, sizeof(float) * 16, NULL, GL_DYNAMIC_COPY);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, 0);
//retrieve data from vertex shader
glEnable(GL_RASTERIZER_DICARD);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, tf_bo);
glBeginTransformFeedback(GL_TRIANGLES);
glDrawArrays(GL_TRIANGLES, 0, 3);//
glEndTransformFeedback();
glBindBuffer(GL_ARRAY_BUFFER, tf_bo);
glGetBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float) * 16, dataFromShader);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisable(GL_RASTERIZER_DISCARD);
私の頂点シェーダーは次のようなものです:
#version 420
layout(location = 0) in vec4 position;
uniform mat4 perspectiveMatrix;
out mat4 retrieve;
void main()
{
gl_Position = perspectiveMatrix * position;
retrieve = perspectiveMatrix;
}