Passthrough shader for DirectX GUI

This commit is contained in:
2015-10-20 13:52:07 +02:00
parent 4175b29653
commit aacc194358
4 changed files with 52 additions and 6 deletions
Binary file not shown.
@@ -67,7 +67,8 @@ private:
float paddingBitch; float paddingBitch;
} constantBufferStruct; } constantBufferStruct;
ShaderProgram* shaderProgram = nullptr; ShaderProgram* m_ForwardShaderProgram = nullptr;
ShaderProgram* m_GUIShaderProgram = nullptr;
ID3D11Buffer* constantBuffer = nullptr; ID3D11Buffer* constantBuffer = nullptr;
Model* m_UnitQuad = nullptr; Model* m_UnitQuad = nullptr;
+12 -5
View File
@@ -101,9 +101,6 @@ void dd::Renderer::Initialize()
m_DeviceContext->OMSetBlendState(blendState, nullptr, 0xffffffff); m_DeviceContext->OMSetBlendState(blendState, nullptr, 0xffffffff);
shaderProgram = new ShaderProgram();
shaderProgram->CompileVertexShader(L"Shaders/DirectX/vertex.hlsl");
shaderProgram->CompilePixelShader(L"Shaders/DirectX/pixel.hlsl");
D3D11_INPUT_ELEMENT_DESC VertexIED[] = { D3D11_INPUT_ELEMENT_DESC VertexIED[] = {
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
@@ -117,8 +114,14 @@ void dd::Renderer::Initialize()
{"BLENDWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"BLENDWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"BLENDWEIGHT", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"BLENDWEIGHT", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
}; };
shaderProgram->CreateInputLayout(VertexIED, sizeof(VertexIED) / sizeof(VertexIED[0])); m_ForwardShaderProgram = new ShaderProgram();
shaderProgram->Bind(); m_ForwardShaderProgram->CompileVertexShader(L"Shaders/DirectX/vertex.hlsl");
m_ForwardShaderProgram->CompilePixelShader(L"Shaders/DirectX/pixel.hlsl");
m_ForwardShaderProgram->CreateInputLayout(VertexIED, sizeof(VertexIED) / sizeof(VertexIED[0]));
m_GUIShaderProgram = new ShaderProgram();
m_GUIShaderProgram->CompileVertexShader(L"Shaders/DirectX/vertex.hlsl");
m_GUIShaderProgram->CompilePixelShader(L"Shaders/DirectX/Flat.pixel.hlsl");
m_GUIShaderProgram->CreateInputLayout(VertexIED, sizeof(VertexIED) / sizeof(VertexIED[0]));
// Create constant buffer // Create constant buffer
// TODO: Put this in shader // TODO: Put this in shader
@@ -169,6 +172,8 @@ void dd::Renderer::Draw(RenderQueueCollection& rq)
viewport.MinDepth = 0; viewport.MinDepth = 0;
viewport.MaxDepth = 1; viewport.MaxDepth = 1;
m_DeviceContext->RSSetViewports(1, &viewport); m_DeviceContext->RSSetViewports(1, &viewport);
m_ForwardShaderProgram->Bind();
Matrix proj = DirectX::SimpleMath::Matrix::CreatePerspectiveFieldOfView(m_Camera->m_FOV, m_Camera->m_AspectRatio, m_Camera->m_NearClip, m_Camera->m_FarClip); // Right-handed Matrix proj = DirectX::SimpleMath::Matrix::CreatePerspectiveFieldOfView(m_Camera->m_FOV, m_Camera->m_AspectRatio, m_Camera->m_NearClip, m_Camera->m_FarClip); // Right-handed
Matrix view = Matrix::CreateTranslation(Vector3(m_Camera->Position().x, m_Camera->Position().y, -m_Camera->Position().z)); Matrix view = Matrix::CreateTranslation(Vector3(m_Camera->Position().x, m_Camera->Position().y, -m_Camera->Position().z));
@@ -263,6 +268,8 @@ void dd::Renderer::Draw(RenderQueueCollection& rq)
} }
m_DeviceContext->OMSetRenderTargets(1, &m_BackBuffer, nullptr); m_DeviceContext->OMSetRenderTargets(1, &m_BackBuffer, nullptr);
m_GUIShaderProgram->Bind();
for (auto &job : rq.GUI) { for (auto &job : rq.GUI) {
auto frameJob = std::dynamic_pointer_cast<FrameJob>(job); auto frameJob = std::dynamic_pointer_cast<FrameJob>(job);
if (frameJob) { if (frameJob) {
@@ -0,0 +1,38 @@
cbuffer ConstantBuffer
{
float4x4 MVP;
float4x4 ModelMatrix;
float4x4 ViewMatrix;
float4x4 ProjectionMatrix;
float4x4 InverseTransposeViewModel;
float4 Color;
float4 LightPositions[10];
float4 LightColors[10];
float LightRadii[10];
uint NumLights;
}
Texture2D Texture;
SamplerState samplerState;
struct VOut
{
float4 PixelPosition : SV_POSITION;
float4 Position : POSITION;
float4 Normal : NORMAL;
float4 Tangent : TANGENT0;
float4 BiTangent : TANGENT1;
float2 TextureCoord : TEXCOORD;
float4 DiffuseColor : COLOR0;
float4 SpecularColor : COLOR1;
float4 BoneIndices1 : BLENDINDICES0;
float4 BoneIndices2 : BLENDINDICES1;
float4 BoneWeights1 : BLENDWEIGHT0;
float4 BoneWeights2 : BLENDWEIGHT1;
};
float4 main(VOut input) : SV_TARGET
{
float4 diffuseTexture = Texture.Sample(samplerState, input.TextureCoord) * Color;
return diffuseTexture;
}