Skip to content

Commit

Permalink
Introduce modified flag for Scene to reflect updates; fix #232 (#234)
Browse files Browse the repository at this point in the history
  • Loading branch information
tribal-tec committed Oct 23, 2017
1 parent 3424757 commit 2d1c204
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 34 deletions.
9 changes: 7 additions & 2 deletions brayns/Brayns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,9 +379,10 @@ struct Brayns::Impl
Camera& camera = _engine->getCamera();
camera.commit();

Scene& scene = _engine->getScene();

if (_parametersManager->getRenderingParameters().getHeadLight())
{
Scene& scene = _engine->getScene();
LightPtr sunLight = scene.getLight(0);
DirectionalLight* sun =
dynamic_cast<DirectionalLight*>(sunLight.get());
Expand All @@ -397,15 +398,19 @@ struct Brayns::Impl
_engine->setActiveRenderer(
_parametersManager->getRenderingParameters().getRenderer());

if (_parametersManager->isAnyModified() || camera.getModified())
if (_parametersManager->isAnyModified() || camera.getModified() ||
scene.getModified())
{
_engine->getFrameBuffer().clear();
}

_engine->render();

_writeFrameToFolder();

_parametersManager->resetModified();
camera.resetModified();
scene.resetModified();

return true;
}
Expand Down
17 changes: 14 additions & 3 deletions brayns/common/scene/Scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,19 @@ void Scene::reset()
_renderers.clear();
}

bool Scene::getModified() const
{
return _modified;
}

void Scene::resetModified()
{
_modified = false;
}

void Scene::unload()
{
setDirty();
_markGeometryDirty();
_spheres.clear();
_cylinders.clear();
_cones.clear();
Expand All @@ -69,12 +79,13 @@ void Scene::unload()
_volumeHandler.reset();
}

void Scene::setDirty()
void Scene::_markGeometryDirty()
{
_spheresDirty = true;
_cylindersDirty = true;
_conesDirty = true;
_trianglesMeshesDirty = true;
_modified = true;
}

void Scene::buildMaterials()
Expand Down Expand Up @@ -204,7 +215,7 @@ void Scene::buildDefault()
{
BRAYNS_INFO << "Building default Cornell Box scene" << std::endl;

setDirty();
_markGeometryDirty();

const Vector3f WHITE = {1.f, 1.f, 1.f};

Expand Down
42 changes: 13 additions & 29 deletions brayns/common/scene/Scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -265,35 +265,6 @@ class Scene
* and sent to the rendering engine
*/
BRAYNS_API void setSpheresDirty(const bool value) { _spheresDirty = value; }
/**
* @brief Sets cylinders as dirty, meaning that they need to be serialized
* and sent to the rendering engine
*/
BRAYNS_API void setCylindersDirty(const bool value)
{
_cylindersDirty = value;
}

/**
* @brief Sets cones as dirty, meaning that they need to be serialized
* and sent to the rendering engine
*/
BRAYNS_API void setConesDirty(const bool value) { _conesDirty = value; }
/**
* @brief Sets meshes as dirty, meaning that they need to be serialized
* and sent to the rendering engine
*/
BRAYNS_API void setTrianglesMeshesDirty(const bool value)
{
_trianglesMeshesDirty = value;
}

/**
* @brief Sets all geometries as dirty, meaning that they need to be
* serialized and sent to the rendering engine
*/
BRAYNS_API void setDirty();

/**
* @return true if unload() can be performed. Some implementations might not
* support it, hence deletion of the scene or the entire engine is
Expand All @@ -306,6 +277,14 @@ class Scene
*/
virtual void reset();

/**
@return true if any modification happend after the last resetModified()
*/
BRAYNS_API bool getModified() const;

/** Reset the modified flag */
BRAYNS_API void resetModified();

protected:
// Parameters
ParametersManager& _parametersManager;
Expand Down Expand Up @@ -334,6 +313,11 @@ class Scene

// Scene
Boxf _bounds;

bool _modified = false;

private:
void _markGeometryDirty();
};
}
#endif // SCENE_H
6 changes: 6 additions & 0 deletions plugins/engines/ospray/OSPRayScene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1132,6 +1132,7 @@ void OSPRayScene::commitMaterials(const bool updateOnly)
ospSetData(osprayRenderer->impl(), "materials", _ospMaterialData);
ospCommit(osprayRenderer->impl());
}
_modified = true;
}

void OSPRayScene::commitTransferFunctionData()
Expand Down Expand Up @@ -1178,7 +1179,10 @@ void OSPRayScene::commitTransferFunctionData()
ospSet1f(osprayRenderer->impl(), "transferFunctionRange",
_transferFunction.getValuesRange().y() -
_transferFunction.getValuesRange().x());

ospCommit(osprayRenderer->impl());
}
_modified = true;
}

void OSPRayScene::commitVolumeData()
Expand Down Expand Up @@ -1226,6 +1230,7 @@ void OSPRayScene::commitVolumeData()
ospSet1f(osprayRenderer->impl(), "volumeEpsilon", epsilon);
}
}
_modified = true;
}

void OSPRayScene::commitSimulationData()
Expand Down Expand Up @@ -1263,6 +1268,7 @@ void OSPRayScene::commitSimulationData()
_simulationHandler->getFrameSize());
ospCommit(osprayRenderer->impl());
}
_modified = true;
}

OSPTexture2D OSPRayScene::_createTexture2D(const std::string& textureName)
Expand Down

0 comments on commit 2d1c204

Please sign in to comment.