VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
vulkanShader.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Vulkan shader implementation — wraps VkShaderModule from SPIR-V bytecode.
5//
6#pragma once
7
8#ifdef VISUTWIN_HAS_VULKAN
9
10#include <vector>
11#include <vulkan/vulkan.h>
12
14
15namespace visutwin::canvas
16{
17 class VulkanShader : public Shader
18 {
19 public:
20 VulkanShader(GraphicsDevice* device, const ShaderDefinition& definition,
21 const std::string& sourceCode = "");
22
23 // Construct from precompiled SPIR-V arrays.
24 VulkanShader(GraphicsDevice* device, const ShaderDefinition& definition,
25 const uint32_t* vertSpirv, size_t vertWordCount,
26 const uint32_t* fragSpirv, size_t fragWordCount);
27
28 ~VulkanShader() override;
29
30 [[nodiscard]] VkShaderModule vertexModule() const { return _vertexModule; }
31 [[nodiscard]] VkShaderModule fragmentModule() const { return _fragmentModule; }
32 [[nodiscard]] VkShaderModule computeModule() const { return _computeModule; }
33
34 private:
35 VkShaderModule createModule(const uint32_t* spirv, size_t wordCount);
36
37 VkDevice _vkDevice = VK_NULL_HANDLE;
38 VkShaderModule _vertexModule = VK_NULL_HANDLE;
39 VkShaderModule _fragmentModule = VK_NULL_HANDLE;
40 VkShaderModule _computeModule = VK_NULL_HANDLE;
41 };
42}
43
44#endif // VISUTWIN_HAS_VULKAN