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

Corrige Initialize em GraphicsDevice

This commit is contained in:
Danilo 2024-06-05 09:26:33 -03:00
parent 9a8e3e26b5
commit 4335323879
4 changed files with 29 additions and 11 deletions

View File

@ -2,7 +2,7 @@
#include "xna/game/gdevicemanager.hpp"
namespace xna {
void reset(GraphicsDevice::PlatformImplementation& impl)
static void reset(GraphicsDevice::PlatformImplementation& impl)
{
if (impl._device) {
impl._device->Release();
@ -24,7 +24,7 @@ namespace xna {
impl._renderTarget2D = nullptr;
}
bool createDevice(GraphicsDevice::PlatformImplementation& impl) {
static bool createDevice(GraphicsDevice::PlatformImplementation& impl) {
auto createDeviceFlags = 0;
#if _DEBUG
createDeviceFlags = D3D11_CREATE_DEVICE_FLAG::D3D11_CREATE_DEVICE_DEBUG;
@ -75,6 +75,7 @@ namespace xna {
impl = unew<PlatformImplementation>();
impl->_adapter = info.Adapter;
impl->_gameWindow = info.Window;
impl->_presentationParameters = info.Parameters;
impl->_adapter->CurrentDisplayMode(
impl->_presentationParameters->BackBufferFormat,
@ -86,7 +87,7 @@ namespace xna {
impl = nullptr;
}
bool GraphicsDevice::Initialize(GameWindow& gameWindow) {
bool GraphicsDevice::Initialize() {
if (!impl)
impl = uptr<PlatformImplementation>();
@ -101,14 +102,14 @@ namespace xna {
if (FAILED(hr))
return false;
const auto bounds = gameWindow.ClientBounds();
const auto bounds = impl->_gameWindow->ClientBounds();
impl->_viewport = xna::Viewport(0.0F, 0.0F,
static_cast<float>(bounds.Width),
static_cast<float>(bounds.Height),
0.0F, 1.F);
COLORREF color = gameWindow.impl->Color();
COLORREF color = impl->_gameWindow->impl->Color();
impl->_backgroundColor[0] = GetRValue(color) / 255.0f;
impl->_backgroundColor[1] = GetGValue(color) / 255.0f;
impl->_backgroundColor[2] = GetBValue(color) / 255.0f;
@ -117,7 +118,7 @@ namespace xna {
impl->_swapChain = New<xna::SwapChain>(_this);
impl->_swapChain->Initialize();
hr = impl->_factory->MakeWindowAssociation(gameWindow.impl->WindowHandle(), DXGI_MWA_NO_ALT_ENTER);
hr = impl->_factory->MakeWindowAssociation(impl->_gameWindow->impl->WindowHandle(), DXGI_MWA_NO_ALT_ENTER);
if (FAILED(hr)) return false;
impl->_renderTarget2D = New<RenderTarget2D>(_this);

View File

@ -83,12 +83,11 @@ namespace xna {
}
bool initDevice(GraphicsDeviceInformation& info, Game& game, sptr<GraphicsDevice>& device)
{
auto& window = info.Window;
{
device = New<GraphicsDevice>(info);
if (!device->Initialize(*window)) {
MessageBox(window->impl->WindowHandle(), "Falha na inicializaçăo do dispositivo gráfico", "XN65", MB_OK);
if (!device->Initialize()) {
MessageBox(info.Window->impl->WindowHandle(), "Falha na inicialização do dispositivo gráfico", "XN65", MB_OK);
device = nullptr;
return false;
}

View File

@ -11,7 +11,7 @@ namespace xna {
~GraphicsDevice();
void Clear();
void Clear(Color const& color);
bool Initialize(GameWindow& gameWindow);
bool Initialize();
bool Present();
sptr<GraphicsAdapter> Adapter() const;
void Adapter(sptr<GraphicsAdapter> const& adapter);

View File

@ -447,6 +447,23 @@ namespace xna {
};
struct GraphicsDevice::PlatformImplementation {
~PlatformImplementation() {
if (_device) {
_device->Release();
_device = nullptr;
}
if (_context) {
_context->Release();
_device = nullptr;
}
if (_factory) {
_factory->Release();
_factory = nullptr;
}
}
ID3D11Device* _device{ nullptr };
ID3D11DeviceContext* _context{ nullptr };
IDXGIFactory1* _factory = nullptr;
@ -454,6 +471,7 @@ namespace xna {
sptr<GraphicsAdapter> _adapter{ nullptr };
sptr<RenderTarget2D> _renderTarget2D{ nullptr };
sptr<BlendState> _blendState{ nullptr };
sptr<GameWindow> _gameWindow = nullptr;
xna::Viewport _viewport{};
sptr<xna::PresentationParameters> _presentationParameters;
D3D_FEATURE_LEVEL _featureLevel{ D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_11_0 };