Hi,
I’m trying to implemented transform feedback but I’m getting no data to output buffer. I’m using only Vertex and Pixel shader (no geometry so far). Al I want is to get gl_Position. Basically I use as input VBO with N GL_POINTS. For now I just want to get all positions from my input buffer to my output buffer, but unfortunately my output buffer is empty. Does anybody have a clue why?
Vertex shader:
void main()
{
gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}
Init of buffers:
//initialize INPUT buffer
glGenBuffers(1, &vboBuffID_1);
glBindBuffer(GL_ARRAY_BUFFER, vboBuffID_1);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLuint)*numOfParticles*3, vboBuff_1, GL_STATIC_DRAW);
//initialize OUTPUT buffer
glGenBuffers(1, &vboBuffID_2);
glBindBuffer(GL_ARRAY_BUFFER, vboBuffID_2);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLuint)*numOfParticles*3, 0, GL_STATIC_DRAW);
//init transform feedback variables and query
int loc[] = { glGetVaryingLocationNV(glslRain, "gl_Position")};
glTransformFeedbackVaryingsNV(glslRain, 1, loc, GL_SEPARATE_ATTRIBS_NV);
glGenQueries(1, &query);
render:
glUseProgram(glslRain);
glBindBufferBaseNV(GL_TRANSFORM_FEEDBACK_BUFFER_NV, 0, vboBuffID_2);
glBeginTransformFeedbackNV(GL_POINTS);
glBeginQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV, query);
glBindBuffer(GL_ARRAY_BUFFER, vboBuffID_1);
glVertexPointer(3, GL_FLOAT, 0, NULL);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_POINTS, 0, numOfParticles);
// clean up transform feedback, retrieve count of processed particles
glEndTransformFeedbackNV();
glEndQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV);
glGetQueryObjectuiv(query, GL_QUERY_RESULT, &numOfParticles);
// clean up
glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays
cout << "sizeOf:" << *vboBuff_2/sizeof(GLfloat);
Interesting is that variable numOfParticles is 1000 before this call:
glGetQueryObjectuiv(query, GL_QUERY_RESULT, &numOfParticles);
right after that the value is 750. (if I change it to 100 I will get 75)… why is that?