2.12.2021, 9:00 - 11:00: Due to updates GitLab may be unavailable for some minutes between 09:00 and 11:00.

geometrydata.cpp 3.76 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
44
        , _verticesBuffer(nullptr)
        , _texCoordsBuffer(nullptr)
        , _colorsBuffer(nullptr)
        , _normalsBuffer(nullptr)
        , _pickingBuffer(nullptr)
45
46
47
    {
    }

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

    }

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

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

        AbstractData::operator=(rhs);

        // delete old VBOs and null pointers
71
        deleteBuffers();
72

73
74
75
        return *this;
    }

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

83
84
85
    size_t GeometryData::getVideoMemoryFootprint() const {
        size_t sum = 0;

86
        if (_verticesBuffer != nullptr)
87
            sum += _verticesBuffer->getBufferSize();
88
        if (_texCoordsBuffer != nullptr)
89
            sum += _texCoordsBuffer->getBufferSize();
90
        if (_colorsBuffer != nullptr)
91
            sum += _colorsBuffer->getBufferSize();
92
        if (_normalsBuffer != nullptr)
93
            sum += _normalsBuffer->getBufferSize();
94
95
        if (_pickingBuffer != nullptr)
            sum += _pickingBuffer->getBufferSize();
96
97
98
99

        return sum;
    }

100
101
102
103
104
105
106
107
108
109
110
111
112
113
    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;
114
115
    }

116
117
118
119
    const tgt::BufferObject* GeometryData::getPickingBuffer() const {
        return _pickingBuffer;
    }

120
}