Transform feedback and offsets?

Started by
1 comment, last by noodleBowl 9 years, 3 months ago
I'm currently working with transform feedback in OpenGL 3.3 and I'm having some trouble with the output varyings.

I have a few output variables that need to be quadrupled. Since I currently have roughly around 7, which may go up more, I'm worried that I will come close to maxing out. My max is 64 according to the value I get back from GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS .

In my current setup, I can get back data BUT
I need to skip over some spots when I write to the output buffer in order to read from it properly.

With my current l VBO, my data is setup to look like:
//VBO layout
POS0 , VELO0 , POS1 , VELO1 , POS2 , VELO2 , POS3 , VELO3 | POS4 , VELO4 , POS5 , VELO5 ....

//Actual data inside
320.0, 250.0, 1.0, 1.0, 320.0, 250.0, 1.0, 1.0, 320.0, 250.0, 1.0, 1.0, 320.0, 250.0, 1.0, 1.0 | 100.0, 100.0, 1.0, 1.0,....
When the transform feedback is activated and it is done writing to my buffer, I get the following output
//Actual data after transform feedback has run once; The position2OUT and position3OUT are written over the wrong spots in the buffer
320.0, 250.0, 1.0, 1.0, 320.0, 250.0, 320, 250.0, 320.0, 250.0, 1.0, 1.0, 320.0, 250.0, 1.0, 1.0 | 100.0, 100.0, 1.0, 1.0,....
It literally writes the data back how they are setup. Messing up the layout of the VBO originally created
Varying setup:
const GLchar *varyings[5];
varyings[0] = "position0OUT";
varyings[1] = "velocityOUT";
varyings[2] = "position1OUT";
varyings[3] = "position2OUT";
varyings[4] = "position3OUT";

updateProgram.AddTransformFeedbackVaryings(5, varyings, GL_INTERLEAVED_ATTRIBS);
Is there a way to setup an offset of some kind for output varyings?
So that my position1OUT, position2OUT, and position3OUT will be written to their correct spots?

The only other thing I can think of is just to write junk data to the buffer using an out array variable and getting it to work with the
transfomm feedback. Giving me more output varyings in the bank to use, at least I think this will happen

I was trying something like in my shader:
#version 330 core

in vec2 positionIN;
in vec2 velocityIN;

out vec2 positionOUT[4];
out vec2 velocityOUT[4];

void main()
{
positionOUT[0] = positionIN;
/* other setting code */
}
But I get errors when compiling. It complains that I 'cannot convert in 2-component vector of float to 2-component vector of float'.
So I'm not sure if the syntax is wrong or I really can't do that sad.png
Advertisement

Transform feedback doesn't perform magic, its doing exactly what you tell it to do. If you don't want all the input vertices written to the transform feedback buffer, then don't write them.

Transform feedback doesn't perform magic, its doing exactly what you tell it to do. If you don't want all the input vertices written to the transform feedback buffer, then don't write them.


I was afraid of this :(
Don't get me wrong, I need to write 4 position values and only 1 velocity value per 4 positions

I was hoping that I would not have to declare velocityOUT1, velocityOUT2, velocityOUT3 in the feedback because it is redudant and also I dont want to get to close to the max varying amount. Thats why having the out attributes as array would work (assuming they don't count against me) or even better would be doing an offset.

If was possible to have everything the way it is in my VBO and then read each position as its own vertex. Skipping over the velocity attributes since there is only one then that would work too

This topic is closed to new replies.

Advertisement