| 123 | } |
| 124 | |
| 125 | void UberShaderPreprocessor::SetShader(ShaderStageType stage, const String& source, const String& shaderFlags, const String& requiredFlags) |
| 126 | { |
| 127 | CachedShader& shader = m_shaders[stage]; |
| 128 | shader.present = true; |
| 129 | shader.source = source; |
| 130 | |
| 131 | // On extrait les flags de la chaîne |
| 132 | std::vector<String> flags; |
| 133 | shaderFlags.Split(flags, ' '); |
| 134 | |
| 135 | for (String& flag : flags) |
| 136 | { |
| 137 | auto it = m_flags.find(flag); |
| 138 | if (it == m_flags.end()) |
| 139 | m_flags[flag] = 1U << m_flags.size(); |
| 140 | |
| 141 | auto it2 = shader.flags.find(flag); |
| 142 | if (it2 == shader.flags.end()) |
| 143 | shader.flags[flag] = 1U << shader.flags.size(); |
| 144 | } |
| 145 | |
| 146 | // On construit les flags requis pour l'activation du shader |
| 147 | shader.requiredFlags = 0; |
| 148 | |
| 149 | flags.clear(); |
| 150 | requiredFlags.Split(flags, ' '); |
| 151 | |
| 152 | for (String& flag : flags) |
| 153 | { |
| 154 | UInt32 flagVal; |
| 155 | |
| 156 | auto it = m_flags.find(flag); |
| 157 | if (it == m_flags.end()) |
| 158 | { |
| 159 | flagVal = 1U << m_flags.size(); |
| 160 | m_flags[flag] = flagVal; |
| 161 | } |
| 162 | else |
| 163 | flagVal = it->second; |
| 164 | |
| 165 | shader.requiredFlags |= flagVal; |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | bool UberShaderPreprocessor::SetShaderFromFile(ShaderStageType stage, const String& filePath, const String& shaderFlags, const String& requiredFlags) |
| 170 | { |