Files
HelloVulkan/Engine/include/Engine/Vulkan/ShaderManager.h
T

55 lines
1.4 KiB
C++

//
// Created by atdunbg on 2026/9/20.
//
#ifndef HELLOVULKAN_SHADERMANAGER_H
#define HELLOVULKAN_SHADERMANAGER_H
#pragma once
#include <Engine/Core/Types.h>
#include <vulkan/vulkan.hpp>
#include <string>
#include <vector>
namespace Engine {
class Device;
struct ShaderObject {
vk::ShaderEXT Handle;
vk::ShaderStageFlagBits Stage;
};
class ShaderManager {
public:
ShaderManager(Device& device);
~ShaderManager();
ShaderManager(const ShaderManager&) = delete;
ShaderManager& operator=(const ShaderManager&) = delete;
// 改成接受 vector
ShaderObject CreateFromFile(const std::string& spvPath,
vk::ShaderStageFlagBits stage,
const std::vector<vk::DescriptorSetLayout>& layouts = {},
u32 pushConstantSize = 0);
ShaderObject CreateFromSPIRV(const std::vector<u32>& spirv,
vk::ShaderStageFlagBits stage,
const std::vector<vk::DescriptorSetLayout>& layouts = {},
u32 pushConstantSize = 0);
void Destroy(const ShaderObject& shader);
private:
std::vector<u32> ReadSPIRV(const std::string& path);
Device& m_Device;
};
} // namespace Engine
#endif //HELLOVULKAN_SHADERMANAGER_H