AsphyreMaterials.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:6k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit AsphyreMaterials;
  2. //---------------------------------------------------------------------------
  3. // AsphyreMaterials.pas                                 Modified: 11-Mar-2007
  4. // Asphyre native material implementation                         Version 1.0
  5. //---------------------------------------------------------------------------
  6. // Important Notice:
  7. //
  8. // If you modify/use this code or one of its parts either in original or
  9. // modified form, you must comply with Mozilla Public License v1.1,
  10. // specifically section 3, "Distribution Obligations". Failure to do so will
  11. // result in the license breach, which will be resolved in the court.
  12. // Remember that violating author's rights is considered a serious crime in
  13. // many countries. Thank you!
  14. //
  15. // !! Please *read* Mozilla Public License 1.1 document located at:
  16. //  http://www.mozilla.org/MPL/
  17. //
  18. // If you require any clarifications about the license, feel free to contact
  19. // us or post your question on our forums at: http://www.afterwarp.net
  20. //---------------------------------------------------------------------------
  21. // The contents of this file are subject to the Mozilla Public License
  22. // Version 1.1 (the "License"); you may not use this file except in
  23. // compliance with the License. You may obtain a copy of the License at
  24. // http://www.mozilla.org/MPL/
  25. //
  26. // Software distributed under the License is distributed on an "AS IS"
  27. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  28. // License for the specific language governing rights and limitations
  29. // under the License.
  30. //
  31. // The Original Code is AsphyreMaterials.pas.
  32. //
  33. // The Initial Developer of the Original Code is M. Sc. Yuriy Kotsarenko.
  34. // Portions created by M. Sc. Yuriy Kotsarenko are Copyright (C) 2007,
  35. // Afterwarp Interactive. All Rights Reserved.
  36. //---------------------------------------------------------------------------
  37. interface
  38. //--------------------------------------------------------------------------
  39. uses
  40.  Direct3D9, AsphyreClasses, AsphyreColors;
  41. //--------------------------------------------------------------------------
  42. type
  43.  PAsphyreMaterial = ^TAsphyreMaterial;
  44.  TAsphyreMaterial = record
  45.   Diffuse : TAsphyreColor;
  46.   Specular: TAsphyreColor;
  47.   Ambient : TAsphyreColor;
  48.   Emissive: TAsphyreColor;
  49.   Power   : Single;
  50.   class operator Implicit(const Material: TAsphyreMaterial): TD3DMaterial9;
  51.   class operator Implicit(const Material: TD3DMaterial9): TAsphyreMaterial;
  52.  end;
  53. //--------------------------------------------------------------------------
  54.  TAsphyreMaterials = class
  55.  private
  56.   List: TAsphyreList;
  57.   function GetCount(): Integer;
  58.   procedure SetCount(const Value: Integer);
  59.   function GetItem(Index: Integer): PAsphyreMaterial;
  60.   procedure FreeItem(List: TAsphyreList; Item: Pointer);
  61.  public
  62.   property Count: Integer read GetCount write SetCount;
  63.   property Items[Index: Integer]: PAsphyreMaterial read GetItem; default;
  64.   function Insert(): PAsphyreMaterial;
  65.   function IndexOf(Material: PAsphyreMaterial): Integer; overload;
  66.   procedure Remove(Index: Integer);
  67.   procedure Clear();
  68.   procedure InitDefaults();
  69.   constructor Create();
  70.   destructor Destroy(); override;
  71.  end;
  72. //--------------------------------------------------------------------------
  73. implementation
  74. //--------------------------------------------------------------------------
  75. class operator TAsphyreMaterial.Implicit(
  76.  const Material: TAsphyreMaterial): TD3DMaterial9;
  77. begin
  78.  Result.Diffuse := Material.Diffuse;
  79.  Result.Specular:= Material.Specular;
  80.  Result.Ambient := Material.Ambient;
  81.  Result.Emissive:= Material.Emissive;
  82.  Result.Power   := Material.Power;
  83. end;
  84. //--------------------------------------------------------------------------
  85. class operator TAsphyreMaterial.Implicit(
  86.  const Material: TD3DMaterial9): TAsphyreMaterial;
  87. begin
  88.  Result.Diffuse := Material.Diffuse;
  89.  Result.Specular:= Material.Specular;
  90.  Result.Ambient := Material.Ambient;
  91.  Result.Emissive:= Material.Emissive;
  92.  Result.Power   := Material.Power;
  93. end;
  94. //--------------------------------------------------------------------------
  95. constructor TAsphyreMaterials.Create();
  96. begin
  97.  inherited;
  98.  List:= TAsphyreList.Create();
  99.  List.OnFreeItem:= FreeItem;
  100. end;
  101. //--------------------------------------------------------------------------
  102. destructor TAsphyreMaterials.Destroy();
  103. begin
  104.  List.Free();
  105.  inherited;
  106. end;
  107. //--------------------------------------------------------------------------
  108. procedure TAsphyreMaterials.FreeItem(List: TAsphyreList; Item: Pointer);
  109. begin
  110.  FreeMem(Item, SizeOf(TD3DMaterial9));
  111. end;
  112. //--------------------------------------------------------------------------
  113. function TAsphyreMaterials.GetCount(): Integer;
  114. begin
  115.  Result:= List.Count;
  116. end;
  117. //--------------------------------------------------------------------------
  118. procedure TAsphyreMaterials.SetCount(const Value: Integer);
  119. begin
  120.  while (List.Count > Value)and(List.Count > 0) do List.Remove(List.Count - 1);
  121.  while (List.Count < Value) do Insert();
  122. end;
  123. //--------------------------------------------------------------------------
  124. function TAsphyreMaterials.GetItem(Index: Integer): PAsphyreMaterial;
  125. begin
  126.  Result:= PAsphyreMaterial(List[Index]);
  127. end;
  128. //--------------------------------------------------------------------------
  129. function TAsphyreMaterials.Insert(): PAsphyreMaterial;
  130. begin
  131.  Result:= AllocMem(SizeOf(TAsphyreMaterial));
  132.  List.Insert(Result);
  133. end;
  134. //--------------------------------------------------------------------------
  135. function TAsphyreMaterials.IndexOf(Material: PAsphyreMaterial): Integer;
  136. begin
  137.  Result:= List.IndexOf(Material);
  138. end;
  139. //--------------------------------------------------------------------------
  140. procedure TAsphyreMaterials.Remove(Index: Integer);
  141. begin
  142.  List.Remove(Index);
  143. end;
  144. //--------------------------------------------------------------------------
  145. procedure TAsphyreMaterials.Clear();
  146. begin
  147.  List.Clear();
  148. end;
  149. //--------------------------------------------------------------------------
  150. procedure TAsphyreMaterials.InitDefaults();
  151. var
  152.  i: Integer;
  153. begin
  154.  for i:= 0 to List.Count - 1 do
  155.   with PAsphyreMaterial(List[i])^ do
  156.    begin
  157.     Diffuse := $FFFFFFFF;
  158.     Ambient := $FFFFFFFF;
  159.     Specular:= $FFFFFFFF;
  160.     Emissive:= $00000000;
  161.     Power   := 20.0;
  162.    end;
  163. end;
  164. //--------------------------------------------------------------------------
  165. end.