verus/Verus/src/CGI/Renderer.cpp

89 lines
1.4 KiB
C++
Raw Normal View History

2019-03-11 18:32:13 +01:00
#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;
2019-04-03 00:02:02 +02:00
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");
}
2019-03-11 18:32:13 +01:00
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++;
2019-05-02 23:42:01 +02:00
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);
2019-03-11 18:32:13 +01:00
}