Commit b1c69116 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 VolumeRenderer and VolumeExplorer:

refs #141
parent 4ee7e1ac
......@@ -28,6 +28,7 @@
#include "cgt/shadermanager.h"
#include "cgt/textureunit.h"
#include "core/datastructures/cameradata.h"
#include "core/datastructures/imagedata.h"
#include "core/datastructures/renderdata.h"
#include "core/tools/glreduction.h"
......@@ -43,7 +44,7 @@ namespace campvis {
, p_entryImageID("entryImageID", "Input Entry Points Image", "", DataNameProperty::READ)
, p_exitImageID("exitImageID", "Input Exit Points Image", "", DataNameProperty::READ)
, p_targetImageID("targetImageID", "Output Image", "", DataNameProperty::WRITE)
, p_camera("camera", "Camera")
, p_camera("Camera", "Camera ID", "camera", DataNameProperty::READ)
, p_transferFunction("TransferFunction", "Transfer Function", new SimpleTransferFunction(256))
, p_jitterStepSizeMultiplier("jitterStepSizeMultiplier", "Jitter Step Size Multiplier", 1.f, 0.f, 1.f)
, p_samplingRate("SamplingRate", "Sampling Rate", 2.f, 0.1f, 10.f, 0.1f)
......@@ -90,8 +91,9 @@ namespace campvis {
ImageRepresentationGL::ScopedRepresentation img(data, p_sourceImageID.getValue());
ScopedTypedData<RenderData> entryPoints(data, p_entryImageID.getValue());
ScopedTypedData<RenderData> exitPoints(data, p_exitImageID.getValue());
ScopedTypedData<CameraData> camera(data, p_camera.getValue());
if (img != 0 && entryPoints != 0 && exitPoints != 0) {
if (img != nullptr && entryPoints != nullptr && exitPoints != nullptr && camera != nullptr) {
if (img->getDimensionality() == 3) {
// little hack to support LOD texture lookup for the gradients:
// if texture does not yet have mipmaps, create them.
......@@ -132,7 +134,7 @@ namespace campvis {
_shader->setUniform("_samplingStepSize", samplingStepSize);
// compute and set camera parameters
const cgt::Camera& cam = p_camera.getValue();
const cgt::Camera& cam = camera->getCamera();
float n = cam.getNearDist();
float f = cam.getFarDist();
_shader->setUniform("_cameraPosition", cam.getPosition());
......
......@@ -29,11 +29,7 @@
#include "core/pipeline/visualizationprocessor.h"
#include "core/pipeline/abstractprocessordecorator.h"
#include "core/properties/cameraproperty.h"
#include "core/properties/datanameproperty.h"
#include "core/properties/genericproperty.h"
#include "core/properties/floatingpointproperty.h"
#include "core/properties/transferfunctionproperty.h"
#include "core/properties/allproperties.h"
#include "core/datastructures/imagerepresentationgl.h"
......@@ -92,7 +88,7 @@ namespace campvis {
DataNameProperty p_exitImageID; ///< image ID for output exit points image
DataNameProperty p_targetImageID; ///< image ID for output image
CameraProperty p_camera; ///< Camera used for ray casting
DataNameProperty p_camera; ///< Camera used for ray casting
TransferFunctionProperty p_transferFunction; ///< Transfer function
FloatProperty p_jitterStepSizeMultiplier; ///< Step size multiplier for entry points jitter
FloatProperty p_samplingRate; ///< Ray casting sampling rate
......
......@@ -178,6 +178,7 @@ namespace campvis {
_viewportSizeProperty = viewportSizeProp;
_viewportSizeProperty->s_changed.connect<VisualizationProcessor>(this, &VisualizationProcessor::onPropertyChanged);
setPropertyInvalidationLevel(*viewportSizeProp, INVALID_RESULT);
invalidate(INVALID_RESULT);
}
}
......@@ -55,7 +55,7 @@ namespace campvis {
, p_llf("LLF", "Bounding Box LLF", cgt::vec3(0.f), cgt::vec3(-10000.f), cgt::vec3(10000.f))
, p_urb("URB", "Bounding Box URB", cgt::vec3(0.f), cgt::vec3(-10000.f), cgt::vec3(10000.f))
, _canvasSize(canvasSize)
, _trackball(0)
, _trackball(nullptr)
{
_dirty = false;
......@@ -65,10 +65,18 @@ namespace campvis {
addProperty(p_urb);
_trackball = new cgt::Trackball(this, _canvasSize->getValue());
_canvasSize->s_changed.connect(this, &TrackballCameraProvider::onRenderTargetSizeChanged);
}
TrackballCameraProvider::~TrackballCameraProvider() {
}
void TrackballCameraProvider::init() {
_canvasSize->s_changed.connect(this, &TrackballCameraProvider::onRenderTargetSizeChanged);
onRenderTargetSizeChanged(_canvasSize);
}
void TrackballCameraProvider::deinit() {
_canvasSize->s_changed.disconnect(this);
delete _trackball;
}
......@@ -146,6 +154,7 @@ namespace campvis {
_trackball->setViewprtSize(_canvasSize->getValue());
float ratio = static_cast<float>(_canvasSize->getValue().x) / static_cast<float>(_canvasSize->getValue().y);
p_aspectRatio.setValue(ratio);
invalidate(INVALID_RESULT);
}
void TrackballCameraProvider::updateProperties(DataContainer& data) {
......@@ -180,4 +189,17 @@ namespace campvis {
}
}
void TrackballCameraProvider::setViewportSizeProperty(IVec2Property* viewportSizeProp) {
cgtAssert(viewportSizeProp != nullptr, "Pointer must not be 0.");
if (_canvasSize != nullptr) {
_canvasSize->s_changed.disconnect(this);
}
_canvasSize = viewportSizeProp;
_canvasSize->s_changed.connect(this, &TrackballCameraProvider::onRenderTargetSizeChanged);
setPropertyInvalidationLevel(*viewportSizeProp, INVALID_RESULT);
onRenderTargetSizeChanged(viewportSizeProp);
}
}
\ No newline at end of file
......@@ -65,6 +65,10 @@ namespace campvis {
**/
virtual ~TrackballCameraProvider();
/// \see AbstractProcessor::init()
virtual void init();
/// \see AbstractProcessor::deinit()
virtual void deinit();
/// \see AbstractProcessor::updateProperties()
virtual void updateProperties(DataContainer& dataContainer);
......@@ -94,6 +98,15 @@ namespace campvis {
void removeLqModeProcessor(VisualizationProcessor* vp);
/**
* Sets the property defining the viewport size to \a viewportSizeProp.
* \note This processor will keep and access this pointer, so make sure the referenced
* property exists at least as long as this processor or you set it to a different
* property before.
* \param viewportSizeProp Pointer to the property defining the viewport size, must not be 0.
*/
void setViewportSizeProperty(IVec2Property* viewportSizeProp);
GenericOptionProperty<AutomationMode> p_automationMode;
DataNameProperty p_image;
......
......@@ -65,6 +65,7 @@ namespace campvis {
_imageReader.p_url.setValue(ShdrMgr.completePath("/modules/vis/sampledata/smallHeart.mhd"));
_imageReader.p_targetImageID.setValue("reader.output");
_imageReader.p_targetImageID.addSharedProperty(&_tcp.p_image);
_imageReader.p_targetImageID.addSharedProperty(&_mprRenderer.p_sourceImageID);
Geometry1DTransferFunction* tf = new Geometry1DTransferFunction(128, cgt::vec2(0.f, .08f));
......
......@@ -34,38 +34,32 @@ namespace campvis {
VolumeRendererDemo::VolumeRendererDemo(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _camera("camera", "Camera")
, _tcp(&_canvasSize)
, _lsp()
, _imageReader()
, _vr(&_canvasSize)
, _trackballEH(0)
{
addProperty(_camera);
_trackballEH = new TrackballNavigationEventListener(&_camera, &_canvasSize);
_trackballEH->addLqModeProcessor(&_vr);
addEventListenerToBack(_trackballEH);
_tcp.addLqModeProcessor(&_vr);
addEventListenerToBack(&_tcp);
addProcessor(&_tcp);
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_vr);
}
VolumeRendererDemo::~VolumeRendererDemo() {
delete _trackballEH;
}
void VolumeRendererDemo::init() {
AutoEvaluationPipeline::init();
_imageReader.s_validated.connect(this, &VolumeRendererDemo::onProcessorValidated);
_camera.addSharedProperty(&_vr.p_camera);
_vr.p_outputImage.setValue("combine");
_renderTargetID.setValue("combine");
_imageReader.p_url.setValue(ShdrMgr.completePath("/modules/vis/sampledata/smallHeart.mhd"));
_imageReader.p_targetImageID.setValue("reader.output");
_imageReader.p_targetImageID.addSharedProperty(&_tcp.p_image);
_imageReader.p_targetImageID.addSharedProperty(&_vr.p_inputVolume);
Geometry1DTransferFunction* dvrTF = new Geometry1DTransferFunction(128, cgt::vec2(0.f, .05f));
......@@ -76,20 +70,4 @@ namespace campvis {
static_cast<FloatProperty*>(_vr.getNestedProperty("RaycasterProps::SamplingRate"))->setValue(4.f);
}
void VolumeRendererDemo::deinit() {
_imageReader.s_validated.disconnect(this);
AutoEvaluationPipeline::deinit();
}
void VolumeRendererDemo::onProcessorValidated(AbstractProcessor* processor) {
if (processor == &_imageReader) {
// update camera
ScopedTypedData<ImageData> img(*_data, _imageReader.p_targetImageID.getValue());
if (img != 0) {
_trackballEH->reinitializeCamera(img);
}
}
}
}
\ No newline at end of file
......@@ -25,9 +25,8 @@
#ifndef VOLUMERENDERERDEMO_H__
#define VOLUMERENDERERDEMO_H__
#include "core/eventhandlers/trackballnavigationeventlistener.h"
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/trackballcameraprovider.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/mhdimagereader.h"
#include "modules/vis/processors/volumerenderer.h"
......@@ -48,30 +47,17 @@ namespace campvis {
/// \see AutoEvaluationPipeline::init()
virtual void init();
/// \see AutoEvaluationPipeline::deinit()
virtual void deinit();
/// \see AbstractPipeline::getName()
virtual const std::string getName() const { return getId(); };
/// \see AbstractPipeline::getId()
static const std::string getId() { return "VolumeRendererDemo"; };
protected:
/**
* Slot getting called when one of the observed processors got validated.
* Updates the camera properties, when the input image has changed.
* \param processor The processor that emitted the signal
*/
virtual void onProcessorValidated(AbstractProcessor* processor);
CameraProperty _camera;
TrackballCameraProvider _tcp;
LightSourceProvider _lsp;
MhdImageReader _imageReader;
VolumeRenderer _vr;
TrackballNavigationEventListener* _trackballEH;
};
}
......
......@@ -29,6 +29,7 @@
#include "cgt/shadermanager.h"
#include "cgt/textureunit.h"
#include "core/datastructures/cameradata.h"
#include "core/datastructures/imagedata.h"
#include "core/datastructures/imagerepresentationgl.h"
#include "core/datastructures/renderdata.h"
......@@ -46,7 +47,7 @@ namespace campvis {
, p_geometryImageId("GeometryImageId", "Rendered Geometry to Integrate (optional)", "", DataNameProperty::READ)
, p_entryImageID("entryImageID", "Output Entry Points Image", "eep.entry", DataNameProperty::WRITE)
, p_exitImageID("exitImageID", "Output Exit Points Image", "eep.exit", DataNameProperty::WRITE)
, p_camera("camera", "Camera")
, p_camera("Camera", "Camera ID", "camera", DataNameProperty::READ)
, p_enableMirror("enableMirror", "Enable Virtual Mirror Feature", false)
, p_mirrorID("mirrorID", "Input Mirror ID", "", DataNameProperty::READ)
, _shader(0)
......@@ -89,17 +90,19 @@ namespace campvis {
void EEPGenerator::updateResult(DataContainer& data) {
ImageRepresentationGL::ScopedRepresentation img(data, p_sourceImageID.getValue());
ScopedTypedData<MeshGeometry> proxyGeometry(data, p_geometryID.getValue());
ScopedTypedData<CameraData> camera(data, p_camera.getValue());
if (img != 0 && proxyGeometry != 0 && _shader != 0) {
if (img != nullptr && proxyGeometry != nullptr && _shader != nullptr && camera != nullptr) {
if (img->getDimensionality() == 3) {
const cgt::Camera& cam = camera->getCamera();
ScopedTypedData<RenderData> geometryImage(data, p_geometryImageId.getValue());
cgt::Bounds textureBounds(cgt::vec3(0.f), cgt::vec3(1.f));
// clip proxy geometry against near-plane to support camera in volume
// FIXME: In some cases, the near plane is not rendered correctly...
float nearPlaneDistToOrigin = cgt::dot(p_camera.getValue().getPosition(), -p_camera.getValue().getLook()) - p_camera.getValue().getNearDist() - .002f;
MeshGeometry clipped = proxyGeometry->clipAgainstPlane(nearPlaneDistToOrigin, -p_camera.getValue().getLook(), true, 0.02f);
float nearPlaneDistToOrigin = cgt::dot(cam.getPosition(), -cam.getLook()) - cam.getNearDist() - .002f;
MeshGeometry clipped = proxyGeometry->clipAgainstPlane(nearPlaneDistToOrigin, -cam.getLook(), true, 0.02f);
// start render setup
_shader->activate();
......@@ -126,7 +129,6 @@ namespace campvis {
}
}
const cgt::Camera& cam = p_camera.getValue();
cgt::TextureUnit geometryDepthUnit, entryDepthUnit;
_shader->setIgnoreUniformLocationError(true);
......
......@@ -30,11 +30,7 @@
#include "core/classification/abstracttransferfunction.h"
#include "core/pipeline/visualizationprocessor.h"
#include "core/pipeline/abstractprocessordecorator.h"
#include "core/properties/cameraproperty.h"
#include "core/properties/datanameproperty.h"
#include "core/properties/genericproperty.h"
#include "core/properties/numericproperty.h"
#include "core/properties/transferfunctionproperty.h"
#include "core/properties/allproperties.h"
namespace cgt {
class Shader;
......@@ -77,7 +73,7 @@ namespace campvis {
DataNameProperty p_entryImageID; ///< image ID for output entry points image
DataNameProperty p_exitImageID; ///< image ID for output exit points image
CameraProperty p_camera;
DataNameProperty p_camera;
BoolProperty p_enableMirror; ///< Enable Virtual Mirror Feature
DataNameProperty p_mirrorID; ///< ID for input mirror geometry
......
......@@ -55,6 +55,7 @@ namespace campvis {
, p_vrProperties("VolumeRendererProperties", "Volume Renderer Properties")
, _shader(nullptr)
, _quad(nullptr)
, _tcp(viewportSizeProp)
, _raycaster(viewportSizeProp, raycaster)
, _sliceRenderer(sliceRenderer)
, p_smallRenderSize("SmallRenderSize", "Small Render Size", cgt::ivec2(32), cgt::ivec2(0), cgt::ivec2(10000), cgt::ivec2(1))
......@@ -63,7 +64,6 @@ namespace campvis {
, _ySliceHandler(&_sliceRenderer->p_ySliceNumber)
, _zSliceHandler(&_sliceRenderer->p_zSliceNumber)
, _windowingHandler(nullptr)
, _trackballEH(nullptr)
, _mousePressedInRaycaster(false)
, _viewUnderEvent(VOLUME)
, _eventPositionOffset(0)
......@@ -76,9 +76,9 @@ namespace campvis {
p_largeView.selectByOption(VOLUME);
addProperty(p_inputVolume, INVALID_PROPERTIES);
addProperty(p_inputVolume, INVALID_PROPERTIES | CAMERA_INVALID);
addProperty(p_outputImage);
addProperty(p_largeView, LARGE_VIEW_INVALID | SLICES_INVALID | VR_INVALID | INVALID_RESULT);
addProperty(p_largeView, LARGE_VIEW_INVALID | CAMERA_INVALID | SLICES_INVALID | VR_INVALID | INVALID_RESULT);
addProperty(p_enableScribbling, VALID);
addDecorator(new ProcessorDecoratorBackground());
......@@ -100,9 +100,11 @@ namespace campvis {
_raycaster.p_outputImage.setVisible(false);
addProperty(p_vrProperties, VALID);
p_inputVolume.addSharedProperty(&_tcp.p_image);
p_inputVolume.addSharedProperty(&_raycaster.p_inputVolume);
p_inputVolume.addSharedProperty(&_sliceRenderer->p_sourceImageID);
_tcp.setViewportSizeProperty(&p_largeRenderSize);
_sliceRenderer->setViewportSizeProperty(&p_smallRenderSize);
_raycaster.setViewportSizeProperty(&p_largeRenderSize);
......@@ -110,8 +112,7 @@ namespace campvis {
addProperty(p_largeRenderSize, VALID);
// Event-Handlers
_trackballEH = new TrackballNavigationEventListener(&_raycaster.p_camera, &p_largeRenderSize);
_trackballEH->addLqModeProcessor(&_raycaster);
_tcp.addLqModeProcessor(&_raycaster);
if (TransferFunctionProperty* tester = dynamic_cast<TransferFunctionProperty*>(_sliceRenderer->getProperty("TransferFunction"))) {
_windowingHandler.setTransferFunctionProperty(tester);
......@@ -119,11 +120,11 @@ namespace campvis {
}
VolumeExplorer::~VolumeExplorer() {
delete _trackballEH;
}
void VolumeExplorer::init() {
VisualizationProcessor::init();
_tcp.init();
_raycaster.init();
_sliceRenderer->init();
......@@ -131,6 +132,7 @@ namespace campvis {
_shader->setAttributeLocation(0, "in_Position");
_shader->setAttributeLocation(1, "in_TexCoord");
_tcp.s_invalidated.connect(this, &VolumeExplorer::onProcessorInvalidated);
_sliceRenderer->s_invalidated.connect(this, &VolumeExplorer::onProcessorInvalidated);
_raycaster.s_invalidated.connect(this, &VolumeExplorer::onProcessorInvalidated);
......@@ -141,6 +143,7 @@ namespace campvis {
}
void VolumeExplorer::deinit() {
_tcp.deinit();
_raycaster.deinit();
_sliceRenderer->deinit();
VisualizationProcessor::deinit();
......@@ -156,11 +159,11 @@ namespace campvis {
case XZ_PLANE: // fallthrough
case YZ_PLANE:
_raycaster.setViewportSizeProperty(&p_smallRenderSize);
_trackballEH->setViewportSizeProperty(&p_smallRenderSize);
_tcp.setViewportSizeProperty(&p_smallRenderSize);
break;
case VOLUME:
_raycaster.setViewportSizeProperty(&p_largeRenderSize);
_trackballEH->setViewportSizeProperty(&p_largeRenderSize);
_tcp.setViewportSizeProperty(&p_largeRenderSize);
break;
}
validate(LARGE_VIEW_INVALID);
......@@ -186,9 +189,15 @@ namespace campvis {
if (! (getInvalidationLevel() & VR_INVALID))
invalidate(SLICES_INVALID);
}
if (getInvalidationLevel() & VR_INVALID) {
if (getInvalidationLevel() & CAMERA_INVALID) {
_tcp.process(data);
_raycaster.process(data);
}
else if (getInvalidationLevel() & VR_INVALID) {
_raycaster.process(data);
}
if (getInvalidationLevel() & SLICES_INVALID) {
_sliceRenderer->setViewportSizeProperty(p_largeView.getOptionValue() == YZ_PLANE ? &p_largeRenderSize : &p_smallRenderSize);
_sliceRenderer->p_sliceOrientation.selectByOption(SliceRenderProcessor::YZ_PLANE);
......@@ -209,7 +218,7 @@ namespace campvis {
// compose rendering
composeFinalRendering(data);
validate(INVALID_RESULT | VR_INVALID | SLICES_INVALID);
validate(INVALID_RESULT | CAMERA_INVALID | VR_INVALID | SLICES_INVALID);
}
void VolumeExplorer::onPropertyChanged(const AbstractProperty* prop) {
......@@ -337,6 +346,9 @@ namespace campvis {
// make sure to only invalidate ourself if the invalidation is not triggered by us
// => the _locked state is a trustworthy source for this information :)
if (! isLocked()) {
if (processor == &_tcp) {
invalidate(CAMERA_INVALID);
}
if (processor == &_raycaster) {
invalidate(VR_INVALID);
}
......@@ -366,8 +378,6 @@ namespace campvis {
_sliceRenderer->p_zSliceNumber.setMaxValue(_cachedImageSize.z - 1);
_sliceRenderer->p_zSliceNumber.setValue(_cachedImageSize.z / 2);
}
_trackballEH->reinitializeCamera(img);
}
}
......@@ -418,7 +428,7 @@ namespace campvis {
_mousePressedInRaycaster = true;
else if (me->action() == cgt::MouseEvent::RELEASED)
_mousePressedInRaycaster = false;
_trackballEH->onEvent(&adjustedMe);
_tcp.onEvent(&adjustedMe);
}
else if (me->action() == cgt::MouseEvent::WHEEL) {
// Mouse wheel has changed -> cycle slices
......
......@@ -28,16 +28,13 @@
#include "cgt/event/eventlistener.h"
#include "core/eventhandlers/mwheeltonumericpropertyeventlistener.h"
#include "core/eventhandlers/trackballnavigationeventlistener.h"
#include "core/eventhandlers/transfuncwindowingeventlistener.h"
#include "core/pipeline/abstractprocessordecorator.h"
#include "core/pipeline/visualizationprocessor.h"
#include "core/properties/allproperties.h"
#include "core/properties/datanameproperty.h"
#include "core/properties/numericproperty.h"
#include "core/properties/metaproperty.h"
#include "modules/base/processors/trackballcameraprovider.h"
#include "modules/vis/processors/volumerenderer.h"
#include "modules/vis/processors/sliceextractor.h"
......@@ -117,10 +114,11 @@ namespace campvis {
/// Additional invalidation levels for this processor.
/// Not the most beautiful design though.
enum ProcessorInvalidationLevel {
VR_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL,
SLICES_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 1,
SCRIBBLE_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 2,
LARGE_VIEW_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 3
CAMERA_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL,
VR_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 1,
SLICES_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 2,
SCRIBBLE_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 3,
LARGE_VIEW_INVALID = FIRST_FREE_TO_USE_INVALIDATION_LEVEL << 4
};
/// \see AbstractProcessor::updateResult
......@@ -152,6 +150,7 @@ namespace campvis {
cgt::Shader* _shader; ///< Shader for slice rendering
FaceGeometry* _quad;
TrackballCameraProvider _tcp;
VolumeRenderer _raycaster;
SliceRenderProcessor* _sliceRenderer;
......@@ -163,7 +162,6 @@ namespace campvis {
MWheelToNumericPropertyEventListener _ySliceHandler;
MWheelToNumericPropertyEventListener _zSliceHandler;
TransFuncWindowingEventListener _windowingHandler;
TrackballNavigationEventListener* _trackballEH;
bool _mousePressedInRaycaster; ///< Flag whether mouse was pressed in raycaster
Views _viewUnderEvent; ///< View to apply events to
......
......@@ -38,7 +38,7 @@ namespace campvis {
VolumeRenderer::VolumeRenderer(IVec2Property* viewportSizeProp, RaycastingProcessor* raycaster)
: VisualizationProcessor(viewportSizeProp)
, p_inputVolume("InputVolume", "Input Volume", "", DataNameProperty::READ)
, p_camera("Camera", "Camera", cgt::Camera())
, p_camera("Camera", "Camera ID", "camera", DataNameProperty::READ)
, p_outputImage("OutputImage", "Output Image", "vr.output", DataNameProperty::WRITE)
, p_profileRaycaster("ProfileRaycaster", "Profile Raycaster's Execution Time", false)
, _timerQueryRaycaster(0)
......
......@@ -26,9 +26,7 @@
#define VOLUMERENDERER_H__
#include "core/pipeline/visualizationprocessor.h"
#include "core/properties/datanameproperty.h"
#include "core/properties/metaproperty.h"
#include "core/properties/numericproperty.h"
#include "core/properties/allproperties.h"
#include "modules/vis/processors/eepgenerator.h"
#include "modules/vis/processors/proxygeometrygenerator.h"
......@@ -91,7 +89,7 @@ namespace campvis {
RaycastingProcessor* getRaycastingProcessor();
DataNameProperty p_inputVolume; ///< image ID for first input image
CameraProperty p_camera; ///< Camera
DataNameProperty p_camera; ///< Camera ID
DataNameProperty p_outputImage; ///< image ID for output image
BoolProperty p_profileRaycaster; ///< Flag whether the raycaster's execution time shall be profiled
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment