The name of the initial branch for new projects is now "main" instead of "master". Existing projects remain unchanged. More information: https://doku.lrz.de/display/PUBLIC/GitLab

Commit 388856cf authored by Christian Schulte zu Berge's avatar Christian Schulte zu Berge
Browse files

Various fixes/improvements:

* Fixed GenericPointerData::getData() implementation
* Improved input data handling in RenderTargetCompositor: Will also show something if only one of the two inputs are set
* removed obsolete GlReductionTest pipeline
parent ee6e96a5
......@@ -70,7 +70,7 @@ namespace campvis {
* \return _data, may be 0, GenericPointerData has ownership
*/
const T* getData() const {
return _data;
return _data.get();
};
/**
......@@ -78,7 +78,7 @@ namespace campvis {
* \return _data, may be 0, GenericPointerData has ownership
*/
T* getData() {
return _data;
return _data.get();
};
/**
......
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitaet Muenchen
// Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
//
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
//
// ================================================================================================
#include "glreductiontest.h"
#include "tgt/event/keyevent.h"
#include "core/datastructures/imagedata.h"
#include "core/datastructures/renderdata.h"
#include "core/classification/geometry1dtransferfunction.h"
#include "core/classification/tfgeometry1d.h"
#include "core/tools/glreduction.h"
namespace campvis {
GlReductionTest::GlReductionTest(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _lsp()
, _imageReader()
, _resampler(&_canvasSize)
, _ve(&_canvasSize)
, _glr(nullptr)
, _glr2(nullptr)
{
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_resampler);
addProcessor(&_ve);
addEventListenerToBack(&_ve);
}
GlReductionTest::~GlReductionTest() {
}
void GlReductionTest::init() {
AutoEvaluationPipeline::init();
_glr = new GlReduction(GlReduction::MAX);
_glr2 = new GlReduction(GlReduction::MIN);
_imageReader.s_validated.connect(this, &GlReductionTest::onProcessorValidated);
_ve.p_outputImage.setValue("result");
_renderTargetID.setValue("result");
_imageReader.p_url.setValue(CAMPVIS_SOURCE_DIR "/modules/vis/sampledata/smallHeart.mhd");
_imageReader.p_targetImageID.setValue("reader.output");
_imageReader.p_targetImageID.addSharedProperty(&_resampler.p_inputImage);
_resampler.p_outputImage.setValue("resampled");
_resampler.p_outputImage.addSharedProperty(&_ve.p_inputVolume);
_resampler.s_validated.connect(this, &GlReductionTest::onProcessorValidated);
Geometry1DTransferFunction* dvrTF = new Geometry1DTransferFunction(128, tgt::vec2(0.f, .05f));
dvrTF->addGeometry(TFGeometry1D::createQuad(tgt::vec2(.1f, .125f), tgt::col4(255, 0, 0, 32), tgt::col4(255, 0, 0, 32)));
dvrTF->addGeometry(TFGeometry1D::createQuad(tgt::vec2(.4f, .5f), tgt::col4(0, 255, 0, 128), tgt::col4(0, 255, 0, 128)));
static_cast<TransferFunctionProperty*>(_ve.getNestedProperty("VolumeRendererProperties::RaycasterProps::TransferFunction"))->replaceTF(dvrTF);
}
void GlReductionTest::deinit() {
AutoEvaluationPipeline::deinit();
delete _glr;
delete _glr2;
}
void GlReductionTest::onProcessorValidated(AbstractProcessor* processor) {
if (processor == &_resampler) {
ImageRepresentationGL::ScopedRepresentation img(getDataContainer(), _resampler.p_outputImage.getValue());
if (img != 0) {
float* foo = reinterpret_cast<float*>(img->getTexture()->downloadTextureToBuffer(GL_RED, GL_FLOAT));
std::vector<float> v(foo, foo + tgt::hmul(img->getTexture()->getDimensions()));
float mmm = *std::max_element(v.begin(), v.end());
float max = _glr->reduce(img->getTexture()).front();
LDEBUG("3D: " << mmm << ", " << max << ", DIFF: " << (mmm - max));
}
ScopedTypedData<RenderData> result(getDataContainer(), _ve.p_outputImage.getValue() + ".raycaster");
if (result != 0) {
const ImageData* depthImg = result->getDepthTexture();
if (depthImg != 0) {
const ImageRepresentationGL* depthRep = depthImg->getRepresentation<ImageRepresentationGL>();
if (depthRep != 0) {
float* foo = reinterpret_cast<float*>(depthRep->getTexture()->downloadTextureToBuffer());
std::vector<float> v(foo, foo + depthRep->getNumElements());
float min1 = *std::min_element(v.begin(), v.end());
float min2 = _glr2->reduce(depthRep->getTexture()).front();
LDEBUG("2D: " << min1 << ", " << min2 << ", DIFF: " << std::abs(min2 - min1));
}
}
}
}
}
}
\ No newline at end of file
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitaet Muenchen
// Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
//
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
//
// ================================================================================================
#ifndef GLREDUCTIONTEST_H__
#define GLREDUCTIONTEST_H__
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/mhdimagereader.h"
#include "modules/preprocessing/processors/glimageresampler.h"
#include "modules/vis/processors/volumeexplorer.h"
#include "core/tools/glreduction.h"
namespace campvis {
class GlReductionTest : public AutoEvaluationPipeline {
public:
/**
* Creates a AutoEvaluationPipeline.
*/
GlReductionTest(DataContainer* dc);
/**
* Virtual Destructor
**/
virtual ~GlReductionTest();
/// \see AutoEvaluationPipeline::init()
virtual void init();
/// \see AutoEvaluationPipeline::deinit()
virtual void deinit();
/// \see AbstractPipeline::getName()
virtual const std::string getName() const { return getId(); };
static const std::string getId() { return "GlReductionTest"; };
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);
LightSourceProvider _lsp;
MhdImageReader _imageReader;
GlImageResampler _resampler;
VolumeExplorer _ve;
GlReduction* _glr;
GlReduction* _glr2;
};
}
#endif // GLREDUCTIONTEST_H__
......@@ -88,7 +88,13 @@ namespace campvis {
ScopedTypedData<RenderData> firstImage(data, p_firstImageId.getValue());
ScopedTypedData<RenderData> secondImage(data, p_secondImageId.getValue());
if ((p_compositingMethod.getOptionValue() == CompositingModeSecond || firstImage != nullptr) && (p_compositingMethod.getOptionValue() == CompositingModeFirst || secondImage != nullptr)) {
CompositingMode compositingMode = p_compositingMethod.getOptionValue();
if (firstImage != nullptr && secondImage == nullptr && compositingMode != CompositingModeSecond)
compositingMode = CompositingModeFirst;
if (firstImage == nullptr && secondImage != nullptr && compositingMode != CompositingModeFirst)
compositingMode = CompositingModeSecond;
if ((compositingMode == CompositingModeSecond || firstImage != nullptr) && (compositingMode == CompositingModeFirst || secondImage != nullptr)) {
FramebufferActivationGuard fag(this);
createAndAttachColorTexture();
createAndAttachDepthTexture();
......@@ -96,12 +102,12 @@ namespace campvis {
_shader->activate();
tgt::TextureUnit firstColorUnit, firstDepthUnit, secondColorUnit, secondDepthUnit;
if (p_compositingMethod.getOptionValue() != CompositingModeSecond)
if (compositingMode != CompositingModeSecond)
firstImage->bind(_shader, firstColorUnit, firstDepthUnit, "_firstColor", "_firstDepth", "_firstTexParams");
if (p_compositingMethod.getOptionValue() != CompositingModeFirst)
if (compositingMode != CompositingModeFirst)
secondImage->bind(_shader, secondColorUnit, secondDepthUnit, "_secondColor", "_secondDepth", "_secondTexParams");
_shader->setUniform("_compositingMethod", p_compositingMethod.getOptionValue());
_shader->setUniform("_compositingMethod", compositingMode);
_shader->setUniform("_alpha", p_alphaValue.getValue());
_shader->setUniform("_enableBackground", p_enableBackground.getValue());
......
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