From c4c796c98ed1625e25ca811f0f8f84b0592a7d59 Mon Sep 17 00:00:00 2001 From: connellpaxton Date: Fri, 26 Jan 2024 14:14:25 -0500 Subject: [PATCH] Fixed pipeline and shaders. Can now view 3D objects --- Memory/Buffer.cpp | 5 +++-- Memory/Buffer.hpp | 2 ++ Renderer/Renderer.cpp | 21 +++++++++++++-------- Renderer/VertexBuffer.hpp | 8 +++++++- assets/shaders/basic.frag | 5 +++-- assets/shaders/basic.frag.spv | Bin 660 -> 872 bytes assets/shaders/basic.vert | 11 ++++++++++- assets/shaders/basic.vert.spv | Bin 896 -> 1408 bytes 8 files changed, 38 insertions(+), 14 deletions(-) diff --git a/Memory/Buffer.cpp b/Memory/Buffer.cpp index fbd2a92..12d299e 100644 --- a/Memory/Buffer.cpp +++ b/Memory/Buffer.cpp @@ -21,15 +21,16 @@ Buffer::Buffer(vk::PhysicalDevice phys_dev, vk::Device dev, vk::DeviceSize sz, v memory = dev.allocateMemory(alloc_info); dev.bindBufferMemory(buffer, memory, 0); + + p = dev.mapMemory(memory, 0, size); } void Buffer::upload(const uint8_t* data, vk::DeviceSize size) { - auto p = dev.mapMemory(memory, 0, size); std::memcpy(p, data, size); - dev.unmapMemory(memory); } Buffer::~Buffer() { + dev.unmapMemory(memory); dev.freeMemory(memory); dev.destroyBuffer(buffer); } diff --git a/Memory/Buffer.hpp b/Memory/Buffer.hpp index d29d049..87bfa65 100644 --- a/Memory/Buffer.hpp +++ b/Memory/Buffer.hpp @@ -10,6 +10,8 @@ struct Buffer { vk::DeviceSize size; vk::DeviceMemory memory; vk::Buffer buffer; + /* mapped memory */ + void* p; void upload(const uint8_t* data, vk::DeviceSize size); inline void upload(const uint8_t* data) { diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 842e766..d7dcdfb 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -12,6 +12,8 @@ #include #include +#include + using namespace std::string_literals; Renderer::Renderer(Window& win) : win(win) { @@ -169,10 +171,10 @@ Renderer::Renderer(Window& win) : win(win) { /* basic triangle */ - std::vector triangle = { - {{ 1.0, 1.0, 0.0 }}, - {{-1.0, 1.0, 0.0 }}, - {{ 0.0,-1.0, 0.0 }}, + const std::vector triangle = { + {{ 1.0, 1.0, -50.0 }, {1.0, 0.0}}, + {{-1.0, 1.0, -50.0 }, {0.0, 0.0}}, + {{ 0.0,-1.0, -50.0 }, {0.0, 1.0}}, }; vertex_buffer = std::make_unique(phys_dev, dev, triangle.size()); @@ -191,6 +193,8 @@ Renderer::Renderer(Window& win) : win(win) { pipeline = std::make_unique(dev, shaders, swapchain->extent, *render_pass, bindings, *vertex_buffer); + pipeline->update(0, *uniform_buffer); + shaders[0].cleanup(); shaders[1].cleanup(); } @@ -216,7 +220,7 @@ void Renderer::draw() { command_buffer->begin(); vk::ClearValue clear_values[] = { - vk::ClearColorValue(1.0f, 0.0f, 1.0f, 1.0f), + vk::ClearColorValue(0.0f, 0.0f, 0.0f, 1.0f), vk::ClearDepthStencilValue {.depth = 1.0f} }; @@ -235,7 +239,6 @@ void Renderer::draw() { /* flip viewport */ auto viewport = vk::Viewport{ .x = 0.0f, -// .y = 0.0f, .y = static_cast(swapchain->extent.height), .width = static_cast(swapchain->extent.width), .height = -static_cast(swapchain->extent.height), @@ -260,11 +263,13 @@ void Renderer::draw() { command_buffer->bind(*vertex_buffer); command_buffer->bind(pipeline->layout, pipeline->desc_set); + const auto p = glm::perspective(glm::radians(90.0f), static_cast(swapchain->extent.width) / static_cast(swapchain->extent.height), 0.01f, 50.0f); + uniform_buffer->upload(UniformData{ - .time = static_cast(frame) * 0.0167f, + .mvp = p * glm::rotate(glm::mat4(1.0), glm::radians(static_cast(frame)), glm::vec3(1.0, 1.0, 1.0)), + .time = static_cast(frame), }); - pipeline->update(0, *uniform_buffer); command_buffer->draw(9, 1, 0, 0); diff --git a/Renderer/VertexBuffer.hpp b/Renderer/VertexBuffer.hpp index 677098d..06f3c78 100644 --- a/Renderer/VertexBuffer.hpp +++ b/Renderer/VertexBuffer.hpp @@ -6,6 +6,7 @@ struct Vertex { glm::vec3 coord; + glm::vec2 tex_coord; }; struct VertexBuffer { @@ -25,11 +26,16 @@ struct VertexBuffer { inline std::vector attrs(uint32_t binding) const { return std::vector { - vk::VertexInputAttributeDescription { + { .location = 0, .binding = binding, .format = vk::Format::eR32G32B32Sfloat, .offset = offsetof(Vertex, coord), + }, { + .location = 1, + .binding = binding, + .format = vk::Format::eR32G32Sfloat, + .offset = offsetof(Vertex, tex_coord), } }; } diff --git a/assets/shaders/basic.frag b/assets/shaders/basic.frag index fcbe8a9..9b961c0 100644 --- a/assets/shaders/basic.frag +++ b/assets/shaders/basic.frag @@ -1,4 +1,6 @@ #version 460 core + +layout (location = 0) in vec2 texCoord; layout (location = 0) out vec4 FragColor; layout (set = 0, binding = 0) uniform Matrices { @@ -7,6 +9,5 @@ layout (set = 0, binding = 0) uniform Matrices { }; void main() { -// FragColor = vec4(abs(cos(time)), 0.5, 1.0, 1.0); - FragColor = vec4(1.0); + FragColor = vec4(cos(time), 1.0, 0.0, 1.0); } \ No newline at end of file diff --git a/assets/shaders/basic.frag.spv b/assets/shaders/basic.frag.spv index f46c35ce314011c3f13a9a41472d96caf898b570..925aa70b51ed1252777a539fa8269fef169644c1 100644 GIT binary patch literal 872 zcmZQ(Qf6mhU}WHC;AN0vfB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!NaQBIK_xE@A zag9$dD2OjEsmw`@&&kY7jZeueN=+`wEK3Ec<3LiEnU|bXnu4r=m4O9pKFnTL237`; z-EKvR>CX8%`9%y23?MOX1_lP-#FC=S%SGO#f4LG1?lQ5(wVX8@%-kegT-K;ZyV3o;KR528iD{%f#@ z@kPOWi2KDE7{LAk=>gd<0W}LG4zeG_2Zag9J~IYZa2SBx4l)AdrymSV44^o2WMBo` zEy%zCj%$#cY#CUU?Q)nFdG940|OZ6CT8X_FfcH1PK@lX=Vf4E@J%c! z%1llz1_^?cfy6-U+=4O&HU?G(5TB8OfuSTbHx(q#%D~LP4`MJdFt{_YFmN(3Fvvmq z9t00DOyk^lez diff --git a/assets/shaders/basic.vert b/assets/shaders/basic.vert index 8dca425..3ed02c6 100644 --- a/assets/shaders/basic.vert +++ b/assets/shaders/basic.vert @@ -1,6 +1,15 @@ #version 460 core layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoord; + +layout (location = 0) out vec2 texCoord; + +layout (set = 0, binding = 0) uniform Matrices { + mat4 mpv; + float time; +}; void main() { - gl_Position = vec4(aPos, 1.0); + gl_Position = mpv*vec4(aPos, 1.0); + texCoord = aTexCoord; } \ No newline at end of file diff --git a/assets/shaders/basic.vert.spv b/assets/shaders/basic.vert.spv index 730454e693a56bacc3920e4c36177f3fab639ee3..8b0dbc59a780016bbd10bc0c11477b94e5493d70 100644 GIT binary patch literal 1408 zcmZQ(Qf6mhU}WHC;APNcfB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!NCH9jXZFEu_TvnVyWB(p3Pq>ckgU1nZ#PH76V0#*hV24p)~8Q2)O z85kJSbK(P1i^5WiN>VF8ZefFpgV-Rs{Nl`#%=|nCHU@UEdXPWC;+c6R!I@R5AayV~ zkekzU;+=Cc3tTdbOA_;vQ{nnRApnvq&B=kwu`)0-fcy?JgO!1mL6Cug!8fs_C^I>= z7$nBVzycNnv2zQ`7}%g{KyE0>%mv#GGD8@ofPsMl!y> zQ3^;INDLIli6IC<4+d7S-$3%9FagmpF_2v#F%S(C1Njpq2J#b348#VBfx_6Gff;Nb zNSz0gA6OX}7(nVl{sh^f3?k6P*cliY1dzl)_JY(oFfcHH%mwKMnd{EL!T|EO64VSB zUlEB93JWybOkemi-CawgcTTA70G8g17IcRu;!Vu(EkoiIk5dVO}4rD%v z4+=X_ID+Iwpz+oA0#iq0Lt;8Fo3uZ#0P~f%sn7`q`~fKum`CJ#Q{h! z$W0*gK=B7s1G7&B>R*sJ$UPuFC~iP{K>F37_QB*qd{A70>@#Cv1;-7@uOKTydVVl4 zF@VyRBLgb~$S3fanLQ2g!rNVj=@8SPqnSKz4)FfZPWP8&H}B#V^Qx ib_~o6AU;SP$Za4$Ye36EkQ^vnK>WW9j0_eGj0^xL4P-w6 delta 310 zcmZqRZeZtSW>RKnU|?k6X5eLzp2%w|&dvY=EDQ_`xrv#1AT}=p1B1}S#Gl+O3_=VH z42c2x#SD`#GRE_|GeAV-K&mERW!mj4&cMPTz`(%3#=yY9%)r2)z`(*F$N(~*0W59} z<%7&&WME*>W?%uU6#<#R&|nWzFA3GlKDm}fzTOsUqA`