CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
RendererShader.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Forward.hpp"
11
13
15
18
19namespace CeresEngine {
20
23 enum class RendererShaderFlag {
24 };
25
29
30
34
35 public: // Reflection
38 template<typename Processor> static constexpr void reflect(Processor&& RTTI) { CE_REFL_DATA(constants); }
39 };
40
82
86 private:
91
92 private:
93 friend class RendererShader;
94
97
100
101 public:
104 explicit RendererShaderManager(Renderer& renderer);
105
106 public:
112
117 [[nodiscard]] RendererShaderPtr get(const GPUShaderProgramDescriptor& descriptor) { return get(StringView(), descriptor); }
118
123
127 [[nodiscard]] RendererShaderPtr get(const ShaderPtr& shader) { return get(StringView(), shader); }
128
130 [[nodiscard]] RendererShaderPtr get(const HShader& shader) { return get(shader.getPointer()); }
131
133 [[nodiscard]] RendererShaderPtr get(const StringView name, const HShader& shader) { return get(name, shader.getPointer()); }
134
135 private:
136 friend class RendererShader;
137
141
145
147 void notifyDestroy(const RendererShader* shader) noexcept;
148 };
149
150} // namespace CeresEngine
151
#define CE_FLAGS_OPERATORS(Enum)
Defines global operators for a Flags<Enum, Storage> implementation.
Definition Flags.hpp:216
#define CE_REFLECT_HASH(T)
Definition Hash.hpp:89
#define CE_REFL_DATA(N)
Definition Macros.hpp:541
A retain-release type of smart pointer.
Definition SmartPtr.hpp:132
A simple reference counter base class.
Definition SmartPtr.hpp:438
The CeresEngine renderer.
Definition Renderer.hpp:35
A renderer shader.
Definition RendererShader.hpp:44
GPUShaderProgramPtr getProgram(const RendererShaderSpecialization &specialization) const
Gets the compiled shader program for the given parameters.
RendererShader(RendererShaderManager &manager, StringView name, const GPUShaderProgramDescriptor &baseDescriptor)
HashMap< UInt64, GPUShaderProgramPtr > mPrograms
The shader programs, indexed by their parameters hash.
Definition RendererShader.hpp:60
GPUShaderProgramPtr getProgram() const
Gets the compiled shader program for the given parameters.
Definition RendererShader.hpp:73
RendererShaderManager & mManager
The renderer shader manager that owns this shader object.
Definition RendererShader.hpp:49
const ShaderPtr & getShader() const noexcept
A pointer to the shader resource object that will be used as base for compilation.
Definition RendererShader.hpp:80
RendererShader(RendererShaderManager &manager, StringView name, const ShaderPtr &shader)
const String & getName() const noexcept
A human-readable name for the shader.
Definition RendererShader.hpp:77
ShaderPtr mShader
A pointer to the shader resource object that will be used as base for compilation.
Definition RendererShader.hpp:57
String mName
A human-readable name for the shader.
Definition RendererShader.hpp:53
The renderer shader manager that is responsible for managing and re-using GPU shaders.
Definition RendererShader.hpp:85
HashMap< UInt64, ShaderInfo > mShaders
A map that holds shader information for each base shader descriptor.
Definition RendererShader.hpp:99
RendererShaderPtr getOrCreate(StringView name, const GPUShaderProgramDescriptor &descriptor)
Gets an existing or creates a new renderer shader instance for the given base descriptor.
RendererShaderPtr get(StringView name, const ShaderPtr &shader)
Gets (or creates) a new RendererShader from a shader.
RendererShaderPtr getOrCreate(StringView name, const ShaderPtr &shader)
Gets an existing or creates a new renderer shader instance for the given shader.
RendererShaderPtr get(const StringView name, const HShader &shader)
Gets (or creates) a new RendererShader from a shader.
Definition RendererShader.hpp:133
RendererShaderPtr get(const GPUShaderProgramDescriptor &descriptor)
Gets (or creates) a new RendererShader from a shader shader program descriptor.
Definition RendererShader.hpp:117
Renderer & mRenderer
The renderer that owns this manager instance.
Definition RendererShader.hpp:96
void notifyDestroy(const RendererShader *shader) noexcept
Notifies the manager that the renderer shader is being destroyed.
RendererShaderPtr get(StringView name, const GPUShaderProgramDescriptor &descriptor)
Gets (or creates) a new RendererShader from a shader shader program descriptor.
RendererShaderManager(Renderer &renderer)
Creates a new Shader Manager instance.
RendererShaderPtr get(const ShaderPtr &shader)
Gets (or creates) a new RendererShader from a shader.
Definition RendererShader.hpp:127
RendererShaderPtr get(const HShader &shader)
Gets (or creates) a new RendererShader from a shader.
Definition RendererShader.hpp:130
SPtr< T > getPointer() const noexcept
Definition ResourceHandle.hpp:234
Definition Application.hpp:19
BasicStringView< char > StringView
Narrow string view used for handling narrow encoded text in UTF-8.
Definition String.hpp:190
SPtr< Shader > ShaderPtr
Definition Forward.hpp:22
std::unordered_map< Key, T, Hash, KeyEqual, ScopedAllocatorAdaptor< StdAllocator< Pair< const Key, T >, RawAllocator > > > HashMap
HashMap is an associative container that contains key-value pairs with unique keys.
Definition Map.hpp:33
RendererShaderFlag
Flags that can be either set by the renderer or by the user to customize the behavior of the shader.
Definition RendererShader.hpp:23
Flags< RendererShaderFlag > RendererShaderFlags
Flags that can be either set by the renderer or by the user to customize the behavior of the shader.
Definition Forward.hpp:32
SmallUnorderedFlatMap< String, ShaderSpecializationConstant, 5 > ShaderSpecializationConstants
A map type that represents a map of shader specialization constants.
Definition Shader.hpp:172
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Descriptor structure for shader programs.
Definition GPUShader.hpp:303
Definition RendererShader.hpp:87
RendererShader * rendererShader
An instance of the renderer shader.
Definition RendererShader.hpp:89
A structure that describes a RendererGraphicsPipeline specialization.
Definition RendererShader.hpp:31
static constexpr void reflect(Processor &&RTTI)
Executes the given processor for every field of the struct.
Definition RendererShader.hpp:38
ShaderSpecializationConstants constants
A set of macros that will be defined on the shader specialization.
Definition RendererShader.hpp:33