Просмотр исходного кода

Bugfix: Fixing an issue with shader variations where unnecessary number of techniques were created during shader import

BearishSun 8 лет назад
Родитель
Сommit
e3644b217c

BIN
Data/Engine/Shaders/Default.bsl.asset


BIN
Data/Engine/Shaders/Diffuse.bsl.asset


BIN
Data/Engine/Shaders/ShadowDepthCube.bsl.asset


BIN
Data/Engine/Shaders/ShadowDepthDirectional.bsl.asset


BIN
Data/Engine/Shaders/ShadowDepthNormal.bsl.asset


BIN
Data/Engine/Shaders/Transparent.bsl.asset


+ 9 - 5
Source/BansheeSL/BsSLFXCompiler.cpp

@@ -900,8 +900,8 @@ namespace bs
 							codeString = codeString->next;
 						}
 
-						output = parseTechniques(variationParseState, codeBlocks, variation, techniques, includes, 
-							shaderDesc);
+						output = parseTechnique(variationParseState, entry.second.name, codeBlocks, variation, techniques, 
+							includes, shaderDesc);
 
 						if(!output.errorMessage.empty())
 							return output;
@@ -1758,9 +1758,9 @@ namespace bs
 		}
 	}
 
-	BSLFXCompileResult BSLFXCompiler::parseTechniques(ParseState* parseState, const Vector<String>& codeBlocks, 
-		const ShaderVariation& variation, Vector<SPtr<Technique>>& techniques, UnorderedSet<String>& includes, 
-		SHADER_DESC& shaderDesc)
+	BSLFXCompileResult BSLFXCompiler::parseTechnique(ParseState* parseState, const String& name, 
+		const Vector<String>& codeBlocks, const ShaderVariation& variation, Vector<SPtr<Technique>>& techniques, 
+		UnorderedSet<String>& includes, SHADER_DESC& shaderDesc)
 	{
 		BSLFXCompileResult output;
 
@@ -1786,6 +1786,10 @@ namespace bs
 				// We initially parse only meta-data, so we can handle out-of-order technique definitions
 				TechniqueMetaData metaData = parseTechniqueMetaData(option->value.nodePtr);
 
+				// Skip all techniques except the one we're parsing
+				if(metaData.name != name && !metaData.isMixin)
+					continue;
+
 				techniqueData.push_back(std::make_pair(option->value.nodePtr, TechniqueData()));
 				TechniqueData& data = techniqueData.back().second;
 				data.metaData = metaData;

+ 5 - 4
Source/BansheeSL/BsSLFXCompiler.h

@@ -214,10 +214,11 @@ namespace bs
 		static void parseOptions(ASTFXNode* optionsNode, SHADER_DESC& shaderDesc);
 
 		/**
-		 * Parses the AST node hierarchy and generates a list of techniques.
+		 * Parses the AST node hierarchy and generates a variation of the of the named technique.
 		 *
 		 * @param[in, out]	parseState	Parser state object that has previously been initialized with the AST using 
 		 *								parseFX().
+		 * @param[in]	name			Name of the technique to generate the variation for.
 		 * @param[in]	codeBlocks		Blocks containing GPU program source code that are referenced by the AST.
 		 * @param[in]	variation		Shader variation the AST was parsed with.
 		 * @param[out]	techniques		Vector to append newly found techniques to.
@@ -225,9 +226,9 @@ namespace bs
 		 * @param[out]	shaderDesc		Shader descriptor too append new parameters to.
 		 * @return						A result object containing an error message if not successful.
 		 */
-		static BSLFXCompileResult parseTechniques(ParseState* parseState, const Vector<String>& codeBlocks, 
-			const ShaderVariation& variation, Vector<SPtr<Technique>>& techniques, UnorderedSet<String>& includes, 
-			SHADER_DESC& shaderDesc);
+		static BSLFXCompileResult parseTechnique(ParseState* parseState, const String& name, 
+			const Vector<String>& codeBlocks, const ShaderVariation& variation, Vector<SPtr<Technique>>& techniques, 
+			UnorderedSet<String>& includes, SHADER_DESC& shaderDesc);
 
 		/**
 		 * Converts a null-terminated string into a standard string, and eliminates quotes that are assumed to be at the