diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp index b60a4d4b386..28683305cc3 100644 --- a/engines/wintermute/base/gfx/base_renderer.cpp +++ b/engines/wintermute/base/gfx/base_renderer.cpp @@ -256,6 +256,11 @@ bool BaseRenderer::setup2D(bool Force) { return STATUS_FAILED; } +////////////////////////////////////////////////////////////////////////// +bool BaseRenderer::setup3D(Camera3D* camera, bool force) { + return STATUS_FAILED; +} + ////////////////////////////////////////////////////////////////////////// bool BaseRenderer::setupLines() { diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h index ae581ba9ecb..f08e96869f0 100644 --- a/engines/wintermute/base/gfx/base_renderer.h +++ b/engines/wintermute/base/gfx/base_renderer.h @@ -41,6 +41,7 @@ class BaseActiveRect; class BaseObject; class BaseSurface; class BasePersistenceManager; +class Camera3D; /** * @class BaseRenderer a common interface for the rendering portion of WME @@ -120,6 +121,7 @@ public: virtual bool forcedFlip() = 0; virtual void initLoop(); virtual bool setup2D(bool force = false); + virtual bool setup3D(Camera3D* camera = nullptr, bool force = false); virtual bool setupLines(); /** diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp index 0f3b95b21b2..98c0b1c5b5c 100644 --- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp +++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp @@ -256,8 +256,20 @@ bool BaseRenderOpenGL3D::setup2D(bool force) { return true; } -bool BaseRenderOpenGL3D::setup3D(bool force) { - warning("BaseRenderOpenGL3D::setup3D not yet implemented"); +bool BaseRenderOpenGL3D::setup3D(Camera3D* camera, bool force) { + if (!_state3D || force) { + _state3D = true; + + glEnable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + glAlphaFunc(GL_GEQUAL, 0x08); + + // no culling for the moment + glDisable(GL_CULL_FACE); + + setProjection(); + } + return true; } diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h index 28e3aa50d4e..23f2f361026 100644 --- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h +++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h @@ -101,7 +101,7 @@ public: bool forcedFlip() override; void initLoop() override; bool setup2D(bool force = false) override; - bool setup3D(bool force = false); + bool setup3D(Camera3D *camera, bool force = false) override; bool setupLines() override; /**