#pragma once
#include "Direct3DBase.h"
#include <d3d11.h>
struct ModelViewProjectionConstantBuffer
{
    DirectX::XMFLOAT4X4 model;
    DirectX::XMFLOAT4X4 view;
    DirectX::XMFLOAT4X4 projection;
};
struct Vertex   
{
    Vertex(){}
    Vertex(float x, float y, float z,
        float u, float v)
        : pos(x,y,z), texCoord(u, v){}
    DirectX::XMFLOAT3 pos;
    DirectX::XMFLOAT2 texCoord;
};
ref class QuadRenderer sealed : public Direct3DBase
{
public:
    QuadRenderer();
    void Update(float timeTotal = 0.0f, float timeDelta = 0.0f);
    void CreateTextureFromByte(byte  *  buffer,int width,int height);
    
    virtual void CreateDeviceResources() override;
    virtual void CreateWindowSizeDependentResources() override;
    virtual void Render() override;
private:
    void Render(Microsoft::WRL::ComPtr<ID3D11RenderTargetView> renderTargetView, Microsoft::WRL::ComPtr<ID3D11DepthStencilView> depthStencilView);
    bool m_loadingComplete;
    uint32 m_indexCount;
    ModelViewProjectionConstantBuffer m_constantBufferData;
    Microsoft::WRL::ComPtr<ID3D11InputLayout>   m_inputLayout;
    Microsoft::WRL::ComPtr<ID3D11Buffer>                m_vertexBuffer;
    Microsoft::WRL::ComPtr<ID3D11Buffer>                m_indexBuffer;
    Microsoft::WRL::ComPtr<ID3D11VertexShader>  m_vertexShader;
    Microsoft::WRL::ComPtr<ID3D11PixelShader>   m_pixelShader;
    Microsoft::WRL::ComPtr<ID3D11Buffer>                m_constantBuffer;
    Microsoft::WRL::ComPtr<ID3D11Texture2D>              m_Texture;
    Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_SRV;
    Microsoft::WRL::ComPtr<ID3D11SamplerState> m_QuadsTexSamplerState;
    Microsoft::WRL::ComPtr<ID3D11BlendState> m_Transparency;
    Microsoft::WRL::ComPtr<ID3D11RasterizerState> CCWcullMode;
    Microsoft::WRL::ComPtr<ID3D11RasterizerState> CWcullMode;
};