Better pipeline...
This commit is contained in:
BIN
VulkanTest
BIN
VulkanTest
Binary file not shown.
@@ -1,10 +1,10 @@
|
|||||||
build/first_app.o: first_app.cpp first_app.hpp cve_window.hpp \
|
build/first_app.o: first_app.cpp first_app.hpp cve_window.hpp \
|
||||||
cve_pipeline.hpp cve_device.hpp cve_swap_chain.hpp cve_model.hpp \
|
cve_pipeline.hpp cve_device.hpp cve_swap_chain.hpp cve_game_object.hpp \
|
||||||
cve_game_object.hpp
|
cve_model.hpp
|
||||||
first_app.hpp:
|
first_app.hpp:
|
||||||
cve_window.hpp:
|
cve_window.hpp:
|
||||||
cve_pipeline.hpp:
|
cve_pipeline.hpp:
|
||||||
cve_device.hpp:
|
cve_device.hpp:
|
||||||
cve_swap_chain.hpp:
|
cve_swap_chain.hpp:
|
||||||
cve_model.hpp:
|
|
||||||
cve_game_object.hpp:
|
cve_game_object.hpp:
|
||||||
|
cve_model.hpp:
|
||||||
|
|||||||
Binary file not shown.
@@ -1,9 +1,9 @@
|
|||||||
build/main.o: main.cpp first_app.hpp cve_window.hpp cve_pipeline.hpp \
|
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:
|
first_app.hpp:
|
||||||
cve_window.hpp:
|
cve_window.hpp:
|
||||||
cve_pipeline.hpp:
|
cve_pipeline.hpp:
|
||||||
cve_device.hpp:
|
cve_device.hpp:
|
||||||
cve_swap_chain.hpp:
|
cve_swap_chain.hpp:
|
||||||
cve_model.hpp:
|
|
||||||
cve_game_object.hpp:
|
cve_game_object.hpp:
|
||||||
|
cve_model.hpp:
|
||||||
|
|||||||
BIN
build/main.o
BIN
build/main.o
Binary file not shown.
@@ -15,7 +15,7 @@ namespace cve {
|
|||||||
};
|
};
|
||||||
|
|
||||||
FirstApp::FirstApp() {
|
FirstApp::FirstApp() {
|
||||||
loadModels();
|
loadGameObjects();
|
||||||
createPipelineLayout();
|
createPipelineLayout();
|
||||||
recreateSwapChain();
|
recreateSwapChain();
|
||||||
createCommandBuffers();
|
createCommandBuffers();
|
||||||
@@ -34,14 +34,21 @@ namespace cve {
|
|||||||
vkDeviceWaitIdle(cveDevice.device());
|
vkDeviceWaitIdle(cveDevice.device());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FirstApp::loadModels() {
|
void FirstApp::loadGameObjects() {
|
||||||
std::vector<CveModel::Vertex> verticies {
|
std::vector<CveModel::Vertex> verticies {
|
||||||
{{0.0f, -0.5f}, {1.0f, 0.0f, 0.0f}},
|
{{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, 1.0f, 0.0f}},
|
||||||
{{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}
|
{{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}
|
||||||
};
|
};
|
||||||
|
|
||||||
cveModel = std::make_unique<CveModel>(cveDevice, verticies);
|
auto cveModel = std::make_shared<CveModel>(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() {
|
void FirstApp::createPipelineLayout() {
|
||||||
@@ -123,8 +130,6 @@ namespace cve {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FirstApp::recordCommandBuffer(int imageIndex) {
|
void FirstApp::recordCommandBuffer(int imageIndex) {
|
||||||
static int frame = 30;
|
|
||||||
frame = (frame+1) % 2000;
|
|
||||||
|
|
||||||
VkCommandBufferBeginInfo beginInfo{};
|
VkCommandBufferBeginInfo beginInfo{};
|
||||||
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||||
@@ -160,24 +165,7 @@ namespace cve {
|
|||||||
vkCmdSetViewport(commandBuffers[imageIndex], 0, 1, &viewport);
|
vkCmdSetViewport(commandBuffers[imageIndex], 0, 1, &viewport);
|
||||||
vkCmdSetScissor(commandBuffers[imageIndex], 0, 1, &scissor);
|
vkCmdSetScissor(commandBuffers[imageIndex], 0, 1, &scissor);
|
||||||
|
|
||||||
cvePipeline->bind(commandBuffers[imageIndex]);
|
renderGameObjects(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]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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() {
|
void FirstApp::drawFrame() {
|
||||||
uint32_t imageIndex;
|
uint32_t imageIndex;
|
||||||
auto result = cveSwapChain->acquireNextImage(&imageIndex);
|
auto result = cveSwapChain->acquireNextImage(&imageIndex);
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include "cve_pipeline.hpp"
|
#include "cve_pipeline.hpp"
|
||||||
#include "cve_device.hpp"
|
#include "cve_device.hpp"
|
||||||
#include "cve_swap_chain.hpp"
|
#include "cve_swap_chain.hpp"
|
||||||
#include "cve_model.hpp"
|
|
||||||
#include "cve_game_object.hpp"
|
#include "cve_game_object.hpp"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -24,7 +23,7 @@ namespace cve {
|
|||||||
|
|
||||||
void run();
|
void run();
|
||||||
private:
|
private:
|
||||||
void loadModels();
|
void loadGameObjects();
|
||||||
void createPipelineLayout();
|
void createPipelineLayout();
|
||||||
void createPipeline();
|
void createPipeline();
|
||||||
void createCommandBuffers();
|
void createCommandBuffers();
|
||||||
@@ -32,6 +31,7 @@ namespace cve {
|
|||||||
void drawFrame();
|
void drawFrame();
|
||||||
void recreateSwapChain();
|
void recreateSwapChain();
|
||||||
void recordCommandBuffer(int imageIndex);
|
void recordCommandBuffer(int imageIndex);
|
||||||
|
void renderGameObjects(VkCommandBuffer commandBuffer);
|
||||||
|
|
||||||
CveWindow cveWindow{WIDTH, HEIGHT, "Hello Vulkan!"};
|
CveWindow cveWindow{WIDTH, HEIGHT, "Hello Vulkan!"};
|
||||||
CveDevice cveDevice{cveWindow};
|
CveDevice cveDevice{cveWindow};
|
||||||
@@ -39,6 +39,6 @@ namespace cve {
|
|||||||
std::unique_ptr<CvePipeline> cvePipeline;
|
std::unique_ptr<CvePipeline> cvePipeline;
|
||||||
VkPipelineLayout pipelineLayout;
|
VkPipelineLayout pipelineLayout;
|
||||||
std::vector<VkCommandBuffer> commandBuffers;
|
std::vector<VkCommandBuffer> commandBuffers;
|
||||||
std::unique_ptr<CveModel> cveModel;
|
std::vector<CveGameObject> gameObjects;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user