#pragma once

#include "Textur.h"

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

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

    public:
        DLLEXPORT DX12Textur(ID3D12Device* device,
            DX12CopyCommandQueue* copy,
            DX12DirectCommandQueue* direct);
        DLLEXPORT ~DX12Textur();
        //! Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in
        //! den Graphikspeicher kopiert
        DLLEXPORT bool updateTextur() override;
        //! Gibt true zurük, wenn updateTextur aufgerufen werden muss
        DLLEXPORT bool brauchtUpdate() const override;
        //! Gibt die DX12 Resource zurück
        DLLEXPORT ID3D12Resource* getResource();
    };
} // namespace Framework