| @@ -50,7 +50,7 @@ type | |||||
| protected | protected | ||||
| procedure LogMsgIntern(const aSender: TengShaderPart; const aLogLevel: TengShaderPartLogLevel; const aMsg: String); override; | procedure LogMsgIntern(const aSender: TengShaderPart; const aLogLevel: TengShaderPartLogLevel; const aMsg: String); override; | ||||
| public | public | ||||
| property Generator [const aName: String]: TengShaderGenerator read GetGenerator; | |||||
| property Generator [const aName: String]: TengShaderGenerator read GetGenerator; | |||||
| property GeneratorNames[const aIndex: Integer]: String read GetGeneratorNames; | property GeneratorNames[const aIndex: Integer]: String read GetGeneratorNames; | ||||
| property GeneratorCount: Integer read GetGeneratorCount; | property GeneratorCount: Integer read GetGeneratorCount; | ||||
| property OnLog: TengShaderFileLogEvent read fOnLog write fOnLog; | property OnLog: TengShaderFileLogEvent read fOnLog write fOnLog; | ||||
| @@ -239,8 +239,10 @@ begin | |||||
| ms := TMemoryStream.Create; | ms := TMemoryStream.Create; | ||||
| walker := TengSearchWalker.Create(sr); | walker := TengSearchWalker.Create(sr); | ||||
| try | try | ||||
| walker.SearchFlags := [sfSearchChildren]; | |||||
| walker.ResultTypes := CengShaderPartArr.Create(TengShaderPartInclude); | |||||
| walker.SearchFlags := [sfSearchChildren]; | |||||
| walker.ChildrenDoNotLeave := CengShaderPartArr.Create(TengShaderFile); | |||||
| walker.ResultTypes := CengShaderPartArr.Create(TengShaderPartInclude); | |||||
| walker.Run(self); | |||||
| for i := 0 to sr.Count-1 do | for i := 0 to sr.Count-1 do | ||||
| (sr[i] as TengShaderPartInclude).SaveToFile(aFilename, aFileWriter); | (sr[i] as TengShaderPartInclude).SaveToFile(aFilename, aFileWriter); | ||||
| sl.Text := Text; | sl.Text := Text; | ||||
| @@ -222,6 +222,7 @@ implementation | |||||
| uses | uses | ||||
| uengShaderPart; | uengShaderPart; | ||||
| {$IFNDEF SHADER_FILE_USE_BITSPACE_UTILS} | |||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| //TIntfObjNoRefCount////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //TIntfObjNoRefCount////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| @@ -274,6 +275,7 @@ begin | |||||
| FreeAndNil(fs); | FreeAndNil(fs); | ||||
| end; | end; | ||||
| end; | end; | ||||
| {$ENDIF} | |||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| //TengMetaData////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //TengMetaData////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| @@ -35,6 +35,10 @@ type | |||||
| property PropertyNames [const aIndex: Integer]: String read GetPropertyNames; | property PropertyNames [const aIndex: Integer]: String read GetPropertyNames; | ||||
| property PropertyCount: Integer read GetPropertyCount; | property PropertyCount: Integer read GetPropertyCount; | ||||
| function TryGetProperty(const aName: String; out aValue: Variant): Boolean; | |||||
| function TrySetProperty(const aName: String; const aValue: Variant): Boolean; | |||||
| procedure ListProperties(const aPropertyNames: TStrings); | |||||
| { Generate Shader Code } | { Generate Shader Code } | ||||
| public | public | ||||
| procedure GenerateCode(const aCode: TengShaderCode); | procedure GenerateCode(const aCode: TengShaderCode); | ||||
| @@ -152,6 +156,38 @@ begin | |||||
| UpdateProperties; | UpdateProperties; | ||||
| end; | end; | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
| function TengShaderGenerator.TryGetProperty(const aName: String; out aValue: Variant): Boolean; | |||||
| var | |||||
| l: TengShaderPartPropertyList; | |||||
| begin | |||||
| l := fPropertyMap[aName]; | |||||
| result := Assigned(l); | |||||
| if result | |||||
| then aValue := l.Value | |||||
| else aValue := unassigned; | |||||
| end; | |||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
| function TengShaderGenerator.TrySetProperty(const aName: String; const aValue: Variant): Boolean; | |||||
| var | |||||
| l: TengShaderPartPropertyList; | |||||
| begin | |||||
| l := fPropertyMap[aName]; | |||||
| result := Assigned(l); | |||||
| if result then | |||||
| l.Value := aValue; | |||||
| end; | |||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
| procedure TengShaderGenerator.ListProperties(const aPropertyNames: TStrings); | |||||
| var | |||||
| s: String; | |||||
| begin | |||||
| for s in fPropertyMap.Keys do | |||||
| aPropertyNames.Add(s); | |||||
| end; | |||||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| procedure TengShaderGenerator.GenerateCode(const aCode: TengShaderCode); | procedure TengShaderGenerator.GenerateCode(const aCode: TengShaderCode); | ||||
| var | var | ||||
| @@ -185,17 +221,17 @@ begin | |||||
| args.PopFlags; | args.PopFlags; | ||||
| end; | end; | ||||
| end; | end; | ||||
| args.GenerateProcedureCode; | |||||
| args.GenerateParameterCode(CengShaderPartArr.Create(TengShaderPartVar)); | |||||
| args.GenerateParameterCode(CengShaderPartArr.Create(TengShaderPartVarying)); | |||||
| args.GenerateParameterCode(CengShaderPartArr.Create(TengShaderPartUniform)); | |||||
| finally | finally | ||||
| FreeAndNil(walker); | FreeAndNil(walker); | ||||
| FreeAndNil(sr); | FreeAndNil(sr); | ||||
| args.PopCode([pcfAppend, pcfAddEmptyLine]); | args.PopCode([pcfAppend, pcfAddEmptyLine]); | ||||
| end; | end; | ||||
| args.GenerateProcedureCode; | |||||
| args.GenerateParameterCode(CengShaderPartArr.Create(TengShaderPartVar)); | |||||
| args.GenerateParameterCode(CengShaderPartArr.Create(TengShaderPartVarying)); | |||||
| args.GenerateParameterCode(CengShaderPartArr.Create(TengShaderPartUniform)); | |||||
| args.PushCode; | args.PushCode; | ||||
| try | try | ||||
| args.GenerateMetaCode; | args.GenerateMetaCode; | ||||
| @@ -106,7 +106,8 @@ end; | |||||
| procedure TengShaderPartInclude.SaveToFile(const aFilename: String; const aFileWriter: IengShaderFileWriter); | procedure TengShaderPartInclude.SaveToFile(const aFilename: String; const aFileWriter: IengShaderFileWriter); | ||||
| begin | begin | ||||
| LoadShaderFile; | LoadShaderFile; | ||||
| fIncludeFile := Format('%p_', [Pointer(fShaderFile)]) + ExtractFileName(fIncludeFile); | |||||
| if (Pos('SFPF', ExtractFileName(fIncludeFile)) <> 1) then | |||||
| fIncludeFile := Format('SFPF%p_', [Pointer(fShaderFile)]) + ExtractFileName(fIncludeFile); | |||||
| fAbsoluteFile := ExtractFilePath(aFilename) + fIncludeFile; | fAbsoluteFile := ExtractFilePath(aFilename) + fIncludeFile; | ||||
| fShaderFile.SaveToFile(fAbsoluteFile, aFileWriter); | fShaderFile.SaveToFile(fAbsoluteFile, aFileWriter); | ||||
| end; | end; | ||||
| @@ -10,7 +10,7 @@ uses | |||||
| uengShaderPart, uengShaderPartScope, uengShaderFileParser, uengShaderGeneratorArgs | uengShaderPart, uengShaderPartScope, uengShaderFileParser, uengShaderGeneratorArgs | ||||
| {$IFDEF SHADER_FILE_USE_BITSPACE_UTILS} | {$IFDEF SHADER_FILE_USE_BITSPACE_UTILS} | ||||
| , uutlGenerics; | |||||
| , uutlGenerics | |||||
| {$ELSE} | {$ELSE} | ||||
| , uengShaderFileGenerics | , uengShaderFileGenerics | ||||
| {$ENDIF} | {$ENDIF} | ||||