[Bf-blender-cvs] [dc95ca9] master: BGE: Fix T43822 Videotexture does not use sky color for off-screen rendering

Jorge Bernal noreply at git.blender.org
Sun May 10 00:57:44 CEST 2015


Commit: dc95ca92ca224d26423c5d63b33e7714a6a8c9ce
Author: Jorge Bernal
Date:   Sun May 10 00:54:06 2015 +0200
Branches: master
https://developer.blender.org/rBdc95ca92ca224d26423c5d63b33e7714a6a8c9ce

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

===================================================================

M	source/gameengine/Ketsji/KX_WorldInfo.cpp
M	source/gameengine/Ketsji/KX_WorldInfo.h
M	source/gameengine/VideoTexture/ImageRender.cpp
M	source/gameengine/VideoTexture/ImageRender.h

===================================================================

diff --git a/source/gameengine/Ketsji/KX_WorldInfo.cpp b/source/gameengine/Ketsji/KX_WorldInfo.cpp
index e4bf439..21e7250 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 64304e5..0e8fe3c 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 6a898ff..2b2a6e0 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 98dceea..bdf442c 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);
 };




More information about the Bf-blender-cvs mailing list