Files
HelloVulkan/Engine/include/Engine/Vulkan/SyncManager.h
T
atdunbg 381b7c0aa6 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 引入
2026-09-20 23:09:40 +08:00

51 lines
1.4 KiB
C++

//
// Created by atdunbg on 2026/9/20.
//
#ifndef HELLOVULKAN_SYNCMANAGER_H
#define HELLOVULKAN_SYNCMANAGER_H
#include <vulkan/vulkan.hpp>
#include <vector>
#include "Engine/Core/Types.h"
namespace Engine {
class Device;
class SyncManager {
public:
SyncManager(Device& device, u32 maxFramesInFlight, u32 imageCount);
~SyncManager();
SyncManager(const SyncManager&) = delete;
SyncManager& operator=(const SyncManager&) = delete;
// 每帧一个:acquire 完成时 signal
vk::Semaphore GetImageAvailable(u32 imageIndex) const { return m_ImageAvailable[imageIndex]; }
// 每张交换链 image 一个:渲染完成时 signal
vk::Semaphore GetRenderFinished(u32 imageIndex) const {
return m_RenderFinished[imageIndex];
}
// 每帧一个:GPU 渲染完成时 signal
vk::Fence GetFrameFence(u32 frameIndex) const { return m_FrameFences[frameIndex]; }
// 等待并重置这一帧的 Fence
void WaitFence(u32 frameIndex); // 只等,不 reset
void ResetFence(u32 frameIndex); // 只 reset
private:
Device& m_Device;
std::vector<vk::Semaphore> m_ImageAvailable;
std::vector<vk::Semaphore> m_RenderFinished;
std::vector<vk::Fence> m_FrameFences;
};
} // namespace Engine
#endif //HELLOVULKAN_SYNCMANAGER_H