very crude first triangle pre version
This commit is contained in:
parent
649fdb795f
commit
8d5f6e8a3e
22 changed files with 1789 additions and 5 deletions
92
engine/logicaldevice.h
Normal file
92
engine/logicaldevice.h
Normal file
|
@ -0,0 +1,92 @@
|
|||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include "utils.h"
|
||||
#include "physicaldevice.h"
|
||||
#include "surface.h"
|
||||
|
||||
namespace Engine {
|
||||
class Engine;
|
||||
class SwapChain;
|
||||
|
||||
class LogicalDevice {
|
||||
friend class Engine;
|
||||
public:
|
||||
LogicalDevice(
|
||||
PhysicalDevice* physicalDevice,
|
||||
Surface* surface,
|
||||
const std::vector<const char*>& extensions,
|
||||
const std::vector<const char*> layers
|
||||
);
|
||||
~LogicalDevice();
|
||||
|
||||
void createSwapChain();
|
||||
void clearSwapChain();
|
||||
void createGraphicsPipeline(const std::string& vertexShaderPath, const std::string& fragmentShaderPath);
|
||||
void recreateSwapChain();
|
||||
|
||||
void drawFrame();
|
||||
|
||||
VkResult waitIdle();
|
||||
VkResult waitForFence(const VkFence& fence);
|
||||
VkResult resetFence(const VkFence& fence);
|
||||
|
||||
VkExtent2D chooseSwapExtent() const;
|
||||
VkResult createVkSwapChain(const VkExtent2D& extent, VkSwapchainKHR& out);
|
||||
void destroyVkSwapChain(VkSwapchainKHR& swapChain);
|
||||
VkResult getVkSwapChainImages(VkSwapchainKHR& swapChain, std::vector<VkImage>& out);
|
||||
VkResult createVkImageView(const VkImage& image, VkImageView& out);
|
||||
void destroyVkImageView(VkImageView& view);
|
||||
VkResult createVkFrameBuffer(const VkImageView& imageView, const VkExtent2D& extent, VkFramebuffer& out);
|
||||
void destroyVkFrameBuffer(VkFramebuffer& buffer);
|
||||
|
||||
private:
|
||||
VkShaderModule createShaderModule(const std::string& path);
|
||||
void destroyShaderModule(VkShaderModule shaderModule);
|
||||
void createDevice(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const QueueFamilyIndices& indices,
|
||||
const std::vector<const char*>& extensions,
|
||||
const std::vector<const char*> layers
|
||||
);
|
||||
void createQueues(uint32_t graphicsFamilyIndex, uint32_t presenFamilyIndex);
|
||||
void createCommandPool(uint32_t queueFamilyIndex);
|
||||
void createCommandBuffers();
|
||||
void createSyncObjects();
|
||||
void createRenderPass(VkFormat format);
|
||||
|
||||
VkResult queueSubmitGraphics(
|
||||
const VkSemaphore& wait,
|
||||
const VkCommandBuffer& buffer,
|
||||
const VkSemaphore& signal,
|
||||
const VkFence& fence
|
||||
);
|
||||
VkResult queuePresent(const VkSemaphore& signal, uint32_t index);
|
||||
void recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex);
|
||||
|
||||
private:
|
||||
PhysicalDevice* phys;
|
||||
VkDevice vk;
|
||||
VkQueue graphicsQueue;
|
||||
VkQueue presentQueue;
|
||||
VkRenderPass renderPass;
|
||||
VkPipelineLayout pipelineLayout;
|
||||
VkPipeline graphicsPipeline;
|
||||
VkCommandPool commandPool;
|
||||
std::vector<VkCommandBuffer> commandBuffers;
|
||||
std::vector<VkSemaphore> imageAvailableSemaphores;
|
||||
std::vector<VkSemaphore> renderFinishedSemaphores;
|
||||
std::vector<VkFence> inFlightFences;
|
||||
uint32_t currentFrame;
|
||||
bool framebufferResized;
|
||||
bool hasPipeline;
|
||||
Surface* surface;
|
||||
VkSurfaceFormatKHR surfaceFormat;
|
||||
SwapChain* swapChain;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue