diff --git a/tests/ShaderFileTests.lpi b/tests/ShaderFileTests.lpi
index fe255b1..e65a094 100644
--- a/tests/ShaderFileTests.lpi
+++ b/tests/ShaderFileTests.lpi
@@ -56,14 +56,17 @@
+
+
+
diff --git a/tests/testfiles/code_Class_Simple.shdr b/tests/testfiles/code_Class_Simple.shdr
new file mode 100644
index 0000000..c2a84c2
--- /dev/null
+++ b/tests/testfiles/code_Class_Simple.shdr
@@ -0,0 +1,18 @@
+// some other code here
+int test = 0;
+
+{$CLASS SimpleClass}
+ {$UNIFORM 'sampler2D' 'uTexture0'}
+ {$UNIFORM 'sampler2D' 'uTexture1'}
+ {$UNIFORM 'vec4' 'uColor'}
+
+ {$MAIN}
+ gl_FragColor =
+ texture2D(uTexture0, texCoord) *
+ texture2D(uTexture1, texCoord) *
+ uColor;
+ {$END}
+{$END}
+
+// and some more code here
+int fuu = 1;
\ No newline at end of file
diff --git a/tests/testfiles/code_InlineFuncMultiReturn.shdr b/tests/testfiles/code_Func_InlineMultiReturn.shdr
similarity index 100%
rename from tests/testfiles/code_InlineFuncMultiReturn.shdr
rename to tests/testfiles/code_Func_InlineMultiReturn.shdr
diff --git a/tests/testfiles/code_InlineFuncSingleReturn.shdr b/tests/testfiles/code_Func_InlineSingleReturn.shdr
similarity index 100%
rename from tests/testfiles/code_InlineFuncSingleReturn.shdr
rename to tests/testfiles/code_Func_InlineSingleReturn.shdr
diff --git a/tests/testfiles/code_SimpleFunc.shdr b/tests/testfiles/code_Func_Simple.shdr
similarity index 100%
rename from tests/testfiles/code_SimpleFunc.shdr
rename to tests/testfiles/code_Func_Simple.shdr
diff --git a/tests/testfiles/code_InlineIf.shdr b/tests/testfiles/code_IfElifElseEnd_Inline.shdr
similarity index 100%
rename from tests/testfiles/code_InlineIf.shdr
rename to tests/testfiles/code_IfElifElseEnd_Inline.shdr
diff --git a/tests/testfiles/code_IfElseElifEnd.shdr b/tests/testfiles/code_IfElifElseEnd_Simple.shdr
similarity index 100%
rename from tests/testfiles/code_IfElseElifEnd.shdr
rename to tests/testfiles/code_IfElifElseEnd_Simple.shdr
diff --git a/tests/testfiles/code_SimpleInclude.shdr b/tests/testfiles/code_Include_Simple.shdr
similarity index 61%
rename from tests/testfiles/code_SimpleInclude.shdr
rename to tests/testfiles/code_Include_Simple.shdr
index 109f5f1..5251a6d 100644
--- a/tests/testfiles/code_SimpleInclude.shdr
+++ b/tests/testfiles/code_Include_Simple.shdr
@@ -1,4 +1,4 @@
-{$INCLUDE './code_SimpleInclude_include.shdr'}
+{$INCLUDE './code_Include_Simple_include.shdr'}
uniform vec4 uColor;
diff --git a/tests/testfiles/code_SimpleInclude_include.shdr b/tests/testfiles/code_Include_Simple_include.shdr
similarity index 100%
rename from tests/testfiles/code_SimpleInclude_include.shdr
rename to tests/testfiles/code_Include_Simple_include.shdr
diff --git a/tests/testfiles/code_SimpleMain.shdr b/tests/testfiles/code_Main_Simple.shdr
similarity index 100%
rename from tests/testfiles/code_SimpleMain.shdr
rename to tests/testfiles/code_Main_Simple.shdr
diff --git a/tests/testfiles/code_InlineProc.shdr b/tests/testfiles/code_Proc_Inline.shdr
similarity index 100%
rename from tests/testfiles/code_InlineProc.shdr
rename to tests/testfiles/code_Proc_Inline.shdr
diff --git a/tests/testfiles/result_SimpleMain.shdr b/tests/testfiles/result_Class_Simple.shdr
similarity index 100%
rename from tests/testfiles/result_SimpleMain.shdr
rename to tests/testfiles/result_Class_Simple.shdr
diff --git a/tests/testfiles/result_InlineFuncMultiReturn.shdr b/tests/testfiles/result_Func_InlineMultiReturn.shdr
similarity index 100%
rename from tests/testfiles/result_InlineFuncMultiReturn.shdr
rename to tests/testfiles/result_Func_InlineMultiReturn.shdr
diff --git a/tests/testfiles/result_InlineFuncSingleReturn.shdr b/tests/testfiles/result_Func_InlineSingleReturn.shdr
similarity index 100%
rename from tests/testfiles/result_InlineFuncSingleReturn.shdr
rename to tests/testfiles/result_Func_InlineSingleReturn.shdr
diff --git a/tests/testfiles/result_SimpleFunc_0.shdr b/tests/testfiles/result_Func_Simple_0.shdr
similarity index 100%
rename from tests/testfiles/result_SimpleFunc_0.shdr
rename to tests/testfiles/result_Func_Simple_0.shdr
diff --git a/tests/testfiles/result_SimpleFunc_1.shdr b/tests/testfiles/result_Func_Simple_1.shdr
similarity index 100%
rename from tests/testfiles/result_SimpleFunc_1.shdr
rename to tests/testfiles/result_Func_Simple_1.shdr
diff --git a/tests/testfiles/result_InlineIf_0.shdr b/tests/testfiles/result_IfElifElseEnd_Inline_0.shdr
similarity index 100%
rename from tests/testfiles/result_InlineIf_0.shdr
rename to tests/testfiles/result_IfElifElseEnd_Inline_0.shdr
diff --git a/tests/testfiles/result_InlineIf_1.shdr b/tests/testfiles/result_IfElifElseEnd_Inline_1.shdr
similarity index 100%
rename from tests/testfiles/result_InlineIf_1.shdr
rename to tests/testfiles/result_IfElifElseEnd_Inline_1.shdr
diff --git a/tests/testfiles/result_IfElseElifEnd_0.shdr b/tests/testfiles/result_IfElifElseEnd_Simple_0.shdr
similarity index 100%
rename from tests/testfiles/result_IfElseElifEnd_0.shdr
rename to tests/testfiles/result_IfElifElseEnd_Simple_0.shdr
diff --git a/tests/testfiles/result_IfElseElifEnd_1.shdr b/tests/testfiles/result_IfElifElseEnd_Simple_1.shdr
similarity index 100%
rename from tests/testfiles/result_IfElseElifEnd_1.shdr
rename to tests/testfiles/result_IfElifElseEnd_Simple_1.shdr
diff --git a/tests/testfiles/result_IfElseElifEnd_2.shdr b/tests/testfiles/result_IfElifElseEnd_Simple_2.shdr
similarity index 100%
rename from tests/testfiles/result_IfElseElifEnd_2.shdr
rename to tests/testfiles/result_IfElifElseEnd_Simple_2.shdr
diff --git a/tests/testfiles/result_SimpleInclude.shdr b/tests/testfiles/result_Include_Simple.shdr
similarity index 100%
rename from tests/testfiles/result_SimpleInclude.shdr
rename to tests/testfiles/result_Include_Simple.shdr
diff --git a/tests/testfiles/result_Main_Simple.shdr b/tests/testfiles/result_Main_Simple.shdr
new file mode 100644
index 0000000..c9199ee
--- /dev/null
+++ b/tests/testfiles/result_Main_Simple.shdr
@@ -0,0 +1,11 @@
+uniform sampler2D uTexture0;
+uniform sampler2D uTexture1;
+uniform vec4 uColor;
+
+void main(void)
+{
+ gl_FragColor =
+ texture2D(uTexture0, texCoord) *
+ texture2D(uTexture1, texCoord) *
+ uColor;
+}
\ No newline at end of file
diff --git a/tests/testfiles/result_InlineProc.shdr b/tests/testfiles/result_Proc_Inline.shdr
similarity index 100%
rename from tests/testfiles/result_InlineProc.shdr
rename to tests/testfiles/result_Proc_Inline.shdr
diff --git a/tests/uShaderFileTestCase.pas b/tests/uShaderFileTestCase.pas
index 33ea2ca..f25adb6 100644
--- a/tests/uShaderFileTestCase.pas
+++ b/tests/uShaderFileTestCase.pas
@@ -11,61 +11,86 @@ uses
type
TShaderFileTestCase = class(TTestCase)
protected
- procedure DoTest(const aCode: String; const aValue: Integer; const aResult: String);
- procedure DoTest(const aCode: String; const aResult: String);
+ procedure DoTest(const aCode, aClass, aResult: String; const aArgs: array of const);
+ procedure DoTest(const aCode, aClass, aResult: String);
+ procedure DoTest(const aCode, aResult: String; const aArgs: array of const);
+ procedure DoTest(const aCode, aResult: String);
end;
- TTestCase_IfElseElifEnd = class(TShaderFileTestCase)
+ TTestCase_IfElifElseEnd = class(TShaderFileTestCase)
published
- procedure IfElifElseEnd0;
- procedure IfElifElseEnd1;
- procedure IfElifElseEnd2;
+ procedure Simple_0;
+ procedure Simple_1;
+ procedure Simple_2;
- procedure InlineIf0;
- procedure InlineIf1;
+ procedure Inline_0;
+ procedure Inline_1;
end;
TTestCase_FuncProcMain = class(TShaderFileTestCase)
published
- procedure SimpleMain;
+ procedure Main_Simple;
- procedure SimpleFunc0;
- procedure SimpleFunc1;
+ procedure Func_Simple_0;
+ procedure Func_Simple_1;
- procedure InlineProc;
+ procedure Proc_Inline;
- procedure InlineFuncSingleReturn;
- procedure InlineFuncMultiReturn;
+ procedure Func_InlineSingleReturn;
+ procedure Func_InlineMultiReturn;
end;
TTestCase_Include = class(TShaderFileTestCase)
published
- procedure SimpleInclude;
+ procedure Include_Simple;
+ end;
+
+ TTestCase_Class = class(TShaderFileTestCase)
+ published
+ procedure Simple;
end;
implementation
uses
- Forms;
+ Forms, variants;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TShaderFileTestCase///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-procedure TShaderFileTestCase.DoTest(const aCode: String; const aValue: Integer; const aResult: String);
+procedure TShaderFileTestCase.DoTest(const aCode, aClass, aResult: String; const aArgs: array of const);
var
shdr: TengShaderFile;
gen: TengShaderGenerator;
code: TengShaderCode;
sl: TStringList;
+ i: Integer;
+ s: String;
begin
shdr := TengShaderFile.Create;
code := TengShaderCode.Create;
sl := TStringList.Create;
try
shdr.LoadFromFile(ExpandFileName('testfiles\' + aCode));
- gen := shdr.Generator[''];
- if (gen.PropertyCount > 0) then
- gen.PropertyByIndex[0] := aValue;
+ gen := shdr.Generator[aClass];
+ for i := 0 to High(aArgs) do begin
+ case aArgs[i].VType of
+ vtAnsiString: s := AnsiString(aArgs[i].VAnsiString);
+ vtString: s := String(aArgs[i].VString);
+ vtWideString: s := string(WideString(aArgs[i].VWideString));
+ vtUnicodeString: s := string(UnicodeString(aArgs[i].VUnicodeString));
+
+ vtInteger: gen.PropertyByName[s] := aArgs[i].VInteger;
+ vtBoolean: gen.PropertyByName[s] := aArgs[i].VBoolean;
+ vtExtended: gen.PropertyByName[s] := aArgs[i].VExtended^;
+ vtCurrency: gen.PropertyByName[s] := aArgs[i].VCurrency^;
+ vtVariant: gen.PropertyByName[s] := aArgs[i].VVariant^;
+ vtInt64: gen.PropertyByName[s] := aArgs[i].VInt64^;
+ vtQWord: gen.PropertyByName[s] := aArgs[i].VQWord^;
+ else
+ raise Exception.Create('invalid variadic type');
+ end;
+ end;
gen.GenerateCode(code);
sl.LoadFromFile(ExpandFileName('testfiles\' + aResult));
AssertEquals(sl.Text, code.Text);
@@ -76,85 +101,104 @@ begin
end;
end;
-procedure TShaderFileTestCase.DoTest(const aCode: String; const aResult: String);
+procedure TShaderFileTestCase.DoTest(const aCode, aClass, aResult: String);
+begin
+ DoTest(aCode, aClass, aResult, []);
+end;
+
+procedure TShaderFileTestCase.DoTest(const aCode, aResult: String; const aArgs: array of const);
+begin
+ DoTest(aCode, '', aResult, aArgs);
+end;
+
+procedure TShaderFileTestCase.DoTest(const aCode, aResult: String);
begin
- DoTest(aCode, 0, aResult);
+ DoTest(aCode, '', aResult, []);
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//TTestCase_IfElseElifEnd///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//TTestCase_IfElifElseEnd///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-procedure TTestCase_IfElseElifEnd.IfElifElseEnd0;
+procedure TTestCase_IfElifElseEnd.Simple_0;
begin
- DoTest('code_IfElseElifEnd.shdr', 0, 'result_IfElseElifEnd_0.shdr');
+ DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_0.shdr', ['TestProp', 0]);
end;
-procedure TTestCase_IfElseElifEnd.IfElifElseEnd1;
+procedure TTestCase_IfElifElseEnd.Simple_1;
begin
- DoTest('code_IfElseElifEnd.shdr', 1, 'result_IfElseElifEnd_1.shdr');
+ DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_1.shdr', ['TestProp', 1]);
end;
-procedure TTestCase_IfElseElifEnd.IfElifElseEnd2;
+procedure TTestCase_IfElifElseEnd.Simple_2;
begin
- DoTest('code_IfElseElifEnd.shdr', 2, 'result_IfElseElifEnd_2.shdr');
+ DoTest('code_IfElifElseEnd_Simple.shdr', 'result_IfElifElseEnd_Simple_2.shdr', ['TestProp', 2]);
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-procedure TTestCase_IfElseElifEnd.InlineIf0;
+procedure TTestCase_IfElifElseEnd.Inline_0;
begin
- DoTest('code_InlineIf.shdr', 0, 'result_InlineIf_0.shdr');
+ DoTest('code_IfElifElseEnd_Inline.shdr', 'result_IfElifElseEnd_Inline_0.shdr', ['TestProp', 0]);
end;
-procedure TTestCase_IfElseElifEnd.InlineIf1;
+procedure TTestCase_IfElifElseEnd.Inline_1;
begin
- DoTest('code_InlineIf.shdr', 1, 'result_InlineIf_1.shdr');
+ DoTest('code_IfElifElseEnd_Inline.shdr', 'result_IfElifElseEnd_Inline_1.shdr', ['TestProp', 1]);
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TTestCase_MainSimple//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-procedure TTestCase_FuncProcMain.SimpleMain;
+procedure TTestCase_FuncProcMain.Main_Simple;
begin
- DoTest('code_SimpleMain.shdr', 'result_SimpleMain.shdr');
+ DoTest('code_Main_Simple.shdr', 'result_Main_Simple.shdr');
end;
-procedure TTestCase_FuncProcMain.SimpleFunc0;
+procedure TTestCase_FuncProcMain.Func_Simple_0;
begin
- DoTest('code_SimpleFunc.shdr', 0, 'result_SimpleFunc_0.shdr');
+ DoTest('code_Func_Simple.shdr', 'result_Func_Simple_0.shdr', ['TestProperty', 0]);
end;
-procedure TTestCase_FuncProcMain.SimpleFunc1;
+procedure TTestCase_FuncProcMain.Func_Simple_1;
begin
- DoTest('code_SimpleFunc.shdr', 1, 'result_SimpleFunc_1.shdr');
+ DoTest('code_Func_Simple.shdr', 'result_Func_Simple_1.shdr', ['TestProperty', 1]);
end;
-procedure TTestCase_FuncProcMain.InlineProc;
+procedure TTestCase_FuncProcMain.Proc_Inline;
begin
- DoTest('code_InlineProc.shdr', 'result_InlineProc.shdr');
+ DoTest('code_Proc_Inline.shdr', 'result_Proc_Inline.shdr');
end;
-procedure TTestCase_FuncProcMain.InlineFuncSingleReturn;
+procedure TTestCase_FuncProcMain.Func_InlineSingleReturn;
begin
- DoTest('code_InlineFuncSingleReturn.shdr', 'result_InlineFuncSingleReturn.shdr');
+ DoTest('code_Func_InlineSingleReturn.shdr', 'result_Func_InlineSingleReturn.shdr');
end;
-procedure TTestCase_FuncProcMain.InlineFuncMultiReturn;
+procedure TTestCase_FuncProcMain.Func_InlineMultiReturn;
begin
- DoTest('code_InlineFuncMultiReturn.shdr', 'result_InlineFuncMultiReturn.shdr');
+ DoTest('code_Func_InlineMultiReturn.shdr', 'result_Func_InlineMultiReturn.shdr');
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TTestCase_Include/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-procedure TTestCase_Include.SimpleInclude;
+procedure TTestCase_Include.Include_Simple;
+begin
+ DoTest('code_Include_Simple.shdr', 'result_Include_Simple.shdr');
+end;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//TTestCase_Class///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+procedure TTestCase_Class.Simple;
begin
- DoTest('code_SimpleInclude.shdr', 0, 'result_SimpleInclude.shdr');
+ DoTest('code_Class_Simple.shdr', 'SimpleClass', 'result_Class_Simple.shdr');
end;
initialization
- RegisterTest(TTestCase_IfElseElifEnd);
+ RegisterTest(TTestCase_IfElifElseEnd);
RegisterTest(TTestCase_FuncProcMain);
RegisterTest(TTestCase_Include);
+ RegisterTest(TTestCase_Class);
end.
diff --git a/uengShaderFile.pas b/uengShaderFile.pas
index a68e35a..636373e 100644
--- a/uengShaderFile.pas
+++ b/uengShaderFile.pas
@@ -125,6 +125,7 @@ begin
try
walker.ResultTypes := CengShaderPartArr.Create(TengShaderPartClass);
walker.SearchFlags := [sfSearchChildren];
+ walker.Run(self);
fClasses.Clear;
for p in sr do
AddClass(p as TengShaderPartClass);
diff --git a/uengShaderGenerator.pas b/uengShaderGenerator.pas
index b86e07b..b796914 100644
--- a/uengShaderGenerator.pas
+++ b/uengShaderGenerator.pas
@@ -91,7 +91,7 @@ var
begin
l := fPropertyMap[aName];
if not Assigned(l) then
- EengUnknownIdentifier.Create(aName, self);
+ raise EengUnknownIdentifier.Create(aName, self);
l.Value := aValue;
end;