diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index 2ccb78bc..a794f061 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -4301,23 +4301,26 @@ void CEngine::DrawInterface() // 3D objects drawn in front of interface if (m_drawFront) { - m_device->Restore(); - - // Display the objects - m_device->SetRenderState(RENDER_STATE_DEPTH_TEST, true); - - m_device->SetTransform(TRANSFORM_PROJECTION, m_matProj); - - m_device->SetGlobalAmbient(m_ambientColor[m_rankView]); - m_device->SetRenderState(RENDER_STATE_LIGHTING, true); - - m_device->SetRenderState(RENDER_STATE_FOG, true); - float fogStart = m_deepView[m_rankView] * m_fogStart[m_rankView] * m_clippingDistance; float fogEnd = m_deepView[m_rankView] * m_clippingDistance; - m_device->SetFogParams(FOG_LINEAR, m_fogColor[m_rankView], fogStart, fogEnd, 1.0f); + Color fogColor = m_fogColor[m_rankView]; - m_device->SetTransform(TRANSFORM_VIEW, m_matView); + auto renderer = m_device->GetObjectRenderer(); + renderer->Begin(); + renderer->SetProjectionMatrix(m_matProj); + renderer->SetViewMatrix(m_matView); + renderer->SetFog(fogStart, fogEnd, { fogColor.r, fogColor.g, fogColor.b }); + renderer->SetLighting(false); + renderer->SetLight(glm::vec4(1.0, 1.0, -1.0, 0.0), 1.0f, glm::vec3(1.0)); + renderer->SetTransparency(TransparencyMode::NONE); + renderer->SetAlphaScissor(0.0f); + renderer->SetShadowParams(0, nullptr); + renderer->SetColor({ 1.0f, 1.0f, 1.0f, 1.0f }); + renderer->SetCullMode(true); + renderer->SetPrimaryTextureEnabled(true); + + renderer->SetTriplanarMode(m_triplanarMode); + renderer->SetTriplanarScale(m_triplanarScale); auto projectionViewMatrix = m_matProj * m_matView; @@ -4332,11 +4335,10 @@ void CEngine::DrawInterface() if (! m_objects[objRank].drawFront) continue; - m_device->SetTransform(TRANSFORM_WORLD, m_objects[objRank].transform); auto combinedMatrix = projectionViewMatrix * m_objects[objRank].transform; - if (! IsVisible(combinedMatrix, objRank)) - continue; + //if (! IsVisible(combinedMatrix, objRank)) + // continue; int baseObjRank = m_objects[objRank].baseObjRank; if (baseObjRank == -1) @@ -4348,27 +4350,32 @@ void CEngine::DrawInterface() if (! p1.used) continue; - m_lightMan->UpdateDeviceLights(m_objects[objRank].type); + renderer->SetModelMatrix(m_objects[objRank].transform); + + //m_lightMan->UpdateDeviceLights(m_objects[objRank].type); for (int l2 = 0; l2 < static_cast( p1.next.size() ); l2++) { EngineBaseObjTexTier& p2 = p1.next[l2]; - SetTexture(p2.tex1, 0); - SetTexture(p2.tex2, 1); + renderer->SetPrimaryTexture(p2.tex1); + renderer->SetSecondaryTexture(p2.tex2); for (int l3 = 0; l3 < static_cast( p2.next.size() ); l3++) { EngineBaseObjDataTier& p3 = p2.next[l3]; //SetMaterial(p3.material); - SetState(p3.state); + //SetState(p3.state); - DrawObject(p3); + renderer->DrawObject(p3.buffer); + //DrawObject(p3); } } } + renderer->End(); + m_particle->DrawParticle(SH_FRONT); // draws the particles of the 3D world m_device->SetRenderState(RENDER_STATE_DEPTH_TEST, false); diff --git a/src/graphics/engine/engine.h b/src/graphics/engine/engine.h index 0a39c3aa..1772c364 100644 --- a/src/graphics/engine/engine.h +++ b/src/graphics/engine/engine.h @@ -1195,6 +1195,8 @@ public: /** This additionally sends EVENT_RELOAD_TEXTURES to reload all textures not maintained by CEngine **/ void ReloadAllTextures(); + int ComputeSphereVisibility(const glm::mat4& m, const glm::vec3& center, float radius); + protected: //! Resets some states and flushes textures after device was changed (e.g. resoulution changed) /** Instead of calling this directly, send EVENT_RESOLUTION_CHANGED event **/ @@ -1254,8 +1256,6 @@ protected: //! Tests whether the given object is visible bool IsVisible(const glm::mat4& matrix, int objRank); - int ComputeSphereVisibility(const glm::mat4& m, const glm::vec3& center, float radius); - bool InPlane(glm::vec3 normal, float originPlane, glm::vec3 center, float radius); //! Detects whether an object is affected by the mouse diff --git a/src/graphics/opengl/gl33objectrenderer.cpp b/src/graphics/opengl/gl33objectrenderer.cpp index 90dae7bf..c6a6fd41 100644 --- a/src/graphics/opengl/gl33objectrenderer.cpp +++ b/src/graphics/opengl/gl33objectrenderer.cpp @@ -156,6 +156,7 @@ void CGL33ObjectRenderer::CGL33ObjectRenderer::Begin() m_secondaryTexture = 0; m_shadowMap = 0; + glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); }