MCPcopy Create free account
hub / github.com/NazaraEngine/NazaraEngine / Get

Method Get

src/Nazara/Renderer/UberShaderPreprocessor.cpp:20–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18 }
19
20 UberShaderInstance* UberShaderPreprocessor::Get(const ParameterList& parameters) const
21 {
22 // Première étape, transformer les paramètres en un flag
23 UInt32 flags = 0;
24 for (auto it = m_flags.begin(); it != m_flags.end(); ++it)
25 {
26 if (parameters.HasParameter(it->first))
27 {
28 bool value;
29 if (parameters.GetBooleanParameter(it->first, &value) && value)
30 flags |= it->second;
31 }
32 }
33
34 // Le shader fait-il partie du cache ?
35 auto shaderIt = m_cache.find(flags);
36
37 // Si non, il nous faut le construire
38 if (shaderIt == m_cache.end())
39 {
40 try
41 {
42 // Une exception sera lancée à la moindre erreur et celle-ci ne sera pas enregistrée dans le log (car traitée dans le bloc catch)
43 ErrorFlags errFlags(ErrorFlag_Silent | ErrorFlag_ThrowException, true);
44
45 ShaderRef shader = Shader::New();
46 shader->Create();
47
48 for (unsigned int i = 0; i <= ShaderStageType_Max; ++i)
49 {
50 const CachedShader& shaderStage = m_shaders[i];
51
52 // Le shader stage est-il activé dans cette version du shader ?
53 if (shaderStage.present && (flags & shaderStage.requiredFlags) == shaderStage.requiredFlags)
54 {
55 UInt32 stageFlags = 0;
56 for (auto it = shaderStage.flags.begin(); it != shaderStage.flags.end(); ++it)
57 {
58 if (parameters.HasParameter(it->first))
59 {
60 bool value;
61 if (parameters.GetBooleanParameter(it->first, &value) && value)
62 stageFlags |= it->second;
63 }
64 }
65
66 auto stageIt = shaderStage.cache.find(stageFlags);
67 if (stageIt == shaderStage.cache.end())
68 {
69 ShaderStage stage;
70 stage.Create(static_cast<ShaderStageType>(i));
71
72 unsigned int glslVersion = OpenGL::GetGLSLVersion();
73
74 StringStream code;
75 code << "#version " << glslVersion << "\n\n";
76
77 code << "#define GLSL_VERSION " << glslVersion << "\n\n";

Callers

nothing calls this directly

Calls 12

HasParameterMethod · 0.80
GetBooleanParameterMethod · 0.80
SetSourceMethod · 0.80
CompileMethod · 0.80
AttachStageMethod · 0.80
LinkMethod · 0.80
IsSupportedFunction · 0.50
beginMethod · 0.45
endMethod · 0.45
CreateMethod · 0.45
GetLogMethod · 0.45
ToStringMethod · 0.45

Tested by

no test coverage detected