So the problem is, when I try to render multiple objects that re-use the same shader, it only renders the last object. I assume that I need to sumbit the command buffers each time I render an object?
void Button::Render()
{
vk::Renderer *ren = GetParent()->GetParent<vk::Renderer>();
Level *level = GetParent<Level>();
float *data = new float[52];
memcpy(((float *)data + 0), level->GetCurrentCamera()->GetPosition().GetData(), sizeof(float) * 4);
memcpy(((float *)data + 4), &transform.data[0][0], sizeof(float) * 16);
memcpy(((float *)data + 20), &level->GetCurrentCamera()->GetTransform().data[0][0], sizeof(float) * 16);
memcpy(((float *)data + 36), &level->GetProj().data[0][0], sizeof(float) * 16);
shader->SetUniform(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, sizeof(float) * 52, data, 0);
delete[] data;
shader->SetUniform(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, 0, 0, diamondBlock);
shader->SetUniform(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2, 0, 0, diamondBlockSpec);
data = new float[16];
data[0] = 0.1f;
data[1] = 0.1f;
data[2] = 0.1f;
data[3] = 1.0f;
data[4] = 0.8f;
data[5] = 0.8f;
data[6] = 0.8f;
data[7] = 1.0f;
data[8] = 1.0f;
data[9] = 1.0f;
data[10] = 1.0f;
data[11] = 1.0f;
data[12] = lightPos.GetX();
data[13] = lightPos.GetY();
data[14] = lightPos.GetZ();
data[15] = 1.0f;
shader->SetUniform(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 3, sizeof(float) * 16, data, 0);
delete[] data;
UploadMaterial(shader, 4);
ren->Begin(0);
shader->Begin();
model->Begin();
ren->End();
ren->Submit();
}