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:
authorJorge Bernal <jbernalmartinez@gmail.com>2015-03-23 20:57:19 +0300
committerJorge Bernal <jbernalmartinez@gmail.com>2015-03-23 21:03:56 +0300
commitddf58004c4a4ad7fc59f9cd1c3f6f0a800424ee3 (patch)
treee726ea7a2a3e623f6395dc093f62e4541f4bd6c5
parentf65e3c7f1b5aaa9b5376c20a36267aad27ce40ec (diff)
BGE: LoD Hysteresis clean up
Move scene hysteresis value to KX_Scene where it should be (instead of KX_GameObject)
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp20
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h9
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp13
-rw-r--r--source/gameengine/Ketsji/KX_Scene.h7
5 files changed, 25 insertions, 26 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 7b5cc457ee6..6e3a321bfdf 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -1556,7 +1556,7 @@ static KX_GameObject *gameobject_from_blenderobject(
}
if (blenderscene->gm.lodflag & SCE_LOD_USE_HYST) {
kxscene->SetLodHysteresis(true);
- gameobj->SetLodHysteresisValue(blenderscene->gm.scehysteresis);
+ kxscene->SetLodHysteresisValue(blenderscene->gm.scehysteresis);
}
}
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index 16dfe5bd9de..d0c6792cce0 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -93,7 +93,6 @@ KX_GameObject::KX_GameObject(
m_layer(0),
m_currentLodLevel(0),
m_previousLodLevel(0),
- m_lodHysteresis(0),
m_pBlenderObject(NULL),
m_pBlenderGroupObject(NULL),
m_bSuspendDynamics(false),
@@ -786,11 +785,6 @@ void KX_GameObject::AddLodMesh(RAS_MeshObject* mesh)
m_lodmeshes.push_back(mesh);
}
-void KX_GameObject::SetLodHysteresisValue(int hysteresis)
-{
- m_lodHysteresis = hysteresis;
-}
-
void KX_GameObject::UpdateLod(MT_Vector3 &cam_pos)
{
// Handle dupligroups
@@ -811,20 +805,20 @@ void KX_GameObject::UpdateLod(MT_Vector3 &cam_pos)
int level = 0;
Object *bob = this->GetBlenderObject();
LodLevel *lod = (LodLevel*) bob->lodlevels.first;
- KX_Scene *sce = this->GetScene();
+ KX_Scene *kxscene = this->GetScene();
for (; lod; lod = lod->next, level++) {
if (!lod->source || lod->source->type != OB_MESH) level--;
if (!lod->next) break;
if (level == (this->m_previousLodLevel) || (level == (this->m_previousLodLevel + 1))) {
short hysteresis = 0;
- if (sce->IsActivedLodHysteresis()) {
+ if (kxscene->IsActivedLodHysteresis()) {
// if exists, LoD level hysteresis will override scene hysteresis
if (lod->next->flags & OB_LOD_USE_HYST) {
hysteresis = lod->next->obhysteresis;
}
- else if (this->m_lodHysteresis != 0) {
- hysteresis = m_lodHysteresis;
+ else {
+ hysteresis = kxscene->GetLodHysteresisValue();
}
}
float hystvariance = MT_abs(lod->next->distance - lod->distance) * hysteresis / 100;
@@ -833,13 +827,13 @@ void KX_GameObject::UpdateLod(MT_Vector3 &cam_pos)
}
else if (level == (this->m_previousLodLevel - 1)) {
short hysteresis = 0;
- if (sce->IsActivedLodHysteresis()) {
+ if (kxscene->IsActivedLodHysteresis()) {
// if exists, LoD level hysteresis will override scene hysteresis
if (lod->next->flags & OB_LOD_USE_HYST) {
hysteresis = lod->next->obhysteresis;
}
- else if (this->m_lodHysteresis != 0) {
- hysteresis = m_lodHysteresis;
+ else {
+ hysteresis = kxscene->GetLodHysteresisValue();
}
}
float hystvariance = MT_abs(lod->next->distance - lod->distance) * hysteresis / 100;
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index d9810b89c90..acc63585749 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -91,7 +91,6 @@ protected:
std::vector<RAS_MeshObject*> m_lodmeshes;
int m_currentLodLevel;
short m_previousLodLevel;
- int m_lodHysteresis;
SG_QList m_meshSlots; // head of mesh slots of this
struct Object* m_pBlenderObject;
struct Object* m_pBlenderGroupObject;
@@ -807,14 +806,6 @@ public:
);
/**
- * Set lod hysteresis value
- */
- void
- SetLodHysteresisValue(
- int hysteresis
- );
-
- /**
* Updates the current lod level based on distance from camera.
*/
void
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index d9d07e78c17..e26fdaa4898 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -157,7 +157,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_active_camera(NULL),
m_ueberExecutionPriority(0),
m_blenderScene(scene),
- m_isActivedHysteresis(false)
+ m_isActivedHysteresis(false),
+ m_lodHysteresisValue(0)
{
m_suspendedtime = 0.0;
m_suspendeddelta = 0.0;
@@ -1774,6 +1775,16 @@ bool KX_Scene::IsActivedLodHysteresis(void)
return m_isActivedHysteresis;
}
+void KX_Scene::SetLodHysteresisValue(int hysteresisvalue)
+{
+ m_lodHysteresisValue = hysteresisvalue;
+}
+
+int KX_Scene::GetLodHysteresisValue(void)
+{
+ return m_lodHysteresisValue;
+}
+
void KX_Scene::UpdateObjectActivity(void)
{
if (m_activity_culling) {
diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h
index 19873daabb3..a031be78e92 100644
--- a/source/gameengine/Ketsji/KX_Scene.h
+++ b/source/gameengine/Ketsji/KX_Scene.h
@@ -296,9 +296,10 @@ protected:
KX_ObstacleSimulation* m_obstacleSimulation;
/**
- * Does this scene active the LoD Hysteresis?
+ * LOD Hysteresis settings
*/
bool m_isActivedHysteresis;
+ int m_lodHysteresisValue;
public:
KX_Scene(class SCA_IInputDevice* keyboarddevice,
@@ -552,9 +553,11 @@ public:
// Update the mesh for objects based on level of detail settings
void UpdateObjectLods(void);
- // Enable/disable LoD Hysteresis
+ // LoD Hysteresis functions
void SetLodHysteresis(bool active);
bool IsActivedLodHysteresis();
+ void SetLodHysteresisValue(int hysteresisvalue);
+ int GetLodHysteresisValue();
// Update the activity box settings for objects in this scene, if needed.
void UpdateObjectActivity(void);