Commit 7add7049 authored by chili's avatar chili
Browse files

rotation cbuf

parent 2dfc064e
...@@ -23,6 +23,6 @@ void App::DoFrame() ...@@ -23,6 +23,6 @@ void App::DoFrame()
{ {
const float c = sin( timer.Peek() ) / 2.0f + 0.5f; const float c = sin( timer.Peek() ) / 2.0f + 0.5f;
wnd.Gfx().ClearBuffer( c,c,1.0f ); wnd.Gfx().ClearBuffer( c,c,1.0f );
wnd.Gfx().DrawTestTriangle(); wnd.Gfx().DrawTestTriangle( timer.Peek() );
wnd.Gfx().EndFrame(); wnd.Gfx().EndFrame();
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "dxerr.h" #include "dxerr.h"
#include <sstream> #include <sstream>
#include <d3dcompiler.h> #include <d3dcompiler.h>
#include <cmath>
namespace wrl = Microsoft::WRL; namespace wrl = Microsoft::WRL;
...@@ -98,7 +99,7 @@ void Graphics::ClearBuffer( float red,float green,float blue ) noexcept ...@@ -98,7 +99,7 @@ void Graphics::ClearBuffer( float red,float green,float blue ) noexcept
pContext->ClearRenderTargetView( pTarget.Get(),color ); pContext->ClearRenderTargetView( pTarget.Get(),color );
} }
void Graphics::DrawTestTriangle() void Graphics::DrawTestTriangle( float angle )
{ {
HRESULT hr; HRESULT hr;
...@@ -171,6 +172,39 @@ void Graphics::DrawTestTriangle() ...@@ -171,6 +172,39 @@ void Graphics::DrawTestTriangle()
pContext->IASetIndexBuffer( pIndexBuffer.Get(),DXGI_FORMAT_R16_UINT,0u ); pContext->IASetIndexBuffer( pIndexBuffer.Get(),DXGI_FORMAT_R16_UINT,0u );
// create constant buffer for transformation matrix
struct ConstantBuffer
{
struct
{
float element[4][4];
} transformation;
};
const ConstantBuffer cb =
{
{
std::cos( angle ), std::sin( angle ), 0.0f, 0.0f,
-std::sin( angle ), std::cos( angle ), 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}
};
wrl::ComPtr<ID3D11Buffer> pConstantBuffer;
D3D11_BUFFER_DESC cbd;
cbd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
cbd.Usage = D3D11_USAGE_DYNAMIC;
cbd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
cbd.MiscFlags = 0u;
cbd.ByteWidth = sizeof( cb );
cbd.StructureByteStride = 0u;
D3D11_SUBRESOURCE_DATA csd = {};
csd.pSysMem = &cb;
GFX_THROW_INFO( pDevice->CreateBuffer( &cbd,&csd,&pConstantBuffer ) );
// bind constant buffer to vertex shader
pContext->VSSetConstantBuffers( 0u,1u,pConstantBuffer.GetAddressOf() );
// create pixel shader // create pixel shader
wrl::ComPtr<ID3D11PixelShader> pPixelShader; wrl::ComPtr<ID3D11PixelShader> pPixelShader;
wrl::ComPtr<ID3DBlob> pBlob; wrl::ComPtr<ID3DBlob> pBlob;
......
...@@ -52,7 +52,7 @@ public: ...@@ -52,7 +52,7 @@ public:
~Graphics() = default; ~Graphics() = default;
void EndFrame(); void EndFrame();
void ClearBuffer( float red,float green,float blue ) noexcept; void ClearBuffer( float red,float green,float blue ) noexcept;
void DrawTestTriangle(); void DrawTestTriangle( float angle );
private: private:
#ifndef NDEBUG #ifndef NDEBUG
DxgiInfoManager infoManager; DxgiInfoManager infoManager;
......
...@@ -4,10 +4,15 @@ struct VSOut ...@@ -4,10 +4,15 @@ struct VSOut
float4 pos : SV_Position; float4 pos : SV_Position;
}; };
cbuffer CBuf
{
matrix transform;
};
VSOut main( float2 pos : Position,float3 color : Color ) VSOut main( float2 pos : Position,float3 color : Color )
{ {
VSOut vso; VSOut vso;
vso.pos = float4(pos.x,pos.y,0.0f,1.0f); vso.pos = mul( float4(pos.x,pos.y,0.0f,1.0f),transform );
vso.color = color; vso.color = color;
return vso; return vso;
} }
\ 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