|
- unit uvkuDevice;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuDevice = class(TObject)
- private
- fHandle: VkDevice;
- fPhysicalDevice: VkPhysicalDevice;
- fAllocCallbacks: PVkAllocationCallbacks;
-
- procedure CreateHandle(
- const aCreateInfo: PVkDeviceCreateInfo;
- const aAllocCallbacks: PVkAllocationCallbacks);
- public
- property Handle: VkDevice read fHandle;
- property PhysicalDevice: VkPhysicalDevice read fPhysicalDevice;
-
- constructor Create(
- const aPhysicalDevice: VkPhysicalDevice;
- const aCreateInfo: TVkDeviceCreateInfo);
- constructor Create(
- const aPhysicalDevice: VkPhysicalDevice;
- const aCreateInfo: TVkDeviceCreateInfo;
- const aAllocCallbacks: TVkAllocationCallbacks);
- destructor Destroy; override;
- end;
-
- implementation
-
- uses
- uvkuUtils;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuDevice/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuDevice.CreateHandle(const aCreateInfo: PVkDeviceCreateInfo; const aAllocCallbacks: PVkAllocationCallbacks);
- var err: TVkResult;
- begin
- if Assigned(aAllocCallbacks) then begin
- new(fAllocCallbacks);
- fAllocCallbacks^ := aAllocCallbacks^;
- end;
- err := vkCreateDevice(fPhysicalDevice, aCreateInfo, fAllocCallbacks, @fHandle);
- if (err < VK_SUCCESS) then
- raise TvkuErrorException.Create('unable to create device', err);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- constructor TvkuDevice.Create(const aPhysicalDevice: VkPhysicalDevice; const aCreateInfo: TVkDeviceCreateInfo);
- begin
- inherited Create;
- fHandle := nil;
- fPhysicalDevice := aPhysicalDevice;
- CreateHandle(@aCreateInfo, nil);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- constructor TvkuDevice.Create(const aPhysicalDevice: VkPhysicalDevice; const aCreateInfo: TVkDeviceCreateInfo; const aAllocCallbacks: TVkAllocationCallbacks);
- begin
- inherited Create;
- fHandle := nil;
- fPhysicalDevice := aPhysicalDevice;
- CreateHandle(@aCreateInfo, @aAllocCallbacks);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- destructor TvkuDevice.Destroy;
- begin
- if Assigned(fHandle) then begin
- vkDestroyDevice(fHandle, fAllocCallbacks);
- fHandle := nil;
- end;
- if Assigned(fAllocCallbacks) then begin
- Dispose(fAllocCallbacks);
- fAllocCallbacks := nil;
- end;
- inherited Destroy;
- end;
-
- end.
|