private static void updateShaderAttribute(final ShaderVariablePointerFloatMatrix variable,
final ShaderObjectsStateRecord record, final boolean useVBO) {
final int size = variable.size;
final int length = variable.data.getBuffer().capacity() / size;
final RenderContext context = ContextManager.getCurrentContext();
int pos = 0;
enableVertexAttribute(variable, record);
for (int i = 0; i < size; i++) {
pos = (i * length);
if (useVBO) {
final int vboId = LwjglRenderer.setupVBO(variable.data, context);
LwjglRendererUtil.setBoundVBO(context.getRendererRecord(), vboId);
ARBVertexProgram.glVertexAttribPointerARB(variable.variableID + i, size, GL11.GL_FLOAT,
variable.normalized, 0, pos);
} else {
variable.data.getBuffer().limit(pos + length - 1);
variable.data.getBuffer().position(pos);