quadview.cpp 4.87 KB
Newer Older
schultezub's avatar
schultezub committed
1
2
3
4
// ================================================================================================
// 
// This file is part of the CAMPVis Software Framework.
// 
5
// If not explicitly stated otherwise: Copyright (C) 2012-2013, all rights reserved,
schultezub's avatar
schultezub committed
6
7
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
//      Chair for Computer Aided Medical Procedures
8
9
//      Technische Universität München
//      Boltzmannstr. 3, 85748 Garching b. München, Germany
10
// 
schultezub's avatar
schultezub committed
11
12
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
// 
13
14
15
16
// 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
schultezub's avatar
schultezub committed
17
// 
18
19
20
21
// 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.
schultezub's avatar
schultezub committed
22
23
24
25
26
27
28
29
// 
// ================================================================================================

#include "quadview.h"
#include "tgt/logmanager.h"
#include "tgt/shadermanager.h"
#include "tgt/textureunit.h"

30
#include "core/datastructures/renderdata.h"
schultezub's avatar
schultezub committed
31
32
33
34
35
36
37
38
39


#include "core/classification/simpletransferfunction.h"

#include "core/tools/quadrenderer.h"

namespace campvis {
    const std::string QuadView::loggerCat_ = "CAMPVis.modules.vis.QuadView";

40
41
    QuadView::QuadView(IVec2Property* viewportSizeProp)
        : VisualizationProcessor(viewportSizeProp)
schultezub's avatar
schultezub committed
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
        , p_inputImage1("InputImage1", "First Input Image", "", DataNameProperty::READ)
        , p_inputImage2("InputImage2", "Second Input Image", "", DataNameProperty::READ)
        , p_inputImage3("InputImage3", "Third Input Image", "", DataNameProperty::READ)
        , p_inputImage4("InputImage4", "Fourth Input Image", "", DataNameProperty::READ)
        , p_outputImage("OutputImage", "Output Image", "dd.output", DataNameProperty::WRITE)
        , _shader(0)
    {
        addProperty(&p_inputImage1);
        addProperty(&p_inputImage2);
        addProperty(&p_inputImage3);
        addProperty(&p_inputImage4);
        addProperty(&p_outputImage);
    }

    QuadView::~QuadView() {

    }

    void QuadView::init() {
        VisualizationProcessor::init();
        _shader = ShdrMgr.loadSeparate("core/glsl/passthrough.vert", "modules/vis/glsl/quadview.frag", "", false);
        _shader->setAttributeLocation(0, "in_Position");
        _shader->setAttributeLocation(1, "in_TexCoord");
    }

    void QuadView::deinit() {
        VisualizationProcessor::deinit();
        ShdrMgr.dispose(_shader);
    }

72
    void QuadView::updateResult(DataContainer& data) {
73
74
75
76
        ScopedTypedData<RenderData> inputImage1(data, p_inputImage1.getValue());
        ScopedTypedData<RenderData> inputImage2(data, p_inputImage2.getValue());
        ScopedTypedData<RenderData> inputImage3(data, p_inputImage3.getValue());
        ScopedTypedData<RenderData> inputImage4(data, p_inputImage4.getValue());
schultezub's avatar
schultezub committed
77

schultezub's avatar
schultezub committed
78
79
        if (inputImage1 == 0 && inputImage2 == 0 && inputImage3 == 0 && inputImage4 == 0) {
            validate(INVALID_RESULT);
schultezub's avatar
schultezub committed
80
            return;
schultezub's avatar
schultezub committed
81
        }
schultezub's avatar
schultezub committed
82

83
        FramebufferActivationGuard fag(this);
84
85
86
        createAndAttachColorTexture();
        createAndAttachDepthTexture();

schultezub's avatar
schultezub committed
87
88
89
90
91
92
        tgt::TextureUnit colorUnit, depthUnit;
        _shader->activate();
        _shader->setUniform("_modelMatrix", tgt::mat4::createScale(tgt::vec3(.5f, .5f, .5f)));
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        if (inputImage1 != 0) {
93
            inputImage1->bind(_shader, colorUnit, depthUnit);
schultezub's avatar
schultezub committed
94
95
96
97
            _shader->setUniform("_viewMatrix", tgt::mat4::createTranslation(tgt::vec3(-.5f, .5f, 0.f)));
            QuadRdr.renderQuad();
        }
        if (inputImage2 != 0) {
98
            inputImage2->bind(_shader, colorUnit, depthUnit);
schultezub's avatar
schultezub committed
99
100
101
102
            _shader->setUniform("_viewMatrix", tgt::mat4::createTranslation(tgt::vec3(.5f, .5f, 0.f)));
            QuadRdr.renderQuad();
        }
        if (inputImage3 != 0) {
103
            inputImage3->bind(_shader, colorUnit, depthUnit);
schultezub's avatar
schultezub committed
104
105
106
107
            _shader->setUniform("_viewMatrix", tgt::mat4::createTranslation(tgt::vec3(-.5f, -.5f, 0.f)));
            QuadRdr.renderQuad();
        }
        if (inputImage4 != 0) {
108
            inputImage4->bind(_shader, colorUnit, depthUnit);
schultezub's avatar
schultezub committed
109
110
111
112
113
114
115
116
            _shader->setUniform("_viewMatrix", tgt::mat4::createTranslation(tgt::vec3(.5f, -.5f, 0.f)));
            QuadRdr.renderQuad();
        }

        _shader->deactivate();
        tgt::TextureUnit::setZeroUnit();
        LGL_ERROR;

117
        data.addData(p_outputImage.getValue(), new RenderData(_fbo));
118
        validate(INVALID_RESULT);
schultezub's avatar
schultezub committed
119
120
121
122
    }

}