// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. #pragma once #if GRAPHICS_API_DIRECTX11 #include "Engine/Graphics/GPUBuffer.h" #include "GPUDeviceDX11.h" #include "../IncludeDirectXHeaders.h" #include "IShaderResourceDX11.h" /// /// The buffer view for DirectX 11 backend. /// /// /// class GPUBufferViewDX11 : public GPUBufferView, public IShaderResourceDX11 { private: ID3D11ShaderResourceView* _srv = nullptr; ID3D11UnorderedAccessView* _uav = nullptr; public: /// /// Initializes a new instance of the class. /// GPUBufferViewDX11() { } /// /// Finalizes an instance of the class. /// ~GPUBufferViewDX11() { Release(); } public: /// /// Release the view. /// void Release() { DX_SAFE_RELEASE_CHECK(_srv, 0); DX_SAFE_RELEASE_CHECK(_uav, 0); } public: /// /// Sets new shader resource view. /// /// A new shader resource view. void SetSRV(ID3D11ShaderResourceView* srv) { DX_SAFE_RELEASE_CHECK(_srv, 0); _srv = srv; } /// /// Sets new unordered access view. /// /// A new unordered access view. void SetUAV(ID3D11UnorderedAccessView* uav) { DX_SAFE_RELEASE_CHECK(_uav, 0); _uav = uav; } public: // [GPUResourceView] void* GetNativePtr() const override { return (void*)(IShaderResourceDX11*)this; } // [IShaderResourceDX11] ID3D11ShaderResourceView* SRV() const override { return _srv; } ID3D11UnorderedAccessView* UAV() const override { return _uav; } }; /// /// GPU buffer for DirectX 11 backend. /// /// class GPUBufferDX11 : public GPUResourceDX11 { private: ID3D11Buffer* _resource = nullptr; GPUBufferViewDX11 _view; bool _mapped = false; public: /// /// Initializes a new instance of the class. /// /// The graphics device. /// The resource name. GPUBufferDX11(GPUDeviceDX11* device, const StringView& name); public: /// /// Gets DirectX 11 buffer object handle /// /// Buffer FORCE_INLINE ID3D11Buffer* GetBuffer() const { return _resource; } public: // [GPUBuffer] GPUBufferView* View() const override; void* Map(GPUResourceMapMode mode) override; void Unmap() override; // [GPUResourceDX11] ID3D11Resource* GetResource() override { return _resource; } protected: // [GPUBuffer] bool OnInit() override; void OnReleaseGPU() override; }; #endif