//--------------------------------------------------------------------------------------
// File: CommonStates.h
//
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//
// http://go.microsoft.com/fwlink/?LinkId=248929
//--------------------------------------------------------------------------------------

#pragma once

#if defined(_XBOX_ONE) && defined(_TITLE)
#include <d3d11_x.h>
#else
#include <d3d11_1.h>
#endif

#include <memory>


namespace DirectX
{
    class CommonStates
    {
    public:
        explicit CommonStates(_In_ ID3D11Device* device);
        CommonStates(CommonStates&& moveFrom) noexcept;
        CommonStates& operator= (CommonStates&& moveFrom) noexcept;

        CommonStates(CommonStates const&) = delete;
        CommonStates& operator= (CommonStates const&) = delete;

        virtual ~CommonStates();

        // Blend states.
        ID3D11BlendState* __cdecl AlphaBlend() const;

        // Depth stencil states.
        ID3D11DepthStencilState* __cdecl DepthNone() const;

        // Rasterizer states.
        ID3D11RasterizerState* __cdecl CullCounterClockwise() const;

        // Sampler states.
		  ID3D11SamplerState* __cdecl PointClamp() const;
		  ID3D11SamplerState* __cdecl LinearClamp() const;

    private:
        // Private implementation.
        class Impl;

        std::shared_ptr<Impl> pImpl;
    };
}
