Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

144 řádky
6.2 KiB

  1. unit uengShaderPartParameter;
  2. {$mode objfpc}{$H+}
  3. {$I uengShaderFile.inc}
  4. interface
  5. uses
  6. Classes, SysUtils,
  7. uengShaderPart, uengShaderFileParser;
  8. type
  9. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10. TengShaderPartParameter = class(TengShaderPart)
  11. { Code Loading & Storage }
  12. private
  13. fName: String;
  14. fType: String;
  15. protected
  16. function GetText: String; override;
  17. function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
  18. { General }
  19. public
  20. property Name: String read fName;
  21. property Typ: String read fType;
  22. end;
  23. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. TengShaderPartVar = class(TengShaderPartParameter)
  25. { Code Loading & Storage }
  26. private
  27. fDefaultValue: String;
  28. protected
  29. function GetText: String; override;
  30. function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
  31. { General }
  32. public
  33. property DefaultValue: String read fDefaultValue;
  34. { Class Methods }
  35. public
  36. class function GetTokenName: String; override;
  37. end;
  38. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. TengShaderPartVarying = class(TengShaderPartParameter)
  40. { Class Methods }
  41. public
  42. class function GetTokenName: String; override;
  43. end;
  44. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  45. TengShaderPartUniform = class(TengShaderPartParameter)
  46. { Class Methods }
  47. public
  48. class function GetTokenName: String; override;
  49. end;
  50. implementation
  51. uses
  52. uengShaderFileConstants, uengShaderFileTypes;
  53. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  54. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  55. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  56. function TengShaderPartParameter.GetText: String;
  57. begin
  58. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
  59. TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
  60. TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE +
  61. TOKEN_CHAR_END;
  62. end;
  63. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  64. function TengShaderPartParameter.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  65. begin
  66. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  67. raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename);
  68. if (aParams.Count <> 3) then
  69. raise EengInvalidParamterCount.Create(GetTokenName, 3, Line, Col, Filename);
  70. result := '';
  71. fType := aParams[1].Name;
  72. fName := aParams[2].Name;
  73. end;
  74. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  75. //TengShaderPartVar/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  76. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  77. function TengShaderPartVar.GetText: String;
  78. begin
  79. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
  80. TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
  81. TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE;
  82. if (fDefaultValue <> '') then
  83. result := result + ' ' + TOKEN_CHAR_QUOTE + fDefaultValue + TOKEN_CHAR_QUOTE;
  84. result := result + TOKEN_CHAR_END;
  85. end;
  86. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  87. function TengShaderPartVar.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  88. begin
  89. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  90. raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename);
  91. if (aParams.Count < 3) or (aParams.Count > 4) then
  92. raise EengInvalidParamterCount.Create(GetTokenName, 3, 4, Line, Col, Filename);
  93. result := '';
  94. fType := aParams[1].Name;
  95. fName := aParams[2].Name;
  96. if (aParams.Count >= 4) then
  97. fDefaultValue := aParams[3].Name
  98. else
  99. fDefaultValue := '';
  100. end;
  101. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. class function TengShaderPartVar.GetTokenName: String;
  103. begin
  104. result := TOKEN_VAR;
  105. end;
  106. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  107. //TengShaderPartVarying/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  108. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  109. class function TengShaderPartVarying.GetTokenName: String;
  110. begin
  111. result := TOKEN_VARYING;
  112. end;
  113. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  114. //TengShaderPartUniform/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  115. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  116. class function TengShaderPartUniform.GetTokenName: String;
  117. begin
  118. result := TOKEN_UNIFORM;
  119. end;
  120. end.