hi, i believe i am doing everything right for transform feedback but i am getting 0’s when i try to read the data back from the transform feedback buffer. Their is one thing i just realized i dont quite understand which is indexed binding points on a binding target, so that might be why, im gonna check my book to see what that means (i now understand this). its a short piece of code that i wrote and i would be grateful if someone would comb through it and tell me what is wrong. thanks
if (glewInit() != GLEW_OK)
{
printf("glew could not load");
exit(1);
}
const GLchar *varyings[] = {"colorstfout"};
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLfloat feedback[12];
glClearColor(0, 1, 0, 1);
const char *vshaderambient =
"#version 430 core
"
//"uniform vec4 colorobject;
"
//"uniform vec4 colorlight;
"
//"uniform float intensity;
"
"vec4 colorstfout;
"
"void main()
"
"{
"
"colorstfout = vec4(.5, .5, .5, .5);
"
//"colorstfout = min(colorobject + (colorobject + colorlight * intensity), vec4(1, 1, 1, 1));
"
"}
";
GLuint progambient, vambient, tfo, buffercolorout;
progambient = glCreateProgram();
vambient = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vambient, 1, &vshaderambient, NULL);
glCompileShader(vambient);
glAttachShader(progambient, vambient);
glLinkProgram(progambient);
glGenTransformFeedbacks(1, &tfo);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfo);
glGenBuffers(1, &buffercolorout);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, buffercolorout);
glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, sizeof(GLfloat) * 12, NULL, GL_STREAM_READ);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, buffercolorout);
glTransformFeedbackVaryings(progambient, 1, varyings, GL_SEPARATE_ATTRIBS);
glLinkProgram(progambient);
glBeginTransformFeedback(GL_TRIANGLES);
glDrawArrays(GL_TRIANGLES, 0, 3);
glEndTransformFeedback();
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, sizeof(feedback), feedback);
printf("
first vertex: %f, %f, %f, %f
", feedback[0], feedback[1], feedback[2], feedback[3]);
printf("
second vertex: %f, %f, %f, %f
", feedback[4], feedback[5], feedback[6], feedback[7]);
printf("
third vertex: %f, %f, %f, %f
", feedback[8], feedback[9], feedback[10], feedback[11]);