Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgrendergraphobject_p.h
Go to the documentation of this file.
1// Copyright (C) 2008-2012 NVIDIA Corporation.
2// Copyright (C) 2023 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QSSGRENDERGRAPHOBJECT_P_H
6#define QSSGRENDERGRAPHOBJECT_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <ssg/qssgrendergraphobject.h>
20
21#include <ssg/qssgrenderbasetypes.h>
22
23#include <QtQuick3DUtils/private/qssgassert_p.h>
24
26constexpr QSSGResourceId getResourceId(const QSSGRenderGraphObject &o)
27{
28 QSSG_ASSERT(QSSGRenderGraphObject::isResource(o.type), return QSSGResourceId::Invalid);
29 return QSSGResourceId{ quintptr(&o) };
30}
31
32template <typename T = QSSGRenderGraphObject>
33T *getResource(QSSGResourceId resId)
34{
35 return static_cast<T *>(reinterpret_cast<QSSGRenderGraphObject *>(resId));
36}
37
38constexpr QSSGNodeId getNodeId(const QSSGRenderGraphObject &o)
39{
40 QSSG_ASSERT(QSSGRenderGraphObject::isNodeType(o.type), return QSSGNodeId::Invalid);
41 return QSSGNodeId{ quintptr(&o) };
42}
43
44template <typename T = QSSGRenderGraphObject>
45T *getNode(QSSGNodeId nodeId)
46{
47 return static_cast<T *>(reinterpret_cast<QSSGRenderGraphObject *>(nodeId));
48}
49
50constexpr QSSGCameraId getCameraId(const QSSGRenderGraphObject &o)
51{
52 QSSG_ASSERT(QSSGRenderGraphObject::isCamera(o.type), return QSSGCameraId::Invalid);
53 return QSSGCameraId{ quintptr(&o) };
54}
55
56template <typename T = QSSGRenderGraphObject>
57T *getCamera(QSSGCameraId cameraId)
58{
59 return static_cast<T *>(reinterpret_cast<QSSGRenderGraphObject *>(cameraId));
60}
61
62constexpr QSSGExtensionId getExtensionId(const QSSGRenderGraphObject &o)
63{
64 QSSG_ASSERT(QSSGRenderGraphObject::isExtension(o.type), return QSSGExtensionId::Invalid);
65 return QSSGExtensionId{ quintptr(&o) };
66}
67
68template <typename T = QSSGRenderGraphObject>
69T *getExtension(QSSGExtensionId extensionId)
70{
71 return static_cast<T *>(reinterpret_cast<QSSGRenderGraphObject *>(extensionId));
72}
73
74template <typename QSSGTypeId>
75constexpr bool isNull(QSSGTypeId id) { return (id == QSSGTypeId::Invalid); }
76
77[[nodiscard]] static constexpr QSSGRenderGraphObject::BaseType getBaseType(QSSGRenderGraphObject::Type type) noexcept
78{
79 constexpr auto BaseTypeMask = QSSGRenderGraphObject::TypeT(~0xFFF);
80 return static_cast<QSSGRenderGraphObject::BaseType>(QSSGRenderGraphObject::TypeT(type) & BaseTypeMask);
81}
82
83// The TextureProvider type is not a BaseType but it's a special type of Extension that is user
84// facing and requires special handling in some places, so we keep this helper here for convenience.
85[[nodiscard]] static constexpr bool isTextureProvider(QSSGRenderGraphObject::Type type) noexcept
86{
87 return (QSSGRenderGraphObject::TypeT(type) & QSSGRenderGraphObject::TypeT(QSSGRenderGraphObject::Type::TextureProvider));
88}
89
90}
91
92#endif // QSSGRENDERGRAPHOBJECT_P_H
constexpr QSSGCameraId getCameraId(const QSSGRenderGraphObject &o)
constexpr QSSGResourceId getResourceId(const QSSGRenderGraphObject &o)
T * getExtension(QSSGExtensionId extensionId)
T * getResource(QSSGResourceId resId)
constexpr QSSGExtensionId getExtensionId(const QSSGRenderGraphObject &o)
constexpr bool isNull(QSSGTypeId id)
T * getCamera(QSSGCameraId cameraId)
static constexpr bool isTextureProvider(QSSGRenderGraphObject::Type type) noexcept
constexpr QSSGNodeId getNodeId(const QSSGRenderGraphObject &o)
static constexpr QSSGRenderGraphObject::BaseType getBaseType(QSSGRenderGraphObject::Type type) noexcept
Q_QUICK3DRUNTIMERENDER_EXPORT void setStatusCallback(StatusCallback cb)
void(*)(const QByteArray &descKey, Status status, const QString &err, QShader::Stage stage) StatusCallback
Q_QUICK3DRUNTIMERENDER_EXPORT void setAutomaticDiskCache(bool enable)
Q_QUICK3DRUNTIMERENDER_EXPORT bool isAutomaticDiskCacheEnabled()
Q_GLOBAL_STATIC(QReadWriteLock, g_updateMutex)
static QString persistentQsbcFileName()
static bool isAutoDiskCacheEnabled()
size_t qHash(QSSGShaderFeatures features) noexcept
static bool ensureWritableDir(const QString &name)
static bool s_autoDiskCacheEnabled
static QString dumpFilename(QShader::Stage stage)
static void initBakerForPersistentUse(QShaderBaker *, QRhi *)
static QString persistentQsbcDir()
static void initBakerForNonPersistentUse(QShaderBaker *, QRhi *)
static constexpr DefineEntry DefineTable[]