diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt index 3e18b9b..770b414 100644 --- a/framework/CMakeLists.txt +++ b/framework/CMakeLists.txt @@ -16,7 +16,7 @@ add_executable (xna WIN32 "csharp/stream.cpp" "platform/gdevicemanager-dx.cpp" -"platform/vertexinput-dx.cpp" + "platform/shader-dx.cpp" "platform/rasterizerstate-dx.cpp" diff --git a/framework/platform/buffer.cpp b/framework/platform/buffer.cpp index f18d74a..4c663e9 100644 --- a/framework/platform/buffer.cpp +++ b/framework/platform/buffer.cpp @@ -121,4 +121,42 @@ namespace xna { return true; } + + VertexInputLayout::VertexInputLayout() : GraphicsResource(nullptr) { + impl = uNew(); + } + + VertexInputLayout::VertexInputLayout(sptr const& device) : GraphicsResource(device) { + impl = uNew(); + } + + VertexInputLayout::~VertexInputLayout() { + impl = nullptr; + } + + bool VertexInputLayout::Initialize(DataBuffer& blob, xna_error_ptr_arg) { + if (!impl || !m_device || !m_device->_device || !blob.impl->_blob) { + xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); + return false; + } + + if (impl->_inputLayout) { + impl->_inputLayout->Release(); + impl->_inputLayout = nullptr; + } + + const auto hr = m_device->_device->CreateInputLayout( + impl->_description.data(), + static_cast(impl->_description.size()), + blob.impl->_blob->GetBufferPointer(), + blob.impl->_blob->GetBufferSize(), + &impl->_inputLayout); + + if (FAILED(hr)) { + xna_error_apply(err, XnaErrorCode::FAILED_OPERATION); + return false; + } + + return true; + } } \ No newline at end of file diff --git a/framework/platform/vertexinput-dx.cpp b/framework/platform/vertexinput-dx.cpp deleted file mode 100644 index 0971787..0000000 --- a/framework/platform/vertexinput-dx.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "platform-dx/vertexinput-dx.hpp" -#include "platform-dx/device-dx.hpp" -#include "platform-dx/dxheaders.hpp" -#include "platform-dx/implementations.hpp" - -namespace xna { - bool VertexInputLayout::Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_ptr_arg){ - if (!device._device || !blob.impl->_blob) { - xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); - return false; - } - - if (_inputLayout) { - _inputLayout->Release(); - _inputLayout = nullptr; - } - - const auto hr = device._device->CreateInputLayout( - _description.data(), - static_cast(_description.size()), - blob.impl->_blob->GetBufferPointer(), - blob.impl->_blob->GetBufferSize(), - &_inputLayout); - - if (FAILED(hr)) { - xna_error_apply(err, XnaErrorCode::FAILED_OPERATION); - return false; - } - - return true; - } -} \ No newline at end of file diff --git a/inc/common/curve.hpp b/inc/common/curve.hpp index 24c39c7..98d89eb 100644 --- a/inc/common/curve.hpp +++ b/inc/common/curve.hpp @@ -285,7 +285,7 @@ namespace xna { if (num < 0.0) --num; - return static_cast(num); + return static_cast(static_cast(num)); } constexpr float FindSegment(float t, CurveKey& k0, CurveKey& k1) { diff --git a/inc/graphics/buffer.hpp b/inc/graphics/buffer.hpp index 7b1f7e3..0adde1e 100644 --- a/inc/graphics/buffer.hpp +++ b/inc/graphics/buffer.hpp @@ -57,6 +57,19 @@ namespace xna { struct PlatformImplementation; uptr impl = nullptr; }; + + class VertexInputLayout : public GraphicsResource { + public: + VertexInputLayout(); + VertexInputLayout(sptr const&); + ~VertexInputLayout(); + + bool Initialize(DataBuffer& blob, xna_error_nullarg); + + public: + struct PlatformImplementation; + uptr impl = nullptr; + }; } #endif \ No newline at end of file diff --git a/inc/graphics/vertexinput.hpp b/inc/graphics/vertexinput.hpp deleted file mode 100644 index 672e76d..0000000 --- a/inc/graphics/vertexinput.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef XNA_GRAPHICS_VERTEXINPUT_HPP -#define XNA_GRAPHICS_VERTEXINPUT_HPP - -#include "../default.hpp" - -namespace xna { - class IVertexInputLayout { - public: - virtual ~IVertexInputLayout(){} - virtual bool Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_nullarg) = 0; - }; -} - -#endif \ No newline at end of file diff --git a/inc/platform-dx/implementations.hpp b/inc/platform-dx/implementations.hpp index 3da0495..03a5d02 100644 --- a/inc/platform-dx/implementations.hpp +++ b/inc/platform-dx/implementations.hpp @@ -86,7 +86,7 @@ namespace xna { D3D11_BUFFER_DESC _description{}; D3D11_SUBRESOURCE_DATA _subResource{}; ID3D11Buffer* _buffer = nullptr; - DirectX::XMMATRIX _worldViewProjection; + DirectX::XMMATRIX _worldViewProjection{}; }; struct DataBuffer::PlatformImplementation { @@ -333,6 +333,18 @@ namespace xna { return true; } + + struct VertexInputLayout::PlatformImplementation { + ~PlatformImplementation() { + if (_inputLayout) { + _inputLayout->Release(); + _inputLayout = nullptr; + } + } + + ID3D11InputLayout* _inputLayout{ nullptr }; + std::vector _description{}; + }; } #endif \ No newline at end of file diff --git a/inc/platform-dx/vertexinput-dx.hpp b/inc/platform-dx/vertexinput-dx.hpp deleted file mode 100644 index c646e0c..0000000 --- a/inc/platform-dx/vertexinput-dx.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef XNA_PLATFORM_VERTEXINPUT_DX_HPP -#define XNA_PLATFORM_VERTEXINPUT_DX_HPP - -#include "../graphics/vertexinput.hpp" -#include "dxgi.h" -#include "d3d11.h" - -namespace xna { - class VertexInputLayout : public IVertexInputLayout { - public: - VertexInputLayout() = default; - - VertexInputLayout( - std::vector const& description) : - _description(description){} - - virtual ~VertexInputLayout() override{ - if (_inputLayout) { - _inputLayout->Release(); - _inputLayout = nullptr; - } - } - - virtual bool Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_nullarg); - - public: - ID3D11InputLayout* _inputLayout{ nullptr }; - std::vector _description{}; - }; -} - -#endif \ No newline at end of file diff --git a/inc/platform-dx/xna-dx.hpp b/inc/platform-dx/xna-dx.hpp index 7e7157d..ad91760 100644 --- a/inc/platform-dx/xna-dx.hpp +++ b/inc/platform-dx/xna-dx.hpp @@ -8,6 +8,5 @@ #include "gdevicemanager-dx.hpp" #include "init-dx.hpp" #include "soundeffect-dx.hpp" -#include "vertexinput-dx.hpp" #include "window-dx.hpp" #include "implementations.hpp" \ No newline at end of file diff --git a/inc/xna.hpp b/inc/xna.hpp index bcc2452..4339fd0 100644 --- a/inc/xna.hpp +++ b/inc/xna.hpp @@ -45,7 +45,6 @@ #include "graphics/sprite.hpp" #include "graphics/swapchain.hpp" #include "graphics/texture.hpp" -#include "graphics/vertexinput.hpp" #include "graphics/vertexposition.hpp" #include "graphics/viewport.hpp" #include "input/gamepad.hpp"