X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fnodes%2Fscene-graph-layer.h;h=26b217e8de98d1cc7288d4b6c127c3832377f9ba;hb=4d75040ab200bd306ec5a48f2a617480062eef4c;hp=07c6110410d18760b4b853128041da0fe76763ae;hpb=c6b1508769b8710d7dce5241aa18c83b25d6fa3f;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/nodes/scene-graph-layer.h b/dali/internal/update/nodes/scene-graph-layer.h old mode 100644 new mode 100755 index 07c6110..26b217e --- a/dali/internal/update/nodes/scene-graph-layer.h +++ b/dali/internal/update/nodes/scene-graph-layer.h @@ -1,8 +1,8 @@ -#ifndef __DALI_INTERNAL_SCENE_GRAPH_LAYER_H__ -#define __DALI_INTERNAL_SCENE_GRAPH_LAYER_H__ +#ifndef DALI_INTERNAL_SCENE_GRAPH_LAYER_H +#define DALI_INTERNAL_SCENE_GRAPH_LAYER_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ #include #include #include -#include namespace Dali { @@ -30,20 +29,42 @@ namespace Dali namespace Internal { -class RenderableAttachment; - // value types used by messages template <> struct ParameterType< Dali::Layer::SortFunctionType > : public BasicType< Dali::Layer::SortFunctionType > {}; +template <> struct ParameterType< Dali::Layer::Behavior > +: public BasicType< Dali::Layer::Behavior > {}; namespace SceneGraph { +class Camera; + +/** + * Pair of node-renderer + */ +struct Renderable +{ + Renderable() + : mNode( 0 ), + mRenderer( 0 ) + {} + + Renderable( Node* node, Renderer* renderer ) + : mNode( node ), + mRenderer( renderer ) + {} + + Node* mNode; + Renderer* mRenderer; +}; + +typedef Dali::Vector< Renderable > RenderableContainer; /** * Layers have a "depth" relative to all other layers in the scene-graph. - * Non-layer child nodes (and their attachments) are considered part of the layer. + * Non-layer child nodes are considered part of the layer. * - * Layers are rendered separately, and the depth buffer is cleared before each layer is rendered. + * Layers are rendered separately, and by default the depth buffer is cleared before each layer is rendered. * Objects in higher layers, are rendered after (in front of) objects in lower layers. */ class Layer : public Node @@ -61,11 +82,6 @@ public: static SceneGraph::Layer* New(); /** - * Virtual destructor - */ - virtual ~Layer(); - - /** * From Node, to convert a node to a layer. * @return The layer. */ @@ -122,6 +138,21 @@ public: } /** + * Sets the behavior of the layer + * @param [in] behavior The behavior of the layer + */ + void SetBehavior( Dali::Layer::Behavior behavior ); + + /** + * Retrieves the behavior of the layer. + * @return The behavior + */ + Dali::Layer::Behavior GetBehavior() const + { + return mBehavior; + } + + /** * @copydoc Dali::Layer::SetDepthTestDisabled() */ void SetDepthTestDisabled( bool disable ); @@ -149,7 +180,7 @@ public: * to use is the same than the one used before ( Otherwise View transform will be different ) * */ - bool CanReuseRenderers(Node* camera) + bool CanReuseRenderers( Camera* camera ) { bool bReturn( mAllChildTransformsClean[ 0 ] && mAllChildTransformsClean[ 1 ] && camera == mLastCamera ); mLastCamera = camera; @@ -165,6 +196,11 @@ public: return mIsDefaultSortFunction; } + /** + * Clears all the renderable lists + */ + void ClearRenderables(); + private: /** @@ -176,26 +212,31 @@ private: // Undefined Layer(const Layer&); + /** + * Virtual destructor + */ + virtual ~Layer(); + // Undefined Layer& operator=(const Layer& rhs); public: // For update-algorithms - RenderableAttachmentContainer stencilRenderables; - RenderableAttachmentContainer transparentRenderables; - RenderableAttachmentContainer opaqueRenderables; - RenderableAttachmentContainer overlayRenderables; + RenderableContainer colorRenderables; + RenderableContainer overlayRenderables; private: - SortFunctionType mSortFunction; ///< Used to sort semi-transparent geometry + SortFunctionType mSortFunction; ///< Used to sort semi-transparent geometry ClippingBox mClippingBox; ///< The clipping box, in window coordinates - Node* mLastCamera; ///< Pointer to the last camera that has rendered the layer + Camera* mLastCamera; ///< Pointer to the last camera that has rendered the layer + + Dali::Layer::Behavior mBehavior; ///< The behavior of the layer bool mAllChildTransformsClean[ 2 ]; ///< True if all child nodes transforms are clean, - /// double buffered as we need two clean frames before we can reuse N-1 for N+1 - /// this allows us to cache render items when layer is "static" + /// double buffered as we need two clean frames before we can reuse N-1 for N+1 + /// this allows us to cache render items when layer is "static" bool mIsClipping:1; ///< True when clipping is enabled bool mDepthTestDisabled:1; ///< Whether depth test is disabled. bool mIsDefaultSortFunction:1; ///< whether the default depth sort function is used @@ -253,12 +294,30 @@ inline void SetClippingBoxMessage( EventThreadServices& eventThreadServices, con } /** + * Create a message to set the behavior of a layer + * @param[in] layer The layer + * @param[in] behavior The behavior + */ +inline void SetBehaviorMessage( EventThreadServices& eventThreadServices, + const Layer& layer, + Dali::Layer::Behavior behavior ) +{ + typedef MessageValue1< Layer, Dali::Layer::Behavior > LocalType; + + // Reserve some memory inside the message queue + unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + + // Construct message in the message queue memory; note that delete should not be called on the return value + new (slot) LocalType( &layer, &Layer::SetBehavior, behavior ); +} + +/** * Create a message for disabling/enabling depth test. * * @see Dali::Layer::SetDepthTestDisabled(). * * @param[in] layer The layer - * @param[in] disable \e true disables depth test. \e false sets the default behaviour. + * @param[in] disable \e true disables depth test. \e false sets the default behavior. */ inline void SetDepthTestDisabledMessage( EventThreadServices& eventThreadServices, const Layer& layer, bool disable ) { @@ -273,8 +332,18 @@ inline void SetDepthTestDisabledMessage( EventThreadServices& eventThreadService } // namespace SceneGraph +// Template specialisation for OwnerPointer, because delete is protected +template <> +inline void OwnerPointer::Reset() +{ + if (mObject != NULL) + { + Dali::Internal::SceneGraph::Node::Delete(mObject); + mObject = NULL; + } +} } // namespace Internal } // namespace Dali -#endif // __DALI_INTERNAL_SCENE_GRAPH_LAYER_H__ +#endif // DALI_INTERNAL_SCENE_GRAPH_LAYER_H