despero 0.1.0

Rusty game engine, using API Vulkan and implementing paradigm of ECS
Documentation
#version 450

// VERTEX
layout (location=0) in vec3 position;
layout (location=1) in vec3 normal;
layout (location=2) in vec2 texcoord;
// INSTANCE
layout (location=3) in vec3 color;
layout (location=4) in uint albedo_map;
layout (location=5) in float metallic;
layout (location=6) in uint metallic_map;
layout (location=7) in float roughness;
layout (location=8) in uint roughness_map;
layout (location=9) in float normal_t;
layout (location=10) in uint normal_t_map;

layout (set=0, binding=0) uniform UniformBufferObject {
	mat4 view_matrix;
	mat4 projection_matrix;
} ubo;

layout( push_constant ) uniform PushConstants {
	mat4 model_matrix;
	mat4 inverse_model_matrix;
} pc;

layout (location=0) out vec2 uv;
layout (location=1) out vec3 out_normal;
layout (location=2) out vec3 out_worldpos;
layout (location=3) out vec3 out_camera_coordinates;

layout (location=4) out vec3 out_color;
layout (location=5) out uint out_albedo_map;
layout (location=6) out float out_metallic;
layout (location=7) out uint out_metallic_map;
layout (location=8) out float out_roughness;
layout (location=9) out uint out_roughness_map;
layout (location=10) out float out_normal_t;
layout (location=11) out uint out_normal_t_map;

void main() {
    vec4 worldpos = pc.model_matrix * vec4(position, 1.0);
    gl_Position = ubo.projection_matrix * ubo.view_matrix * worldpos;

    uv = texcoord;
    out_normal = transpose(mat3(pc.inverse_model_matrix)) * normal;
    out_worldpos = vec3(worldpos);
    out_camera_coordinates =
		- ubo.view_matrix[3][0] * vec3 (ubo.view_matrix[0][0],ubo.view_matrix[1][0],ubo.view_matrix[2][0])
		- ubo.view_matrix[3][1] * vec3 (ubo.view_matrix[0][1],ubo.view_matrix[1][1],ubo.view_matrix[2][1])
		- ubo.view_matrix[3][2] * vec3 (ubo.view_matrix[0][2],ubo.view_matrix[1][2],ubo.view_matrix[2][2]);

	out_color = color;
	out_albedo_map = albedo_map;
	out_metallic = metallic;
	out_metallic_map = metallic_map;
	out_roughness = roughness;
	out_roughness_map = roughness_map;
	out_normal_t = normal_t;
	out_normal_t_map = normal_t_map;
}