Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

93 lignes
3.5 KiB

  1. unit uvkuBase;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,
  6. Vulkan;
  7. type
  8. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TvkuObject = class(TObject)
  10. end;
  11. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  12. TvkuHandle = class(TvkuObject)
  13. private
  14. fOwnsHandle: Boolean;
  15. public
  16. property OwnsHandle: Boolean read fOwnsHandle write fOwnsHandle;
  17. constructor Create;
  18. end;
  19. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. TvkuAllocHandle = class(TvkuHandle)
  21. private
  22. fAllocCallbacks: PVkAllocationCallbacks;
  23. protected
  24. property AllocCallbacks: PVkAllocationCallbacks read fAllocCallbacks;
  25. procedure SetAllocCallbacks(const aAllocCallbacks: TVkAllocationCallbacks);
  26. procedure SetAllocCallbacks(const aAllocCallbacks: PVkAllocationCallbacks);
  27. procedure DisposeAllocCallbacks;
  28. public
  29. constructor Create;
  30. destructor Destroy; override;
  31. end;
  32. implementation
  33. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  34. //TvkuHandle/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  35. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  36. constructor TvkuHandle.Create;
  37. begin
  38. inherited Create;
  39. fOwnsHandle := true;
  40. end;
  41. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. //TvkuAllocHandle////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  43. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  44. procedure TvkuAllocHandle.SetAllocCallbacks(const aAllocCallbacks: TVkAllocationCallbacks);
  45. begin
  46. if not Assigned(fAllocCallbacks) then
  47. new(fAllocCallbacks);
  48. fAllocCallbacks^ := aAllocCallbacks;
  49. end;
  50. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  51. procedure TvkuAllocHandle.SetAllocCallbacks(const aAllocCallbacks: PVkAllocationCallbacks);
  52. begin
  53. if Assigned(aAllocCallbacks) then
  54. SetAllocCallbacks(aAllocCallbacks^);
  55. end;
  56. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  57. procedure TvkuAllocHandle.DisposeAllocCallbacks;
  58. begin
  59. if not Assigned(fAllocCallbacks) then
  60. exit;
  61. Dispose(fAllocCallbacks);
  62. fAllocCallbacks := nil;
  63. end;
  64. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  65. constructor TvkuAllocHandle.Create;
  66. begin
  67. inherited Create;
  68. fAllocCallbacks := nil;
  69. end;
  70. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  71. destructor TvkuAllocHandle.Destroy;
  72. begin
  73. inherited Destroy;
  74. DisposeAllocCallbacks;
  75. end;
  76. end.