VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
shader.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 14.09.2025.
5//
6#pragma once
7
8#include <memory>
9#include <string>
10
11namespace visutwin::canvas
12{
14 {
15 std::string name;
16
17 std::string vshader; // Vertex shader entry-point name
18 std::string fshader; // Fragment shader entry-point name
19 std::string cshader; // Compute shader entry-point name (optional)
20 };
21
22 class GraphicsDevice;
23
29 class Shader
30 {
31 public:
33 virtual ~Shader() = default;
34
35 int id() const { return _id; }
36 const std::string& vertexEntry() const { return _definition.vshader; }
37 const std::string& fragmentEntry() const { return _definition.fshader; }
38 const std::string& computeEntry() const { return _definition.cshader; }
39 GraphicsDevice* graphicsDevice() const { return _device; }
40
41 private:
42 // Process shader definition and create implementation
43 void processDefinition();
44
45 // Process vertex and fragment shaders
46 void processVertexFragmentShaders();
47
48 // Check platform compatibility
49 void validatePlatformSupport() const;
50
51 static int _nextId;
52
53 GraphicsDevice* _device;
54 int _id;
55 ShaderDefinition _definition;
56 };
57
58 std::shared_ptr<Shader> createShader(GraphicsDevice* graphicsDevice, const ShaderDefinition& definition,
59 const std::string& sourceCode = "");
60}
Abstract GPU interface for resource creation, state management, and draw submission.
GraphicsDevice * graphicsDevice() const
Definition shader.h:39
Shader(GraphicsDevice *graphicsDevice, const ShaderDefinition &definition)
Definition shader.cpp:17
const std::string & fragmentEntry() const
Definition shader.h:37
const std::string & vertexEntry() const
Definition shader.h:36
virtual ~Shader()=default
const std::string & computeEntry() const
Definition shader.h:38
std::shared_ptr< Shader > createShader(GraphicsDevice *graphicsDevice, const ShaderDefinition &definition, const std::string &sourceCode)
Definition shader.cpp:39