Changeset View
Changeset View
Standalone View
Standalone View
source/renderer/Renderer.cpp
Show First 20 Lines • Show All 652 Lines • ▼ Show 20 Lines | void CRenderer::SetClearColor(SColor4ub color) | ||||
m_ClearColor[1] = float(color.G) / 255.0f; | m_ClearColor[1] = float(color.G) / 255.0f; | ||||
m_ClearColor[2] = float(color.B) / 255.0f; | m_ClearColor[2] = float(color.B) / 255.0f; | ||||
m_ClearColor[3] = float(color.A) / 255.0f; | m_ClearColor[3] = float(color.A) / 255.0f; | ||||
} | } | ||||
void CRenderer::RenderShadowMap(const CShaderDefines& context) | void CRenderer::RenderShadowMap(const CShaderDefines& context) | ||||
{ | { | ||||
PROFILE3_GPU("shadow map"); | PROFILE3_GPU("shadow map"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render shadow map"); | |||||
CShaderDefines contextCast = context; | CShaderDefines contextCast = context; | ||||
contextCast.Add(str_MODE_SHADOWCAST, str_1); | contextCast.Add(str_MODE_SHADOWCAST, str_1); | ||||
m->shadow.BeginRender(); | m->shadow.BeginRender(); | ||||
const int cascadeCount = m->shadow.GetCascadeCount(); | const int cascadeCount = m->shadow.GetCascadeCount(); | ||||
ENSURE(0 <= cascadeCount && cascadeCount <= 4); | ENSURE(0 <= cascadeCount && cascadeCount <= 4); | ||||
Show All 27 Lines | void CRenderer::RenderShadowMap(const CShaderDefines& context) | ||||
m->shadow.EndRender(); | m->shadow.EndRender(); | ||||
SetViewport(m_ViewCamera.GetViewPort()); | SetViewport(m_ViewCamera.GetViewPort()); | ||||
} | } | ||||
void CRenderer::RenderPatches(const CShaderDefines& context, int cullGroup) | void CRenderer::RenderPatches(const CShaderDefines& context, int cullGroup) | ||||
{ | { | ||||
PROFILE3_GPU("patches"); | PROFILE3_GPU("patches"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render patches"); | |||||
#if CONFIG2_GLES | #if CONFIG2_GLES | ||||
#warning TODO: implement wireface/edged rendering mode GLES | #warning TODO: implement wireface/edged rendering mode GLES | ||||
#else | #else | ||||
// switch on wireframe if we need it | // switch on wireframe if we need it | ||||
if (m_TerrainRenderMode == WIREFRAME) | if (m_TerrainRenderMode == WIREFRAME) | ||||
{ | { | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | ||||
Show All 33 Lines | else if (m_TerrainRenderMode == EDGED_FACES) | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | ||||
} | } | ||||
#endif | #endif | ||||
} | } | ||||
void CRenderer::RenderModels(const CShaderDefines& context, int cullGroup) | void CRenderer::RenderModels(const CShaderDefines& context, int cullGroup) | ||||
{ | { | ||||
PROFILE3_GPU("models"); | PROFILE3_GPU("models"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render models"); | |||||
int flags = 0; | int flags = 0; | ||||
#if !CONFIG2_GLES | #if !CONFIG2_GLES | ||||
if (m_ModelRenderMode == WIREFRAME) | if (m_ModelRenderMode == WIREFRAME) | ||||
{ | { | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | ||||
} | } | ||||
Show All 18 Lines | else if (m_ModelRenderMode == EDGED_FACES) | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | ||||
} | } | ||||
#endif | #endif | ||||
} | } | ||||
void CRenderer::RenderTransparentModels(const CShaderDefines& context, int cullGroup, ETransparentMode transparentMode, bool disableFaceCulling) | void CRenderer::RenderTransparentModels(const CShaderDefines& context, int cullGroup, ETransparentMode transparentMode, bool disableFaceCulling) | ||||
{ | { | ||||
PROFILE3_GPU("transparent models"); | PROFILE3_GPU("transparent models"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render transparent models"); | |||||
int flags = 0; | int flags = 0; | ||||
#if !CONFIG2_GLES | #if !CONFIG2_GLES | ||||
// switch on wireframe if we need it | // switch on wireframe if we need it | ||||
if (m_ModelRenderMode == WIREFRAME) | if (m_ModelRenderMode == WIREFRAME) | ||||
{ | { | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | ||||
▲ Show 20 Lines • Show All 159 Lines • ▼ Show 20 Lines | void CRenderer::ComputeRefractionCamera(CCamera& camera, const CBoundingBoxAligned& scissor) const | ||||
camera.SetProjection(scaleMat * camera.GetProjection()); | camera.SetProjection(scaleMat * camera.GetProjection()); | ||||
} | } | ||||
/////////////////////////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
// RenderReflections: render the water reflections to the reflection texture | // RenderReflections: render the water reflections to the reflection texture | ||||
void CRenderer::RenderReflections(const CShaderDefines& context, const CBoundingBoxAligned& scissor) | void CRenderer::RenderReflections(const CShaderDefines& context, const CBoundingBoxAligned& scissor) | ||||
{ | { | ||||
PROFILE3_GPU("water reflections"); | PROFILE3_GPU("water reflections"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render water reflections"); | |||||
WaterManager& wm = m->waterManager; | WaterManager& wm = m->waterManager; | ||||
// Remember old camera | // Remember old camera | ||||
CCamera normalCamera = m_ViewCamera; | CCamera normalCamera = m_ViewCamera; | ||||
ComputeReflectionCamera(m_ViewCamera, scissor); | ComputeReflectionCamera(m_ViewCamera, scissor); | ||||
const CBoundingBoxAligned reflectionScissor = | const CBoundingBoxAligned reflectionScissor = | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
/////////////////////////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
// RenderRefractions: render the water refractions to the refraction texture | // RenderRefractions: render the water refractions to the refraction texture | ||||
void CRenderer::RenderRefractions(const CShaderDefines& context, const CBoundingBoxAligned &scissor) | void CRenderer::RenderRefractions(const CShaderDefines& context, const CBoundingBoxAligned &scissor) | ||||
{ | { | ||||
PROFILE3_GPU("water refractions"); | PROFILE3_GPU("water refractions"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render water refractions"); | |||||
WaterManager& wm = m->waterManager; | WaterManager& wm = m->waterManager; | ||||
// Remember old camera | // Remember old camera | ||||
CCamera normalCamera = m_ViewCamera; | CCamera normalCamera = m_ViewCamera; | ||||
ComputeRefractionCamera(m_ViewCamera, scissor); | ComputeRefractionCamera(m_ViewCamera, scissor); | ||||
const CBoundingBoxAligned refractionScissor = | const CBoundingBoxAligned refractionScissor = | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | void CRenderer::RenderRefractions(const CShaderDefines& context, const CBoundingBoxAligned &scissor) | ||||
SetViewport(m_ViewCamera.GetViewPort()); | SetViewport(m_ViewCamera.GetViewPort()); | ||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | ||||
} | } | ||||
void CRenderer::RenderSilhouettes(const CShaderDefines& context) | void CRenderer::RenderSilhouettes(const CShaderDefines& context) | ||||
{ | { | ||||
PROFILE3_GPU("silhouettes"); | PROFILE3_GPU("silhouettes"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render water silhouettes"); | |||||
CShaderDefines contextOccluder = context; | CShaderDefines contextOccluder = context; | ||||
contextOccluder.Add(str_MODE_SILHOUETTEOCCLUDER, str_1); | contextOccluder.Add(str_MODE_SILHOUETTEOCCLUDER, str_1); | ||||
CShaderDefines contextDisplay = context; | CShaderDefines contextDisplay = context; | ||||
contextDisplay.Add(str_MODE_SILHOUETTEDISPLAY, str_1); | contextDisplay.Add(str_MODE_SILHOUETTEDISPLAY, str_1); | ||||
// Render silhouettes of units hidden behind terrain or occluders. | // Render silhouettes of units hidden behind terrain or occluders. | ||||
▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | void CRenderer::RenderSilhouettes(const CShaderDefines& context) | ||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
glBlendColorEXT(0, 0, 0, 0); | glBlendColorEXT(0, 0, 0, 0); | ||||
glDisable(GL_STENCIL_TEST); | glDisable(GL_STENCIL_TEST); | ||||
} | } | ||||
void CRenderer::RenderParticles(int cullGroup) | void CRenderer::RenderParticles(int cullGroup) | ||||
{ | { | ||||
PROFILE3_GPU("particles"); | PROFILE3_GPU("particles"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render particles"); | |||||
m->particleRenderer.RenderParticles(cullGroup); | m->particleRenderer.RenderParticles(cullGroup); | ||||
#if !CONFIG2_GLES | #if !CONFIG2_GLES | ||||
if (m_ModelRenderMode == EDGED_FACES) | if (m_ModelRenderMode == EDGED_FACES) | ||||
{ | { | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | ||||
m->particleRenderer.RenderParticles(true); | m->particleRenderer.RenderParticles(true); | ||||
m->particleRenderer.RenderBounds(cullGroup); | m->particleRenderer.RenderBounds(cullGroup); | ||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | ||||
} | } | ||||
#endif | #endif | ||||
} | } | ||||
/////////////////////////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
// RenderSubmissions: force rendering of any batched objects | // RenderSubmissions: force rendering of any batched objects | ||||
void CRenderer::RenderSubmissions(const CBoundingBoxAligned& waterScissor) | void CRenderer::RenderSubmissions(const CBoundingBoxAligned& waterScissor) | ||||
{ | { | ||||
PROFILE3("render submissions"); | PROFILE3("render submissions"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render submissions"); | |||||
GetScene().GetLOSTexture().InterpolateLOS(); | GetScene().GetLOSTexture().InterpolateLOS(); | ||||
GetScene().GetMiniMapTexture().Render(); | GetScene().GetMiniMapTexture().Render(); | ||||
CShaderDefines context = m->globalContext; | CShaderDefines context = m->globalContext; | ||||
int cullGroup = CULL_DEFAULT; | int cullGroup = CULL_DEFAULT; | ||||
▲ Show 20 Lines • Show All 503 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator