From 1803873675622dd383b3497becb90a7cdc7dbf1a Mon Sep 17 00:00:00 2001 From: J3oss Date: Thu, 10 Jun 2021 02:47:50 +0200 Subject: [PATCH] added materials in shaders --- res/project/res/shaders/default.frag | 8 +++-- res/project/res/shaders/default.vert | 52 ++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/res/project/res/shaders/default.frag b/res/project/res/shaders/default.frag index 723e9e0..1322e2c 100644 --- a/res/project/res/shaders/default.frag +++ b/res/project/res/shaders/default.frag @@ -1,11 +1,15 @@ #version 450 #extension GL_EXT_nonuniform_qualifier : require +struct Material { + vec3 baseColor; +}; + layout(location = 0) in vec3 normal; +layout(location = 1) in Material material; layout(location = 0) out vec4 outColor; - void main() { - outColor = vec4(normal, 1.0); + outColor = vec4(material.baseColor, 1.0); } diff --git a/res/project/res/shaders/default.vert b/res/project/res/shaders/default.vert index 5b577dd..c2e8ad2 100644 --- a/res/project/res/shaders/default.vert +++ b/res/project/res/shaders/default.vert @@ -8,33 +8,55 @@ struct Vertex { vec2 uv[2]; }; +struct Material { + vec3 baseColor; +}; + +struct Mesh { + uint indexBufferIndex; + uint vertexBufferIndex; + uint materialBufferIndex; +}; + +layout( push_constant ) uniform constants +{ + mat4 render_matrix; + uint meshIndex; +} PushConstants; + layout(set = 0, binding = 0) uniform CameraParam { mat4 projection; mat4 view; } Camera; -layout(set = 1, binding = 0) buffer ResourceBuffer { - layout(align = 16) Vertex resources[]; -} ResourceBuffers[]; +layout(set = 1, binding = 0) buffer MeshBuffer { + layout(align = 16) Mesh mesh; +} MeshBuffers[]; -layout(set = 1, binding = 1) buffer PositionBuffer { - uint resources[]; -} PositionBuffers[]; +layout(set = 1, binding = 1) buffer VertexBuffer { + layout(align = 16) Vertex vertices[]; +} VertexBuffers[]; -layout(set = 1, binding = 2) buffer ColorBuffer { - layout(align = 16) vec3 resources[]; -} ColorBuffers[]; +layout(set = 1, binding = 2) buffer IndexBuffer { + uint indices[]; +} IndexBuffers[]; -layout(set = 1, binding = 3) buffer ccBuffer { - layout(align = 16) vec3 resources[]; -} ssBuffers[]; +layout(set = 1, binding = 3) buffer MaterialBuffer { + layout(align = 16) Material material; +} MaterialBuffers[]; layout(location = 0) out vec3 normal; +layout(location = 1) out Material material; -void main() { - Vertex vertex = ResourceBuffers[ nonuniformEXT(0) ].resources[PositionBuffers[ nonuniformEXT(0) ].resources[gl_VertexIndex] ]; +void main() +{ + Mesh mesh = MeshBuffers[PushConstants.meshIndex].mesh; + material = MaterialBuffers[ mesh.materialBufferIndex ].material; + + uint index = IndexBuffers[ mesh.indexBufferIndex ].indices[gl_VertexIndex]; + Vertex vertex = VertexBuffers[ mesh.vertexBufferIndex ].vertices[ index ]; normal = vertex.normal.xyz; float scale = 0.3; - gl_Position = vec4(vertex.position.x * scale - 0.1, vertex.position.y * scale - 0.7, (vertex.position.z * scale * -1.0 + 0.9), 1.0); + gl_Position = Camera.projection * Camera.view * PushConstants.render_matrix * vec4(vertex.position.x * scale - 0.1, vertex.position.y * scale - 0.7, (vertex.position.z * scale * -1.0 + 0.9), 1.0); }