From 1ca0bf2ffb1222f7735c70974fa43abf7ad63e4c Mon Sep 17 00:00:00 2001 From: Danilo Date: Mon, 20 May 2024 09:32:34 -0300 Subject: [PATCH] Corrige DataBuffer --- framework/CMakeLists.txt | 2 +- framework/platform/buffer.cpp | 35 +++++++++++++++++++++++++-- framework/platform/databuffer-dx.cpp | 6 ----- framework/platform/shader-dx.cpp | 15 ++++++------ framework/platform/vertexinput-dx.cpp | 8 +++--- framework/xna.cpp | 5 +++- inc/graphics/buffer.hpp | 12 +++++++++ inc/graphics/databuffer.hpp | 14 ----------- inc/platform-dx/databuffer-dx.hpp | 26 -------------------- inc/platform-dx/implementations.hpp | 15 ++++++++++++ inc/platform-dx/shader-dx.hpp | 1 + inc/platform-dx/xna-dx.hpp | 1 - inc/xna.hpp | 1 - 13 files changed, 78 insertions(+), 63 deletions(-) delete mode 100644 framework/platform/databuffer-dx.cpp delete mode 100644 inc/graphics/databuffer.hpp delete mode 100644 inc/platform-dx/databuffer-dx.hpp diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt index d657a28..438f181 100644 --- a/framework/CMakeLists.txt +++ b/framework/CMakeLists.txt @@ -22,7 +22,7 @@ add_executable (xna WIN32 "platform/vertexbuffer-dx.cpp" "platform/indexbuffer-dx.cpp" -"platform/databuffer-dx.cpp" + "platform/samplerstate-dx.cpp" "platform/sprite-dx.cpp" diff --git a/framework/platform/buffer.cpp b/framework/platform/buffer.cpp index 53e927c..4622197 100644 --- a/framework/platform/buffer.cpp +++ b/framework/platform/buffer.cpp @@ -5,8 +5,13 @@ #include "platform-dx/implementations.hpp" namespace xna { - ConstantBuffer::ConstantBuffer() : GraphicsResource(nullptr){} - ConstantBuffer::ConstantBuffer(sptr const& device) : GraphicsResource(device){} + ConstantBuffer::ConstantBuffer() : GraphicsResource(nullptr){ + impl = uNew(); + } + + ConstantBuffer::ConstantBuffer(sptr const& device) : GraphicsResource(device){ + impl = uNew(); + } ConstantBuffer::~ConstantBuffer() { impl = nullptr; @@ -36,4 +41,30 @@ namespace xna { return true; } + + DataBuffer::DataBuffer() : GraphicsResource(nullptr) { + impl = uNew(); + } + + DataBuffer::DataBuffer(sptr const& device) : GraphicsResource(device) { + impl = uNew(); + } + + DataBuffer::~DataBuffer() { + impl = nullptr; + } + + bool DataBuffer::Initialize(xna_error_ptr_arg) { + if (!m_device || !m_device->_device) { + xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); + return false; + } + + if (impl->_blob) { + impl->_blob->Release(); + impl->_blob = nullptr; + } + + return true; + } } \ No newline at end of file diff --git a/framework/platform/databuffer-dx.cpp b/framework/platform/databuffer-dx.cpp deleted file mode 100644 index b8705b1..0000000 --- a/framework/platform/databuffer-dx.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "platform-dx/databuffer-dx.hpp" - -namespace xna { - - -} \ No newline at end of file diff --git a/framework/platform/shader-dx.cpp b/framework/platform/shader-dx.cpp index 546b5be..e41d09a 100644 --- a/framework/platform/shader-dx.cpp +++ b/framework/platform/shader-dx.cpp @@ -1,6 +1,7 @@ #include "platform-dx/shader-dx.hpp" #include "platform-dx/device-dx.hpp" -#include "platform-dx/databuffer-dx.hpp" +#include "graphics/buffer.hpp" +#include "platform-dx/implementations.hpp" namespace xna { HRESULT Shader::CompileFromFile(_In_ LPCWSTR srcFile, _In_ LPCSTR entryPoint, _In_ LPCSTR profile, _Outptr_ ID3DBlob** blob) @@ -49,7 +50,7 @@ namespace xna { bool VertexShader::Initialize(DataBuffer& buffer, xna_error_ptr_arg) { - if (!m_device || !m_device->_device || !buffer._blob) { + if (!m_device || !m_device->_device || !buffer.impl->_blob) { xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); return false; } @@ -60,8 +61,8 @@ namespace xna { } const auto hr = m_device->_device->CreateVertexShader( - buffer._blob->GetBufferPointer(), - buffer._blob->GetBufferSize(), + buffer.impl->_blob->GetBufferPointer(), + buffer.impl->_blob->GetBufferSize(), NULL, &_vertexShader); @@ -75,7 +76,7 @@ namespace xna { bool PixelShader::Initialize(DataBuffer& buffer, xna_error_ptr_arg) { - if (!m_device || !m_device->_device || !buffer._blob) { + if (!m_device || !m_device->_device || !buffer.impl->_blob) { xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); return false; } @@ -86,8 +87,8 @@ namespace xna { } const auto hr = m_device->_device->CreatePixelShader( - buffer._blob->GetBufferPointer(), - buffer._blob->GetBufferSize(), + buffer.impl->_blob->GetBufferPointer(), + buffer.impl->_blob->GetBufferSize(), NULL, &_pixelShader); diff --git a/framework/platform/vertexinput-dx.cpp b/framework/platform/vertexinput-dx.cpp index 245fa6d..0971787 100644 --- a/framework/platform/vertexinput-dx.cpp +++ b/framework/platform/vertexinput-dx.cpp @@ -1,11 +1,11 @@ #include "platform-dx/vertexinput-dx.hpp" #include "platform-dx/device-dx.hpp" #include "platform-dx/dxheaders.hpp" -#include "platform-dx/databuffer-dx.hpp" +#include "platform-dx/implementations.hpp" namespace xna { bool VertexInputLayout::Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_ptr_arg){ - if (!device._device || !blob._blob) { + if (!device._device || !blob.impl->_blob) { xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); return false; } @@ -18,8 +18,8 @@ namespace xna { const auto hr = device._device->CreateInputLayout( _description.data(), static_cast(_description.size()), - blob._blob->GetBufferPointer(), - blob._blob->GetBufferSize(), + blob.impl->_blob->GetBufferPointer(), + blob.impl->_blob->GetBufferSize(), &_inputLayout); if (FAILED(hr)) { diff --git a/framework/xna.cpp b/framework/xna.cpp index b915f8a..9bd2425 100644 --- a/framework/xna.cpp +++ b/framework/xna.cpp @@ -44,7 +44,10 @@ namespace xna { graphicsDevice->Clear(Colors::CornflowerBlue); spriteBatch->Begin(); - spriteBatch->Draw(*texture, Vector2(), Colors::White); + + if(texture) + spriteBatch->Draw(*texture, Vector2(), Colors::White); + spriteBatch->End(); Game::Draw(gameTime); diff --git a/inc/graphics/buffer.hpp b/inc/graphics/buffer.hpp index e0f422e..8e11de9 100644 --- a/inc/graphics/buffer.hpp +++ b/inc/graphics/buffer.hpp @@ -16,6 +16,18 @@ namespace xna { struct PlatformImplementation; uptr impl = nullptr; }; + + class DataBuffer : public GraphicsResource { + public: + DataBuffer(); + DataBuffer(sptr const&); + ~DataBuffer(); + bool Initialize(xna_error_nullarg); + + public: + struct PlatformImplementation; + uptr impl = nullptr; + }; } #endif \ No newline at end of file diff --git a/inc/graphics/databuffer.hpp b/inc/graphics/databuffer.hpp deleted file mode 100644 index 95ba4d1..0000000 --- a/inc/graphics/databuffer.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef XNA_GRAPHICS_DATABUFFER_HPP -#define XNA_GRAPHICS_DATABUFFER_HPP - -#include "../default.hpp" - -namespace xna { - class IDataBuffer { - public: - virtual ~IDataBuffer(){} - virtual bool Initialize(GraphicsDevice& device, xna_error_nullarg) = 0; - }; -} - -#endif \ No newline at end of file diff --git a/inc/platform-dx/databuffer-dx.hpp b/inc/platform-dx/databuffer-dx.hpp deleted file mode 100644 index 8ce2a20..0000000 --- a/inc/platform-dx/databuffer-dx.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef XNA_PLATFORM_DATABUFFER_DX_HPP -#define XNA_PLATFORM_DATABUFFER_DX_HPP - -#include "../graphics/databuffer.hpp" -#include "dxheaders.hpp" - -namespace xna { - class DataBuffer : public IDataBuffer { - public: - virtual ~DataBuffer() override { - if (_blob) { - _blob->Release(); - _blob = nullptr; - } - } - - virtual bool Initialize(GraphicsDevice& device, xna_error_nullarg) override { - return false; - } - - public: - ID3DBlob* _blob = nullptr; - }; -} - -#endif \ No newline at end of file diff --git a/inc/platform-dx/implementations.hpp b/inc/platform-dx/implementations.hpp index 125bff1..05c72cf 100644 --- a/inc/platform-dx/implementations.hpp +++ b/inc/platform-dx/implementations.hpp @@ -233,4 +233,19 @@ namespace xna { ID3D11Buffer* _buffer = nullptr; DirectX::XMMATRIX _worldViewProjection; }; + + struct DataBuffer::PlatformImplementation { + ~PlatformImplementation() { + if (_blob) { + _blob->Release(); + _blob = nullptr; + } + } + + ID3DBlob* _blob = nullptr; + + void Set(ID3DBlob*& blob) { + _blob = blob; + } + }; } \ No newline at end of file diff --git a/inc/platform-dx/shader-dx.hpp b/inc/platform-dx/shader-dx.hpp index e7938f7..28b3c17 100644 --- a/inc/platform-dx/shader-dx.hpp +++ b/inc/platform-dx/shader-dx.hpp @@ -3,6 +3,7 @@ #include "../graphics/shader.hpp" #include "../graphics/gresource.hpp" +#include "graphics/buffer.hpp" #include "dxheaders.hpp" namespace xna { diff --git a/inc/platform-dx/xna-dx.hpp b/inc/platform-dx/xna-dx.hpp index 6219942..d9cec6c 100644 --- a/inc/platform-dx/xna-dx.hpp +++ b/inc/platform-dx/xna-dx.hpp @@ -1,5 +1,4 @@ #include "audioengine-dx.hpp" -#include "databuffer-dx.hpp" #include "depthstencilstate-dx.hpp" #include "device-dx.hpp" #include "displaymode-dx.hpp" diff --git a/inc/xna.hpp b/inc/xna.hpp index 64f082f..e4f4730 100644 --- a/inc/xna.hpp +++ b/inc/xna.hpp @@ -33,7 +33,6 @@ #include "game/window.hpp" #include "graphics/adapter.hpp" #include "graphics/blendstate.hpp" -#include "graphics/databuffer.hpp" #include "graphics/depthstencilstate.hpp" #include "graphics/device.hpp" #include "graphics/displaymode.hpp"