Stavo cercando di utilizzare il feedback di trasformazione per recuperare i dati dal vertex shader per il debug, poiché la mia matrice prospettica sembrava essere stata calcolata male. Non ho ottenuto nulla nel buffer di feedback della trasformazione. Qualcuno può aiutarmi a capire quale passo ho fatto di sbagliato?come utilizzare il feedback di trasformazione opengl, ottengo sempre 0 nei buffer
seguito è frammento di mio codice di costituzione trasformare risposte:
//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);
e il mio vertex shader è così:
#version 420
layout(location = 0) in vec4 position;
uniform mat4 perspectiveMatrix;
out mat4 retrieve;
void main()
{
gl_Position = perspectiveMatrix * position;
retrieve = perspectiveMatrix;
}
Poiché non ho esperienza con il buffer di feedback trasformazione, posso solo raccomandare di provare a copiare alcuni dei tutorial online come http://ogldev.atspace.co.uk/www/tutorial28/tutorial28.html In secondo luogo, stai controllando gli errori di OpenGl? Potrebbe essere che qualcosa stia andando male ma non lo sai. Usa [glGetError] (http://www.opengl.org/sdk/docs/man/xhtml/glGetError.xml) per farlo. Se restituisce un errore, prova a scoprire quale chiamata lo sta generando spostando la chiamata glGetError in giro. In terzo luogo, questo sembra un modo MOLTO complicato per eseguire il debug della tua matrice prospettica. A far bett – Hannesh
grazie per il vostro consiglio, cercherò di verificare la matrice prespective nel codice dell'applicazione non shader. Penso che avrò bisogno di usare il feedback delle trasformazioni in un secondo momento, quindi è meglio che lo impari per un uso futuro. – Nowibananatzki