You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.3 KiB

  1. unit uengShaderCodePart;
  2. {$mode objfpc}{$H+}
  3. {$I uengShaderFile.inc}
  4. interface
  5. uses
  6. Classes, SysUtils,
  7. uengShaderPart, uengShaderFileParser, uengShaderGeneratorArgs
  8. {$IFDEF SHADER_FILE_USE_BITSPACE_UTILS}
  9. , uutlGenerics
  10. {$ELSE}
  11. , uengShaderFileGenerics
  12. {$ENDIF}
  13. ;
  14. type
  15. TengShaderCodePart = class(TengShaderPart)
  16. { Code Loading & Storage }
  17. protected
  18. function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; virtual;
  19. public
  20. function ParseText(const aArgs: TengParseArgs): String;
  21. { Code Generation }
  22. public
  23. procedure GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs); virtual;
  24. end;
  25. CengShaderCodePart = class of TengShaderCodePart;
  26. TengShaderCodePartList = specialize TutlSimpleList<TengShaderCodePart>;
  27. implementation
  28. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. //TengShaderCodePart////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  31. function TengShaderCodePart.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  32. begin
  33. result := ''; // DUMMY
  34. end;
  35. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  36. function TengShaderCodePart.ParseText(const aArgs: TengParseArgs): String;
  37. var
  38. params: TengTokenParameterList;
  39. begin
  40. params := TengTokenParameterList.Create(Filename);
  41. try
  42. fCol := aArgs.Col;
  43. fLine := aArgs.Line;
  44. if (GetTokenName <> '') then
  45. aArgs.ExtractToken(self, params);
  46. result := ParseIntern(aArgs, params);
  47. finally
  48. FreeAndNil(params);
  49. end;
  50. end;
  51. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  52. procedure TengShaderCodePart.GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs);
  53. var
  54. s: String;
  55. begin
  56. s := GetTokenName;
  57. if (s <> '') then
  58. aArgs.AddToken(s);
  59. end;
  60. end.