-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLWRenderer.cpp
More file actions
80 lines (66 loc) · 2.14 KB
/
Copy pathLWRenderer.cpp
File metadata and controls
80 lines (66 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "LWRenderer.hpp"
LWRenderer::LWRenderer()
{
}
LWRenderer::~LWRenderer()
{
delete m_Tonemapper;
m_Tonemapper = nullptr;
delete m_PathTracer;
m_PathTracer = nullptr;
}
void LWRenderer::Init(LWScene *scenePtr, LWSettings *settingsPtr, LWState *statePtr)
{
m_SettingsPtr = settingsPtr;
m_Scene = scenePtr;
m_StatePtr = statePtr;
m_PathTracer = new TraceUnit();
m_Tonemapper = new PostProcessor();
m_PathTracer->setScene(m_Scene);
m_StatePtr->Init();
}
void LWRenderer::UpdateSettings()
{
m_PathTracer->m_BackfaceCulling = m_SettingsPtr->backfaceCulling;
m_PathTracer->p_MaxBounces = m_SettingsPtr->bounces;
}
void LWRenderer::preprocess()
{
m_StatePtr->m_RawImage = new Texture("Render result", m_SettingsPtr->resolutionX, m_SettingsPtr->resolutionY);
m_StatePtr->m_RawImage->setInterpolationMode(INTPOL_PIXELS);
m_StatePtr->m_RawImage->setQuadraticFittingMode(FIT_STRETCHXY);
m_StatePtr->m_TonemappedImage = new Texture("Render result", m_SettingsPtr->resolutionX, m_SettingsPtr->resolutionY);
m_StatePtr->m_TonemappedImage->setInterpolationMode(INTPOL_PIXELS);
m_StatePtr->m_TonemappedImage->setQuadraticFittingMode(FIT_STRETCHXY);
m_StatePtr->SetState(LW_STATE_PREPROCESS);
m_PathTracer->Init(m_StatePtr->m_RawImage, m_SettingsPtr->resolutionX, m_SettingsPtr->resolutionY);
m_StatePtr->SetState(LW_STATE_RUNNING);
}
bool LWRenderer::updateRender()
{
if (m_PathTracer->renderNextChunk())
{
if (m_PathTracer->m_samplesRendered >= m_SettingsPtr->samples)
{
m_StatePtr->m_SamplesRendered = m_PathTracer->m_samplesRendered;
m_PathTracer->m_samplesRendered = 0;
m_StatePtr->SetState(LW_STATE_COMPLETE);
}
else
{
m_PathTracer->updateRayMap();
m_StatePtr->UpdateStateString(m_PathTracer->m_samplesRendered);
}
return true;
}
return false;
}
void LWRenderer::postProcessRender()
{
m_Tonemapper->updateHighestExposure(*m_StatePtr->m_RawImage, m_SettingsPtr->resolutionX, m_SettingsPtr->resolutionY);
m_Tonemapper->controlExposure(*m_StatePtr->m_RawImage, *m_StatePtr->m_TonemappedImage, m_SettingsPtr->resolutionX, m_SettingsPtr->resolutionY, m_SettingsPtr->toneMapping);
}
void LWRenderer::clear()
{
m_Scene->clearScene();
}