#version 450 #extension GL_ARB_separate_shader_objects : enable layout(location = 0) in vec3 in_position; layout(location = 1) in vec3 in_normal; layout(location = 2) in vec2 in_texture_coord; layout(location = 0) out DataTransferObject { vec4 frag_color; vec2 frag_texture_coord; vec3 normal; } out_dto; layout(set = 0, binding = 0) uniform UBOViewProjection { mat4 view; mat4 proj; vec4 ambient_color; } ubo_view_projection; layout(set = 1, binding = 0) uniform UBOModelInstance { mat4 model[128]; } ubo_model_instance; void main() { gl_Position = ubo_view_projection.proj * ubo_view_projection.view * ubo_model_instance.model[gl_InstanceIndex] * vec4(in_position, 1.0); out_dto.frag_color = ubo_view_projection.ambient_color; out_dto.frag_texture_coord = in_texture_coord; out_dto.normal = mat3(ubo_model_instance.model[gl_InstanceIndex]) * in_normal; }