From c7bed7d58e0be00d6619c515e7b3c68aa2966d53 Mon Sep 17 00:00:00 2001 From: JimmyBinoculars Date: Sun, 22 Feb 2026 15:43:21 +0000 Subject: [PATCH] Better pipeline... --- VulkanTest | Bin 110816 -> 112328 bytes build/first_app.d | 6 ++--- build/first_app.o | Bin 29992 -> 38560 bytes build/main.d | 4 ++-- build/main.o | Bin 3992 -> 3992 bytes first_app.cpp | 57 +++++++++++++++++++++++++++------------------- first_app.hpp | 6 ++--- 7 files changed, 42 insertions(+), 31 deletions(-) diff --git a/VulkanTest b/VulkanTest index c59410048746871862953a745a0b74920917eca6..ead6bc10c5b2196739bdef44a6fd45f3e9b7a61f 100755 GIT binary patch delta 25662 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 delta 22334 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 P;8uD6Y2=RwEC2rh!}9rg literal 29992 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

Gy%#W?>%EBKP9}dLlh5_;V)(U;{$(bI znoim2!uc5`su#x>Nu27n374Y(D@H$;;l~*L^$g#Pb1X_E2Y*VFm9w4UUuO873=c5; z+YH~r@c$!mv;B`Ud>*5JhT#`7{4m2^3_nAjSCIVq4F8e^zFgu|-yoy^3x;g|< z49B0|i9~Wb8U6snd0aKha}uKOW%Ox=cQgFE4CiuQXLyv+f6VY0!z*wuMTzvb;!<(a zWPz`dIQjD;M!$*SHv-48jYy*m?*f81YlK-ke zHLb~n+oXM0oA9?J{U#Isp2U|`jVK zEBtIjoM^{-lvO;;mpF-C&hRrC&c`1o!+F0@aYS-BPHQJhW?aP=;a*(Io;5^_WTp=r zu)sO}4Gib~B5Hx(#Bd+VO7CqFr*^4i_%4Z)J!G4rzhB}DkYCO4?@FBH_!<6h5+^x- z!SKBdzlPy2GMv}}nd{fzW(z@_Y0{mhK3{z^D+N4}5ac)jd@M9=M1{gQBQ zr_SiP|F4!f`K=0H-%>M=k>+EXCRWf zzG~hid@HNhIHTwNMa?Hf&-MP^g8mbRbNV7VZ;%0kBm>h1;E+&WD^L2*vcK<62 z{M!uYarGmH^Y%K(a8Ca!!#Vw7hI4z=dcoZ8MFb#G)__a(F9*YU9MX5slqlo)l??ab znUZrA!#RC`;e4IY!*EWo);09Fk;%V>(Kj(%t#{}#_s`!j`VEZ!A%=7MA2OW#^KlEj z95N|Uzu^1CF9>upext-m9IaK9-|k^J-}gPm@Cc({#Kvuo?_fBW^IeADz~rd;i0tA1 z$3J5t64k33m$LIkCTAPN1u=f;@h~ps7r6`<_^rUriRhEK3en%jh}CnV|0=^(@kDY) z6cKVR=XQp3J4YGL>D>%h-xHGFT82AinQ-;3K0&lrq(t}Df5_Af*^i_RJM1 z>}5E~Pe@$#7bU++;s+T$JyYMw|D53@f2pK*O8u0P{5K?C#c-ncOT3xkRNNvPd5Z~G z-@Qi|PI5L%IS(?N^s2uLdzj%wAC&Zm7(QEKl)cCBGa0V_u8SU@#c)2)(zD$%xH5A7 zB8>D7NuGxoPIjulFH`fTqQ6bjA7b=Ez6{bA8BX#ulHMr;iD*f_`a88Mh7X5me^b(H)%`nq6TuGTiMWw>s}jDy2v*}Ou7pJEGuBYteCqkwbPa!%HaRs&s9ffBegD{j&pKKCY8}t{!&BfNE});@=bfznT?P25PAAKM zx8#@0XRQJEw68u{{`){niPxX@(Su73pgC#(OE;Li6Sy)QUf{{Jk%Pw#|Imj8_c{Iu^j^E-jj)|2n~ach9c?w03; z0>h6Q57hk}6i8-+0%X2h0kQ$;mc|+7&kB?&U4)DD%k39IBHb+&DSH)ezP|(yNT!+p zZ_I{D0i=s3H*Q4zX*0#reUhKQBcaD;u@3+%#J^h-%I#TJvYG!ocq05~(!bkhuqZz@ z;PxC`X8+BH@Ib*q`?h%PG{$4`+q0(*P8f`QLrHy|4xokreDQR zKBx4q1^=ruaLH#pDL$1?L&q)De&T<021XeMSrO*;vw^>0`_V^@NWA}ChU#AqwT=6S-2>gZo_kz?vCJ7smQ(G#2 zRj-ewemPuAYP^?~`u$nND5!W=`3&s8$bK{b?$7X_vg2F}{sWSq>c*40S9z7>H^<*0 z$*=S%8RmNz_zU^3d!xaj{M3M3TK_A4g|CzPYYg)2?+a2tohkA}zM`b^FH3#{&HYY0 zKUd}@#iy`7@Z&$tH2i2~lHaKaWv=X3@J^}U%wH+_%Mjl@nfY%6zwjR?LU~yF&o3LQ z0T`{{6~FQy)yJ$GkXCac{o?##mXUjqk&n&%bo_xSU{V^F1NSi%sFK3$KU(G#;y-k~ N!SGFTE=y+q{|^(6j(q?C diff --git a/build/main.d b/build/main.d index 384038d..5ff42ad 100644 --- a/build/main.d +++ b/build/main.d @@ -1,9 +1,9 @@ build/main.o: main.cpp first_app.hpp cve_window.hpp cve_pipeline.hpp \ - cve_device.hpp cve_swap_chain.hpp cve_model.hpp cve_game_object.hpp + cve_device.hpp cve_swap_chain.hpp cve_game_object.hpp cve_model.hpp first_app.hpp: cve_window.hpp: cve_pipeline.hpp: cve_device.hpp: cve_swap_chain.hpp: -cve_model.hpp: cve_game_object.hpp: +cve_model.hpp: diff --git a/build/main.o b/build/main.o index 27ab73b84862893b58adea075545e8a52aee234f..c08fd619d3bf9708ee0f20756fcfc45de749a0db 100644 GIT binary patch delta 71 zcmbOsKSO@PF-DJx$DM>CSQr>mJi1v_H5eEeJUUxcJSIysY6yFPg|#8Vr92*uMKL7v# delta 71 zcmbOsKSO@PF-D7t$DM>cSQr>mJi1v_H5eEeJUUxcEGA1cY6x3^g|#8Vr92*uM?5Bn UF@9!zFxiVqh4I1Wd?rm^0GwwM&j0`b diff --git a/first_app.cpp b/first_app.cpp index 3c7c098..7c3fa18 100644 --- a/first_app.cpp +++ b/first_app.cpp @@ -15,7 +15,7 @@ namespace cve { }; FirstApp::FirstApp() { - loadModels(); + loadGameObjects(); createPipelineLayout(); recreateSwapChain(); createCommandBuffers(); @@ -34,14 +34,21 @@ namespace cve { vkDeviceWaitIdle(cveDevice.device()); } - void FirstApp::loadModels() { + void FirstApp::loadGameObjects() { std::vector verticies { {{0.0f, -0.5f}, {1.0f, 0.0f, 0.0f}}, {{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}}, {{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}} }; - cveModel = std::make_unique(cveDevice, verticies); + auto cveModel = std::make_shared(cveDevice, verticies); + + auto triangle = CveGameObject::createGameObject(); + triangle.model = cveModel; + triangle.color = {0.1f, 0.8f, 0.1f}; + triangle.transform2d.translation.x = .2f; + + gameObjects.push_back(std::move(triangle)); } void FirstApp::createPipelineLayout() { @@ -123,8 +130,6 @@ namespace cve { } void FirstApp::recordCommandBuffer(int imageIndex) { - static int frame = 30; - frame = (frame+1) % 2000; VkCommandBufferBeginInfo beginInfo{}; beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; @@ -160,24 +165,7 @@ namespace cve { vkCmdSetViewport(commandBuffers[imageIndex], 0, 1, &viewport); vkCmdSetScissor(commandBuffers[imageIndex], 0, 1, &scissor); - cvePipeline->bind(commandBuffers[imageIndex]); - cveModel->bind(commandBuffers[imageIndex]); - - for (int j = 0; j < 4; j++) { - SimplePushConstantData push{}; - push.offset = {-0.5f + frame * 0.0005f, -0.4f + j * 0.25f}; - push.color = {0.0f, 0.0f, 0.2f + 0.2f * j}; - - vkCmdPushConstants( - commandBuffers[imageIndex], - pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, - 0, - sizeof(SimplePushConstantData), - &push - ); - cveModel->draw(commandBuffers[imageIndex]); - } + renderGameObjects(commandBuffers[imageIndex]); @@ -187,6 +175,29 @@ namespace cve { } } + void FirstApp::renderGameObjects(VkCommandBuffer commandBuffer) { + cvePipeline->bind(commandBuffer); + + for (auto& obj: gameObjects) { + SimplePushConstantData push{}; + push.offset = obj.transform2d.translation; + push.color = obj.color; + push.transform = obj.transform2d.mat2(); + + vkCmdPushConstants( + commandBuffer, + pipelineLayout, + VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, + 0, + sizeof(SimplePushConstantData), + &push + ); + + obj.model->bind(commandBuffer); + obj.model->draw(commandBuffer); + } + } + void FirstApp::drawFrame() { uint32_t imageIndex; auto result = cveSwapChain->acquireNextImage(&imageIndex); diff --git a/first_app.hpp b/first_app.hpp index d179456..efc124b 100644 --- a/first_app.hpp +++ b/first_app.hpp @@ -4,7 +4,6 @@ #include "cve_pipeline.hpp" #include "cve_device.hpp" #include "cve_swap_chain.hpp" -#include "cve_model.hpp" #include "cve_game_object.hpp" #include @@ -24,7 +23,7 @@ namespace cve { void run(); private: - void loadModels(); + void loadGameObjects(); void createPipelineLayout(); void createPipeline(); void createCommandBuffers(); @@ -32,6 +31,7 @@ namespace cve { void drawFrame(); void recreateSwapChain(); void recordCommandBuffer(int imageIndex); + void renderGameObjects(VkCommandBuffer commandBuffer); CveWindow cveWindow{WIDTH, HEIGHT, "Hello Vulkan!"}; CveDevice cveDevice{cveWindow}; @@ -39,6 +39,6 @@ namespace cve { std::unique_ptr cvePipeline; VkPipelineLayout pipelineLayout; std::vector commandBuffers; - std::unique_ptr cveModel; + std::vector gameObjects; }; }