2021-06-02 17:20:15 +04:30
|
|
|
#include "ltpch.h"
|
|
|
|
#include "dxShader.h"
|
|
|
|
#include "dxSharedContext.h"
|
|
|
|
|
|
|
|
#include <d3dcompiler.h>
|
|
|
|
|
|
|
|
namespace Light {
|
|
|
|
|
2021-10-02 08:51:54 +03:30
|
|
|
dxShader::dxShader(BasicFileHandle vertexFile, BasicFileHandle pixelFile, Ref<dxSharedContext> sharedContext)
|
2021-07-29 17:12:13 +04:30
|
|
|
: m_Context(sharedContext),
|
|
|
|
m_VertexShader(nullptr),
|
|
|
|
m_PixelShader(nullptr),
|
|
|
|
m_VertexBlob(nullptr)
|
2021-06-02 17:20:15 +04:30
|
|
|
{
|
|
|
|
Microsoft::WRL::ComPtr<ID3DBlob> ps = nullptr, vsErr = nullptr, psErr = nullptr;
|
|
|
|
|
2021-09-13 12:17:26 +04:30
|
|
|
// compile shaders (we don't use DXC here because if D3DCompile fails it throws a dxException without logging the vsErr/psErr
|
2021-10-02 08:51:54 +03:30
|
|
|
D3DCompile(vertexFile.GetData(), vertexFile.GetSize(), NULL, nullptr, nullptr, "main", "vs_4_0", NULL, NULL, &m_VertexBlob, &vsErr);
|
|
|
|
D3DCompile(pixelFile.GetData(), pixelFile.GetSize(), NULL, nullptr, nullptr, "main", "ps_4_0", NULL, NULL, &ps, &psErr);
|
2021-06-02 17:20:15 +04:30
|
|
|
|
2021-06-19 15:12:42 +04:30
|
|
|
// check
|
2021-06-02 17:20:15 +04:30
|
|
|
LT_ENGINE_ASSERT(!vsErr.Get(), "dxShader::dxShader: vertex shader compile error: {}", (char*)vsErr->GetBufferPointer());
|
2021-07-01 19:25:46 +04:30
|
|
|
LT_ENGINE_ASSERT(!psErr.Get(), "dxShader::dxShader: pixels shader compile error: {}", (char*)psErr->GetBufferPointer());
|
2021-06-02 17:20:15 +04:30
|
|
|
|
2021-06-19 15:12:42 +04:30
|
|
|
// create shaders
|
2021-07-29 17:12:13 +04:30
|
|
|
HRESULT hr;
|
2021-07-01 19:25:46 +04:30
|
|
|
DXC(m_Context->GetDevice()->CreateVertexShader(m_VertexBlob->GetBufferPointer(), m_VertexBlob->GetBufferSize(), NULL, &m_VertexShader));
|
|
|
|
DXC(m_Context->GetDevice()->CreatePixelShader(ps->GetBufferPointer(), ps->GetBufferSize(), NULL, &m_PixelShader));
|
2021-06-02 17:20:15 +04:30
|
|
|
}
|
|
|
|
|
|
|
|
dxShader::~dxShader()
|
|
|
|
{
|
2021-06-19 15:12:42 +04:30
|
|
|
UnBind();
|
2021-06-02 17:20:15 +04:30
|
|
|
}
|
|
|
|
|
|
|
|
void dxShader::Bind()
|
|
|
|
{
|
2021-07-01 19:25:46 +04:30
|
|
|
m_Context->GetDeviceContext()->VSSetShader(m_VertexShader.Get(), nullptr, 0u);
|
|
|
|
m_Context->GetDeviceContext()->PSSetShader(m_PixelShader.Get(), nullptr, 0u);
|
2021-06-02 17:20:15 +04:30
|
|
|
}
|
|
|
|
|
|
|
|
void dxShader::UnBind()
|
|
|
|
{
|
2021-07-01 19:25:46 +04:30
|
|
|
m_Context->GetDeviceContext()->VSSetShader(nullptr, nullptr, 0u);
|
|
|
|
m_Context->GetDeviceContext()->PSSetShader(nullptr, nullptr, 0u);
|
2021-06-02 17:20:15 +04:30
|
|
|
}
|
|
|
|
|
|
|
|
}
|