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

Removed ProcessorDecoratorShading and replaced all of its usages with the new...

Removed ProcessorDecoratorShading and replaced all of its usages with the new LightSourceData API. This also includes adding LightSourceProviders to the corresponding pipelines.

refs #547
parent e099cf39
......@@ -56,6 +56,8 @@ namespace campvis {
}
void LightSourceData::bind(tgt::Shader* shader, const std::string& uniformName) const {
tgt::Shader::IgnoreUniformLocationErrorGuard guard(shader);
shader->setUniform(uniformName + "._position", _lightPosition);
shader->setUniform(uniformName + "._ambientColor", _ambientColor);
shader->setUniform(uniformName + "._diffuseColor", _diffuseColor);
......
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2013, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universität München
// Boltzmannstr. 3, 85748 Garching b. München, 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 "processordecoratorshading.h"
#include "tgt/shadermanager.h"
#include "core/pipeline/abstractprocessor.h"
namespace campvis {
ProcessorDecoratorShading::ProcessorDecoratorShading(const std::string& lightUniformName /*= "_lightSource"*/)
: ProcessorDecoratorGradient()
, _enableShading("EnableShading", "Enable Shading", true)
, _lightPosition("LightPosition", "Light Position", tgt::vec3(-100.f), tgt::vec3(-500.f), tgt::vec3(500.f), tgt::vec3(1.f))
, _ambientColor("AmbientColor", "Ambient Light Color", tgt::vec3(0.4f), tgt::vec3(0.f), tgt::vec3(1.f))
, _diffuseColor("DiffuseColor", "Diffuse Light Color", tgt::vec3(0.75f), tgt::vec3(0.f), tgt::vec3(1.f))
, _specularColor("SpecularColor", "Specular Light Color", tgt::vec3(0.6f), tgt::vec3(0.f), tgt::vec3(1.f))
, _shininess("Shininess", "Specular Shininess", 24.f, 0.f, 64.f, 0.5f)
, _attenuation("Attenuation", "Attenuation Factors", tgt::vec3(0.f), tgt::vec3(0.f), tgt::vec3(1.f))
, _lightUniformName(lightUniformName)
{
}
ProcessorDecoratorShading::~ProcessorDecoratorShading() {
}
void ProcessorDecoratorShading::addProperties(AbstractProcessor* propCollection) {
propCollection->addProperty(_enableShading, AbstractProcessor::INVALID_SHADER | AbstractProcessor::INVALID_RESULT);
ProcessorDecoratorGradient::addProperties(propCollection);
propCollection->addProperty(_lightPosition);
propCollection->addProperty(_ambientColor);
propCollection->addProperty(_diffuseColor);
propCollection->addProperty(_specularColor);
propCollection->addProperty(_shininess);
propCollection->addProperty(_attenuation);
}
void ProcessorDecoratorShading::renderProlog(const DataContainer& dataContainer, tgt::Shader* shader) {
ProcessorDecoratorGradient::renderProlog(dataContainer, shader);
shader->setUniform(_lightUniformName + "._position", _lightPosition.getValue());
shader->setUniform(_lightUniformName + "._ambientColor", _ambientColor.getValue());
shader->setUniform(_lightUniformName + "._diffuseColor", _diffuseColor.getValue());
shader->setUniform(_lightUniformName + "._specularColor", _specularColor.getValue());
shader->setUniform(_lightUniformName + "._shininess", _shininess.getValue());
shader->setUniform(_lightUniformName + "._attenuation", _attenuation.getValue());
}
std::string ProcessorDecoratorShading::generateHeader() const {
std::string toReturn = ProcessorDecoratorGradient::generateHeader();
if (_enableShading.getValue())
toReturn.append("#define ENABLE_SHADING\n");
return toReturn;
}
}
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2013, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universität München
// Boltzmannstr. 3, 85748 Garching b. München, 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 PROCESSORDECORATORSHADING_H__
#define PROCESSORDECORATORSHADING_H__
#include "tgt/textureunit.h"
#include "core/pipeline/processordecoratorgradient.h"
#include "core/properties/floatingpointproperty.h"
#include "core/properties/genericproperty.h"
#include "core/properties/optionproperty.h"
namespace campvis {
class CAMPVIS_CORE_API ProcessorDecoratorShading : public ProcessorDecoratorGradient {
public:
explicit ProcessorDecoratorShading(const std::string& lightUniformName = "_lightSource");
virtual ~ProcessorDecoratorShading();
protected:
void addProperties(AbstractProcessor* propCollection);
void renderProlog(const DataContainer& dataContainer, tgt::Shader* shader);
std::string generateHeader() const;
BoolProperty _enableShading; ///< Flag whether to enable shading;
Vec3Property _lightPosition; ///< Light position
Vec3Property _ambientColor; ///< Ambient light color
Vec3Property _diffuseColor; ///< Diffuse light color
Vec3Property _specularColor; ///< Specular light color
FloatProperty _shininess; ///< Specular shininess
Vec3Property _attenuation; ///< Attenuation factors
const std::string _lightUniformName; ///< Uniform name for light
};
}
#endif // PROCESSORDECORATORSHADING_H__
......@@ -42,6 +42,7 @@ namespace campvis {
PredicateDemoAchilles::PredicateDemoAchilles(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _lsp()
, _imageReader()
, _labelReader()
, _confidenceReader()
......@@ -50,6 +51,7 @@ namespace campvis {
, _snrFilter(&_canvasSize)
, _ve(&_canvasSize)
{
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_labelReader);
addProcessor(&_confidenceReader);
......
......@@ -33,6 +33,7 @@
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/mhdimagereader.h"
#include "modules/advancedusvis/processors/pointpredicateevaluator.h"
#include "modules/advancedusvis/processors/predicatevolumeexplorer.h"
......@@ -81,6 +82,7 @@ namespace campvis {
*/
virtual void onProcessorValidated(AbstractProcessor* processor);
LightSourceProvider _lsp;
MhdImageReader _imageReader;
MhdImageReader _labelReader;
MhdImageReader _confidenceReader;
......
......@@ -42,6 +42,7 @@ namespace campvis {
PredicateDemoCarotid::PredicateDemoCarotid(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _lsp()
, _imageReader()
, _labelReader()
, _confidenceReader()
......@@ -51,6 +52,7 @@ namespace campvis {
, _snrFilter(&_canvasSize)
, _ve(&_canvasSize)
{
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_labelReader);
addProcessor(&_confidenceReader);
......
......@@ -34,6 +34,7 @@
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/mhdimagereader.h"
#include "modules/advancedusvis/processors/pointpredicateevaluator.h"
#include "modules/advancedusvis/processors/predicatevolumeexplorer.h"
......@@ -82,6 +83,7 @@ namespace campvis {
*/
virtual void onProcessorValidated(AbstractProcessor* processor);
LightSourceProvider _lsp;
MhdImageReader _imageReader;
MhdImageReader _labelReader;
MhdImageReader _confidenceReader;
......
......@@ -42,6 +42,7 @@ namespace campvis {
PredicateDemoCarotid2::PredicateDemoCarotid2(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _lsp()
, _imageReader()
, _labelReader()
, _confidenceReader()
......@@ -51,6 +52,7 @@ namespace campvis {
, _snrFilter(&_canvasSize)
, _ve(&_canvasSize)
{
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_labelReader);
addProcessor(&_confidenceReader);
......
......@@ -34,6 +34,7 @@
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/mhdimagereader.h"
#include "modules/advancedusvis/processors/pointpredicateevaluator.h"
#include "modules/advancedusvis/processors/predicatevolumeexplorer.h"
......@@ -82,6 +83,7 @@ namespace campvis {
*/
virtual void onProcessorValidated(AbstractProcessor* processor);
LightSourceProvider _lsp;
MhdImageReader _imageReader;
MhdImageReader _labelReader;
MhdImageReader _confidenceReader;
......
......@@ -42,6 +42,7 @@ namespace campvis {
PredicateDemoShoulder::PredicateDemoShoulder(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _lsp()
, _imageReader()
, _labelReader()
, _confidenceReader()
......@@ -50,6 +51,7 @@ namespace campvis {
, _snrFilter(&_canvasSize)
, _ve(&_canvasSize)
{
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_labelReader);
addProcessor(&_confidenceReader);
......
......@@ -33,6 +33,7 @@
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/mhdimagereader.h"
#include "modules/advancedusvis/processors/pointpredicateevaluator.h"
#include "modules/advancedusvis/processors/predicatevolumeexplorer.h"
......@@ -81,6 +82,7 @@ namespace campvis {
*/
virtual void onProcessorValidated(AbstractProcessor* processor);
LightSourceProvider _lsp;
MhdImageReader _imageReader;
MhdImageReader _labelReader;
MhdImageReader _confidenceReader;
......
......@@ -27,8 +27,9 @@
#include "tgt/textureunit.h"
#include "core/tools/quadrenderer.h"
#include "core/datastructures/lightsourcedata.h"
#include "core/datastructures/renderdata.h"
#include "core/pipeline/processordecoratorshading.h"
#include "core/pipeline/processordecoratorgradient.h"
namespace campvis {
const std::string PointPredicateRaycaster::loggerCat_ = "CAMPVis.modules.vis.PointPredicateRaycaster";
......@@ -39,14 +40,19 @@ namespace campvis {
, p_inputSnr("InputSnr", "Input SNR", "", DataNameProperty::READ)
, p_inputVesselness("InputVesselness", "Input Vesselness", "", DataNameProperty::READ)
, p_inputConfidence("InputConfidence", "Input Confidence", "", DataNameProperty::READ)
, p_enableShading("EnableShading", "Enable Shading", true)
, p_lightId("LightId", "Input Light Source", "lightsource", DataNameProperty::READ)
, p_predicateHistogram("PredicateSelection", "Voxel Predicate Selection")
{
addDecorator(new ProcessorDecoratorShading());
addDecorator(new ProcessorDecoratorGradient());
addProperty(p_inputLabels, INVALID_RESULT | INVALID_PROPERTIES);
addProperty(p_inputSnr);
addProperty(p_inputVesselness);
addProperty(p_inputConfidence);
addProperty(p_enableShading, INVALID_RESULT | INVALID_PROPERTIES | INVALID_SHADER);
addProperty(p_lightId);
addProperty(p_predicateHistogram);
decoratePropertyCollection(this);
......@@ -72,53 +78,64 @@ namespace campvis {
ImageRepresentationGL::ScopedRepresentation confidence(dataContainer, p_inputConfidence.getValue());
if (labels && snr && vesselness && confidence) {
const tgt::Texture* lt = labels->getTexture();
if (lt->getFilter() != tgt::Texture::NEAREST) {
const_cast<tgt::Texture*>(lt)->setFilter(tgt::Texture::NEAREST);
}
const tgt::Texture* tex = image->getTexture();
if (tex->getFilter() != tgt::Texture::MIPMAP) {
const_cast<tgt::Texture*>(tex)->setFilter(tgt::Texture::MIPMAP);
LGL_ERROR;
glGenerateMipmap(GL_TEXTURE_3D);
ScopedTypedData<LightSourceData> light(dataContainer, p_lightId.getValue());
if (p_enableShading.getValue() == false || light != nullptr) {
const tgt::Texture* lt = labels->getTexture();
if (lt->getFilter() != tgt::Texture::NEAREST) {
const_cast<tgt::Texture*>(lt)->setFilter(tgt::Texture::NEAREST);
}
const tgt::Texture* tex = image->getTexture();
if (tex->getFilter() != tgt::Texture::MIPMAP) {
const_cast<tgt::Texture*>(tex)->setFilter(tgt::Texture::MIPMAP);
LGL_ERROR;
glGenerateMipmap(GL_TEXTURE_3D);
LGL_ERROR;
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
LGL_ERROR;
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
LGL_ERROR;
}
tgt::TextureUnit labelUnit, snrUnit, vesselnessUnit, confidenceUnit;
labels->bind(_shader, labelUnit, "_labels", "_labelsParams");
snr->bind(_shader, snrUnit, "_snr", "_snrParams");
vesselness->bind(_shader, vesselnessUnit, "_vesselness", "_vesselnessParams");
confidence->bind(_shader, confidenceUnit, "_confidence", "_confidenceParams");
if (p_enableShading.getValue() && light != nullptr) {
light->bind(_shader, "_lightSource");
}
_shader->setIgnoreUniformLocationError(true);
p_predicateHistogram.getPredicateHistogram()->setupRenderShader(_shader);
_shader->setIgnoreUniformLocationError(false);
LGL_ERROR;
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
LGL_ERROR;
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
LGL_ERROR;
}
tgt::TextureUnit labelUnit, snrUnit, vesselnessUnit, confidenceUnit;
labels->bind(_shader, labelUnit, "_labels", "_labelsParams");
snr->bind(_shader, snrUnit, "_snr", "_snrParams");
vesselness->bind(_shader, vesselnessUnit, "_vesselness", "_vesselnessParams");
confidence->bind(_shader, confidenceUnit, "_confidence", "_confidenceParams");
FramebufferActivationGuard fag(this);
createAndAttachTexture(GL_RGBA8);
createAndAttachTexture(GL_RGBA32F);
createAndAttachTexture(GL_RGBA32F);
createAndAttachDepthTexture();
_shader->setIgnoreUniformLocationError(true);
p_predicateHistogram.getPredicateHistogram()->setupRenderShader(_shader);
_shader->setIgnoreUniformLocationError(false);
LGL_ERROR;
static const GLenum buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 , GL_COLOR_ATTACHMENT2 };
glDrawBuffers(3, buffers);
FramebufferActivationGuard fag(this);
createAndAttachTexture(GL_RGBA8);
createAndAttachTexture(GL_RGBA32F);
createAndAttachTexture(GL_RGBA32F);
createAndAttachDepthTexture();
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QuadRdr.renderQuad();
static const GLenum buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 , GL_COLOR_ATTACHMENT2 };
glDrawBuffers(3, buffers);
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QuadRdr.renderQuad();
// restore state
glDrawBuffers(1, buffers);
glDisable(GL_DEPTH_TEST);
LGL_ERROR;
// restore state
glDrawBuffers(1, buffers);
glDisable(GL_DEPTH_TEST);
LGL_ERROR;
dataContainer.addData(p_targetImageID.getValue(), new RenderData(_fbo));
dataContainer.addData(p_targetImageID.getValue(), new RenderData(_fbo));
}
else {
LDEBUG("Could not load light source from DataContainer.");
}
}
else {
LERROR("Could not load Voxel Predicate Mask Image.");
......@@ -127,6 +144,8 @@ namespace campvis {
std::string PointPredicateRaycaster::generateHeader() const {
std::string toReturn = RaycastingProcessor::generateHeader();
if (p_enableShading.getValue())
toReturn += "#define ENABLE_SHADING\n";
toReturn += p_predicateHistogram.getPredicateHistogram()->getGlslHeader();
return toReturn;
......@@ -136,4 +155,10 @@ namespace campvis {
invalidate(INVALID_SHADER);
}
void PointPredicateRaycaster::updateProperties(DataContainer& dataContainer) {
p_lightId.setVisible(p_enableShading.getValue());
RaycastingProcessor::updateProperties(dataContainer);
validate(INVALID_PROPERTIES);
}
}
......@@ -72,11 +72,15 @@ namespace campvis {
DataNameProperty p_inputVesselness;
DataNameProperty p_inputConfidence;
BoolProperty p_enableShading; ///< Flag whether to enable shading
DataNameProperty p_lightId; ///< Name/ID for the LightSource to use
PointPredicateHistogramProperty p_predicateHistogram;
protected:
/// \see RaycastingProcessor::processImpl()
virtual void processImpl(DataContainer& data, ImageRepresentationGL::ScopedRepresentation& image);
/// \see AbstractProcessor::updateProperties()
virtual void updateProperties(DataContainer& dataContainer);
/// \see RaycastingProcessor::generateHeader()
virtual std::string generateHeader() const;
......
......@@ -36,6 +36,7 @@ namespace campvis {
: AutoEvaluationPipeline(dc)
, _camera("camera", "Camera")
, _boundsData("BoundsData", "Bounds Data", "sfr", DataNameProperty::READ)
, _lsp()
, _imageReader()
, _flowReader()
, _vtkReader()
......@@ -57,6 +58,7 @@ namespace campvis {
_trackballEH->addLqModeProcessor(&_sfr);
addEventListenerToBack(_trackballEH);
addProcessor(&_lsp);
addProcessor(&_imageReader);
addProcessor(&_imageSplitter);
addProcessor(&_vr);
......
......@@ -30,6 +30,7 @@
#include "core/properties/cameraproperty.h"
#include "modules/base/processors/lightsourceprovider.h"
#include "modules/io/processors/ltfimagereader.h"
#include "modules/io/processors/vtkimagereader.h"
#include "modules/columbia/processors/geometrystrainrenderer.h"
......@@ -77,6 +78,7 @@ namespace campvis {
CameraProperty _camera;
DataNameProperty _boundsData;
LightSourceProvider _lsp;
LtfImageReader _imageReader;
ImageSeriesSplitter _imageSplitter;
......
......@@ -31,9 +31,9 @@
#include "core/datastructures/imagedata.h"
#include "core/datastructures/imagerepresentationgl.h"
#include "core/datastructures/lightsourcedata.h"
#include "core/datastructures/renderdata.h"
#include "core/datastructures/meshgeometry.h"
#include "core/pipeline/processordecoratorshading.h"
namespace campvis {
const std::string GeometryStrainRenderer::loggerCat_ = "CAMPVis.modules.vis.GeometryStrainRenderer";
......@@ -44,17 +44,19 @@ namespace campvis {
, p_strainId("StrainDataId", "Input Strain Data ID", "gr.strain", DataNameProperty::READ)
, p_renderTargetID("p_renderTargetID", "Output Image", "gr.output", DataNameProperty::WRITE)
, p_camera("camera", "Camera")
, p_enableShading("EnableShading", "Enable Shading", true)
, p_lightId("LightId", "Input Light Source", "lightsource", DataNameProperty::READ)
, p_color("color", "Rendering Color", tgt::vec4(1.f), tgt::vec4(0.f), tgt::vec4(1.f))
, _shader(0)
{
addDecorator(new ProcessorDecoratorShading());
addProperty(p_geometryID);
addProperty(p_renderTargetID);
addProperty(p_camera);
addProperty(p_color);
decoratePropertyCollection(this);
addProperty(p_enableShading, INVALID_RESULT | INVALID_PROPERTIES | INVALID_SHADER);
addProperty(p_lightId);
addProperty(p_color);
}
GeometryStrainRenderer::~GeometryStrainRenderer() {
......@@ -78,34 +80,41 @@ namespace campvis {
void GeometryStrainRenderer::updateResult(DataContainer& data) {
ScopedTypedData<GeometryData> proxyGeometry(data, p_geometryID.getValue());
ImageRepresentationGL::ScopedRepresentation strainData(data, p_strainId.getValue());
ScopedTypedData<LightSourceData> light(data, p_lightId.getValue());
if (proxyGeometry != 0 && strainData != 0 && _shader != 0) {
// set modelview and projection matrices
FramebufferActivationGuard fag(this);
createAndAttachColorTexture();
createAndAttachDepthTexture();
_shader->activate();
decorateRenderProlog(data, _shader);
_shader->setUniform("_projectionMatrix", p_camera.getValue().getProjectionMatrix());
_shader->setUniform("_viewMatrix", p_camera.getValue().getViewMatrix());
_shader->setUniform("_color", p_color.getValue());
tgt::TextureUnit strainUnit;
strainData->bind(_shader, strainUnit, "_strainTexture");
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
proxyGeometry->render();
decorateRenderEpilog(_shader);
_shader->deactivate();
glDisable(GL_DEPTH_TEST);
LGL_ERROR;
data.addData(p_renderTargetID.getValue(), new RenderData(_fbo));
if (p_enableShading.getValue() == false || light != nullptr) {
// set modelview and projection matrices
FramebufferActivationGuard fag(this);
createAndAttachColorTexture();
createAndAttachDepthTexture();
_shader->activate();
if (p_enableShading.getValue() && light != nullptr) {
light->bind(_shader, "_lightSource");
}
_shader->setUniform("_projectionMatrix", p_camera.getValue().getProjectionMatrix());
_shader->setUniform("_viewMatrix", p_camera.getValue().getViewMatrix());
_shader->setUniform("_color", p_color.getValue());
tgt::TextureUnit strainUnit;
strainData->bind(_shader, strainUnit, "_strainTexture");
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
proxyGeometry->render();
_shader->deactivate();
glDisable(GL_DEPTH_TEST);
LGL_ERROR;
data.addData(p_renderTargetID.getValue(), new RenderData(_fbo));
}
else {
LDEBUG("Could not load light source from DataContainer.");
}
}
else {
LERROR("No suitable input geometry found.");
......@@ -115,7 +124,9 @@ namespace campvis {