program example; uses sysutils, variants, Classes, ulibShaderFile; const {$IF DEFINED(WIN32)} LibName = '..\..\..\libShaderFile-i386-win32.dll'; {$ELSEIF DEFINED(WIN64)} LibName = '..\..\..\libShaderFile-x86_64-win64.dll'; {$ELSEIF DEFINED(LINUX) AND DEFINED(CPU32)} LibName = '../../../libShaderFile-i386-linux.so'; {$ELSEIF DEFINED(LINUX) AND DEFINED(CPU64)} LibName = '../../../libShaderFile-x86_64-linux.so'; {$ELSE} {$ERROR 'unknown operation system'} {$IFEND} type TFileReader = class(TInterfacedObject, IlsfFileReader) public function LoadStream(const aFilename: String; const aStream: TStream): Boolean; end; var i: Integer; s: String; ShaderFile: TlsfShaderFile; Generator: TlsfGenerator; function TFileReader.LoadStream(const aFilename: String; const aStream: TStream): Boolean; var fs: TFileStream; begin fs := TFileStream.Create(aFilename, fmOpenRead); try aStream.CopyFrom(fs, fs.Size - fs.Position); result := true; finally FreeAndNil(fs); end; end; begin lsf_init(ExtractFilePath(ParamStr(0)) + LibName); try if (ParamCount < 2) then begin WriteLn('error: expected input file and generator/class name as parameter'); ExitCode := 1; exit; end; ShaderFile := TlsfShaderFile.Create; try ShaderFile.LoadFromFunc(ParamStr(1), TFileReader.Create); Generator := TlsfGenerator.Create(ShaderFile, ParamStr(2)); try i := 3; while (i < ParamCount) do begin s := ParamStr(i+1); Generator.SetProperty(ParamStr(i), s); inc(i, 2); end; WriteLn(Generator.GenerateCode); finally FreeAndNil(Generator); end; finally FreeAndNil(ShaderFile); end; except on e: Exception do begin WriteLn('error: ' + e.Message); ExitCode := 2; end; end; lsf_finish; end.