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(); }