Sorry to take your time, I do understand the concept, but I'm doing it wrong somehow.
Post Process Shader file for now: (Where shader stuff and quad is created)
#include "stdafx.h"
#include "PostProcess.h"
#include <d3dcompiler.h>
#include <DxErr.h>
#define CE_WARNING(title, message) MessageBoxA(NULL, message, title, 0)
BOOL PostProcessClass::Create( ID3D11Device *&dev, ID3D11DeviceContext *&devcon )
{
string finals = string(
"C:\\Users\\Utilizador\\Documents\\Visual Studio 2012\\Projects\\Cube3D\\Product\\Bin32\\") + string("PostProcessShader.hlsl").c_str();
ID3D10Blob *vserrors;
ID3D10Blob *pserrors;
HRESULT HR;
D3DX11CompileFromFile(finals.c_str(), 0, 0, "VShader", "vs_5_0", D3DCOMPILE_DEBUG, 0, 0, &VS, &vserrors, &HR);
D3DX11CompileFromFile(finals.c_str(), 0, 0, "PShader", "ps_5_0", D3DCOMPILE_DEBUG, 0, 0, &PS, &pserrors, &HR);
// create the shader objects
if (!VS)
{
DXTRACE_ERR(TEXT(DXGetErrorDescription(HR)),HR);
MessageBoxA(NULL, "The Post Process vertex shader creation has failed, program will now exit!", "ERROR", 0);
exit(0);
}
if (!PS)
{
DXTRACE_ERR(TEXT(DXGetErrorDescription(HR)),HR);
MessageBoxA(NULL, "The Post Process pixel shader creation has failed, program will now exit!", "ERROR", 0);
exit(0);
}
dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS);
dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pPS);
D3D11_INPUT_ELEMENT_DESC ied[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}
};
if (dev->CreateInputLayout(ied, 1, VS->GetBufferPointer(), VS->GetBufferSize(), &pLayout) != S_OK)
CE_WARNING("Input Layout Creation", "Input Layout creation in Post Process has failed!");
// create the vertex buffer
D3D11_BUFFER_DESC bd;
ZeroMemory(&bd, sizeof(bd));
Vertices[0] = D3DXVECTOR3(-1, 0, 1);
Vertices[1] = D3DXVECTOR3(1, 0, 1);
Vertices[2] = D3DXVECTOR3(-1, 0, -1);
Vertices[3] = D3DXVECTOR3(1, 0, 1);
Indices[0] = 3;
Indices[1] = 1;
Indices[2] = 2;
Indices[3] = 2;
Indices[4] = 1;
Indices[5] = 0;
bd.Usage = D3D11_USAGE_DYNAMIC;
bd.ByteWidth = sizeof(D3DXVECTOR3) * 4;
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
dev->CreateBuffer(&bd, NULL, &vBFF);
D3D11_MAPPED_SUBRESOURCE ms;
// copy the vertices into the buffer
devcon->Map(vBFF, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer
memcpy(ms.pData, Vertices, sizeof(Vertices)); // copy the data
devcon->Unmap(vBFF, NULL);
//**INDICES**//
bd.Usage = D3D11_USAGE_DYNAMIC;
bd.ByteWidth = sizeof(DWORD) * 6;
bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
dev->CreateBuffer(&bd, NULL, &iBFF);
D3D11_MAPPED_SUBRESOURCE msI;
// copy the vertices into the buffer
devcon->Map(iBFF, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &msI); // map the buffer
memcpy(msI.pData, Indices, sizeof(Indices)); // copy the data
devcon->Unmap(iBFF, NULL);
}
void PostProcessClass::ApplyShader(ID3D11Device *&dev, ID3D11DeviceContext *&devcon)
{
// set the shader objects
devcon->VSSetShader(pVS, 0, 0);
devcon->PSSetShader(pPS, 0, 0);
devcon->IASetInputLayout(pLayout);
}
void PostProcessClass::Render(ID3D11DeviceContext *&devcon, ID3D11Device *&dev)
{
ApplyShader(dev, devcon);
UINT stride = sizeof(D3DXVECTOR3);
UINT offset = 0;
devcon->IASetVertexBuffers(0, 1, &vBFF, &stride, &offset);
devcon->IASetIndexBuffer(iBFF, DXGI_FORMAT_R32_UINT, 0);
devcon->DrawIndexed(6, 0, 0);
}
Now the output is a black screen, and heres the reason from debugging:
When you look at the vertex shader, the result is a straight line, which isn't exactly what I wanted
Now the question is why?
Ohh, almost forgot, my shader (it's simple for now for debugging):
struct VOut
{
float4 position : SV_POSITION;
};
VOut VShader(float3 position : POSITION)
{
VOut output;
output.position = float4(position, 1.0f);
output.position.w = 1.0f;
return output;
}
float4 PShader(VOut input) : SV_TARGET
{
return float4(1, 0, 0, 1);
}