89 lines
1.4 KiB
C++
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);
|
|
}
|