1
0
mirror of https://github.com/borgesdan/xn65 synced 2024-12-29 21:54:47 +01:00
xn65/inc/platform-dx/device-dx.hpp
2024-05-22 20:05:52 -03:00

93 lines
2.3 KiB
C++

#ifndef XNA_PLATFORM_DEVICE_DX_HPP
#define XNA_PLATFORM_DEVICE_DX_HPP
#include "../common/color.hpp"
#include "../graphics/device.hpp"
#include "../graphics/presentparams.hpp"
#include "../graphics/viewport.hpp"
#include "dxheaders.hpp"
#include "gdeviceinfo-dx.hpp"
#include "window-dx.hpp"
#include "graphics/presentparams.hpp"
namespace xna {
class GraphicsDevice : public IGraphicsDevice, public std::enable_shared_from_this<GraphicsDevice> {
public:
GraphicsDevice();
GraphicsDevice(GraphicsDeviceInformation const& info);
virtual ~GraphicsDevice() override {
if (_device) {
_device->Release();
_device = nullptr;
}
if (_context) {
_context->Release();
_context = nullptr;
}
if (_factory) {
_factory->Release();
_factory = nullptr;
}
}
virtual void Clear() override;
virtual void Clear(Color const& color) override;
virtual bool Initialize(GameWindow& gameWindow) override;
virtual bool Present() override;
virtual sptr<GraphicsAdapter> Adapter() const override {
return _adapter;
}
virtual void Adapter(sptr<GraphicsAdapter> const& adapter) override {
_adapter = adapter;
}
virtual constexpr xna::Viewport Viewport() const override {
return _viewport;
}
virtual constexpr void Viewport(xna::Viewport const& viewport) override {
_viewport = viewport;
}
virtual void UseVSync(bool use) override {
_usevsync = use;
}
constexpr void SetCreateFlags(D3D11_CREATE_DEVICE_FLAG flags) {
_createDeviceFlags |= flags;
}
constexpr void ClearCreateFlags() {
_createDeviceFlags = 0;
}
bool GetSwapChainBackBuffer(ID3D11Texture2D*& texture2D);
public:
ID3D11Device* _device{ nullptr };
ID3D11DeviceContext* _context{ nullptr };
IDXGIFactory1* _factory = nullptr;
sptr<SwapChain> _swapChain{ nullptr };
sptr<GraphicsAdapter> _adapter{ nullptr };
sptr<RenderTarget2D> _renderTarget2D{ nullptr };
sptr<BlendState> _blendState{ nullptr };
xna::Viewport _viewport{};
xna::PresentationParameters _presentationParameters;
private:
unsigned int _createDeviceFlags{ 0 };
D3D_FEATURE_LEVEL _featureLevel{ D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_11_0 };
float _backgroundColor[4] = { 0, 0, 0, 0 };
bool _usevsync{ true };
bool createDevice();
void reset();
};
}
#endif