verus/Verus/src/CGI/Renderer.cpp
2019-06-06 20:50:05 +03:00

89 lines
1.4 KiB
C++

#include "verus.h"
using namespace verus;
using namespace verus::CGI;
Renderer::Renderer()
{
}
Renderer::~Renderer()
{
Done();
}
PBaseRenderer Renderer::operator->()
{
VERUS_RT_ASSERT(_pBaseRenderer);
return _pBaseRenderer;
}
bool Renderer::IsLoaded()
{
return IsValidSingleton() && !!I()._pBaseRenderer;
}
void Renderer::Init(PRendererDelegate pDelegate)
{
VERUS_INIT();
VERUS_QREF_SETTINGS;
_pRendererDelegate = pDelegate;
CSZ dll = "RendererVulkan.dll";
switch (settings._gapi)
{
case 12:
{
dll = "RendererDirect3D12.dll";
VERUS_LOG_INFO("Using Direct3D 12");
}
break;
default:
VERUS_LOG_INFO("Using Vulkan");
}
BaseRendererDesc desc;
_pBaseRenderer = BaseRenderer::Load(dll, desc);
_gapi = _pBaseRenderer->GetGapi();
}
void Renderer::Done()
{
if (_pBaseRenderer)
{
_pBaseRenderer->ReleaseMe();
_pBaseRenderer = nullptr;
}
VERUS_SMART_DELETE(_pRendererDelegate);
VERUS_DONE(Renderer);
}
void Renderer::Draw()
{
if (_pRendererDelegate)
_pRendererDelegate->Renderer_OnDraw();
}
void Renderer::Present()
{
if (_pRendererDelegate)
_pRendererDelegate->Renderer_OnPresent();
_numFrames++;
VERUS_QREF_TIMER;
_fps = _fps * 0.75f + timer.GetDeltaTimeInv()*0.25f;
}
void Renderer::OnShaderError(CSZ s)
{
throw VERUS_RUNTIME_ERROR << "Shader Error:\n" << s;
}
void Renderer::OnShaderWarning(CSZ s)
{
VERUS_LOG_WARN("Shader Warning:\n" << s);
}