summaryrefslogtreecommitdiffstats
path: root/src/foundation/Qt3DSFoundation.h
blob: 19065d201b323c5596ddb9de834498eea50580d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/****************************************************************************
**
** Copyright (C) 2008-2012 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef QT3DS_FOUNDATION_QT3DS_FOUNDATION_H
#define QT3DS_FOUNDATION_QT3DS_FOUNDATION_H

/** \addtogroup foundation
  @{
*/

#include <stdarg.h>
#include "foundation/Qt3DSAllocator.h"
#include "foundation/Qt3DSVersionNumber.h"
#include "foundation/Qt3DSLogging.h"

#ifndef QT3DS_DOXYGEN
namespace qt3ds {
#endif

class NVAllocatorCallback;
class NVProfilingZone;
class NVBroadcastingAllocator;

class NVFoundationBase
{
public:
    /**
    retrieves the current allocator.
    */
    virtual NVBroadcastingAllocator &getAllocator() const = 0;
};

namespace foundation {
template <typename TObjType>
inline void NVDelete(NVFoundationBase &alloc, TObjType *item)
{
    NVDelete(alloc.getAllocator(), item);
}
}

/**
\brief Foundation SDK singleton class.

You need to have an instance of this class to instance the higher level SDKs.
*/
class QT3DS_FOUNDATION_API NVFoundation : public NVFoundationBase
{
public:
    virtual void addRef() = 0;
    /**
    \brief Destroys the instance it is called on.

    The operation will fail, if there are still modules referencing the foundation object. Release
    all dependent modules prior
    to calling this method.

    @see NVCreateFoundation()
    */
    virtual void release() = 0;

    /**
    Retrieves the allocator this object was created with.
    */
    virtual NVAllocatorCallback &getAllocatorCallback() const = 0;

protected:
    virtual ~NVFoundation() {}
};

#ifndef QT3DS_DOXYGEN
} // namespace qt3ds
#endif

/**
\brief Creates an instance of the foundation class

\param version Version number we are expecting (should be QT3DS_FOUNDATION_VERSION)
\param allocator User supplied interface for allocating memory(see #NVAllocatorCallback)
\return Foundation instance on success, NULL if operation failed

@see NVFoundation
*/

#ifdef QT3DS_FOUNDATION_NO_EXPORTS
QT3DS_AUTOTEST_EXPORT
#else
QT3DS_FOUNDATION_API
#endif
qt3ds::NVFoundation *QT3DS_CALL_CONV NVCreateFoundation(
        qt3ds::QT3DSU32 version, qt3ds::NVAllocatorCallback &allocator);

/** @} */
#endif // QT3DS_FOUNDATION_QT3DS_FOUNDATION_H