From 5c2b39794cecdeed75dfe4f5fb13dceb2a815bd1 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 21 Jan 2014 21:49:19 +0100 Subject: [PATCH] Render fog on top of transparent and fix bubbles --- src/graphics/render.cpp | 14 +++++++------- src/graphics/stkmesh.cpp | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 3009d1595..536c60d07 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -292,13 +292,6 @@ void IrrDriver::renderGLSL(float dt) } PROFILER_POP_CPU_MARKER(); - // Render fog on top of solid - if (World::getWorld()->getTrack()->isFogEnabled()) - { - PROFILER_PUSH_CPU_MARKER("- Fog", 0xFF, 0x00, 0x00); - m_post_processing->renderFog(camnode->getAbsolutePosition(), irr_driver->getInvProjViewMatrix()); - PROFILER_POP_CPU_MARKER(); - } // We need to re-render camera due to the per-cam-node hack. PROFILER_PUSH_CPU_MARKER("- Transparent Pass", 0xFF, 0x00, 0x00); @@ -312,6 +305,13 @@ void IrrDriver::renderGLSL(float dt) m_scene_manager->drawAll(m_renderpass); PROFILER_POP_CPU_MARKER(); + if (World::getWorld()->getTrack()->isFogEnabled()) + { + PROFILER_PUSH_CPU_MARKER("- Fog", 0xFF, 0x00, 0x00); + m_post_processing->renderFog(camnode->getAbsolutePosition(), irr_driver->getInvProjViewMatrix()); + PROFILER_POP_CPU_MARKER(); + } + PROFILER_PUSH_CPU_MARKER("- Displacement", 0xFF, 0x00, 0x00); // Handle displacing nodes, if any const u32 displacingcount = m_displacing.size(); diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index 6f6a91a5f..27f36bd19 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -584,11 +584,6 @@ static void initvaostate(GLMesh &mesh, video::E_MATERIAL_TYPE type) mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, MeshShader::GrassPass1Shader::attrib_position, MeshShader::GrassPass1Shader::attrib_texcoord, -1, MeshShader::GrassPass1Shader::attrib_normal, -1, -1, MeshShader::GrassPass1Shader::attrib_color, mesh.Stride); } - else if (type == irr_driver->getShader(ES_BUBBLES)) - { - mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, - MeshShader::BubbleShader::attrib_position, MeshShader::BubbleShader::attrib_texcoord, -1, -1, -1, -1, -1, mesh.Stride); - } else { mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, @@ -632,7 +627,12 @@ static void initvaostate(GLMesh &mesh, video::E_MATERIAL_TYPE type) case 3: // Transparent if (mesh.vao_first_pass) return; - if (type == video::EMT_TRANSPARENT_ALPHA_CHANNEL) + if (type == irr_driver->getShader(ES_BUBBLES)) + { + mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, + MeshShader::BubbleShader::attrib_position, MeshShader::BubbleShader::attrib_texcoord, -1, -1, -1, -1, -1, mesh.Stride); + } + else if (type == video::EMT_TRANSPARENT_ALPHA_CHANNEL) { mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, MeshShader::TransparentShader::attrib_position, MeshShader::TransparentShader::attrib_texcoord, -1, -1, -1, -1, -1, mesh.Stride);