1
0
mirror of https://github.com/borgesdan/xn65 synced 2024-12-29 21:54:47 +01:00
xn65/framework/platform/depthstencilstate-dx.hpp

193 lines
6.8 KiB
C++
Raw Normal View History

2024-04-15 09:48:16 -03:00
#ifndef XNA_PLATFORM_DEPTHSTENCILSTATE_DX_HPP
#define XNA_PLATFORM_DEPTHSTENCILSTATE_DX_HPP
#include "../graphics/depthstencilstate.hpp"
2024-04-25 14:51:33 -03:00
#include "../graphics/gresource.hpp"
2024-04-15 09:48:16 -03:00
#include "dxheaders.hpp"
namespace xna {
2024-04-25 14:51:33 -03:00
class DepthStencilState : public IDepthStencilState, public GraphicsResource {
2024-04-15 09:48:16 -03:00
public:
2024-04-25 14:51:33 -03:00
DepthStencilState(GraphicsDevice* device) : GraphicsResource(device) {
dxDescription = defaultDesc();
2024-04-15 09:48:16 -03:00
}
virtual ~DepthStencilState() override {
2024-04-25 14:51:33 -03:00
if (dxDepthStencil) {
dxDepthStencil->Release();
dxDepthStencil = nullptr;
2024-04-15 09:48:16 -03:00
}
}
2024-04-25 14:51:33 -03:00
virtual bool Initialize(xna_error_nullarg) override;
virtual bool Apply(xna_error_ptr_arg) override;
2024-04-15 09:48:16 -03:00
virtual constexpr void DepthEnabled(bool value) override {
2024-04-25 14:51:33 -03:00
dxDescription.DepthEnable = value;
2024-04-15 09:48:16 -03:00
}
virtual constexpr void DepthWriteEnabled(bool value) override {
2024-04-25 14:51:33 -03:00
dxDescription.DepthWriteMask = static_cast<D3D11_DEPTH_WRITE_MASK>(value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void DepthCompareFunction(ComparisonFunction value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.DepthFunc = static_cast<D3D11_COMPARISON_FUNC>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilEnabled(bool value) override {
2024-04-25 14:51:33 -03:00
dxDescription.StencilEnable = value;
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilReadMask(int value) override {
2024-04-25 14:51:33 -03:00
dxDescription.StencilReadMask = static_cast<UINT8>(value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilWriteMask(int value) override {
2024-04-25 14:51:33 -03:00
dxDescription.StencilWriteMask = static_cast<UINT8>(value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilFrontFacePass(StencilOperation value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.FrontFace.StencilPassOp = static_cast<D3D11_STENCIL_OP>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilFrontFaceFail(StencilOperation value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.FrontFace.StencilFailOp = static_cast<D3D11_STENCIL_OP>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilFrontFaceDepthFail(StencilOperation value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.FrontFace.StencilDepthFailOp = static_cast<D3D11_STENCIL_OP>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilFrontFaceCompare(ComparisonFunction value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.FrontFace.StencilFunc = static_cast<D3D11_COMPARISON_FUNC>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilBackFacePass(StencilOperation value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.BackFace.StencilPassOp = static_cast<D3D11_STENCIL_OP>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilBackFaceFail(StencilOperation value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.BackFace.StencilFailOp = static_cast<D3D11_STENCIL_OP>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilBackFaceDepthFail(StencilOperation value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.BackFace.StencilDepthFailOp = static_cast<D3D11_STENCIL_OP>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr void StencilBackFaceCompare(ComparisonFunction value) override {
const auto _value = static_cast<int>(value) + 1;
2024-04-25 14:51:33 -03:00
dxDescription.BackFace.StencilFunc = static_cast<D3D11_COMPARISON_FUNC>(_value);
2024-04-15 09:48:16 -03:00
}
virtual constexpr bool DepthEnabled() override {
2024-04-25 14:51:33 -03:00
return dxDescription.DepthEnable;
2024-04-15 09:48:16 -03:00
}
virtual constexpr bool DepthWriteEnabled() override {
2024-04-25 14:51:33 -03:00
return static_cast<bool>(dxDescription.DepthWriteMask);
2024-04-15 09:48:16 -03:00
}
virtual constexpr ComparisonFunction DepthCompareFunction() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.DepthFunc) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<ComparisonFunction>(_value);
}
virtual constexpr bool StencilEnabled() override {
2024-04-25 14:51:33 -03:00
return dxDescription.StencilEnable;
2024-04-15 09:48:16 -03:00
}
virtual constexpr int StencilReadMask() override {
2024-04-25 14:51:33 -03:00
return static_cast<int>(dxDescription.StencilReadMask);
2024-04-15 09:48:16 -03:00
}
virtual constexpr int StencilWriteMask() override {
2024-04-25 14:51:33 -03:00
return static_cast<int>(dxDescription.StencilWriteMask);
2024-04-15 09:48:16 -03:00
}
virtual constexpr StencilOperation StencilFrontFacePass() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.FrontFace.StencilPassOp) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<StencilOperation>(_value);
}
virtual constexpr StencilOperation StencilFrontFaceFail() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.FrontFace.StencilFailOp) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<StencilOperation>(_value);
}
virtual constexpr StencilOperation StencilFrontFaceDepthFail() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.FrontFace.StencilDepthFailOp) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<StencilOperation>(_value);
}
2024-04-25 14:51:33 -03:00
2024-04-15 09:48:16 -03:00
virtual constexpr ComparisonFunction StencilFrontFaceCompare() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.FrontFace.StencilFunc) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<ComparisonFunction>(_value);
}
virtual constexpr StencilOperation StencilBackFacePass() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.BackFace.StencilPassOp) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<StencilOperation>(_value);
}
virtual constexpr StencilOperation StencilBackFaceFail() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.BackFace.StencilFailOp) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<StencilOperation>(_value);
}
virtual constexpr StencilOperation StencilBackFaceDepthFail() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.BackFace.StencilDepthFailOp) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<StencilOperation>(_value);
}
virtual constexpr ComparisonFunction StencilBackFaceCompare() override {
2024-04-25 14:51:33 -03:00
const auto _value = static_cast<int>(dxDescription.BackFace.StencilFunc) - 1;
2024-04-15 09:48:16 -03:00
return static_cast<ComparisonFunction>(_value);
}
2024-04-25 14:51:33 -03:00
static uptr<DepthStencilState> None();
static uptr<DepthStencilState> Default();
static uptr<DepthStencilState> DepthRead();
2024-04-15 09:48:16 -03:00
public:
2024-04-25 14:51:33 -03:00
ID3D11DepthStencilState* dxDepthStencil = nullptr;
D3D11_DEPTH_STENCIL_DESC dxDescription{};
private:
DepthStencilState() : GraphicsResource(nullptr) {
dxDescription = defaultDesc();
}
static D3D11_DEPTH_STENCIL_DESC defaultDesc() {
D3D11_DEPTH_STENCIL_DESC _description{};
_description.DepthEnable = true;
_description.StencilEnable = true;
_description.DepthFunc = D3D11_COMPARISON_LESS_EQUAL;
_description.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
_description.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
_description.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
_description.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;
_description.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
_description.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
_description.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
_description.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;
_description.StencilReadMask = 0;
_description.StencilWriteMask = 0;
_description.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO;
return _description;
}
2024-04-15 09:48:16 -03:00
};
}
#endif