Commit 42c3decc authored by Administrator's avatar Administrator
Browse files

add bindables and drawables

parent ca26976f
......@@ -19,6 +19,21 @@
<Filter Include="Shader">
<UniqueIdentifier>{a93d4d3c-0eaa-43f3-b67b-4145e2090bfc}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Bindables">
<UniqueIdentifier>{2374654f-f5e0-4773-8e27-d57494ccf53f}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Drawables">
<UniqueIdentifier>{1f8add8b-4a35-4fbc-824e-4bc57b68bf3e}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Macros">
<UniqueIdentifier>{43a71e8b-5cbf-4369-a0fc-c4aebba17560}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Bindables">
<UniqueIdentifier>{50b4eb78-a8fd-4068-b158-623ca539d711}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Drawables">
<UniqueIdentifier>{ec1eb5eb-ddd0-47dc-b917-51d4324dc100}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="WinMain.cpp">
......@@ -54,6 +69,36 @@
<ClCompile Include="DxgiInfoManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Bindable.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="IndexBuffer.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="InputLayout.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="PixelShader.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Topology.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="TransformCbuf.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="VertexBuffer.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="VertexShader.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Box.cpp">
<Filter>Source Files\Drawables</Filter>
</ClCompile>
<ClCompile Include="Drawable.cpp">
<Filter>Source Files\Drawables</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ChiliException.h">
......@@ -92,11 +137,47 @@
<ClInclude Include="DxgiInfoManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Bindable.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="BindableBase.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="ConstantBuffers.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="IndexBuffer.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="InputLayout.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="PixelShader.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Topology.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="TransformCbuf.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="VertexBuffer.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="VertexShader.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Box.h">
<Filter>Header Files\Drawables</Filter>
</ClInclude>
<ClInclude Include="Drawable.h">
<Filter>Header Files\Drawables</Filter>
</ClInclude>
<ClInclude Include="GraphicsThrowMacros.h">
<Filter>Header Files</Filter>
<Filter>Header Files\Macros</Filter>
</ClInclude>
<ClInclude Include="WindowsThrowMacros.h">
<Filter>Header Files</Filter>
<Filter>Header Files\Macros</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
......
#include "Topology.h"
Topology::Topology( Graphics& gfx,D3D11_PRIMITIVE_TOPOLOGY type )
:
type( type )
{}
void Topology::Bind( Graphics& gfx ) noexcept
{
GetContext( gfx )->IASetPrimitiveTopology( type );
}
#pragma once
#include "Bindable.h"
class Topology : public Bindable
{
public:
Topology( Graphics& gfx,D3D11_PRIMITIVE_TOPOLOGY type );
void Bind( Graphics& gfx ) noexcept override;
protected:
D3D11_PRIMITIVE_TOPOLOGY type;
};
\ No newline at end of file
#include "TransformCbuf.h"
TransformCbuf::TransformCbuf( Graphics& gfx,const Drawable& parent )
:
vcbuf( gfx ),
parent( parent )
{}
void TransformCbuf::Bind( Graphics& gfx ) noexcept
{
vcbuf.Update( gfx,
DirectX::XMMatrixTranspose(
parent.GetTransformXM() * gfx.GetProjection()
)
);
vcbuf.Bind( gfx );
}
#pragma once
#include "ConstantBuffers.h"
#include "Drawable.h"
#include <DirectXMath.h>
class TransformCbuf : public Bindable
{
public:
TransformCbuf( Graphics& gfx,const Drawable& parent );
void Bind( Graphics& gfx ) noexcept override;
private:
VertexConstantBuffer<DirectX::XMMATRIX> vcbuf;
const Drawable& parent;
};
\ No newline at end of file
#include "VertexBuffer.h"
void VertexBuffer::Bind( Graphics& gfx ) noexcept
{
const UINT offset = 0u;
GetContext( gfx )->IASetVertexBuffers( 0u,1u,pVertexBuffer.GetAddressOf(),&stride,&offset );
}
#pragma once
#include "Bindable.h"
#include "GraphicsThrowMacros.h"
class VertexBuffer : public Bindable
{
public:
template<class V>
VertexBuffer( Graphics& gfx,const std::vector<V>& vertices )
:
stride( sizeof( V ) )
{
INFOMAN( gfx );
D3D11_BUFFER_DESC bd = {};
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.Usage = D3D11_USAGE_DEFAULT;
bd.CPUAccessFlags = 0u;
bd.MiscFlags = 0u;
bd.ByteWidth = UINT( sizeof( V ) * vertices.size() );
bd.StructureByteStride = sizeof( V );
D3D11_SUBRESOURCE_DATA sd = {};
sd.pSysMem = vertices.data();
GFX_THROW_INFO( GetDevice( gfx )->CreateBuffer( &bd,&sd,&pVertexBuffer ) );
}
void Bind( Graphics& gfx ) noexcept override;
protected:
UINT stride;
Microsoft::WRL::ComPtr<ID3D11Buffer> pVertexBuffer;
};
#include "VertexShader.h"
#include "GraphicsThrowMacros.h"
VertexShader::VertexShader( Graphics& gfx,const std::wstring& path )
{
INFOMAN( gfx );
GFX_THROW_INFO( D3DReadFileToBlob( path.c_str(),&pBytecodeBlob ) );
GFX_THROW_INFO( GetDevice( gfx )->CreateVertexShader(
pBytecodeBlob->GetBufferPointer(),
pBytecodeBlob->GetBufferSize(),
nullptr,
&pVertexShader
) );
}
void VertexShader::Bind( Graphics& gfx ) noexcept
{
GetContext( gfx )->VSSetShader( pVertexShader.Get(),nullptr,0u );
}
ID3DBlob* VertexShader::GetBytecode() const noexcept
{
return pBytecodeBlob.Get();
}
#pragma once
#include "Bindable.h"
class VertexShader : public Bindable
{
public:
VertexShader( Graphics& gfx,const std::wstring& path );
void Bind( Graphics& gfx ) noexcept override;
ID3DBlob* GetBytecode() const noexcept;
protected:
Microsoft::WRL::ComPtr<ID3DBlob> pBytecodeBlob;
Microsoft::WRL::ComPtr<ID3D11VertexShader> pVertexShader;
};
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment