You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 regels
4.2 KiB

  1. unit uvkuBufferViewFactory;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,
  6. Vulkan, uvkuBufferView, uvkuAllocationHandler, uvkuDevice;
  7. type
  8. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TvkuBufferViewEx = class(TvkuBufferView)
  10. private
  11. fAllocHandler: TvkuAllocationHandler;
  12. fOwnsHandler: Boolean;
  13. public
  14. destructor Destroy; override;
  15. end;
  16. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  17. TvkuBufferViewFactory = class(TObject)
  18. private
  19. fDeviceCommands: TVkDeviceCommands;
  20. fFlags: VkBufferViewCreateFlags;
  21. fBuffer: VkBuffer;
  22. fFormat: TVkFormat;
  23. fOffset: VkDeviceSize;
  24. fRange: VkDeviceSize;
  25. public
  26. property DeviceCommands: TVkDeviceCommands read fDeviceCommands;
  27. property Flags: VkBufferViewCreateFlags read fFlags write fFlags;
  28. property Buffer: VkBuffer read fBuffer write fBuffer;
  29. property Format: TVkFormat read fFormat write fFormat;
  30. property Offset: VkDeviceSize read fOffset write fOffset;
  31. property Range: VkDeviceSize read fRange write fRange;
  32. function CreateBufferView: TvkuBufferViewEx;
  33. function CreateBufferView(
  34. const aAllocHandler: TvkuAllocationHandler;
  35. const aOwnsHandler: Boolean): TvkuBufferViewEx;
  36. constructor Create(const aDevice: TvkuDevice);
  37. constructor Create(const aDeviceCommands: TVkDeviceCommands);
  38. end;
  39. implementation
  40. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  41. //TvkuBufferViewEx///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  43. destructor TvkuBufferViewEx.Destroy;
  44. begin
  45. inherited Destroy;
  46. end;
  47. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. //TvkuBufferViewFactory//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  49. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  50. function TvkuBufferViewFactory.CreateBufferView: TvkuBufferViewEx;
  51. begin
  52. result := CreateBufferView(nil, false);
  53. end;
  54. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  55. function TvkuBufferViewFactory.CreateBufferView(const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuBufferViewEx;
  56. var
  57. CreateInfo: TVkBufferViewCreateInfo;
  58. begin
  59. FillByte(CreateInfo, SizeOf(CreateInfo), 0);
  60. CreateInfo.sType := VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
  61. CreateInfo.pNext := nil;
  62. CreateInfo.flags := fFlags;
  63. CreateInfo.buffer := fBuffer;
  64. CreateInfo.format := fFormat;
  65. CreateInfo.offset := fOffset;
  66. CreateInfo.range := fRange;
  67. if Assigned(aAllocHandler)
  68. then result := TvkuBufferViewEx.Create(CreateInfo, fDeviceCommands, aAllocHandler.GetAllocationCallbacksPtr)
  69. else result := TvkuBufferViewEx.Create(CreateInfo, fDeviceCommands);
  70. try
  71. TvkuBufferViewEx(result).fAllocHandler := aAllocHandler;
  72. TvkuBufferViewEx(result).fOwnsHandler := aOwnsHandler;
  73. except
  74. FreeAndNil(result);
  75. raise;
  76. end;
  77. end;
  78. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  79. constructor TvkuBufferViewFactory.Create(const aDevice: TvkuDevice);
  80. begin
  81. Create(aDevice.DeviceCommands);
  82. end;
  83. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  84. constructor TvkuBufferViewFactory.Create(const aDeviceCommands: TVkDeviceCommands);
  85. begin
  86. inherited Create;
  87. fDeviceCommands := aDeviceCommands;
  88. end;
  89. end.