From b4954701093739e7a4e54a0669f306922d0d4605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pasi=20Kera=CC=88nen?= Date: Thu, 6 Jun 2019 16:22:02 +0300 Subject: Long live the slayer! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Initial commit of OpenGL Runtime to repository. Based on SHA1 61823aaccc6510699a54b34a2fe3f7523dab3b4e of qt3dstudio repository. Task-number: QT3DS-3600 Change-Id: Iaeb80237399f0e5656a19ebec9d1ab3a681d8832 Reviewed-by: Pasi Keränen --- src/dm/systems/cores/SlideCoreProducer.h | 190 +++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 src/dm/systems/cores/SlideCoreProducer.h (limited to 'src/dm/systems/cores/SlideCoreProducer.h') diff --git a/src/dm/systems/cores/SlideCoreProducer.h b/src/dm/systems/cores/SlideCoreProducer.h new file mode 100644 index 0000000..dec0297 --- /dev/null +++ b/src/dm/systems/cores/SlideCoreProducer.h @@ -0,0 +1,190 @@ +/**************************************************************************** +** +** Copyright (C) 1993-2009 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-EXCEPT$ +** 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 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** 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$ +** +****************************************************************************/ +#pragma once +#ifndef SLIDECOREPRODUCERH +#define SLIDECOREPRODUCERH +#include "Qt3DSDMTransactions.h" +#include "SimpleSlideCore.h" +#include "Qt3DSDMSignals.h" + +namespace qt3dsdm { +struct SlideInstancePropertyKey +{ + int m_Slide; + int m_Instance; + int m_Property; + SlideInstancePropertyKey(int slide, int inst, int prop) + : m_Slide(slide) + , m_Instance(inst) + , m_Property(prop) + { + } + SlideInstancePropertyKey() + : m_Slide(0) + , m_Instance(0) + , m_Property(0) + { + } + + bool operator==(const SlideInstancePropertyKey &inOther) const + { + return m_Slide == inOther.m_Slide && m_Instance == inOther.m_Instance + && m_Property == inOther.m_Property; + } +}; + +struct SlideInstancePropertyKeyHasher +{ + std::size_t operator()(const SlideInstancePropertyKey &inEntry) const + { + return std::hash()(inEntry.m_Slide) ^ std::hash()(inEntry.m_Instance) + ^ std::hash()(inEntry.m_Property); + } +}; + +typedef std::shared_ptr> TSlidePropertyMergeMapEntry; +typedef std::unordered_map + TSlidePropertyMergeMap; + +class CSlideCoreProducer : public ISlideCore, + public ITransactionProducer, + public ISlideCoreSignalProvider +{ + Q_DISABLE_COPY(CSlideCoreProducer) + + TTransactionConsumerPtr m_Consumer; + TSimpleSlideCorePtr m_Data; + TSignalItemPtr m_SlideCoreSignaller; + TSlidePropertyMergeMap m_PropertyMergeMap; + +public: + CSlideCoreProducer(TStringTablePtr inStrTable) + : m_Data(new CSimpleSlideCore(inStrTable)) + { + InitSignaller(); + } + + IStringTable &GetStringTable() const override { return m_Data->GetStringTable(); } + TStringTablePtr GetStringTablePtr() const override { return m_Data->GetStringTablePtr(); } + + TSimpleSlideCorePtr GetTransactionlessSlideCore() { return m_Data; } + TSimpleSlideCorePtr GetTransactionlessSlideCore() const { return m_Data; } + + Qt3DSDMSlideHandle CreateSlide(Qt3DSDMInstanceHandle inInstance) override; + Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inSlide) const override; + Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const override; + void DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances) override; + void GetSlides(TSlideHandleList &outSlides) const override; + + float GetSlideTime(Qt3DSDMSlideHandle inSlide) const override; + void SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime) override; + + void DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent, int inIndex = -1) override; + Qt3DSDMSlideHandle GetParentSlide(Qt3DSDMSlideHandle inSlide) const override; + void GetChildSlides(Qt3DSDMSlideHandle inSlide, TSlideHandleList &outChildren) const override; + int GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const override; + + bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override; + void SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override; + void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override; + void forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance, + Qt3DSDMPropertyHandle inProperty, + const SValue &inValue) override; + bool GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide, + Qt3DSDMInstanceHandle inInstance, + Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override; + void GetSpecificInstancePropertyValues(Qt3DSDMSlideHandle inSlide, + Qt3DSDMInstanceHandle inInstance, + TPropertyHandleValuePairList &outValues) override + { + return m_Data->GetSpecificInstancePropertyValues(inSlide, inInstance, outValues); + } + bool ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty) const override; + void GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide, TSlideEntryList &outEntries) const override; + + void PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override; + void ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty) override; + void DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inHandle) override; + void DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle) override; + void DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances, + const TPropertyHandleList &inProperties) override; + + void GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2, + TSlideEntryList &outEntries) const override; + void PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2, + Qt3DSDMSlideHandle inDestination) override; + void CopyProperties(Qt3DSDMSlideHandle inSourceSlide, Qt3DSDMInstanceHandle inSourceInstance, + Qt3DSDMSlideHandle inDestSlide, Qt3DSDMInstanceHandle inDestInstance) override; + + bool IsSlide(Qt3DSDMSlideHandle inSlide) const override; + + bool HandleValid(int inHandle) const override; + + void SetConsumer(TTransactionConsumerPtr inConsumer) override; + + //=================================================================== + // Signals + //=================================================================== + + virtual TSignalConnectionPtr + ConnectSlideCreated(const std::function &inCallback) override; + virtual TSignalConnectionPtr + ConnectBeforeSlideDeleted(const std::function &inCallback) override; + virtual TSignalConnectionPtr + ConnectSlideDeleted(const std::function &inCallback) override; + TSignalConnectionPtr ConnectSlideDerived( + const std::function &inCallback) override; + TSignalConnectionPtr ConnectInstancePropertyValueSet( + const std::function &inCallback) override; + TSignalConnectionPtr ConnectInstancePropertyValueRemoved( + const std::function &inCallback) override; + virtual TSignalConnectionPtr + ConnectSlideTimeChanged(const std::function &inCallback) override; + +private: + inline void DoForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, + Qt3DSDMInstanceHandle inHandle, + Qt3DSDMPropertyHandle inProperty, + const SValue &inValue); + void InitSignaller(); + ISlideCoreSignalProvider *GetSignalProvider(); + ISlideCoreSignalSender *GetSignalSender(); +}; +} + +#endif -- cgit v1.2.3