geometrydata.cpp 3.42 KB
Newer Older
1
2
// ================================================================================================
// 
schultezub's avatar
schultezub committed
3
// This file is part of the CAMPVis Software Framework.
4
// 
5
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
schultezub's avatar
schultezub committed
6
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
7
//      Chair for Computer Aided Medical Procedures
8
9
//      Technische Universitaet Muenchen
//      Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
10
// 
schultezub's avatar
schultezub committed
11
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
12
// 
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
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.
22
23
24
25
// 
// ================================================================================================

#include "geometrydata.h"
26
#include "tgt/buffer.h"
27
#include "tgt/logmanager.h"
28
#include "tgt/glcontextmanager.h"
29
#include "tgt/vertexarrayobject.h"
30

31
32
#include "core/tools/opengljobprocessor.h"

schultezub's avatar
schultezub committed
33
namespace campvis {
34

35
36
    const std::string GeometryData::loggerCat_ = "CAMPVis.core.datastructures.GeometryData";;

37
38
    GeometryData::GeometryData() 
        : AbstractData()
39
        , _buffersDirty(true)
40
41
42
43
        , _verticesBuffer(0)
        , _texCoordsBuffer(0)
        , _colorsBuffer(0)
        , _normalsBuffer(0)
44
45
46
    {
    }

47
48
    GeometryData::GeometryData(const GeometryData& rhs)
        : AbstractData(rhs)
49
        , _buffersDirty(true)
50
51
52
53
54
55
56
57
        , _verticesBuffer(0)
        , _texCoordsBuffer(0)
        , _colorsBuffer(0)
        , _normalsBuffer(0)
    {

    }

58
    GeometryData::~GeometryData() {
59
        deleteBuffers();
60
61
62
63
64
65
66
67
68
    }

    GeometryData& GeometryData::operator=(const GeometryData& rhs) {
        if (this == &rhs)
            return *this;

        AbstractData::operator=(rhs);

        // delete old VBOs and null pointers
69
        deleteBuffers();
70

71
72
73
        return *this;
    }

74
75
76
77
78
    void GeometryData::deleteBuffers() const {
        for (int i = 0; i < NUM_BUFFERS; ++i) {
            delete _buffers[i];
            _buffers[i] = 0;
        }
79
80
    }

81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
    size_t GeometryData::getVideoMemoryFootprint() const {
        size_t sum = 0;

        if (_verticesBuffer != 0)
            sum += _verticesBuffer->getBufferSize();
        if (_texCoordsBuffer != 0)
            sum += _texCoordsBuffer->getBufferSize();
        if (_colorsBuffer != 0)
            sum += _colorsBuffer->getBufferSize();
        if (_normalsBuffer != 0)
            sum += _normalsBuffer->getBufferSize();

        return sum;
    }

96
97
98
99
100
101
102
103
104
105
106
107
108
109
    const tgt::BufferObject* GeometryData::getVerticesBuffer() const {
        return _verticesBuffer;
    }

    const tgt::BufferObject* GeometryData::getTextureCoordinatesBuffer() const {
        return _texCoordsBuffer;
    }

    const tgt::BufferObject* GeometryData::getColorsBuffer() const {
        return _colorsBuffer;
    }

    const tgt::BufferObject* GeometryData::getNormalsBuffer() const {
        return _normalsBuffer;
110
111
112
    }

}