OpenGL / Cinder – Custom Dynamic Attributes Example (GLSL 1.2)
Here’s an example of using dynamic custom attributes in GLSL 1.2 and Cinder.
I also found this link useful!
void makeVBO()
{
gl::VboMesh::Layout layout;
layout.setDynamicPositions();
layout.addDynamicCustomFloat(); // add a custom dynamic float
vboModel = gl::VboMesh(NUM_VBO_VERTICES, 0, layout, GL_POINTS); // create vbo mesh with dynamic positions
mShader.bind();
GLuint loc = mShader.getAttribLocation("myAttribute"); // get location of "attribute float myAttribute" in vertex shader
vboModel.setCustomDynamicLocation(0, loc); // set the local 'id' of the attribute
mShader.unbind();
int distFromCenter = VBO_RADIUS;
// generate random vertices
vector<Vec3f> vPositions;
for (int j = 1; j < NUM_VBO_VERTICES; ++j)
{
vPositions.push_back(
Vec3f(-(distFromCenter / 2) + randFloat()*distFromCenter,
-(distFromCenter / 2) + randFloat()*distFromCenter,
-(distFromCenter / 2) + randFloat()*distFromCenter)
);
}
// iterate through vertices
int i = 0;
gl::VboMesh::VertexIter iter = vboModel.mapVertexBuffer();
for (int idx = 0; idx < NUM_VBO_VERTICES; ++idx) {
// set position of vertex
iter.setPosition(vPositions[i]);
// set the value of 'myAttribute' to a random number
iter.setCustomFloat(0, 10+Rand::randFloat()*90);
++iter;
++i;
}
}
void draw()
{
mShader.bind();
gl::draw(vboModel);
mShader.unbind();
}