GLuint uboPointLights;
glGenBuffers(1, &uboPointLights);
glBindBuffer(GL_UNIFORM_BUFFER, uboPointLights);
glBufferData(GL_UNIFORM_BUFFER, pointLightsPerPass * sizeof(PointLight), NULL, GL_STATIC_DRAW);
//glBindBuffer(GL_UNIFORM_BUFFER, 0);
glBindBufferBase(GL_UNIFORM_BUFFER, uniformLightsBinding, uboPointLights);
glBindBufferRange(GL_UNIFORM_BUFFER, 0, uboPointLights, 0, pointLightsPerPass * sizeof(PointLight));
GLuint uniformCameraDataBinding = glGetUniformBlockIndex(standardShader.program, "CameraData");
glUniformBlockBinding(standardShader.program, uniformCameraDataBinding, 1);
GLuint uboCameraData;
glGenBuffers(1, &uboCameraData);
glBindBuffer(GL_UNIFORM_BUFFER, uboCameraData);
glBufferData(GL_UNIFORM_BUFFER, 2 * sizeof(Mat4), NULL, GL_STATIC_DRAW);
//glBindBuffer(GL_UNIFORM_BUFFER, 0);
glBindBufferBase(GL_UNIFORM_BUFFER, uniformCameraDataBinding, uboCameraData);
glBindBufferRange(GL_UNIFORM_BUFFER, 0, uboCameraData, 0, 2 * sizeof(Mat4));
glBindBufferBase(GL_UNIFORM_BUFFER, uniformLightsBinding, uboPointLights);
glBufferSubData(GL_UNIFORM_BUFFER, 0, pointLightsPerPass * sizeof(PointLight), pls.getContents());
glBindBuffer(GL_UNIFORM_BUFFER, 0);
glBindBufferBase(GL_UNIFORM_BUFFER, uniformCameraDataBinding, uboCameraData);
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(Mat4), projection.getContents());
glBufferSubData(GL_UNIFORM_BUFFER, sizeof(Mat4), sizeof(Mat4), view.getContents());
glBindBuffer(GL_UNIFORM_BUFFER, 0);
Near as I can tell, using multiple UBOs means you have to call glBindBufferBase. Still not working though, sadly.