feat: 搭建 Vulkan 1.4 渲染器骨架,绘制旋转 3D 立方体
使用 Vulkan 1.4 现代路径初始化引擎骨架: - 用 Shader Object (VK_EXT_shader_object) 替代传统 VkPipeline - 用 Dynamic Rendering 替代 RenderPass/Framebuffer - 用 Synchronization2 管理 barrier 核心模块: - Window:GLFW 封装,GLFW_NO_API 模式,兼容 Wayland - Log:spdlog 封装 - Types:u32/u64/f32 类型别名 Vulkan 后端: - Device:Instance、PhysicalDevice、LogicalDevice、Queue 及 feature 查询 - Swapchain:Image、ImageView、DepthBuffer、Recreate - ShaderManager:SPIR-V 加载与 ShaderEXT 创建 - CommandManager:CommandPool 与主 CommandBuffer - SyncManager:per-frame Fence 与 ImageAvailable semaphore,per-image RenderFinished semaphore,2 frames in flight - MemoryAllocator:内存子分配器,256MB block,persistent mapping - Buffer:VertexBuffer、IndexBuffer、UniformBuffer 封装 - UniformBuffer:每帧上传 MVP 矩阵 - DescriptorManager:DescriptorSetLayout、DescriptorPool、DescriptorSet 及更新 Renderer: - 协调所有子系统 - 绘制每面不同颜色的旋转 3D 立方体 - 启用 depth test,MVP 矩阵由 GLM 计算 构建: - CMake 组织 Engine 静态库与 App 可执行文件 - glfw、glm、spdlog 通过 add_subdirectory 引入
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
//
|
||||
// Created by atdunbg on 2026/9/20.
|
||||
//
|
||||
|
||||
#ifndef HELLOVULKAN_RENDERER_H
|
||||
#define HELLOVULKAN_RENDERER_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Engine/Core/Types.h>
|
||||
#include <vulkan/vulkan.hpp>
|
||||
#include <chrono>
|
||||
|
||||
namespace Engine {
|
||||
|
||||
class Window;
|
||||
class Device;
|
||||
class MemoryAllocator;
|
||||
class DescriptorManager;
|
||||
class ShaderManager;
|
||||
class Swapchain;
|
||||
class CommandManager;
|
||||
class SyncManager;
|
||||
class Buffer;
|
||||
class UniformBuffer;
|
||||
|
||||
class Renderer {
|
||||
public:
|
||||
Renderer(Window& window);
|
||||
~Renderer();
|
||||
|
||||
Renderer(const Renderer&) = delete;
|
||||
Renderer& operator=(const Renderer&) = delete;
|
||||
|
||||
void Render();
|
||||
|
||||
private:
|
||||
void RecordCommands(vk::CommandBuffer cmd, u32 imageIndex);
|
||||
void TransitionImageLayout(vk::CommandBuffer cmd, vk::Image image,
|
||||
vk::ImageLayout oldLayout, vk::ImageLayout newLayout);
|
||||
|
||||
Window& m_Window;
|
||||
|
||||
Scope<Device> m_Device;
|
||||
Scope<MemoryAllocator> m_Allocator;
|
||||
Scope<DescriptorManager> m_DescriptorManager;
|
||||
Scope<ShaderManager> m_ShaderManager;
|
||||
Scope<Swapchain> m_Swapchain;
|
||||
Scope<SyncManager> m_SyncManager;
|
||||
Scope<CommandManager> m_CommandManager;
|
||||
|
||||
Scope<Buffer> m_VertexBuffer;
|
||||
Scope<Buffer> m_IndexBuffer;
|
||||
Scope<UniformBuffer> m_UniformBuffer;
|
||||
|
||||
vk::DescriptorSetLayout m_DescriptorSetLayout;
|
||||
vk::PipelineLayout m_PipelineLayout;
|
||||
vk::DescriptorSet m_DescriptorSet;
|
||||
|
||||
vk::ShaderEXT m_VertShader;
|
||||
vk::ShaderEXT m_FragShader;
|
||||
|
||||
vk::Extent2D m_Extent;
|
||||
vk::Format m_Format;
|
||||
|
||||
static constexpr u32 kMaxFramesInFlight = 2;
|
||||
u32 m_CurrentFrame = 0;
|
||||
|
||||
std::chrono::steady_clock::time_point m_StartTime;
|
||||
};
|
||||
|
||||
} // namespace Engine
|
||||
|
||||
#endif //HELLOVULKAN_RENDERER_H
|
||||
Reference in New Issue
Block a user