2.12.2021, 9:00 - 11:00: Due to updates GitLab may be unavailable for some minutes between 09:00 and 11:00.

Commit 4ee7e1ac authored by Christian Schulte zu Berge's avatar Christian Schulte zu Berge
Browse files

Further work on refactoring the camera API. Added proof-of-concept...

Further work on refactoring the camera API. Added proof-of-concept implementation into MprRenderer and MprDemo. Thereby fixed various issues of the new CameraData API that occured:
* tgt::Navigation::updateClippingPlanes() yielding NaNs if the scene bounds were not defined
* NumericProperty yielding endless loops in case of NaN values
* Updated AbstractProcessor::process() to automatically validate level XYZ after calling updateXYZ().
* Adapted changes through renaming tgt into cgt

refs #141
refs #386
parent 35a402e5
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
namespace campvis { namespace campvis {
CameraData::CameraData(const tgt::Camera& camera /*= tgt::Camera()*/) CameraData::CameraData(const cgt::Camera& camera /*= cgt::Camera()*/)
: AbstractData() : AbstractData()
, _camera(camera) , _camera(camera)
{ {
...@@ -55,15 +55,15 @@ namespace campvis { ...@@ -55,15 +55,15 @@ namespace campvis {
return 0; return 0;
} }
const tgt::Camera& CameraData::getCamera() const { const cgt::Camera& CameraData::getCamera() const {
return _camera; return _camera;
} }
tgt::Camera& CameraData::getCamera() { cgt::Camera& CameraData::getCamera() {
return _camera; return _camera;
} }
void CameraData::setCamera(const tgt::Camera& camera) { void CameraData::setCamera(const cgt::Camera& camera) {
_camera = camera; _camera = camera;
} }
......
...@@ -30,13 +30,10 @@ ...@@ -30,13 +30,10 @@
#ifndef CAMERADATA_H__ #ifndef CAMERADATA_H__
#define CAMERADATA_H__ #define CAMERADATA_H__
#include "tgt/camera.h" #include "cgt/camera.h"
#include "core/datastructures/abstractdata.h" #include "core/datastructures/abstractdata.h"
#include <vector> #include <vector>
namespace tgt {
}
namespace campvis { namespace campvis {
/** /**
* Data object storing camera data. * Data object storing camera data.
...@@ -47,7 +44,7 @@ namespace campvis { ...@@ -47,7 +44,7 @@ namespace campvis {
* Constructor, creating a new CameraData object initialized by \a camera. * Constructor, creating a new CameraData object initialized by \a camera.
* \param camera Camera object used for initialization (optional) * \param camera Camera object used for initialization (optional)
*/ */
explicit CameraData(const tgt::Camera& camera = tgt::Camera()); explicit CameraData(const cgt::Camera& camera = cgt::Camera());
/** /**
* Destructor. * Destructor.
...@@ -69,22 +66,22 @@ namespace campvis { ...@@ -69,22 +66,22 @@ namespace campvis {
* Const getter for the camera settings. * Const getter for the camera settings.
* \return _camera * \return _camera
*/ */
const tgt::Camera& getCamera() const; const cgt::Camera& getCamera() const;
/** /**
* Non-const getter for the camera settings. * Non-const getter for the camera settings.
* \return _camera * \return _camera
*/ */
tgt::Camera& getCamera(); cgt::Camera& getCamera();
/** /**
* Sets the camera settings to \a camera. * Sets the camera settings to \a camera.
* \param camera New camera settings. * \param camera New camera settings.
*/ */
void setCamera(const tgt::Camera& camera); void setCamera(const cgt::Camera& camera);
protected: protected:
tgt::Camera _camera; ///< The tgt::Camera object storing the camera setup cgt::Camera _camera; ///< The cgt::Camera object storing the camera setup
}; };
......
...@@ -145,6 +145,14 @@ namespace campvis { ...@@ -145,6 +145,14 @@ namespace campvis {
AbstractProcessor::ScopedLock lock(this); AbstractProcessor::ScopedLock lock(this);
cgtAssert(_locked == true, "Processor not locked, this should not happen!"); cgtAssert(_locked == true, "Processor not locked, this should not happen!");
if (hasInvalidShader()) {
updateShader();
validate(INVALID_SHADER);
}
if (hasInvalidProperties()) {
updateProperties(data);
validate(INVALID_PROPERTIES);
}
if (hasInvalidResult()) { if (hasInvalidResult()) {
updateResult(data); updateResult(data);
validate(INVALID_RESULT); validate(INVALID_RESULT);
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#ifndef NUMERICPROPERTY_H__ #ifndef NUMERICPROPERTY_H__
#define NUMERICPROPERTY_H__ #define NUMERICPROPERTY_H__
#include "cgt/logmanager.h"
#include "cgt/vector.h" #include "cgt/vector.h"
#include "core/coreapi.h" #include "core/coreapi.h"
...@@ -50,11 +51,15 @@ namespace { ...@@ -50,11 +51,15 @@ namespace {
return value; return value;
} }
else { else {
if (tgt::LogManager::isInited()) if (cgt::LogManager::isInited())
LDEBUGC("CAMPVis.core.properties.NumericProperty", "Validating value " << value << ": Out of bounds [" << minValue << ", " << maxValue << "], clamping to range!"); LDEBUGC("CAMPVis.core.properties.NumericProperty", "Validating value " << value << ": Out of bounds [" << minValue << ", " << maxValue << "], clamping to range!");
return (value < minValue) ? minValue : maxValue; return (value < minValue) ? minValue : maxValue;
} }
} }
static bool isNan(const T& value) {
return (value != value);
};
}; };
/** /**
...@@ -67,7 +72,7 @@ namespace { ...@@ -67,7 +72,7 @@ namespace {
for (size_t i = 0; i < value.size; ++i) { for (size_t i = 0; i < value.size; ++i) {
if (toReturn[i] < minValue[i]) { if (toReturn[i] < minValue[i]) {
if (tgt::LogManager::isInited()) if (cgt::LogManager::isInited())
LDEBUGC("CAMPVis.core.properties.NumericProperty", "Validating value " << value << ": Out of bounds [" << minValue << ", " << maxValue << "], clamping to range!"); LDEBUGC("CAMPVis.core.properties.NumericProperty", "Validating value " << value << ": Out of bounds [" << minValue << ", " << maxValue << "], clamping to range!");
toReturn[i] = minValue[i]; toReturn[i] = minValue[i];
} }
...@@ -77,6 +82,15 @@ namespace { ...@@ -77,6 +82,15 @@ namespace {
} }
return toReturn; return toReturn;
} }
static bool isNan(const T& value) {
bool toReturn = false;
for (size_t i = 0; i < value.size; ++i) {
toReturn |= (value[i] != value[i]);
}
return toReturn;
};
}; };
} }
...@@ -181,6 +195,12 @@ namespace campvis { ...@@ -181,6 +195,12 @@ namespace campvis {
*/ */
virtual void decrement(); virtual void decrement();
/**
* See GenericProperty::unlock()
* This one additionally checks for NaN values, as they break the existing code.
*/
virtual void unlock();
/// Signal emitted, when the property's minimum or maximum value changes. /// Signal emitted, when the property's minimum or maximum value changes.
sigslot::signal1<const AbstractProperty*> s_minMaxChanged; sigslot::signal1<const AbstractProperty*> s_minMaxChanged;
...@@ -317,6 +337,14 @@ namespace campvis { ...@@ -317,6 +337,14 @@ namespace campvis {
void campvis::NumericProperty<T>::decrement() { void campvis::NumericProperty<T>::decrement() {
this->setValue(this->_value - this->_stepValue); this->setValue(this->_value - this->_stepValue);
} }
template<typename T>
void campvis::NumericProperty<T>::unlock() {
if (NumericPropertyTraits<T, std::numeric_limits<T>::is_specialized>::isNan(_backBuffer) && NumericPropertyTraits<T, std::numeric_limits<T>::is_specialized>::isNan(_value))
AbstractProperty::unlock();
else
GenericProperty<T>::unlock();
}
} }
#endif // NUMERICPROPERTY_H__ #endif // NUMERICPROPERTY_H__
...@@ -166,10 +166,12 @@ void Navigation::setSceneBounds(const cgt::Bounds& bounds) { ...@@ -166,10 +166,12 @@ void Navigation::setSceneBounds(const cgt::Bounds& bounds) {
} }
void Navigation::updateClippingPlanes() { void Navigation::updateClippingPlanes() {
float diag = cgt::length(_sceneBounds.diagonal()) * 0.75f; if (_sceneBounds.isDefined()) {
float dist = cgt::distance(getCamera()->getPosition(), _sceneBounds.center()); float diag = length(_sceneBounds.diagonal()) * 0.75f;
float dist = distance(getCamera()->getPosition(), _sceneBounds.center());
getCamera()->setNearDist(std::max(dist - diag, 0.1f)); getCamera()->setNearDist(std::max(dist - diag, 0.1f));
getCamera()->setFarDist(diag + 2 * dist); getCamera()->setFarDist(diag + 2 * dist);
}
} }
const cgt::Bounds& Navigation::getSceneBounds() const { const cgt::Bounds& Navigation::getSceneBounds() const {
......
...@@ -31,10 +31,10 @@ ...@@ -31,10 +31,10 @@
#include "core/datastructures/cameradata.h" #include "core/datastructures/cameradata.h"
namespace campvis { namespace campvis {
static const GenericOption<tgt::Camera::ProjectionMode> projectionOptions[3] = { static const GenericOption<cgt::Camera::ProjectionMode> projectionOptions[3] = {
GenericOption<tgt::Camera::ProjectionMode>("perspective", "Perspective", tgt::Camera::PERSPECTIVE), GenericOption<cgt::Camera::ProjectionMode>("perspective", "Perspective", cgt::Camera::PERSPECTIVE),
GenericOption<tgt::Camera::ProjectionMode>("orthographic", "Orthographice", tgt::Camera::ORTHOGRAPHIC), GenericOption<cgt::Camera::ProjectionMode>("orthographic", "Orthographice", cgt::Camera::ORTHOGRAPHIC),
GenericOption<tgt::Camera::ProjectionMode>("frustum", "Frustum", tgt::Camera::FRUSTUM) GenericOption<cgt::Camera::ProjectionMode>("frustum", "Frustum", cgt::Camera::FRUSTUM)
}; };
const std::string CameraProvider::loggerCat_ = "CAMPVis.modules.io.CameraProvider"; const std::string CameraProvider::loggerCat_ = "CAMPVis.modules.io.CameraProvider";
...@@ -42,12 +42,12 @@ namespace campvis { ...@@ -42,12 +42,12 @@ namespace campvis {
CameraProvider::CameraProvider() CameraProvider::CameraProvider()
: AbstractProcessor() : AbstractProcessor()
, p_cameraId("CameraId", "Camera ID", "camera", DataNameProperty::WRITE) , p_cameraId("CameraId", "Camera ID", "camera", DataNameProperty::WRITE)
, p_position("Position", "Camera Position", tgt::vec3(0.f), tgt::vec3(-10000.f), tgt::vec3(10000.f)) , p_position("Position", "Camera Position", cgt::vec3(0.f, 0.f, -100.f), cgt::vec3(-10000.f), cgt::vec3(10000.f))
, p_focus("Focus", "Camera Focus", tgt::vec3(0.f), tgt::vec3(-10000.f), tgt::vec3(10000.f)) , p_focus("Focus", "Camera Focus", cgt::vec3(0.f), cgt::vec3(-10000.f), cgt::vec3(10000.f))
, p_upVector("UpVector", "Camera Up Vector", tgt::vec3(0.f, 1.f, 0.f), tgt::vec3(-1.f), tgt::vec3(1.f)) , p_upVector("UpVector", "Camera Up Vector", cgt::vec3(0.f, 1.f, 0.f), cgt::vec3(-1.f), cgt::vec3(1.f))
, p_fov("FoV", "Field of View", 45.f, 1.f, 180.f) , p_fov("FoV", "Field of View", 45.f, 1.f, 180.f)
, p_aspectRatio("AspectRatio", "Aspect Ratio", 1.f, .001f, 100.f) , p_aspectRatio("AspectRatio", "Aspect Ratio", 1.f, .001f, 100.f)
, p_clippingPlanes("ClippingPlanes", "Near/Far Clipping Planes", tgt::vec2(.1f, 50.f), tgt::vec2(0.f), tgt::vec2(10000.f)) , p_clippingPlanes("ClippingPlanes", "Near/Far Clipping Planes", cgt::vec2(.1f, 1000.f), cgt::vec2(0.f), cgt::vec2(10000.f))
, p_projectionMode("ProjectionMode", "Projection Mode", projectionOptions, 3) , p_projectionMode("ProjectionMode", "Projection Mode", projectionOptions, 3)
{ {
addProperty(p_cameraId); addProperty(p_cameraId);
...@@ -65,7 +65,7 @@ namespace campvis { ...@@ -65,7 +65,7 @@ namespace campvis {
} }
void CameraProvider::updateResult(DataContainer& dataContainer) { void CameraProvider::updateResult(DataContainer& dataContainer) {
CameraData* cameraData = new CameraData(tgt::Camera( CameraData* cameraData = new CameraData(cgt::Camera(
p_position.getValue(), p_position.getValue(),
p_focus.getValue(), p_focus.getValue(),
p_upVector.getValue(), p_upVector.getValue(),
......
...@@ -32,7 +32,8 @@ ...@@ -32,7 +32,8 @@
#include <string> #include <string>
#include "tgt/camera.h" #include "cgt/camera.h"
#include "core/pipeline/abstractprocessor.h" #include "core/pipeline/abstractprocessor.h"
#include "core/properties/datanameproperty.h" #include "core/properties/datanameproperty.h"
#include "core/properties/numericproperty.h" #include "core/properties/numericproperty.h"
...@@ -78,7 +79,7 @@ namespace campvis { ...@@ -78,7 +79,7 @@ namespace campvis {
FloatProperty p_aspectRatio; ///< Aspect Ratio FloatProperty p_aspectRatio; ///< Aspect Ratio
Vec2Property p_clippingPlanes; ///< Near and far clipping planes Vec2Property p_clippingPlanes; ///< Near and far clipping planes
GenericOptionProperty<tgt::Camera::ProjectionMode> p_projectionMode; ///< Projection mode GenericOptionProperty<cgt::Camera::ProjectionMode> p_projectionMode; ///< Projection mode
protected: protected:
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
// //
// ================================================================================================ // ================================================================================================
#include "tgt/assert.h" #include "cgt/assert.h"
#include "tgt/event/mouseevent.h" #include "cgt/event/mouseevent.h"
#include "trackballcameraprovider.h" #include "trackballcameraprovider.h"
#include "core/datastructures/cameradata.h" #include "core/datastructures/cameradata.h"
...@@ -52,8 +52,8 @@ namespace campvis { ...@@ -52,8 +52,8 @@ namespace campvis {
: CameraProvider() : CameraProvider()
, p_automationMode("AutomationMode", "Automation Mode", automationOptions, 3) , p_automationMode("AutomationMode", "Automation Mode", automationOptions, 3)
, p_image("ReferenceImage", "Reference Image", "", DataNameProperty::READ) , p_image("ReferenceImage", "Reference Image", "", DataNameProperty::READ)
, p_llf("LLF", "Bounding Box LLF", tgt::vec3(0.f), tgt::vec3(-10000.f), tgt::vec3(10000.f)) , p_llf("LLF", "Bounding Box LLF", cgt::vec3(0.f), cgt::vec3(-10000.f), cgt::vec3(10000.f))
, p_urb("URB", "Bounding Box URB", tgt::vec3(0.f), tgt::vec3(-10000.f), tgt::vec3(10000.f)) , p_urb("URB", "Bounding Box URB", cgt::vec3(0.f), cgt::vec3(-10000.f), cgt::vec3(10000.f))
, _canvasSize(canvasSize) , _canvasSize(canvasSize)
, _trackball(0) , _trackball(0)
{ {
...@@ -64,7 +64,7 @@ namespace campvis { ...@@ -64,7 +64,7 @@ namespace campvis {
addProperty(p_llf); addProperty(p_llf);
addProperty(p_urb); addProperty(p_urb);
_trackball = new tgt::Trackball(this, _canvasSize->getValue()); _trackball = new cgt::Trackball(this, _canvasSize->getValue());
_canvasSize->s_changed.connect(this, &TrackballCameraProvider::onRenderTargetSizeChanged); _canvasSize->s_changed.connect(this, &TrackballCameraProvider::onRenderTargetSizeChanged);
} }
...@@ -73,33 +73,33 @@ namespace campvis { ...@@ -73,33 +73,33 @@ namespace campvis {
delete _trackball; delete _trackball;
} }
void TrackballCameraProvider::onEvent(tgt::Event* e) { void TrackballCameraProvider::onEvent(cgt::Event* e) {
if (typeid(*e) == typeid(tgt::MouseEvent)) { if (typeid(*e) == typeid(cgt::MouseEvent)) {
tgt::MouseEvent* me = static_cast<tgt::MouseEvent*>(e); cgt::MouseEvent* me = static_cast<cgt::MouseEvent*>(e);
if (me->action() == tgt::MouseEvent::PRESSED) { if (me->action() == cgt::MouseEvent::PRESSED) {
for (std::vector<VisualizationProcessor*>::iterator it = _lqModeProcessors.begin(); it != _lqModeProcessors.end(); ++it) for (std::vector<VisualizationProcessor*>::iterator it = _lqModeProcessors.begin(); it != _lqModeProcessors.end(); ++it)
(*it)->p_lqMode.setValue(true); (*it)->p_lqMode.setValue(true);
_trackball->mousePressEvent(me); _trackball->mousePressEvent(me);
} }
else if (me->action() == tgt::MouseEvent::RELEASED) { else if (me->action() == cgt::MouseEvent::RELEASED) {
for (std::vector<VisualizationProcessor*>::iterator it = _lqModeProcessors.begin(); it != _lqModeProcessors.end(); ++it) for (std::vector<VisualizationProcessor*>::iterator it = _lqModeProcessors.begin(); it != _lqModeProcessors.end(); ++it)
(*it)->p_lqMode.setValue(false); (*it)->p_lqMode.setValue(false);
_trackball->mouseReleaseEvent(me); _trackball->mouseReleaseEvent(me);
} }
else if (me->action() == tgt::MouseEvent::MOTION) { else if (me->action() == cgt::MouseEvent::MOTION) {
_trackball->mouseMoveEvent(me); _trackball->mouseMoveEvent(me);
} }
else if (me->action() == tgt::MouseEvent::WHEEL) else if (me->action() == cgt::MouseEvent::WHEEL)
_trackball->wheelEvent(me); _trackball->wheelEvent(me);
} }
else if (typeid(*e) == typeid(tgt::KeyEvent)) { else if (typeid(*e) == typeid(cgt::KeyEvent)) {
_trackball->keyEvent(static_cast<tgt::KeyEvent*>(e)); _trackball->keyEvent(static_cast<cgt::KeyEvent*>(e));
} }
} }
tgt::Camera* TrackballCameraProvider::getCamera() { cgt::Camera* TrackballCameraProvider::getCamera() {
if (!_dirty) { if (!_dirty) {
_localCopy = tgt::Camera( _localCopy = cgt::Camera(
p_position.getValue(), p_position.getValue(),
p_focus.getValue(), p_focus.getValue(),
p_upVector.getValue(), p_upVector.getValue(),
...@@ -121,16 +121,17 @@ namespace campvis { ...@@ -121,16 +121,17 @@ namespace campvis {
p_upVector.setValue(_localCopy.getUpVector()); p_upVector.setValue(_localCopy.getUpVector());
p_fov.setValue(_localCopy.getFovy()); p_fov.setValue(_localCopy.getFovy());
p_aspectRatio.setValue(_localCopy.getRatio()); p_aspectRatio.setValue(_localCopy.getRatio());
p_clippingPlanes.setValue(tgt::vec2(_localCopy.getNearDist(), _localCopy.getFarDist())); if (cgt::isNumber(_localCopy.getNearDist()) && cgt::isNumber(_localCopy.getFarDist()))
p_clippingPlanes.setValue(cgt::vec2(_localCopy.getNearDist(), _localCopy.getFarDist()));
switch (_localCopy.getProjectionMode()) { switch (_localCopy.getProjectionMode()) {
case tgt::Camera::PERSPECTIVE: case cgt::Camera::PERSPECTIVE:
p_projectionMode.selectById("perspective"); p_projectionMode.selectById("perspective");
break; break;
case tgt::Camera::ORTHOGRAPHIC: case cgt::Camera::ORTHOGRAPHIC:
p_projectionMode.selectById("orthographic"); p_projectionMode.selectById("orthographic");
break; break;
case tgt::Camera::FRUSTUM: case cgt::Camera::FRUSTUM:
p_projectionMode.selectById("frustum"); p_projectionMode.selectById("frustum");
break; break;
} }
...@@ -151,8 +152,8 @@ namespace campvis { ...@@ -151,8 +152,8 @@ namespace campvis {
// convert data // convert data
ScopedTypedData<ImageData> img(data, p_image.getValue()); ScopedTypedData<ImageData> img(data, p_image.getValue());
if (img != 0) { if (img != 0) {
tgt::Bounds volumeExtent = img->getWorldBounds(); cgt::Bounds volumeExtent = img->getWorldBounds();
tgt::vec3 pos = volumeExtent.center() - tgt::vec3(0, 0, tgt::length(volumeExtent.diagonal())); cgt::vec3 pos = volumeExtent.center() - cgt::vec3(0, 0, cgt::length(volumeExtent.diagonal()));
if (_trackball->getSceneBounds() != volumeExtent) { if (_trackball->getSceneBounds() != volumeExtent) {
_trackball->setSceneBounds(volumeExtent); _trackball->setSceneBounds(volumeExtent);
...@@ -164,8 +165,8 @@ namespace campvis { ...@@ -164,8 +165,8 @@ namespace campvis {
} }
void TrackballCameraProvider::addLqModeProcessor(VisualizationProcessor* vp) { void TrackballCameraProvider::addLqModeProcessor(VisualizationProcessor* vp) {
tgtAssert(vp != 0, "Pointer to processor must not be 0."); cgtAssert(vp != 0, "Pointer to processor must not be 0.");
tgtAssert(std::find(_lqModeProcessors.begin(), _lqModeProcessors.end(), vp) == _lqModeProcessors.end(), "Processor already in list of LQ mode processors."); cgtAssert(std::find(_lqModeProcessors.begin(), _lqModeProcessors.end(), vp) == _lqModeProcessors.end(), "Processor already in list of LQ mode processors.");
_lqModeProcessors.push_back(vp); _lqModeProcessors.push_back(vp);
} }
......
...@@ -31,12 +31,12 @@ ...@@ -31,12 +31,12 @@
#define TRACKBALLCAMERAPROVIDER_H__ #define TRACKBALLCAMERAPROVIDER_H__
#include "tbb/atomic.h" #include "tbb/atomic.h"
#include "tgt/bounds.h" #include "cgt/bounds.h"
#include "tgt/event/eventlistener.h" #include "cgt/event/eventlistener.h"
#include "tgt/navigation/trackball.h" #include "cgt/navigation/trackball.h"
#include "modules/base/processors/cameraprovider.h" #include "modules/base/processors/cameraprovider.h"
namespace tgt { namespace cgt {
class Trackball; class Trackball;
} }
...@@ -46,7 +46,7 @@ namespace campvis { ...@@ -46,7 +46,7 @@ namespace campvis {
/** /**
* Generates CameraData objects. * Generates CameraData objects.
*/ */
class TrackballCameraProvider : public CameraProvider, public tgt::EventListener , public tgt::IHasCamera { class TrackballCameraProvider : public CameraProvider, public cgt::EventListener , public cgt::IHasCamera {
public: public:
/// Trackball automation mode /// Trackball automation mode
enum AutomationMode { enum AutomationMode {
...@@ -69,13 +69,13 @@ namespace campvis { ...@@ -69,13 +69,13 @@ namespace campvis {
/// \see AbstractProcessor::updateProperties() /// \see AbstractProcessor::updateProperties()
virtual void updateProperties(DataContainer& dataContainer); virtual void updateProperties(DataContainer& dataContainer);
/// \see tgt::EventListener::onEvent() /// \see cgt::EventListener::onEvent()
virtual void onEvent(tgt::Event* e); virtual void onEvent(cgt::Event* e);
/// \see tgt::Camera::IHasCamera::getCamera() /// \see cgt::Camera::IHasCamera::getCamera()
virtual tgt::Camera* getCamera(); virtual cgt::Camera* getCamera();
/// \see tgt::Camera::IHasCamera::update() /// \see cgt::Camera::IHasCamera::update()
virtual void update(); virtual void update();
...@@ -107,9 +107,9 @@ namespace campvis { ...@@ -107,9 +107,9 @@ namespace campvis {
IVec2Property* _canvasSize; IVec2Property* _canvasSize;
/// Temporary copy of the property's camera which will be modified and written back to the property upon update(). /// Temporary copy of the property's camera which will be modified and written back to the property upon update().
tgt::Camera _localCopy; cgt::Camera _localCopy;
/// The tgt::Trackball for the navigation logic /// The cgt::Trackball for the navigation logic
tgt::Trackball* _trackball; cgt::Trackball* _trackball;
tbb::atomic<bool> _dirty; tbb::atomic<bool> _dirty;