25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

111 satır
4.7 KiB

  1. unit uvkuImageViewFactory;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,
  6. Vulkan, uvkuAllocationHandler, uvkuImageView, uvkuDevice;
  7. type
  8. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TvkuImageViewEx = class(TvkuImageView)
  10. private
  11. fAllocHandler: TvkuAllocationHandler;
  12. fOwnsHandler: Boolean;
  13. public
  14. destructor Destroy; override;
  15. end;
  16. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  17. TvkuImageViewFactory = class(TObject)
  18. private
  19. fDeviceCommands: TVkDeviceCommands;
  20. fFlags: VkImageViewCreateFlags;
  21. fImage: VkImage;
  22. fViewType: TVkImageViewType;
  23. fFormat: TVkFormat;
  24. fComponents: TVkComponentMapping;
  25. fSubresourceRange: TVkImageSubresourceRange;
  26. public
  27. property DeviceCommands: TVkDeviceCommands read fDeviceCommands;
  28. property Flags: VkImageViewCreateFlags read fFlags write fFlags;
  29. property Image: VkImage read fImage write fImage;
  30. property ViewType: TVkImageViewType read fViewType write fViewType;
  31. property Format: TVkFormat read fFormat write fFormat;
  32. property Components: TVkComponentMapping read fComponents write fComponents;
  33. property SubresourceRange: TVkImageSubresourceRange read fSubresourceRange write fSubresourceRange;
  34. function CreateImageView: TvkuImageViewEx;
  35. function CreateImageView(
  36. const aAllocHandler: TvkuAllocationHandler;
  37. const aOwnsHandler: Boolean): TvkuImageViewEx;
  38. constructor Create(const aDevice: TvkuDevice);
  39. constructor Create(const aDeviceCommands: TVkDeviceCommands);
  40. end;
  41. implementation
  42. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  43. //TvkuImageViewEx////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  44. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  45. destructor TvkuImageViewEx.Destroy;
  46. begin
  47. inherited Destroy;
  48. if fOwnsHandler then
  49. FreeAndNil(fAllocHandler);
  50. end;
  51. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  52. //TvkuImageViewFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  54. function TvkuImageViewFactory.CreateImageView: TvkuImageViewEx;
  55. begin
  56. result := CreateImageView(nil, false);
  57. end;
  58. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  59. function TvkuImageViewFactory.CreateImageView(const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuImageViewEx;
  60. var CreateInfo: TVkImageViewCreateInfo;
  61. begin
  62. FillByte(CreateInfo, SizeOf(CreateInfo), 0);
  63. CreateInfo.sType := VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
  64. CreateInfo.pNext := nil;
  65. CreateInfo.flags := fFlags;
  66. CreateInfo.image := fImage;
  67. CreateInfo.viewType := fViewType;
  68. CreateInfo.format := fFormat;
  69. CreateInfo.components := fComponents;
  70. CreateInfo.subresourceRange := fSubresourceRange;
  71. if Assigned(aAllocHandler)
  72. then result := TvkuImageViewEx.Create(CreateInfo, fDeviceCommands, aAllocHandler.GetAllocationCallbacksPtr)
  73. else result := TvkuImageViewEx.Create(CreateInfo, fDeviceCommands);
  74. try
  75. TvkuImageViewEx(result).fAllocHandler := aAllocHandler;
  76. TvkuImageViewEx(result).fOwnsHandler := aOwnsHandler;
  77. except
  78. FreeAndNil(result);
  79. raise;
  80. end;
  81. end;
  82. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  83. constructor TvkuImageViewFactory.Create(const aDevice: TvkuDevice);
  84. begin
  85. Create(aDevice.DeviceCommands);
  86. end;
  87. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  88. constructor TvkuImageViewFactory.Create(const aDeviceCommands: TVkDeviceCommands);
  89. begin
  90. inherited Create;
  91. fDeviceCommands := aDeviceCommands;
  92. end;
  93. end.