mirror of
https://github.com/borgesdan/xn65
synced 2024-12-29 21:54:47 +01:00
Modificações em buffers
This commit is contained in:
parent
f920900519
commit
2dc806fb38
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# Add source to this project's executable.
|
# Add source to this project's executable.
|
||||||
add_executable (xna WIN32 "xna.cpp" "xna.h" "platform/window-dx.cpp" "platform/device-dx.cpp" "platform/adapter-dx.cpp" "platform/swapchain-dx.cpp" "platform/rendertarget-dx.cpp" "platform/texture-dx.cpp" "platform/blendstate-dx.cpp" "platform/game-dx.cpp" "platform/clock-dx.cpp" "csharp/stream.cpp" "platform/gdevicemanager-dx.cpp" "platform/vertexinput-dx.cpp" "platform/shader-dx.cpp" "platform/rasterizer-dx.cpp" "platform/vertexbuffer-dx.cpp" "platform/indexbuffer-dx.cpp" "common/matrix.cpp")
|
add_executable (xna WIN32 "xna.cpp" "xna.h" "platform/window-dx.cpp" "platform/device-dx.cpp" "platform/adapter-dx.cpp" "platform/swapchain-dx.cpp" "platform/rendertarget-dx.cpp" "platform/texture-dx.cpp" "platform/blendstate-dx.cpp" "platform/game-dx.cpp" "platform/clock-dx.cpp" "csharp/stream.cpp" "platform/gdevicemanager-dx.cpp" "platform/vertexinput-dx.cpp" "platform/shader-dx.cpp" "platform/rasterizer-dx.cpp" "platform/vertexbuffer-dx.cpp" "platform/indexbuffer-dx.cpp" "common/matrix.cpp" "platform/constbuffer-dx.cpp" "platform/databuffer-dx.cpp")
|
||||||
|
|
||||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
||||||
set_property(TARGET xna PROPERTY CXX_STANDARD 20)
|
set_property(TARGET xna PROPERTY CXX_STANDARD 20)
|
||||||
|
@ -9,7 +9,7 @@ namespace xna {
|
|||||||
if (d < 9.9999997473787516E-05)
|
if (d < 9.9999997473787516E-05)
|
||||||
result1 = cameraForwardVector ? -*cameraForwardVector : Vector3::Forward();
|
result1 = cameraForwardVector ? -*cameraForwardVector : Vector3::Forward();
|
||||||
else
|
else
|
||||||
result1 = Vector3::Multiply(result1, 1.0f / sqrt(d));
|
result1 = Vector3::Multiply(result1, static_cast<float>(1.0 / sqrt(d)));
|
||||||
|
|
||||||
Vector3 result2 = Vector3::Cross(cameraUpVector, result1);
|
Vector3 result2 = Vector3::Cross(cameraUpVector, result1);
|
||||||
result2.Normalize();
|
result2.Normalize();
|
||||||
@ -45,7 +45,7 @@ namespace xna {
|
|||||||
if (d < 9.9999997473787516E-05)
|
if (d < 9.9999997473787516E-05)
|
||||||
result1 = cameraForwardVector ? -*cameraForwardVector : Vector3::Forward();
|
result1 = cameraForwardVector ? -*cameraForwardVector : Vector3::Forward();
|
||||||
else
|
else
|
||||||
result1 = Vector3::Multiply(result1, 1.0f / sqrt(d));
|
result1 = Vector3::Multiply(result1, static_cast<float>(1.0 / sqrt(d)));
|
||||||
|
|
||||||
//Vector3 vector2 = rotateAxis;
|
//Vector3 vector2 = rotateAxis;
|
||||||
float result2 = Vector3::Dot(rotateAxis, result1);
|
float result2 = Vector3::Dot(rotateAxis, result1);
|
||||||
@ -106,8 +106,8 @@ namespace xna {
|
|||||||
|
|
||||||
Matrix Matrix::CreateRotationX(float radians)
|
Matrix Matrix::CreateRotationX(float radians)
|
||||||
{
|
{
|
||||||
const auto num1 = cos(radians);
|
const auto num1 = static_cast<float>(cos(radians));
|
||||||
const auto num2 = sin(radians);
|
const auto num2 = static_cast<float>(sin(radians));
|
||||||
|
|
||||||
Matrix rotationX;
|
Matrix rotationX;
|
||||||
rotationX.M11 = 1.0f;
|
rotationX.M11 = 1.0f;
|
||||||
@ -131,8 +131,8 @@ namespace xna {
|
|||||||
|
|
||||||
Matrix Matrix::CreateRotationY(float radians)
|
Matrix Matrix::CreateRotationY(float radians)
|
||||||
{
|
{
|
||||||
const auto num1 = cos(radians);
|
const auto num1 = static_cast<float>(cos(radians));
|
||||||
const auto num2 = sin(radians);
|
const auto num2 = static_cast<float>(sin(radians));
|
||||||
Matrix rotationY;
|
Matrix rotationY;
|
||||||
rotationY.M11 = num1;
|
rotationY.M11 = num1;
|
||||||
rotationY.M12 = 0.0f;
|
rotationY.M12 = 0.0f;
|
||||||
@ -155,8 +155,8 @@ namespace xna {
|
|||||||
|
|
||||||
Matrix Matrix::CreateRotationZ(float radians)
|
Matrix Matrix::CreateRotationZ(float radians)
|
||||||
{
|
{
|
||||||
const auto num1 = cos(radians);
|
const auto num1 = static_cast<float>(cos(radians));
|
||||||
const auto num2 = sin(radians);
|
const auto num2 = static_cast<float>(sin(radians));
|
||||||
Matrix rotationZ;
|
Matrix rotationZ;
|
||||||
rotationZ.M11 = num1;
|
rotationZ.M11 = num1;
|
||||||
rotationZ.M12 = num2;
|
rotationZ.M12 = num2;
|
||||||
@ -182,8 +182,8 @@ namespace xna {
|
|||||||
const auto x = axis.X;
|
const auto x = axis.X;
|
||||||
const auto y = axis.Y;
|
const auto y = axis.Y;
|
||||||
const auto z = axis.Z;
|
const auto z = axis.Z;
|
||||||
const auto num1 = sin(angle);
|
const auto num1 = static_cast<float>(sin(angle));
|
||||||
const auto num2 = cos(angle);
|
const auto num2 = static_cast<float>(cos(angle));
|
||||||
const auto num3 = x * x;
|
const auto num3 = x * x;
|
||||||
const auto num4 = y * y;
|
const auto num4 = y * y;
|
||||||
const auto num5 = z * z;
|
const auto num5 = z * z;
|
||||||
@ -216,7 +216,7 @@ namespace xna {
|
|||||||
return Matrix();
|
return Matrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto num1 = 1.0f / tan(fieldOfView * 0.5);
|
const auto num1 = static_cast<float>(1.0 / tan(fieldOfView * 0.5));
|
||||||
const auto num2 = num1 / aspectRatio;
|
const auto num2 = num1 / aspectRatio;
|
||||||
|
|
||||||
Matrix perspectiveFieldOfView;
|
Matrix perspectiveFieldOfView;
|
||||||
|
@ -249,9 +249,9 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Matrix perspectiveOffCenter;
|
Matrix perspectiveOffCenter;
|
||||||
perspectiveOffCenter.M11 = (2.0 * nearPlaneDistance / (right - left));
|
perspectiveOffCenter.M11 = (2.0F * nearPlaneDistance / (right - left));
|
||||||
perspectiveOffCenter.M12 = perspectiveOffCenter.M13 = perspectiveOffCenter.M14 = 0.0f;
|
perspectiveOffCenter.M12 = perspectiveOffCenter.M13 = perspectiveOffCenter.M14 = 0.0f;
|
||||||
perspectiveOffCenter.M22 = (2.0 * nearPlaneDistance / (top - bottom));
|
perspectiveOffCenter.M22 = (2.0F * nearPlaneDistance / (top - bottom));
|
||||||
perspectiveOffCenter.M21 = perspectiveOffCenter.M23 = perspectiveOffCenter.M24 = 0.0f;
|
perspectiveOffCenter.M21 = perspectiveOffCenter.M23 = perspectiveOffCenter.M24 = 0.0f;
|
||||||
perspectiveOffCenter.M31 = (left + right) / (right - left);
|
perspectiveOffCenter.M31 = (left + right) / (right - left);
|
||||||
perspectiveOffCenter.M32 = (top + bottom) / (top - bottom);
|
perspectiveOffCenter.M32 = (top + bottom) / (top - bottom);
|
||||||
@ -268,7 +268,7 @@ namespace xna {
|
|||||||
orthographic.M12 = orthographic.M13 = orthographic.M14 = 0.0f;
|
orthographic.M12 = orthographic.M13 = orthographic.M14 = 0.0f;
|
||||||
orthographic.M22 = 2.0f / height;
|
orthographic.M22 = 2.0f / height;
|
||||||
orthographic.M21 = orthographic.M23 = orthographic.M24 = 0.0f;
|
orthographic.M21 = orthographic.M23 = orthographic.M24 = 0.0f;
|
||||||
orthographic.M33 = (1.0 / (zNearPlane - zFarPlane));
|
orthographic.M33 = (1.0F / (zNearPlane - zFarPlane));
|
||||||
orthographic.M31 = orthographic.M32 = orthographic.M34 = 0.0f;
|
orthographic.M31 = orthographic.M32 = orthographic.M34 = 0.0f;
|
||||||
orthographic.M41 = orthographic.M42 = 0.0f;
|
orthographic.M41 = orthographic.M42 = 0.0f;
|
||||||
orthographic.M43 = zNearPlane / (zNearPlane - zFarPlane);
|
orthographic.M43 = zNearPlane / (zNearPlane - zFarPlane);
|
||||||
|
@ -87,6 +87,8 @@ namespace xna {
|
|||||||
using PBlendState = std::shared_ptr<BlendState>;
|
using PBlendState = std::shared_ptr<BlendState>;
|
||||||
class ConstantBuffer;
|
class ConstantBuffer;
|
||||||
using PConstantBuffer = std::shared_ptr<ConstantBuffer>;
|
using PConstantBuffer = std::shared_ptr<ConstantBuffer>;
|
||||||
|
class DataBuffer;
|
||||||
|
using PDataBuffer = std::shared_ptr<DataBuffer>;
|
||||||
class DisplayMode;
|
class DisplayMode;
|
||||||
using PDisplayMode = std::shared_ptr<DisplayMode>;
|
using PDisplayMode = std::shared_ptr<DisplayMode>;
|
||||||
class DisplayModeCollection;
|
class DisplayModeCollection;
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef XNA_GRAPHICS_CONSTBUFFER_HPP
|
||||||
|
#define XNA_GRAPHICS_CONSTBUFFER_HPP
|
||||||
|
|
||||||
|
#include "../default.hpp"
|
||||||
|
|
||||||
|
namespace xna {
|
||||||
|
class IConstantBuffer {
|
||||||
|
public:
|
||||||
|
virtual ~IConstantBuffer(){}
|
||||||
|
virtual bool Initialize(GraphicsDevice& device, xna_error_nullarg) = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
14
framework/graphics/databuffer.hpp
Normal file
14
framework/graphics/databuffer.hpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#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
|
@ -7,6 +7,7 @@ namespace xna {
|
|||||||
class IShader {
|
class IShader {
|
||||||
public:
|
public:
|
||||||
virtual ~IShader() {}
|
virtual ~IShader() {}
|
||||||
|
virtual bool Initialize(GraphicsDevice& device, DataBuffer& buffer, xna_error_nullarg) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ namespace xna {
|
|||||||
class IVertexInputLayout {
|
class IVertexInputLayout {
|
||||||
public:
|
public:
|
||||||
virtual ~IVertexInputLayout(){}
|
virtual ~IVertexInputLayout(){}
|
||||||
|
virtual bool Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_nullarg) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
framework/platform/constbuffer-dx.cpp
Normal file
29
framework/platform/constbuffer-dx.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include "constbuffer-dx.hpp"
|
||||||
|
#include "device-dx.hpp"
|
||||||
|
|
||||||
|
namespace xna {
|
||||||
|
bool ConstantBuffer::Initialize(GraphicsDevice& device, xna_error_ptr_arg)
|
||||||
|
{
|
||||||
|
if (!device._device) {
|
||||||
|
xna_error_apply(err, XnaErrorCode::ARGUMENT_IS_NULL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_buffer) {
|
||||||
|
_buffer->Release();
|
||||||
|
_buffer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto hr = device._device->CreateBuffer(
|
||||||
|
&_description,
|
||||||
|
&_subResource,
|
||||||
|
&_buffer);
|
||||||
|
|
||||||
|
if (FAILED(hr)) {
|
||||||
|
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
28
framework/platform/constbuffer-dx.hpp
Normal file
28
framework/platform/constbuffer-dx.hpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef XNA_PLATFORM_CONSTBUFFER_DX_HPP
|
||||||
|
#define XNA_PLATFORM_CONSTBUFFER_DX_HPP
|
||||||
|
|
||||||
|
#include "../graphics/constbuffer.hpp"
|
||||||
|
#include "../common/matrix.hpp"
|
||||||
|
#include "dxheaders.hpp"
|
||||||
|
|
||||||
|
namespace xna {
|
||||||
|
class ConstantBuffer : public IConstantBuffer {
|
||||||
|
public:
|
||||||
|
virtual ~ConstantBuffer() override {
|
||||||
|
if (_buffer) {
|
||||||
|
_buffer->Release();
|
||||||
|
_buffer = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool Initialize(GraphicsDevice& device, xna_error_nullarg) override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
D3D11_BUFFER_DESC _description{};
|
||||||
|
D3D11_SUBRESOURCE_DATA _subResource{};
|
||||||
|
ID3D11Buffer* _buffer = nullptr;
|
||||||
|
DirectX::XMMATRIX _worldViewProjection;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
6
framework/platform/databuffer-dx.cpp
Normal file
6
framework/platform/databuffer-dx.cpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "databuffer-dx.hpp"
|
||||||
|
|
||||||
|
namespace xna {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
26
framework/platform/databuffer-dx.hpp
Normal file
26
framework/platform/databuffer-dx.hpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#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
|
@ -1,3 +1,4 @@
|
|||||||
#include "dxgi.h"
|
#include "dxgi.h"
|
||||||
#include "d3d11.h"
|
#include "d3d11.h"
|
||||||
#include <d3dcompiler.h>
|
#include <d3dcompiler.h>
|
||||||
|
#include <DirectXMath.h>
|
@ -33,9 +33,9 @@ namespace xna {
|
|||||||
indices.push_back(i + 2);
|
indices.push_back(i + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
_initialData.pSysMem = &indices.front();
|
_subResource.pSysMem = &indices.front();
|
||||||
|
|
||||||
const auto hr = device._device->CreateBuffer(&_description, &_initialData, &_buffer);
|
const auto hr = device._device->CreateBuffer(&_description, &_subResource, &_buffer);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
|
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
|
||||||
|
@ -9,8 +9,7 @@ namespace xna {
|
|||||||
public:
|
public:
|
||||||
IndexBuffer() {
|
IndexBuffer() {
|
||||||
_description.Usage = D3D11_USAGE_DEFAULT;
|
_description.Usage = D3D11_USAGE_DEFAULT;
|
||||||
_description.BindFlags = D3D11_BIND_INDEX_BUFFER;
|
_description.BindFlags = D3D11_BIND_INDEX_BUFFER;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexBuffer(size_t size) {
|
IndexBuffer(size_t size) {
|
||||||
@ -33,7 +32,7 @@ namespace xna {
|
|||||||
public:
|
public:
|
||||||
D3D11_BUFFER_DESC _description;
|
D3D11_BUFFER_DESC _description;
|
||||||
ID3D11Buffer* _buffer = nullptr;
|
ID3D11Buffer* _buffer = nullptr;
|
||||||
D3D11_SUBRESOURCE_DATA _initialData{};
|
D3D11_SUBRESOURCE_DATA _subResource{};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#include "shader-dx.hpp"
|
#include "shader-dx.hpp"
|
||||||
#include "device-dx.hpp"
|
#include "device-dx.hpp"
|
||||||
|
#include "databuffer-dx.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
HRESULT Shader::CompileFromFile(LPCWSTR srcFile, LPCSTR entryPoint, LPCSTR profile, ID3DBlob** blob)
|
HRESULT Shader::CompileFromFile(_In_ LPCWSTR srcFile, _In_ LPCSTR entryPoint, _In_ LPCSTR profile, _Outptr_ ID3DBlob** blob)
|
||||||
{
|
{
|
||||||
//https://learn.microsoft.com/en-us/windows/win32/direct3d11/how-to--compile-a-shader
|
//https://learn.microsoft.com/en-us/windows/win32/direct3d11/how-to--compile-a-shader
|
||||||
|
|
||||||
@ -44,43 +45,54 @@ namespace xna {
|
|||||||
*blob = shaderBlob;
|
*blob = shaderBlob;
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VertexShader::Initialize(ID3DBlob* blob, xna_error_ptr_arg) {
|
bool VertexShader::Initialize(GraphicsDevice& device, DataBuffer& buffer, xna_error_ptr_arg)
|
||||||
if (!_device || !blob) {
|
{
|
||||||
|
if (!device._device || !buffer._blob) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto hr = _device->_device->CreateVertexShader(
|
if (_vertexShader) {
|
||||||
blob->GetBufferPointer(),
|
_vertexShader->Release();
|
||||||
blob->GetBufferSize(),
|
_vertexShader = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto hr = device._device->CreateVertexShader(
|
||||||
|
buffer._blob->GetBufferPointer(),
|
||||||
|
buffer._blob->GetBufferSize(),
|
||||||
NULL,
|
NULL,
|
||||||
&_vertexShader);
|
&_vertexShader);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PixelShader::Initialize(ID3DBlob* blob, xna_error_ptr_arg)
|
bool PixelShader::Initialize(GraphicsDevice& device, DataBuffer& buffer, xna_error_ptr_arg)
|
||||||
{
|
{
|
||||||
if (!_device || !blob) {
|
if (!device._device || !buffer._blob) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto hr = _device->_device->CreatePixelShader(
|
if (_pixelShader) {
|
||||||
blob->GetBufferPointer(),
|
_pixelShader->Release();
|
||||||
blob->GetBufferSize(),
|
_pixelShader = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto hr = device._device->CreatePixelShader(
|
||||||
|
buffer._blob->GetBufferPointer(),
|
||||||
|
buffer._blob->GetBufferSize(),
|
||||||
NULL,
|
NULL,
|
||||||
&_pixelShader);
|
&_pixelShader);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,23 +7,18 @@
|
|||||||
namespace xna {
|
namespace xna {
|
||||||
class Shader : public IShader {
|
class Shader : public IShader {
|
||||||
public:
|
public:
|
||||||
Shader(GraphicsDevice* device) : _device(device) {
|
Shader() = default;
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~Shader() override {}
|
virtual ~Shader() override {}
|
||||||
|
|
||||||
virtual bool Initialize(ID3DBlob* blob, xna_error_nullarg) = 0;
|
virtual bool Initialize(GraphicsDevice& device, DataBuffer& buffer, xna_error_nullarg) override {}
|
||||||
|
|
||||||
static HRESULT CompileFromFile(_In_ LPCWSTR srcFile, _In_ LPCSTR entryPoint, _In_ LPCSTR profile, _Outptr_ ID3DBlob** blob);
|
static HRESULT CompileFromFile(_In_ LPCWSTR srcFile, _In_ LPCSTR entryPoint, _In_ LPCSTR profile, _Outptr_ ID3DBlob** blob);
|
||||||
|
|
||||||
public:
|
|
||||||
GraphicsDevice* _device = nullptr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class VertexShader : public Shader {
|
class VertexShader : public Shader {
|
||||||
public:
|
public:
|
||||||
VertexShader(GraphicsDevice* device) :
|
VertexShader() = default;
|
||||||
Shader(device) {}
|
|
||||||
|
|
||||||
virtual ~VertexShader() override {
|
virtual ~VertexShader() override {
|
||||||
if (_vertexShader) {
|
if (_vertexShader) {
|
||||||
@ -32,7 +27,7 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool Initialize(ID3DBlob* blob, xna_error_nullarg) override;
|
virtual bool Initialize(GraphicsDevice& device, DataBuffer& buffer, xna_error_nullarg) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ID3D11VertexShader* _vertexShader = nullptr;
|
ID3D11VertexShader* _vertexShader = nullptr;
|
||||||
@ -40,8 +35,7 @@ namespace xna {
|
|||||||
|
|
||||||
class PixelShader : public Shader {
|
class PixelShader : public Shader {
|
||||||
public:
|
public:
|
||||||
PixelShader(GraphicsDevice* device) :
|
PixelShader() = default;
|
||||||
Shader(device) {}
|
|
||||||
|
|
||||||
virtual ~PixelShader() override {
|
virtual ~PixelShader() override {
|
||||||
if (_pixelShader) {
|
if (_pixelShader) {
|
||||||
@ -50,7 +44,7 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool Initialize(ID3DBlob* blob, xna_error_nullarg) override;
|
virtual bool Initialize(GraphicsDevice& device, DataBuffer& buffer, xna_error_nullarg) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ID3D11PixelShader* _pixelShader = nullptr;
|
ID3D11PixelShader* _pixelShader = nullptr;
|
||||||
|
@ -16,7 +16,7 @@ namespace xna {
|
|||||||
|
|
||||||
const auto hr = device._device->CreateBuffer(
|
const auto hr = device._device->CreateBuffer(
|
||||||
&_description,
|
&_description,
|
||||||
_useInitialData ? &_initialData : nullptr,
|
&_subResource,
|
||||||
&_buffer);
|
&_buffer);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
|
@ -34,8 +34,7 @@ namespace xna {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
D3D11_BUFFER_DESC _description{};
|
D3D11_BUFFER_DESC _description{};
|
||||||
D3D11_SUBRESOURCE_DATA _initialData{};
|
D3D11_SUBRESOURCE_DATA _subResource{};
|
||||||
bool _useInitialData{ false };
|
|
||||||
ID3D11Buffer* _buffer = nullptr;
|
ID3D11Buffer* _buffer = nullptr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3,23 +3,29 @@
|
|||||||
#include <d3dcompiler.h>
|
#include <d3dcompiler.h>
|
||||||
#include "dxgi.h"
|
#include "dxgi.h"
|
||||||
#include "d3d11.h"
|
#include "d3d11.h"
|
||||||
|
#include "databuffer-dx.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
bool VertexInputLayout::Initialize(ID3DBlob* blob, xna_error_ptr_arg){
|
bool VertexInputLayout::Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_ptr_arg){
|
||||||
if (!_device || !blob) {
|
if (!device._device || !blob._blob) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto hr = _device->_device->CreateInputLayout(
|
if (_inputLayout) {
|
||||||
|
_inputLayout->Release();
|
||||||
|
_inputLayout = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto hr = device._device->CreateInputLayout(
|
||||||
_description.data(),
|
_description.data(),
|
||||||
static_cast<UINT>(_description.size()),
|
static_cast<UINT>(_description.size()),
|
||||||
blob->GetBufferPointer(),
|
blob._blob->GetBufferPointer(),
|
||||||
blob->GetBufferSize(),
|
blob._blob->GetBufferSize(),
|
||||||
&_inputLayout);
|
&_inputLayout);
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,10 +8,11 @@
|
|||||||
namespace xna {
|
namespace xna {
|
||||||
class VertexInputLayout : public IVertexInputLayout {
|
class VertexInputLayout : public IVertexInputLayout {
|
||||||
public:
|
public:
|
||||||
|
VertexInputLayout() = default;
|
||||||
|
|
||||||
VertexInputLayout(
|
VertexInputLayout(
|
||||||
GraphicsDevice* device,
|
|
||||||
std::vector<D3D11_INPUT_ELEMENT_DESC> const& description) :
|
std::vector<D3D11_INPUT_ELEMENT_DESC> const& description) :
|
||||||
_device(device), _description(description){}
|
_description(description){}
|
||||||
|
|
||||||
virtual ~VertexInputLayout() override{
|
virtual ~VertexInputLayout() override{
|
||||||
if (_inputLayout) {
|
if (_inputLayout) {
|
||||||
@ -20,12 +21,11 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool Initialize(ID3DBlob* blob, xna_error_nullarg);
|
virtual bool Initialize(GraphicsDevice& device, DataBuffer& blob, xna_error_nullarg);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ID3D11InputLayout* _inputLayout{ nullptr };
|
ID3D11InputLayout* _inputLayout{ nullptr };
|
||||||
std::vector<D3D11_INPUT_ELEMENT_DESC> _description{};
|
std::vector<D3D11_INPUT_ELEMENT_DESC> _description{};
|
||||||
GraphicsDevice* _device = nullptr;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user