|
- unit uengShaderPartParameter;
-
- {$mode objfpc}{$H+}
- {$I uengShaderFile.inc}
-
- interface
-
- uses
- Classes, SysUtils,
- uengShaderPart, uengShaderFileParser;
-
- type
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartParameter = class(TengShaderPart)
- { Code Loading & Storage }
- private
- fName: String;
- fType: String;
- protected
- function GetText: String; override;
- function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
-
- { General }
- public
- property Name: String read fName;
- property Typ: String read fType;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartVar = class(TengShaderPartParameter)
- { Code Loading & Storage }
- private
- fDefaultValue: String;
- protected
- function GetText: String; override;
- function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
-
- { General }
- public
- property DefaultValue: String read fDefaultValue;
-
- { Class Methods }
- public
- class function GetTokenName: String; override;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartVarying = class(TengShaderPartParameter)
- { Class Methods }
- public
- class function GetTokenName: String; override;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartUniform = class(TengShaderPartParameter)
- { Class Methods }
- public
- class function GetTokenName: String; override;
- end;
-
- implementation
-
- uses
- uengShaderFileConstants, uengShaderFileTypes;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartParameter.GetText: String;
- begin
- result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
- TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
- TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE +
- TOKEN_CHAR_END;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartParameter.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
- begin
- if (aParams[0].Name <> GetTokenName) then with aParams[0] do
- raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename);
- if (aParams.Count <> 3) then
- raise EengInvalidParamterCount.Create(GetTokenName, 3, Line, Col, Filename);
-
- result := '';
- fType := aParams[1].Name;
- fName := aParams[2].Name;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartVar/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartVar.GetText: String;
- begin
- result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
- TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
- TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE;
- if (fDefaultValue <> '') then
- result := result + ' ' + TOKEN_CHAR_QUOTE + fDefaultValue + TOKEN_CHAR_QUOTE;
- result := result + TOKEN_CHAR_END;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartVar.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
- begin
- if (aParams[0].Name <> GetTokenName) then with aParams[0] do
- raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename);
- if (aParams.Count < 3) or (aParams.Count > 4) then
- raise EengInvalidParamterCount.Create(GetTokenName, 3, 4, Line, Col, Filename);
-
- result := '';
- fType := aParams[1].Name;
- fName := aParams[2].Name;
- if (aParams.Count >= 4) then
- fDefaultValue := aParams[3].Name
- else
- fDefaultValue := '';
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- class function TengShaderPartVar.GetTokenName: String;
- begin
- result := TOKEN_VAR;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartVarying/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- class function TengShaderPartVarying.GetTokenName: String;
- begin
- result := TOKEN_VARYING;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartUniform/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- class function TengShaderPartUniform.GetTokenName: String;
- begin
- result := TOKEN_UNIFORM;
- end;
-
- end.
|