Plasma Engine  2.0
Loading...
Searching...
No Matches
ShaderManager.h
1#pragma once
2
3#include <Foundation/Containers/HashTable.h>
4#include <RendererCore/Declarations.h>
5#include <RendererCore/ShaderCompiler/PermutationGenerator.h>
6#include <RendererCore/ShaderCompiler/ShaderParser.h>
7
8class PL_RENDERERCORE_DLL plShaderManager
9{
10public:
11 static void Configure(const char* szActivePlatform, bool bEnableRuntimeCompilation, const char* szShaderCacheDirectory = ":shadercache/ShaderCache",
12 const char* szPermVarSubDirectory = "Shaders/PermutationVars");
13 static const plString& GetPermutationVarSubDirectory() { return s_sPermVarSubDir; }
14 static const plString& GetActivePlatform() { return s_sPlatform; }
15 static const plString& GetCacheDirectory() { return s_sShaderCacheDirectory; }
16 static bool IsRuntimeCompilationEnabled() { return s_bEnableRuntimeCompilation; }
17
18 static void ReloadPermutationVarConfig(const char* szName, const plTempHashedString& sHashedName);
19 static bool IsPermutationValueAllowed(const char* szName, const plTempHashedString& sHashedName, const plTempHashedString& sValue,
20 plHashedString& out_sName, plHashedString& out_sValue);
21 static bool IsPermutationValueAllowed(const plHashedString& sName, const plHashedString& sValue);
22
25 static plArrayPtr<const plShaderParser::EnumValue> GetPermutationEnumValues(const plHashedString& sName);
26
29 static void GetPermutationValues(const plHashedString& sName, plDynamicArray<plHashedString>& out_values);
30
31 static void PreloadPermutations(
32 plShaderResourceHandle hShader, const plHashTable<plHashedString, plHashedString>& permVars, plTime shouldBeAvailableIn);
33 static plShaderPermutationResourceHandle PreloadSinglePermutation(
34 plShaderResourceHandle hShader, const plHashTable<plHashedString, plHashedString>& permVars, bool bAllowFallback);
35
36private:
37 static plUInt32 FilterPermutationVars(plArrayPtr<const plHashedString> usedVars, const plHashTable<plHashedString, plHashedString>& permVars,
38 plDynamicArray<plPermutationVar>& out_FilteredPermutationVariables);
39 static plShaderPermutationResourceHandle PreloadSinglePermutationInternal(
40 const char* szResourceId, plUInt64 uiResourceIdHash, plUInt32 uiPermutationHash, plArrayPtr<plPermutationVar> filteredPermutationVariables);
41
42 static bool s_bEnableRuntimeCompilation;
43 static plString s_sPlatform;
44 static plString s_sPermVarSubDir;
45 static plString s_sShaderCacheDirectory;
46};
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition DynamicArray.h:81
Definition HashTable.h:333
This class is optimized to take nearly no memory (sizeof(void*)) and to allow very fast checks whethe...
Definition HashedString.h:25
Definition ShaderManager.h:9
A class to use together with plHashedString for quick comparisons with temporary strings that need no...
Definition HashedString.h:151
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12