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 createdVarying 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