Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

194 rindas
8.5 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(TengShaderCodePart)
  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. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  51. TengShaderPartConst = class(TengShaderPartParameter)
  52. { Code Loading & Storage }
  53. private
  54. fValue: String;
  55. protected
  56. function GetText: String; override;
  57. function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
  58. { General }
  59. public
  60. property Value: String read fValue;
  61. { Class Methods }
  62. public
  63. class function GetTokenName: String; override;
  64. end;
  65. implementation
  66. uses
  67. uengShaderFileConstants, uengShaderFileTypes;
  68. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69. //TengShaderPartParameter///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  70. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  71. function TengShaderPartParameter.GetText: String;
  72. begin
  73. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
  74. TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
  75. TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE +
  76. TOKEN_CHAR_END;
  77. end;
  78. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  79. function TengShaderPartParameter.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  80. begin
  81. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  82. raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename, self);
  83. if (aParams.Count <> 3) then
  84. raise EengInvalidParamterCount.Create(GetTokenName, 3, self);
  85. result := '';
  86. fType := aParams[1].Name;
  87. fName := aParams[2].Name;
  88. end;
  89. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  90. //TengShaderPartVar/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  91. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  92. function TengShaderPartVar.GetText: String;
  93. begin
  94. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
  95. TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
  96. TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE;
  97. if (fDefaultValue <> '') then
  98. result := result + ' ' + TOKEN_CHAR_QUOTE + fDefaultValue + TOKEN_CHAR_QUOTE;
  99. result := result + TOKEN_CHAR_END;
  100. end;
  101. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. function TengShaderPartVar.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  103. begin
  104. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  105. raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename, self);
  106. if (aParams.Count < 3) or (aParams.Count > 4) then
  107. raise EengInvalidParamterCount.Create(GetTokenName, 3, 4, self);
  108. result := '';
  109. fType := aParams[1].Name;
  110. fName := aParams[2].Name;
  111. if (aParams.Count >= 4) then
  112. fDefaultValue := aParams[3].Name
  113. else
  114. fDefaultValue := '';
  115. end;
  116. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  117. class function TengShaderPartVar.GetTokenName: String;
  118. begin
  119. result := TOKEN_VAR;
  120. end;
  121. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  122. //TengShaderPartVarying/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  123. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  124. class function TengShaderPartVarying.GetTokenName: String;
  125. begin
  126. result := TOKEN_VARYING;
  127. end;
  128. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  129. //TengShaderPartUniform/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  130. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  131. class function TengShaderPartUniform.GetTokenName: String;
  132. begin
  133. result := TOKEN_UNIFORM;
  134. end;
  135. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  136. //TengShaderPartConst///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  137. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  138. function TengShaderPartConst.GetText: String;
  139. begin
  140. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' +
  141. TOKEN_CHAR_QUOTE + fType + TOKEN_CHAR_QUOTE + ' ' +
  142. TOKEN_CHAR_QUOTE + fName + TOKEN_CHAR_QUOTE + ' ' +
  143. TOKEN_CHAR_QUOTE + fValue + TOKEN_CHAR_QUOTE +
  144. TOKEN_CHAR_END;
  145. end;
  146. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  147. function TengShaderPartConst.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  148. begin
  149. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  150. raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename, self);
  151. if (aParams.Count <> 4) then
  152. raise EengInvalidParamterCount.Create(GetTokenName, 4, self);
  153. result := '';
  154. fType := aParams[1].Name;
  155. fName := aParams[2].Name;
  156. fValue := aParams[3].Name
  157. end;
  158. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  159. class function TengShaderPartConst.GetTokenName: String;
  160. begin
  161. result := TOKEN_CONST;
  162. end;
  163. end.