#ifndef XNA_PLATFORM_RASTERIZERSTATE_DX_HPP #define XNA_PLATFORM_RASTERIZERSTATE_DX_HPP #include "../graphics/rasterizerstate.hpp" #include "../graphics/gresource.hpp" #include "dxheaders.hpp" namespace xna { class RasterizerState : public IRasterizerState, public GraphicsResource { public: RasterizerState(GraphicsDevice* device) : GraphicsResource(device){} virtual ~RasterizerState() override { if (dxRasterizerState) { dxRasterizerState->Release(); dxRasterizerState = nullptr; } } virtual bool Initialize(xna_error_nullarg) override; virtual bool Apply(xna_error_nullarg) override; virtual constexpr xna::CullMode CullMode() const override { return static_cast(static_cast(dxDescription.CullMode) - 1); } virtual constexpr void CullMode(xna::CullMode value) override { dxDescription.CullMode = static_cast(static_cast(value) + 1); } virtual constexpr xna::FillMode FillMode() const override { return static_cast(static_cast(dxDescription.FillMode) - 2); } virtual constexpr void FillMode(xna::FillMode value) override { dxDescription.FillMode = static_cast(static_cast(value) + 2); } static uptr CullNone(); static uptr CullClockwise(); static uptr CullCounterClockwise(); public: ID3D11RasterizerState* dxRasterizerState = nullptr; D3D11_RASTERIZER_DESC dxDescription{}; private: RasterizerState() : GraphicsResource(nullptr){} }; } #endif