[Bf-blender-cvs] [2affbb4] master: BGE: Multitexture world (mist, ambient) fix

Thomas Szepe noreply at git.blender.org
Mon Mar 23 21:36:57 CET 2015


Commit: 2affbb437bd3cbf3e1a502bd65a5eefb64a92b9b
Author: Thomas Szepe
Date:   Mon Mar 23 21:36:08 2015 +0100
Branches: master
https://developer.blender.org/rB2affbb437bd3cbf3e1a502bd65a5eefb64a92b9b

BGE: Multitexture world (mist, ambient) fix

This patch fix the existing word API for mist and global ambient lighting.
Add deprecated message to disableMist()
Add setUseMist(enable).

Reviewers: dfelinto, campbellbarton, moguri

Reviewed By: moguri

Subscribers: solarlune, jta, brecht

Projects: #bf_blender:_next

Differential Revision: https://developer.blender.org/D148

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

M	doc/python_api/rst/bge.render.rst
M	source/gameengine/Converter/BlenderWorldInfo.cpp
M	source/gameengine/Converter/BlenderWorldInfo.h
M	source/gameengine/Ketsji/KX_KetsjiEngine.cpp
M	source/gameengine/Ketsji/KX_PythonInit.cpp
M	source/gameengine/Ketsji/KX_WorldInfo.h
M	source/gameengine/Ketsji/KX_WorldIpoController.cpp
M	source/gameengine/Rasterizer/RAS_IRasterizer.h
M	source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
M	source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

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

diff --git a/doc/python_api/rst/bge.render.rst b/doc/python_api/rst/bge.render.rst
index 77d5bd7..3abbd50 100644
--- a/doc/python_api/rst/bge.render.rst
+++ b/doc/python_api/rst/bge.render.rst
@@ -198,9 +198,16 @@ Functions
 
    Disables mist.
    
-   .. note:: Set any of the mist properties to enable mist.
+   .. note:: Deprecated use setUseMist().
 
    
+.. function:: setUseMist(enable)
+
+   Disable or enable the mist.
+
+   :type enable: boolean
+
+
 .. function:: setEyeSeparation(eyesep)
 
    Sets the eye separation for stereo mode. Usually Focal Length/30 provides a confortable value.
diff --git a/source/gameengine/Converter/BlenderWorldInfo.cpp b/source/gameengine/Converter/BlenderWorldInfo.cpp
index 75beb5d..28e42c1 100644
--- a/source/gameengine/Converter/BlenderWorldInfo.cpp
+++ b/source/gameengine/Converter/BlenderWorldInfo.cpp
@@ -69,21 +69,10 @@ BlenderWorldInfo::BlenderWorldInfo(struct Scene *blenderscene, struct World *ble
 {
 	if (blenderworld) {
 		m_hasworld = true;
-
-		// do we have mist?
-		if ((blenderworld->mode) & WO_MIST) {
-			m_hasmist = true;
-			m_miststart = blenderworld->miststa;
-			m_mistdistance = blenderworld->mistdist;
-			copy_v3_v3(m_mistcolor, &blenderworld->horr);
-		}
-		else {
-			m_hasmist = false;
-			m_miststart = 0.0;
-			m_mistdistance = 0.0;
-			zero_v3(m_mistcolor);
-		}
-
+		m_hasmist = ((blenderworld->mode) & WO_MIST ? true : false);
+		m_miststart = blenderworld->miststa;
+		m_mistdistance = blenderworld->mistdist;
+		copy_v3_v3(m_mistcolor, &blenderworld->horr);
 		copy_v3_v3(m_backgroundcolor, &blenderworld->horr);
 		copy_v3_v3(m_ambientcolor, &blenderworld->ambr);
 
@@ -174,6 +163,11 @@ void BlenderWorldInfo::setBackColor(float r, float g, float b)
 	m_backgroundcolor[2] = b;
 }
 
+void BlenderWorldInfo::setUseMist(bool enable)
+{
+	m_hasmist = enable;
+}
+
 void BlenderWorldInfo::setMistStart(float d)
 {
 	m_miststart = d;
@@ -184,17 +178,16 @@ void BlenderWorldInfo::setMistDistance(float d)
 	m_mistdistance = d;
 }
 
-void BlenderWorldInfo::setMistColorRed(float d)
-{
-	m_mistcolor[0] = d;
-}
-
-void BlenderWorldInfo::setMistColorGreen(float d)
+void BlenderWorldInfo::setMistColor(float r, float g, float b)
 {
-	m_mistcolor[1] = d;
+	m_mistcolor[0] = r;
+	m_mistcolor[1] = g;
+	m_mistcolor[2] = b;
 }
 
-void BlenderWorldInfo::setMistColorBlue(float d)
+void BlenderWorldInfo::setAmbientColor(float r, float g, float b)
 {
-	m_mistcolor[2] = d;
+	m_ambientcolor[0] = r;
+	m_ambientcolor[1] = g;
+	m_ambientcolor[2] = b;
 }
diff --git a/source/gameengine/Converter/BlenderWorldInfo.h b/source/gameengine/Converter/BlenderWorldInfo.h
index 2ac2d70..6c67681 100644
--- a/source/gameengine/Converter/BlenderWorldInfo.h
+++ b/source/gameengine/Converter/BlenderWorldInfo.h
@@ -67,11 +67,11 @@ public:
 	float getMistColorBlue();
 
 	void setBackColor(float r, float g, float b);
+	void setUseMist(bool enable);
 	void setMistStart(float d);
 	void setMistDistance(float d);
-	void setMistColorRed(float d);
-	void setMistColorGreen(float d);
-	void setMistColorBlue(float d);
+	void setMistColor(float r, float g, float b);
+	void setAmbientColor(float r, float g, float b);
 
 
 #ifdef WITH_CXX_GUARDEDALLOC
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index e453b75..44b667e 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -985,15 +985,14 @@ void KX_KetsjiEngine::SetWorldSettings(KX_WorldInfo* wi)
 {
 	if (wi->hasWorld())
 	{
-		// ...
-		m_rasterizer->SetAmbientColor(
-			wi->getAmbientColorRed(),
-			wi->getAmbientColorGreen(),
-			wi->getAmbientColorBlue()
-		);
-
 		if (m_rasterizer->GetDrawingMode() >= RAS_IRasterizer::KX_SOLID)
 		{
+			m_rasterizer->SetAmbientColor(
+				wi->getAmbientColorRed(),
+				wi->getAmbientColorGreen(),
+				wi->getAmbientColorBlue()
+				);
+
 			if (wi->hasMist())
 			{
 				m_rasterizer->SetFog(
@@ -1003,6 +1002,10 @@ void KX_KetsjiEngine::SetWorldSettings(KX_WorldInfo* wi)
 					wi->getMistColorGreen(),
 					wi->getMistColorBlue()
 				);
+				m_rasterizer->EnableFog(true);
+			}
+			else {
+				m_rasterizer->EnableFog(false);
 			}
 		}
 	}
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index d7dd3fe..e0af328 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -1029,108 +1029,118 @@ static PyObject *gPyGetStereoEye(PyObject *, PyObject *, PyObject *)
 
 static PyObject *gPySetBackgroundColor(PyObject *, PyObject *value)
 {
-	
 	MT_Vector4 vec;
 	if (!PyVecTo(value, vec))
 		return NULL;
-	
-	if (gp_Canvas)
-	{
-		gp_Rasterizer->SetBackColor((float)vec[0], (float)vec[1], (float)vec[2], (float)vec[3]);
-	}
 
 	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
-	if (wi->hasWorld())
-		wi->setBackColor((float)vec[0], (float)vec[1], (float)vec[2]);
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.SetBackgroundColor(color), World not available");
+		return NULL;
+	}
+
+	wi->setBackColor((float)vec[0], (float)vec[1], (float)vec[2]);
 
 	Py_RETURN_NONE;
 }
 
-
-
 static PyObject *gPySetMistColor(PyObject *, PyObject *value)
 {
-	
 	MT_Vector3 vec;
 	if (!PyVecTo(value, vec))
 		return NULL;
-	
-	if (!gp_Rasterizer) {
-		PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistColor(color), Rasterizer not available");
+
+	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.setMistColor(color), World not available");
 		return NULL;
 	}
-	gp_Rasterizer->SetFogColor((float)vec[0], (float)vec[1], (float)vec[2]);
-	
+
+	wi->setMistColor((float)vec[0], (float)vec[1], (float)vec[2]);
+
 	Py_RETURN_NONE;
 }
 
 static PyObject *gPyDisableMist(PyObject *)
 {
-	
-	if (!gp_Rasterizer) {
-		PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistColor(color), Rasterizer not available");
+	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.DisableMist(), World not available");
 		return NULL;
 	}
-	gp_Rasterizer->DisableFog();
-	
+	ShowDeprecationWarning("DisableMist()", "setUseMist(false)");
+	wi->setUseMist(false);
+
 	Py_RETURN_NONE;
 }
 
-static PyObject *gPySetMistStart(PyObject *, PyObject *args)
+static PyObject *gPySetUseMist(PyObject *, PyObject *args)
 {
+	int enable;
+	if (!PyArg_ParseTuple(args,"i:setUseMist",&enable))
+		return NULL;
+
+	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.setUseMist(enable), World not available");
+		return NULL;
+	}
+
+	wi->setUseMist(enable);
+
+	Py_RETURN_NONE;
+}
 
+static PyObject *gPySetMistStart(PyObject *, PyObject *args)
+{
 	float miststart;
 	if (!PyArg_ParseTuple(args,"f:setMistStart",&miststart))
 		return NULL;
-	
-	if (!gp_Rasterizer) {
-		PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistStart(float), Rasterizer not available");
+
+	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.setMistStart(float), World not available");
 		return NULL;
 	}
-	
-	gp_Rasterizer->SetFogStart(miststart);
-	
-	Py_RETURN_NONE;
-}
 
+	wi->setMistStart(miststart);
 
+	Py_RETURN_NONE;
+}
 
 static PyObject *gPySetMistEnd(PyObject *, PyObject *args)
 {
-
-	float mistend;
-	if (!PyArg_ParseTuple(args,"f:setMistEnd",&mistend))
+	float mistdist;
+	if (!PyArg_ParseTuple(args,"f:setMistEnd",&mistdist))
 		return NULL;
-	
-	if (!gp_Rasterizer) {
-		PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistEnd(float), Rasterizer not available");
+
+	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.setMistEnd(float), World not available");
 		return NULL;
 	}
-	
-	gp_Rasterizer->SetFogEnd(mistend);
-	
+
+	wi->setMistDistance(mistdist);
+
 	Py_RETURN_NONE;
 }
 
-
 static PyObject *gPySetAmbientColor(PyObject *, PyObject *value)
 {
-	
 	MT_Vector3 vec;
 	if (!PyVecTo(value, vec))
 		return NULL;
-	
-	if (!gp_Rasterizer) {
-		PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setAmbientColor(color), Rasterizer not available");
+
+	KX_WorldInfo *wi = gp_KetsjiScene->GetWorldInfo();
+	if (!wi->hasWorld()) {
+		PyErr_SetString(PyExc_RuntimeError, "bge.render.setAmbientColor(color), World not available");
 		return NULL;
 	}
-	gp_Rasterizer->SetAmbientColor((float)vec[0], (float)vec[1], (float)vec[2]);
-	
-	Py_RETURN_NONE;
-}
-
 
+	wi->setAmbientColor((float)vec[0], (float)vec[1], (float)vec[2]);
 
+	Py_RETURN_NONE;
+}
 
 static PyObject *gPyMakeScreenshot(PyObject *, PyObject *args)
 {
@@ -1510,9 +1520,10 @@ static struct PyMethodDef rasterizer_methods[] = {
 	{"setBackgroundColor",(PyCFunction)gPySetBackgroundColor,METH_O,"set Background Color (rgb)"},
 	{"setAmbientColor",(PyCFunction)gPySetAmbientColor,METH_O,"set Ambient Color (rgb)"},
 	{"disableMist",(PyCFunction)gPyDisableMist,METH_NOARGS,"turn off mist"},
+	{"setUseMist",(PyCFunction)gPySetUseMist,METH_VARARGS,"enable or disable mist"},
 	{"setMistColor",(PyCFunction)gPySetMistColor,METH_O,"set Mist Color (rgb)"},
-	{"setMistStart",(PyCFunction)gPySetMistStart,METH_VARARGS,"set Mist Start(rgb)"},
-	{"setMistEnd",(PyCFunction)gPySetMistEnd,METH_VARARGS,"set Mist End(rgb)"},
+	{"setMistStart",(PyCFunction)gPySetMistStart,METH_VARARGS,"set Mist Start"},
+	{"setMistEnd",(PyCFunction)gPySetMistEnd,METH_VARARGS,"set Mist End"},
 	{"enableMotionBlur",(PyCFunction)gPyEnableMotionBlur,METH_VARARGS,"enable motion blur"},
 	{"disableMotionBlur",(PyCFunction)gPyDisableMotionBlur,METH_NOARGS,"disable motion blur"},
 
diff --git a/source/gameengine/Ketsji/KX_WorldInfo.h b/source/gameengine/Ketsji/KX_WorldInfo.h
index 90b16fe..251ba95 100644
--- a/source/gameengine/Ketsji/KX_WorldInfo.h
+++ b/source/gameengine/Ketsji/KX_WorldInfo.h
@@ -61,12 +61,12 @@ public:
 	virtual float getAmbientColorGreen() = 0;
 	virtual float getAmbientColorBlue() = 0;
 
-	virtual void setBackColor(float, float, float) = 0;
+	virtual void setUseMist(bool enable) = 0;
 	virtual void setMistStart(float) = 0;
 	virtual void

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list