strange transform feedback problem

Hello,

I tried to implement transform feedback in my app, but I seem to be stuck in a seemingly weird situation (or stupid bug).

I want to record the GL_POSITION, without rasterizing.

The problem is :
If I use a vertex shader, hell breaks loose, numbers are whacko.
If I use fixed function for vertex shader, or fixed function for both vs & fs, everything is allright.

The shader I tried is the most minimalistic possible
( void main() {gl_Position = ftransform();} ). If a make a shader with the most minimal fs, and no vs ( to use fixed func ), then it works ok.

Where could the problem be?? Any ideas??

Thanks for reading,
babis

I assume you’re executing the correct initial steps, but just to be sure, here’s what I use in my (working) program right now:

int loc[] =
{
    glGetVaryingLocationNV(programid, "gl_Position"),
    glGetVaryingLocationNV(programid, "gl_FrontColor"),
};

glTransformFeedbackVaryingsNV(programid, 2, loc, GL_SEPARATE_ATTRIBS_NV);


Then, when I actually capture data,


glUseProgram(programid);
glBindBufferBaseNV(GL_TRANSFORM_FEEDBACK_BUFFER_NV, 0, outvbo[0]);
glBindBufferBaseNV(GL_TRANSFORM_FEEDBACK_BUFFER_NV, 1, outvbo[1]);
glEnable(GL_RASTERIZER_DISCARD_NV);
glBeginTransformFeedbackNV(GL_POINTS);
glBindBuffer(GL_ARRAY_BUFFER, attribvbo);
glVertexPointer(4, GL_FLOAT, 0, NULL);
glDrawArrays(GL_POINTS, 0, count);
glEndTransformFeedbackNV();
glDisable(GL_RASTERIZER_DISCARD_NV);


As always, ensure your transform feedback VBOs are large enough to hold the results.

Oddly enough, I’ve sometimes needed to clear the color buffer before using transform feedback, or else I get odd results when resizing the window (even though I’m not rasterizing).

Thanks HexCat for your quick answer.

I use almost the same steps.

Init :


// Set the transform feedback VBO
GLint att[3]= {GL_POSITION, 4, 0};
glGenBuffers(1,&_tgtVBO);
glBindBufferARB(GL_ARRAY_BUFFER_ARB,_tgtVBO);
glBufferDataARB(GL_ARRAY_BUFFER_ARB,_vnum*4*sizeof(float),0,GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB,0);

//record position attrib
glTransformFeedbackAttribsNV(1,att,GL_SEPARATE_ATTRIBS_NV);

Capture :


glBindBufferBaseNV(GL_TRANSFORM_FEEDBACK_BUFFER_NV, 0, _tgtVBO);
glBeginTransformFeedbackNV(GL_POINTS);
glEnable(GL_RASTERIZER_DISCARD_NV);
glBegin(GL_POINTS);
glVertex3f(-1,0.0,10.0);
glVertex3f(1,0.0,10.0);
glVertex3f(0.0,1,10.0);
glEnd();	
glDisable(GL_RASTERIZER_DISCARD_NV);
glEndTransformFeedbackNV();

In the capture code, if I bind the shader before the above chunk, it has the problems I mentioned.

The glTransformFeedbackAttribsNV() function is only to be used with fixed function (or assembly shaders, as I just discovered from the specification). Try using glTransformFeedbackVaryingsNV() with a shader. :slight_smile:

:smiley: :smiley: Thanks!!!

I misread that part,thanks again it works now!

I’m glad you got it working. :slight_smile: