diff options
Diffstat (limited to 'src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h')
m--------- | src/Runtime/ogl-runtime | 0 | ||||
-rw-r--r-- | src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h | 307 |
2 files changed, 0 insertions, 307 deletions
diff --git a/src/Runtime/ogl-runtime b/src/Runtime/ogl-runtime new file mode 160000 +Subproject 2025912174c4cf99270b7439ec3b021e1d089ae diff --git a/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h deleted file mode 100644 index 87a1500c..00000000 --- a/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h +++ /dev/null @@ -1,307 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ -#pragma once -#ifndef QT3DS_RENDER_NODE_H -#define QT3DS_RENDER_NODE_H -#include "Qt3DSRender.h" -#include "Qt3DSRenderGraphObject.h" -#include "foundation/Qt3DSMat44.h" -#include "foundation/Qt3DSVec3.h" -#include "foundation/Qt3DSBounds3.h" -#include "foundation/Qt3DSFlags.h" -#include "foundation/Qt3DSNoCopy.h" -#include "Qt3DSRenderEulerAngles.h" -#include "foundation/StringTable.h" - -namespace qt3ds { -namespace render { - - struct SModel; - struct SLight; - struct SCamera; - struct SText; - struct SNode; - class IBufferManager; - - class INodeQueue - { - protected: - virtual ~INodeQueue() {} - public: - virtual void Enqueue(SModel &inModel) = 0; - virtual void Enqueue(SLight &inLight) = 0; - virtual void Enqueue(SCamera &inCamera) = 0; - // virtual void Enqueue( SText& inText ) = 0; - }; - - struct NodeFlagValues - { - enum Enum { - Dirty = 1, - TransformDirty = 1 << 1, - Active = 1 << 2, ///< Is this exact object active - LeftHanded = 1 << 3, - Orthographic = 1 << 4, - PointLight = 1 << 5, - GlobalActive = 1 << 6, ///< set based in Active and if a parent is active. - TextDirty = 1 << 7, - LocallyPickable = 1 << 8, - GloballyPickable = 1 << 9, - LayerEnableDepthTest = 1 << 10, - LayerRenderToTarget = 1 << 11, ///< Does this layer render to the normal render target, - ///or is it offscreen-only - ForceLayerOffscreen = 1 << 12, ///< Forces a layer to always use the offscreen rendering - ///mechanism. This can be usefulf or caching purposes. - IgnoreParentTransform = 1 << 13, - LayerEnableDepthPrePass = 1 << 14, ///< True when we render a depth pass before - }; - }; - - struct NodeTransformDirtyFlag - { - enum Enum { - TransformNotDirty, - TransformIsDirty, - }; - }; - struct NodeFlags : public NVFlags<NodeFlagValues::Enum, QT3DSU32> - { - NodeFlags() - : NVFlags<NodeFlagValues::Enum, QT3DSU32>((QT3DSU32)0) - { - } - void ClearOrSet(bool value, NodeFlagValues::Enum enumVal) { clearOrSet(value, enumVal); } - void SetActive(bool value) { ClearOrSet(value, NodeFlagValues::Active); } - bool IsActive() const { return this->operator&(NodeFlagValues::Active); } - - void SetGlobalActive(bool value) { ClearOrSet(value, NodeFlagValues::GlobalActive); } - bool IsGloballyActive() const { return this->operator&(NodeFlagValues::GlobalActive); } - - void SetTransformDirty(bool value) { ClearOrSet(value, NodeFlagValues::TransformDirty); } - bool IsTransformDirty() const { return this->operator&(NodeFlagValues::TransformDirty); } - - void SetDirty(bool value) { ClearOrSet(value, NodeFlagValues::Dirty); } - bool IsDirty() const { return this->operator&(NodeFlagValues::Dirty); } - - bool IsLeftHanded() const { return this->operator&(NodeFlagValues::LeftHanded); } - void SetLeftHanded(bool value) { ClearOrSet(value, NodeFlagValues::LeftHanded); } - - bool IsOrthographic() const { return this->operator&(NodeFlagValues::Orthographic); } - void SetOrthographic(bool value) { ClearOrSet(value, NodeFlagValues::Orthographic); } - - bool IsPointLight() const { return this->operator&(NodeFlagValues::PointLight); } - void SetPointLight(bool value) { ClearOrSet(value, NodeFlagValues::PointLight); } - - bool IsTextDirty() const { return this->operator&(NodeFlagValues::TextDirty); } - void SetTextDirty(bool value) { ClearOrSet(value, NodeFlagValues::TextDirty); } - - bool IsLocallyPickable() const { return this->operator&(NodeFlagValues::LocallyPickable); } - void SetLocallyPickable(bool value) { ClearOrSet(value, NodeFlagValues::LocallyPickable); } - - bool IsGloballyPickable() const - { - return this->operator&(NodeFlagValues::GloballyPickable); - } - void SetGloballyPickable(bool value) - { - ClearOrSet(value, NodeFlagValues::GloballyPickable); - } - - bool IsLayerRenderToTarget() const - { - return this->operator&(NodeFlagValues::LayerRenderToTarget); - } - void SetLayerRenderToTarget(bool value) - { - ClearOrSet(value, NodeFlagValues::LayerRenderToTarget); - } - - bool IsLayerEnableDepthTest() const - { - return this->operator&(NodeFlagValues::LayerEnableDepthTest); - } - void SetLayerEnableDepthTest(bool value) - { - ClearOrSet(value, NodeFlagValues::LayerEnableDepthTest); - } - - bool IsForceLayerOffscreen() const - { - return this->operator&(NodeFlagValues::ForceLayerOffscreen); - } - void SetForceLayerOffscreen(bool value) - { - ClearOrSet(value, NodeFlagValues::ForceLayerOffscreen); - } - - bool IsIgnoreParentTransform() const - { - return this->operator&(NodeFlagValues::IgnoreParentTransform); - } - void SetIgnoreParentTransform(bool value) - { - ClearOrSet(value, NodeFlagValues::IgnoreParentTransform); - } - - bool IsLayerEnableDepthPrepass() const - { - return this->operator&(NodeFlagValues::LayerEnableDepthPrePass); - } - void SetLayerEnableDepthPrepass(bool value) - { - ClearOrSet(value, NodeFlagValues::LayerEnableDepthPrePass); - } - }; - - struct QT3DS_AUTOTEST_EXPORT SNode : public SGraphObject - { - // changing any one of these means you have to - // set this object dirty - QT3DSVec3 m_Rotation; // Radians - QT3DSVec3 m_Position; - QT3DSVec3 m_Scale; - QT3DSVec3 m_Pivot; - QT3DSU32 m_RotationOrder; // UICEulerOrder::EulOrd, defaults YXZs - - // This only sets dirty, not transform dirty - // Opacity of 1 means opaque, opacity of zero means transparent. - QT3DSF32 m_LocalOpacity; - - // results of clearing dirty. - NodeFlags m_Flags; - // These end up right handed - QT3DSMat44 m_LocalTransform; - QT3DSMat44 m_GlobalTransform; - QT3DSF32 m_GlobalOpacity; - QT3DSI32 m_SkeletonId; - - // node graph members. - SNode *m_Parent; - SNode *m_NextSibling; - SNode *m_PreviousSibling; - SNode *m_FirstChild; - // Property maintained solely by the render system. - // Depth-first-search index assigned and maintained by render system. - QT3DSU32 m_DFSIndex; - - SNode(GraphObjectTypes::Enum inType = GraphObjectTypes::Node); - SNode(const SNode &inCloningObject, NVAllocatorCallback &inAllocator); - ~SNode() {} - - // Sets this object dirty and walks down the graph setting all - // children who are not dirty to be dirty. - void MarkDirty(NodeTransformDirtyFlag::Enum inTransformDirty = - NodeTransformDirtyFlag::TransformNotDirty); - - void AddChild(SNode &inChild); - void RemoveChild(SNode &inChild); - SNode *GetLastChild(); - - // Remove this node from the graph. - // It is no longer the the parent's child lists - // and all of its children no longer have a parent - // finally they are no longer siblings of each other. - void RemoveFromGraph(); - - // Calculate global transform and opacity - // Walks up the graph ensure all parents are not dirty so they have - // valid global transforms. - bool CalculateGlobalVariables(); - - // Given our rotation order and handedness, calculate the final rotation matrix - // Only the upper 3x3 of this matrix is filled in. - // If this object is left handed, then you need to call FlipCoordinateSystem - // to get a result identical to the result produced in CalculateLocalTransform - void CalculateRotationMatrix(QT3DSMat44 &outMatrix) const; - - // Get a rotation vector that would produce the given 3x.3 matrix. - // Takes m_RotationOrder and m_Flags.IsLeftHandled into account. - // Returns a rotation vector in radians. - QT3DSVec3 GetRotationVectorFromRotationMatrix(const QT3DSMat33 &inMatrix) const; - - static QT3DSVec3 GetRotationVectorFromEulerAngles(const EulerAngles &inAngles); - - // Flip a matrix from left-handed to right-handed and vice versa - static void FlipCoordinateSystem(QT3DSMat44 &ioMatrix); - - // Force the calculation of the local transform - void CalculateLocalTransform(); - - /** - * @brief setup local tranform from a matrix. - * This function decomposes a SRT matrix. - * This will fail if this matrix contains non-affine transformations - * - * @param inTransform[in] input transformation - * - * @return true backend type - */ - void SetLocalTransformFromMatrix(QT3DSMat44 &inTransform); - - // Get the bounds of us and our children in our local space. - NVBounds3 GetBounds(IBufferManager &inManager, IPathManager &inPathManager, - bool inIncludeChildren = true, - IQt3DSRenderNodeFilter *inChildFilter = NULL) const; - NVBounds3 GetChildBounds(IBufferManager &inManager, IPathManager &inPathManager, - IQt3DSRenderNodeFilter *inChildFilter = NULL) const; - // Assumes CalculateGlobalVariables has already been called. - QT3DSVec3 GetGlobalPos() const; - QT3DSVec3 GetGlobalPivot() const; - // Pulls the 3rd column out of the global transform. - QT3DSVec3 GetDirection() const; - // Multiplies (0,0,-1) by the inverse transpose of the upper 3x3 of the global transform. - // This is correct w/r/t to scaling and which the above getDirection is not. - QT3DSVec3 GetScalingCorrectDirection() const; - - // outMVP and outNormalMatrix are returned ready to upload to openGL, meaning they are - // row-major. - void CalculateMVPAndNormalMatrix(const QT3DSMat44 &inViewProjection, QT3DSMat44 &outMVP, - QT3DSMat33 &outNormalMatrix) const; - - // This should be in a utility file somewhere - static void GetMatrixUpper3x3(QT3DSMat33 &inDest, const QT3DSMat44 &inSrc); - void CalculateNormalMatrix(QT3DSMat33 &outNormalMatrix) const; - - // Generic method used during serialization - // to remap string and object pointers - template <typename TRemapperType> - void Remap(TRemapperType &inRemapper) - { - SGraphObject::Remap(inRemapper); - inRemapper.Remap(m_Parent); - inRemapper.Remap(m_FirstChild); - inRemapper.Remap(m_NextSibling); - inRemapper.Remap(m_PreviousSibling); - } - }; -} -} - -#endif |