Areloch 8 rokov pred
rodič
commit
512c4515fc

+ 62 - 1
Engine/source/shaderGen/HLSL/customFeatureHLSL.cpp

@@ -206,8 +206,69 @@ void CustomFeatureHLSL::setTexData(Material::StageData &stageDat,
 		Con::executef(mOwner, "setTextureData");
 }
 
+void CustomFeatureHLSL::addVariable(String name, String type, String defaultValue)
+{
+	//do the var/arg fetching here
+	Var *newVar = (Var*)LangElement::find(name.c_str());
+	if (!newVar)
+	{
+		newVar = new Var(name, type);
+		LangElement *newVarDecl = new DecOp(newVar);
+
+		if (!defaultValue.isEmpty())
+		{
+			char declareStatement[128];
+			dSprintf(declareStatement, 128, "   @ = %s;\n", defaultValue.c_str());
+
+			meta->addStatement(new GenOp(declareStatement, newVarDecl));
+		}
+		else
+		{
+			meta->addStatement(new GenOp("   @;\n", newVarDecl));
+		}
+	}
+}
+
 void CustomFeatureHLSL::writeLine(String format, S32 argc, ConsoleValueRef *argv)
 {
 	//do the var/arg fetching here
-	meta->addStatement(new GenOp(format + "\n"/*, colorAccuDecl, accuMapTex, accuMap, inTex, accuScale*/));
+	Vector<Var*> varList;
+
+	for (U32 i = 0; i < argc; i++)
+	{
+		String varName = argv[i].getStringValue();
+		Var *newVar = (Var*)LangElement::find(varName.c_str());
+		if (!newVar)
+		{
+			//couldn't find that variable, bail out
+			Con::errorf("CustomShaderFeature::writeLine: unable to find variable %s, meaning it was not declared before being used!", argv[i].getStringValue());
+			return;
+		}
+
+		varList.push_back(newVar);
+	}
+
+	//not happy about it, but do a trampoline here to pass along the args
+
+	switch (varList.size())
+	{
+	case 0:
+		meta->addStatement(new GenOp(format + "\n"));
+		break;
+	case 1:
+		meta->addStatement(new GenOp(format + "\n", varList[0]));
+		break;
+	case 2:
+		meta->addStatement(new GenOp(format + "\n", varList[0], varList[1]));
+		break;
+	case 3:
+		meta->addStatement(new GenOp(format + "\n", varList[0], varList[1], varList[2]));
+		break;
+	case 4:
+		meta->addStatement(new GenOp(format + "\n", varList[0], varList[1], varList[2], varList[3]));
+		break;
+	case 5:
+		meta->addStatement(new GenOp(format + "\n", varList[0], varList[1], varList[2], varList[3], varList[4]));
+		break;
+	}
 }

+ 1 - 0
Engine/source/shaderGen/HLSL/customFeatureHLSL.h

@@ -64,5 +64,6 @@ public:
 		return mOwner->getName();
 	}
 
+	void addVariable(String name, String type, String defaultValue);
 	void writeLine(String format, S32 argc, ConsoleValueRef *argv);
 };

+ 9 - 5
Engine/source/shaderGen/customShaderFeature.cpp

@@ -84,6 +84,11 @@ void CustomShaderFeatureData::onRemove()
 }
 
 //Shadergen setup functions
+void CustomShaderFeatureData::addVariable(String name, String type, String defaultValue)
+{
+	mFeatureHLSL->addVariable(name, type, defaultValue);
+}
+
 void CustomShaderFeatureData::writeLine(String format, S32 argc, ConsoleValueRef *argv)
 {
 	/*mOnObject = onObject;
@@ -126,16 +131,15 @@ void CustomShaderFeatureData::setTexData(Material::StageData &stageDat,
 	mFeatureHLSL.setTexData(stageDat, fd, passData, texIndex);
 }*/
 
-/*DefineEngineMethod(CustomShaderFeatureData, newVar, void, (String name, String type), ("", ""),	"")
+DefineEngineMethod(CustomShaderFeatureData, addVariable, void, (String name, String type, String defaultValue), ("", "", ""),	"")
 {
-	object->newVar(name, type);
-}*/
+	object->addVariable(name, type, defaultValue);
+}
 
 ConsoleMethod(CustomShaderFeatureData, writeLine, void, 3, 0, "( string format, string args... ) Dynamically call a method on an object.\n"
 	"@param method Name of method to call.\n"
 	"@param args Zero or more arguments for the method.\n"
 	"@return The result of the method call.")
 {
-	argv[1] = argv[2];
-	object->writeLine(argv[1], argc - 1, argv + 1);
+	object->writeLine(argv[2], argc - 3, argv + 3);
 }

+ 1 - 0
Engine/source/shaderGen/customShaderFeature.h

@@ -58,6 +58,7 @@ public:
 	void onRemove();
 
 	//shadergen setup
+	void addVariable(String name, String type, String defaultValue);
 	void writeLine(String format, S32 argc, ConsoleValueRef *argv);
 
 	//shader generation