Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Szepe <HG1_public@gmx.net>2015-03-23 23:36:08 +0300
committerThomas Szepe <HG1_public@gmx.net>2015-03-23 23:36:08 +0300
commit2affbb437bd3cbf3e1a502bd65a5eefb64a92b9b (patch)
tree2403ce2b95eb97249251d24ca035d389864c307f
parent38321faa8d111ec51ebdeb7f2e939062d5e080a1 (diff)
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
-rw-r--r--doc/python_api/rst/bge.render.rst9
-rw-r--r--source/gameengine/Converter/BlenderWorldInfo.cpp41
-rw-r--r--source/gameengine/Converter/BlenderWorldInfo.h6
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp17
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp113
-rw-r--r--source/gameengine/Ketsji/KX_WorldInfo.h8
-rw-r--r--source/gameengine/Ketsji/KX_WorldIpoController.cpp4
-rw-r--r--source/gameengine/Rasterizer/RAS_IRasterizer.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp16
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h2
10 files changed, 111 insertions, 107 deletions
diff --git a/doc/python_api/rst/bge.render.rst b/doc/python_api/rst/bge.render.rst
index 77d5bd71761..3abbd50a453 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 75beb5d0e0e..28e42c1cc63 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 2ac2d70b5d1..6c67681c3bc 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 e453b757b7e..44b667e15e0 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 d7dd3fe5253..e0af3283f44 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 90b16fe1242..251ba95f43a 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 setMistDistance(float) = 0;
- virtual void setMistColorRed(float) = 0;
- virtual void setMistColorGreen(float) = 0;
- virtual void setMistColorBlue(float) = 0;
+ virtual void setMistColor(float, float, float) = 0;
+ virtual void setBackColor(float, float, float) = 0;
+ virtual void setAmbientColor(float,float,float) = 0;
#ifdef WITH_CXX_GUARDEDALLOC
diff --git a/source/gameengine/Ketsji/KX_WorldIpoController.cpp b/source/gameengine/Ketsji/KX_WorldIpoController.cpp
index 7f83a155643..a30d89284b8 100644
--- a/source/gameengine/Ketsji/KX_WorldIpoController.cpp
+++ b/source/gameengine/Ketsji/KX_WorldIpoController.cpp
@@ -57,9 +57,7 @@ bool KX_WorldIpoController::Update(double currentTime)
}
if (m_modify_mist_color) {
- world->setMistColorRed(m_mist_rgb[0]);
- world->setMistColorGreen(m_mist_rgb[1]);
- world->setMistColorBlue(m_mist_rgb[2]);
+ world->setMistColor(m_mist_rgb[0], m_mist_rgb[1], m_mist_rgb[2]);
}
if (m_modify_mist_dist) {
diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h
index d7b52213191..6f5273f035f 100644
--- a/source/gameengine/Rasterizer/RAS_IRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h
@@ -302,7 +302,7 @@ public:
virtual void SetFogStart(float start) = 0;
virtual void SetFogEnd(float end) = 0;
virtual void DisplayFog() = 0;
- virtual void DisableFog() = 0;
+ virtual void EnableFog(bool enable) = 0;
virtual bool IsFogEnabled() = 0;
virtual void SetBackColor(float red, float green, float blue, float alpha) = 0;
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 116a11339d9..14a184bbe7f 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -229,7 +229,6 @@ void RAS_OpenGLRasterizer::SetFogColor(float r,
m_fogr = r;
m_fogg = g;
m_fogb = b;
- m_fogenabled = true;
}
@@ -237,7 +236,6 @@ void RAS_OpenGLRasterizer::SetFogColor(float r,
void RAS_OpenGLRasterizer::SetFogStart(float start)
{
m_fogstart = start;
- m_fogenabled = true;
}
@@ -245,7 +243,6 @@ void RAS_OpenGLRasterizer::SetFogStart(float start)
void RAS_OpenGLRasterizer::SetFogEnd(float fogend)
{
m_fogdist = fogend;
- m_fogenabled = true;
}
@@ -261,14 +258,13 @@ void RAS_OpenGLRasterizer::SetFog(float start,
m_fogr = r;
m_fogg = g;
m_fogb = b;
- m_fogenabled = true;
}
-void RAS_OpenGLRasterizer::DisableFog()
+void RAS_OpenGLRasterizer::EnableFog(bool enable)
{
- m_fogenabled = false;
+ m_fogenabled = enable;
}
bool RAS_OpenGLRasterizer::IsFogEnabled()
@@ -281,16 +277,12 @@ void RAS_OpenGLRasterizer::DisplayFog()
{
if ((m_drawingmode >= KX_SOLID) && m_fogenabled)
{
- float params[5];
+ float params[4] = {m_fogr, m_fogg, m_fogb, 1.0f};
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogf(GL_FOG_DENSITY, 0.1f);
glFogf(GL_FOG_START, m_fogstart);
glFogf(GL_FOG_END, m_fogstart + m_fogdist);
- params[0] = m_fogr;
- params[1] = m_fogg;
- params[2] = m_fogb;
- params[3] = 0.0;
- glFogfv(GL_FOG_COLOR, params);
+ glFogfv(GL_FOG_COLOR, params);
glEnable(GL_FOG);
}
else
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
index 1334ddb2a26..042243230b3 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
@@ -202,7 +202,7 @@ public:
virtual void SetFogColor(float r, float g, float b);
virtual void SetFogStart(float fogstart);
virtual void SetFogEnd(float fogend);
- void DisableFog();
+ virtual void EnableFog(bool enable);
virtual void DisplayFog();
virtual bool IsFogEnabled();