Skip to content

Commit

Permalink
UPBGE: Fix draw quad to screen without face culling.
Browse files Browse the repository at this point in the history
Previously it appears to draw a screen quad with the last culling settings.
Culling is not an issue but the culling faces and the front face are
important and can cause the quad to not be draft.
THis was noticed in background render not displayed or with a very basic
scene: a negative scale cube in an empty scene caused the final off screen
to not be draft to the screen due to culling settings.

To fix this issue we simply disable face culling before render any quad for
background render, filters, stereo resolve and off screen copy.
  • Loading branch information
panzergame committed Aug 24, 2016
1 parent 1f23323 commit 84fb0ee
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 3 deletions.
2 changes: 2 additions & 0 deletions source/gameengine/Ketsji/KX_WorldInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,14 @@ void KX_WorldInfo::RenderBackground(RAS_IRasterizer *rasty)
static float texcofac[4] = { 0.0f, 0.0f, 1.0f, 1.0f };
GPU_material_bind(gpumat, 0xFFFFFFFF, m_scene->lay, 1.0f, false, viewmat, invviewmat, texcofac, false);

rasty->Disable(RAS_IRasterizer::RAS_CULL_FACE);
rasty->Enable(RAS_IRasterizer::RAS_DEPTH_TEST);
rasty->SetDepthFunc(RAS_IRasterizer::RAS_ALWAYS);

rasty->DrawOverlayPlane();

rasty->SetDepthFunc(RAS_IRasterizer::RAS_LEQUAL);
rasty->Enable(RAS_IRasterizer::RAS_CULL_FACE);

GPU_material_unbind(gpumat);
}
Expand Down
2 changes: 2 additions & 0 deletions source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ void RAS_2DFilterManager::RenderFilters(RAS_IRasterizer *rasty, RAS_ICanvas *can
unsigned short colorfbo = rasty->GetCurrentOffScreenIndex();
unsigned short depthfbo = colorfbo;

rasty->Disable(RAS_IRasterizer::RAS_CULL_FACE);
rasty->SetDepthFunc(RAS_IRasterizer::RAS_ALWAYS);
rasty->Disable(RAS_IRasterizer::RAS_BLEND);
rasty->Disable(RAS_IRasterizer::RAS_ALPHA_TEST);
Expand Down Expand Up @@ -137,6 +138,7 @@ void RAS_2DFilterManager::RenderFilters(RAS_IRasterizer *rasty, RAS_ICanvas *can
}

rasty->SetDepthFunc(RAS_IRasterizer::RAS_LEQUAL);
rasty->Enable(RAS_IRasterizer::RAS_CULL_FACE);
}

RAS_2DFilter *RAS_2DFilterManager::CreateFilter(RAS_2DFilterData& filterData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -904,12 +904,14 @@ void RAS_OpenGLRasterizer::DrawOffScreen(RAS_ICanvas *canvas, unsigned short ind
SetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
SetScissor(viewport[0], viewport[1], viewport[2], viewport[3]);

Disable(RAS_CULL_FACE);
SetDepthFunc(RAS_ALWAYS);

m_offScreens.RestoreScreen();
DrawOffScreen(index, 0);

SetDepthFunc(RAS_LEQUAL);
Enable(RAS_CULL_FACE);
}

void RAS_OpenGLRasterizer::DrawStereoOffScreen(RAS_ICanvas *canvas, unsigned short lefteyeindex, unsigned short righteyeindex)
Expand All @@ -930,6 +932,7 @@ void RAS_OpenGLRasterizer::DrawStereoOffScreen(RAS_ICanvas *canvas, unsigned sho
SetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
SetScissor(viewport[0], viewport[1], viewport[2], viewport[3]);

Disable(RAS_CULL_FACE);
SetDepthFunc(RAS_ALWAYS);

m_offScreens.RestoreScreen();
Expand Down Expand Up @@ -975,6 +978,7 @@ void RAS_OpenGLRasterizer::DrawStereoOffScreen(RAS_ICanvas *canvas, unsigned sho
}

SetDepthFunc(RAS_LEQUAL);
Enable(RAS_CULL_FACE);
}

void RAS_OpenGLRasterizer::BindOffScreenTexture(unsigned short index, unsigned short slot, OffScreen type)
Expand Down
4 changes: 1 addition & 3 deletions source/gameengine/VideoTexture/ImageRender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,6 @@ bool ImageRender::Render()
m_rasterizer->SetViewport(m_position[0], m_position[1], m_position[0] + m_capSize[0], m_position[1] + m_capSize[1]);
m_rasterizer->SetScissor(m_position[0], m_position[1], m_position[0] + m_capSize[0], m_position[1] + m_capSize[1]);

m_rasterizer->SetClearColor(0.247784f, 0.247784f, 0.247784f, 1.0f);
m_rasterizer->Clear(RAS_IRasterizer::RAS_COLOR_BUFFER_BIT | RAS_IRasterizer::RAS_DEPTH_BUFFER_BIT);
m_rasterizer->BeginFrame(m_engine->GetClockTime());
m_scene->GetWorldInfo()->UpdateWorldSettings(m_rasterizer);
m_rasterizer->SetAuxilaryClientInfo(m_scene);
Expand Down Expand Up @@ -394,7 +392,7 @@ bool ImageRender::Render()
}

// Render Background
if (m_scene->GetWorldInfo()->m_hasworld) {
if (m_scene->GetWorldInfo()) {
const MT_Vector3 hor = m_scene->GetWorldInfo()->m_horizoncolor;
const MT_Vector3 zen = m_scene->GetWorldInfo()->m_zenithcolor;
m_scene->GetWorldInfo()->setHorizonColor(MT_Vector3(m_horizon[0], m_horizon[1], m_horizon[2]));
Expand Down

0 comments on commit 84fb0ee

Please sign in to comment.