55 lines
1.4 KiB
C++
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
|