diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert index d74154e..d587a87 100644 --- a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert +++ b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert @@ -10,18 +10,11 @@ layout(row_major, set = 0, binding = 0) uniform CameraUBO { mat4 vp; }; -layout(push_constant) uniform PC { - float angle; +layout(row_major, push_constant) uniform PC { + mat4 model; } pc; void main() { - float c = cos(pc.angle); - float s = sin(pc.angle); - vec3 rotated = vec3( - inPosition.x * c - inPosition.z * s, - inPosition.y, - inPosition.x * s + inPosition.z * c - ); - gl_Position = vp * vec4(rotated, 1.0); + gl_Position = vp * pc.model * vec4(inPosition, 1.0); fragColor = inColor; } diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert.spv b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert.spv index 7e657dd..edfeddb 100644 Binary files a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert.spv and b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert.spv differ diff --git a/src/Engine.Graphics.Vulkan/VulkanPipeline.cs b/src/Engine.Graphics.Vulkan/VulkanPipeline.cs index b85b299..c4b7544 100644 --- a/src/Engine.Graphics.Vulkan/VulkanPipeline.cs +++ b/src/Engine.Graphics.Vulkan/VulkanPipeline.cs @@ -154,7 +154,7 @@ internal sealed unsafe class VulkanPipeline : IDisposable { stageFlags = VkShaderStageFlags.Vertex, offset = 0, - size = 4, + size = 64, }; var descLayout = DescriptorSetLayout; diff --git a/src/Engine.Graphics.Vulkan/VulkanRenderer.cs b/src/Engine.Graphics.Vulkan/VulkanRenderer.cs index 9f0de6c..1f3db02 100644 --- a/src/Engine.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Engine.Graphics.Vulkan/VulkanRenderer.cs @@ -188,9 +188,15 @@ internal sealed unsafe class VulkanRenderer : IRenderer, Engine.Graphics.IScreen Vk.vkCmdBindIndexBuffer(cmd, _indexBuffer.Buffer, 0, 1); - float angle = _totalTime * 0.2f; - Vk.vkCmdPushConstants(cmd, _pipeline.PipelineLayout, VkShaderStageFlags.Vertex, 0, 4, &angle); + var angle = _totalTime * 0.2f; + var rot = Matrix4x4.CreateRotationY(angle); + var model1 = Matrix4x4.CreateTranslation(-1.5f, 0, 0) * rot; + Vk.vkCmdPushConstants(cmd, _pipeline.PipelineLayout, VkShaderStageFlags.Vertex, 0, 64, &model1); + Vk.vkCmdDrawIndexed(cmd, _indexCount, 1, 0, 0, 0); + + var model2 = Matrix4x4.CreateTranslation(1.5f, 0, 0) * rot; + Vk.vkCmdPushConstants(cmd, _pipeline.PipelineLayout, VkShaderStageFlags.Vertex, 0, 64, &model2); Vk.vkCmdDrawIndexed(cmd, _indexCount, 1, 0, 0, 0); Vk.vkCmdEndRendering(cmd);