#pragma once

#include "Texture.h"

struct ID3D12Device;
struct D3D12_RESOURCE_DESC;
struct ID3D12Resource;
struct ID3D12GraphicsCommandList;

namespace Framework
{
    class DX12Texture : public Texture
    {
    private:
        ID3D12Resource* buffer;
        ID3D12Resource* intermediate;
        ID3D12Device* device;
        DX12CopyCommandQueue* copy;
        DX12DirectCommandQueue* direct;
        bool shaderResource;

    public:
        DLLEXPORT DX12Texture(ID3D12Device* device,
            DX12CopyCommandQueue* copy,
            DX12DirectCommandQueue* direct);
        DLLEXPORT ~DX12Texture();
        //! Updates the texture. The pixels of the current image are copied
        //! to graphics memory
        DLLEXPORT bool updateTextur() override;
        //! Returns true if updateTextur needs to be called
        DLLEXPORT bool needsUpdate() const override;
        //! Returns the DX12 resource
        DLLEXPORT ID3D12Resource* getResource();
    };
} // namespace Framework