Revision control
Copy as Markdown
// Copyright (C) 2008-2012 NVIDIA Corporation.
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QSSG_RENDER_CONTEXT_CORE_H
#define QSSG_RENDER_CONTEXT_CORE_H
//
// W A R N I N G
// -------------
//
// This file is part of the QtQuick3D API, with limited compatibility guarantees.
// Usage of this API may make your code source and binary incompatible with
// future versions of Qt.
//
#include <QtQuick3DRuntimeRender/qtquick3druntimerenderexports.h>
#include <QtCore/QPair>
#include <QtCore/QSize>
#include <memory>
QT_BEGIN_NAMESPACE
class QSSGRhiContext;
class QSSGBufferManager;
class QSSGRenderer;
class QSSGShaderLibraryManager;
class QSSGShaderCache;
class QSSGProgramGenerator;
class QSSGCustomMaterialSystem;
class QSSGRendererInterface;
class QSSGDebugDrawSystem;
class QSSGPerFrameAllocator;
class QQuickWindow;
class QRhi;
class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRenderContextInterface
{
Q_DISABLE_COPY(QSSGRenderContextInterface)
public:
// The commonly used version (from QQuick3DSceneRenderer). There is one
// rendercontext per QQuickWindow (and so scenegraph render thread).
explicit QSSGRenderContextInterface(QRhi *rhi);
// One of these overloads must only be used in special cases, e.g. by the genshaders tool.
QSSGRenderContextInterface(std::unique_ptr<QSSGBufferManager> bufferManager,
std::unique_ptr<QSSGRenderer> renderer,
std::shared_ptr<QSSGShaderLibraryManager> shaderLibraryManager,
std::unique_ptr<QSSGShaderCache> shaderCache,
std::unique_ptr<QSSGCustomMaterialSystem> customMaterialSystem,
std::unique_ptr<QSSGProgramGenerator> shaderProgramGenerator,
std::unique_ptr<QSSGRhiContext> ctx);
QSSGRenderContextInterface(std::unique_ptr<QSSGBufferManager> bufferManager,
std::unique_ptr<QSSGRenderer> renderer,
std::shared_ptr<QSSGShaderLibraryManager> shaderLibraryManager,
std::unique_ptr<QSSGShaderCache> shaderCache,
std::unique_ptr<QSSGCustomMaterialSystem> customMaterialSystem,
std::unique_ptr<QSSGProgramGenerator> shaderProgramGenerator,
std::unique_ptr<QSSGRhiContext> ctx,
std::unique_ptr<QSSGDebugDrawSystem> debugDrawSystem);
~QSSGRenderContextInterface();
const std::unique_ptr<QSSGRenderer> &renderer() const;
const std::unique_ptr<QSSGBufferManager> &bufferManager() const;
const std::unique_ptr<QSSGRhiContext> &rhiContext() const;
const std::unique_ptr<QSSGShaderCache> &shaderCache() const;
const std::shared_ptr<QSSGShaderLibraryManager> &shaderLibraryManager() const;
const std::unique_ptr<QSSGCustomMaterialSystem> &customMaterialSystem() const;
const std::unique_ptr<QSSGProgramGenerator> &shaderProgramGenerator() const;
const std::unique_ptr<QSSGDebugDrawSystem> &debugDrawSystem() const;
private:
friend class QQuick3DSceneRenderer;
friend class QQuick3DWindowAttachment;
friend class QSSGLayerRenderData;
friend class QSSGRenderer;
QRhi *rhi() const; // Internal convenience function
void init();
void releaseCachedResources();
// The memory used for the per frame allocator is released as the first step in BeginFrame.
// This is useful for short lived objects and datastructures.
// NOTE: Only used internally and not replaceable for now.
const std::unique_ptr<QSSGPerFrameAllocator> &perFrameAllocator() const;
std::unique_ptr<QSSGRhiContext> m_rhiContext;
std::unique_ptr<QSSGShaderCache> m_shaderCache;
std::unique_ptr<QSSGBufferManager> m_bufferManager;
std::unique_ptr<QSSGRenderer> m_renderer;
std::shared_ptr<QSSGShaderLibraryManager> m_shaderLibraryManager;
std::unique_ptr<QSSGCustomMaterialSystem> m_customMaterialSystem;
std::unique_ptr<QSSGProgramGenerator> m_shaderProgramGenerator;
std::unique_ptr<QSSGDebugDrawSystem> m_debugDrawSystem;
std::unique_ptr<QSSGPerFrameAllocator> m_perFrameAllocator;
};
QT_END_NAMESPACE
#endif