|
- unit uengShaderPartInclude;
-
- {$mode objfpc}{$H+}
- {$I uengShaderFile.inc}
-
- interface
-
- uses
- Classes, SysUtils,
- uengShaderPart, uengShaderFile, uengShaderFileParser;
-
- type
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartInclude = class(TengShaderPart)
- { Code Loading & Storage }
- private
- fShaderFile: TengShaderFile;
- fIncludeFile: String;
- fAbsoluteFile: String;
- protected
- function GetCount: Integer; override;
- function GetChild(const aIndex: Integer): TengShaderPart; override;
- function GetText: String; override;
- function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
-
- { General }
- public
- property IncludeFile: String read fIncludeFile;
- constructor Create(const aParent: TengShaderPart); override;
- destructor Destroy; override;
-
- { Class Methods }
- public
- class function GetTokenName: String; override;
- end;
-
- implementation
-
- uses
- FileUtil,
- uengShaderFileTypes, uengShaderFileConstants;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartInclude/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartInclude.GetCount: Integer;
- begin
- if Assigned(fShaderFile)
- then result := 1
- else result := 0;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartInclude.GetChild(const aIndex: Integer): TengShaderPart;
- begin
- if Assigned(fShaderFile) and (aIndex = 0)
- then result := fShaderFile
- else raise EengOutOfRange.Create(0, Count-1, aIndex, Line, Col, Filename);
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartInclude.GetText: String;
- begin
- result := TOKEN_CHAR_BEGIN + GetTokenName + ' ''' + fIncludeFile + '''' + TOKEN_CHAR_END;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartInclude.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 <> 2) then
- raise EengInvalidParamterCount.Create(GetTokenName, 2, Line, Col, Filename);
- fIncludeFile := aParams[1].Name;
- fAbsoluteFile := CreateAbsolutePath(fIncludeFile, ExtractFilePath(Filename));
- result := '';
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- constructor TengShaderPartInclude.Create(const aParent: TengShaderPart);
- begin
- inherited Create(aParent);
- fShaderFile := nil;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- destructor TengShaderPartInclude.Destroy;
- begin
- FreeAndNil(fShaderFile);
- inherited Destroy;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- class function TengShaderPartInclude.GetTokenName: String;
- begin
- result := TOKEN_INCLUDE;
- end;
-
- end.
|