可以利用GPU对数据的顶点进行处理。然后返回到CPU内存中,或是用作GPU
端其它用途。
transform feedback 状态是封装在传输反馈对象当中。
状态包括:记录顶点数据的缓存对象,标识缓存对象充满程度计数器,以及当前是否启用。
glGenTransformFeedbacks(numFeedbacks,m_transformFeedback);
glDeleteTransformFeedbacks(countof(m_transformFeedback),m_transformFeedback);
Particle* p = new Particle[MAX_PARTICLES];
memset(p,0,MAX_PARTICLES*sizeof(Particle));
glGenTransformFeedbacks(numFeedbacks,m_transformFeedback);
glGenBuffers(numFeedbacks,m_particlesBuffers);
glBindBuffer(GL_ARRAY_BUFFER,m_particlesBuffers[n]);
glBufferData(GL_ARRAY_BUFFER,MAX_PARTICLES*sizeof(Particle),p,GL_STATIC_DRAW);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK,m_transformFeedback[n]);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER,0,m_particlesBuffers[n]);
glBindBuffer(GL_ARRAY_BUFFER,0);
delete [] p;
获取支持的最大绑定点数:
**GLint nInt;
glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, &nInt);**
配置传输反馈变量
const GLchar* feedbackVaryings[4] =
{
"gs_TypeColor",
"gs_Age",
"gs_Position",
"gs_Velocity",
};
glTransformFeedbackVaryings(m_feedbackProgram->getProgram(),countof(feedbackVaryings),
feedbackVaryings,GL_INTERLEAVED_ATTRIBS_EXT);
m_feedbackProgram->relink();
m_feedbackProgram->enable();