From dc95ca92ca224d26423c5d63b33e7714a6a8c9ce Mon Sep 17 00:00:00 2001 From: Jorge Bernal Date: Sun, 10 May 2015 00:54:06 +0200 Subject: BGE: Fix T43822 Videotexture does not use sky color for off-screen rendering Make scene background color as default for render-to-texture instead of current blue color (0, 0, 255). It is very useful for mirrors setups. Reviewers: moguri, ben2610, sybren, panzergame, hg1 Reviewed By: panzergame, hg1, moguri Subscribers: mpan3 Differential Revision: https://developer.blender.org/D1287 --- source/gameengine/Ketsji/KX_WorldInfo.cpp | 5 +++++ source/gameengine/Ketsji/KX_WorldInfo.h | 1 + source/gameengine/VideoTexture/ImageRender.cpp | 19 ++++++++++++++++--- source/gameengine/VideoTexture/ImageRender.h | 2 +- 4 files changed, 23 insertions(+), 4 deletions(-) (limited to 'source/gameengine') diff --git a/source/gameengine/Ketsji/KX_WorldInfo.cpp b/source/gameengine/Ketsji/KX_WorldInfo.cpp index e4bf439501f..21e72504a2b 100644 --- a/source/gameengine/Ketsji/KX_WorldInfo.cpp +++ b/source/gameengine/Ketsji/KX_WorldInfo.cpp @@ -100,6 +100,11 @@ void KX_WorldInfo::setBackColor(float r, float g, float b) } } +const float *KX_WorldInfo::getBackColor(void) const +{ + return m_backgroundcolor; +} + void KX_WorldInfo::setMistType(short type) { m_misttype = type; diff --git a/source/gameengine/Ketsji/KX_WorldInfo.h b/source/gameengine/Ketsji/KX_WorldInfo.h index 64304e594cc..0e8fe3c730a 100644 --- a/source/gameengine/Ketsji/KX_WorldInfo.h +++ b/source/gameengine/Ketsji/KX_WorldInfo.h @@ -88,6 +88,7 @@ public: void setMistIntensity(float intensity); void setMistColor(float r, float g, float b); void setBackColor(float r, float g, float b); + const float *getBackColor() const; void setAmbientColor(float r, float g, float b); void UpdateBackGround(); void UpdateWorldSettings(); diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp index 6a898ff50c2..2b2a6e0778b 100644 --- a/source/gameengine/VideoTexture/ImageRender.cpp +++ b/source/gameengine/VideoTexture/ImageRender.cpp @@ -75,8 +75,8 @@ ImageRender::ImageRender (KX_Scene *scene, KX_Camera * camera) : m_mirrorHalfWidth(0.f), m_mirrorHalfHeight(0.f) { - // initialize background color - setBackground(0, 0, 255, 255); + // initialize background color to scene background color as default + setBackgroundFromScene(m_scene); // retrieve rendering objects m_engine = KX_GetActiveEngine(); m_rasterizer = m_engine->GetRasterizer(); @@ -100,6 +100,18 @@ void ImageRender::setBackground (int red, int green, int blue, int alpha) m_background[3] = (alpha < 0) ? 0.f : (alpha > 255) ? 1.f : float(alpha)/255.f; } +// set background color from scene +void ImageRender::setBackgroundFromScene (KX_Scene *scene) +{ + if (scene) { + const float *background_color = scene->GetWorldInfo()->getBackColor(); + setBackground((int) (background_color[0] * 255.0f), (int) (background_color[1] * 255.0f), (int) (background_color[2] * 255.0f), 255); + } + else { + setBackground(0, 0, 255, 255); + } +} + // capture image from viewport void ImageRender::calcImage (unsigned int texId, double ts) @@ -733,7 +745,8 @@ ImageRender::ImageRender (KX_Scene *scene, KX_GameObject *observer, KX_GameObjec m_mirrorX = m_mirrorY.cross(m_mirrorZ); m_render = true; - setBackground(0, 0, 255, 255); + // set mirror background color to scene background color as default + setBackgroundFromScene(m_scene); } diff --git a/source/gameengine/VideoTexture/ImageRender.h b/source/gameengine/VideoTexture/ImageRender.h index 98dceeaafe1..bdf442c82d0 100644 --- a/source/gameengine/VideoTexture/ImageRender.h +++ b/source/gameengine/VideoTexture/ImageRender.h @@ -100,7 +100,7 @@ protected: void Render(); void SetupRenderFrame(KX_Scene *scene, KX_Camera* cam); void RenderFrame(KX_Scene* scene, KX_Camera* cam); - void SetBackGround(KX_WorldInfo* wi); + void setBackgroundFromScene(KX_Scene *scene); void SetWorldSettings(KX_WorldInfo* wi); }; -- cgit v1.2.3