graphicscomposition/openwfcompositionengine/composition/include/wfcscene.h
changeset 0 5d03bc08d59c
child 152 9f1c3fea0f87
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicscomposition/openwfcompositionengine/composition/include/wfcscene.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,181 @@
+/* Copyright (c) 2009 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ */
+
+/*! \ingroup wfc
+ *  \file wfcscene.h
+ *
+ *  \brief Scene handling interface
+ */
+
+#ifndef WFCSCENE_H_
+#define WFCSCENE_H_
+
+#include "WF/wfc.h"
+#include "wfcelement.h"
+
+#include "owfpool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ *  \brief Clone a scene
+ *
+ *  \param scene Pointer to scene to clone
+ *  \returns cloned scene
+ */
+OWF_API_CALL WFC_SCENE*
+WFC_Scene_Clone(WFC_SCENE* scene);
+
+/*!
+ *  \brief Create new scene in a context
+ *
+ *  \param context          Context to create the scene in
+ *
+ *  \return New scene object
+ */
+OWF_API_CALL WFC_SCENE*
+WFC_Scene_Create(WFC_CONTEXT* context);
+
+/*!
+ *  \brief Destroy a scene.
+ *
+ *  Free all resources used by the scene and return the
+ *  scene object into the scene pool
+ *
+ *  \param scene            Scene
+ */
+
+OWF_API_CALL void
+WFC_Scene_Destroy(WFC_SCENE* scene);
+
+/*!
+ *  \brief Insert element to scene above given element
+ *
+ *  \param scene            Scene
+ *  \param element          Element to add
+ *  \param elementBelow     Element above which the new element should be
+ *                          inserted.
+ *  \return WFCErrorCode
+ */
+
+OWF_API_CALL WFCErrorCode
+WFC_Scene_InsertElement(WFC_SCENE* scene,
+                        WFC_ELEMENT* element,
+                        WFCElement elementBelow);
+
+/*!
+ *  \brief Remove element from scene
+ *
+ *  \param scene            Scene
+ *  \param element          Element to remove
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL void
+WFC_Scene_RemoveElement(WFC_SCENE* scene,
+                        WFCElement element);
+
+
+/*!
+ *  \brief Get element's neighbour element (i.e. element on top of it
+ *  or underneath it)
+ *
+ *  \param scene Scene
+ *  \param element Element
+ *  \param n Neighbour element offset (< 0 for elements underneath,
+ *  > 0 for elements on top)
+ *
+ *  \return Neigbour element id or WFC_INVALID_HANDLE
+ */
+OWF_API_CALL WFCElement
+WFC_Scene_GetNeighbourElement(WFC_SCENE* scene, WFCElement element, WFCint n);
+
+/*!
+ *  \brief Search the scene for given element.
+ *
+ *  \param scene            Scene to search
+ *  \param element          Handle of the element to find
+ *
+ */
+OWF_API_CALL WFC_ELEMENT*
+WFC_Scene_FindElement(WFC_SCENE* scene,
+                      WFCElement element);
+/*!
+ *  \brief Unlock scene sources & masks.
+ *
+ *  \param scene            Scene
+ */
+OWF_API_CALL void
+WFC_Scene_UnlockSourcesAndMasks(WFC_SCENE* scene);
+
+/*!
+ *  \brief Lock all sources' & masks' streams for reading prior to rendering.
+
+ *  Locking is actually just acquiring the read buffer for each source/mask
+ *  stream.
+ *
+ *  All source read buffers must be acquired before the composition starts
+ *  because if multiple elements share same source, they all should get same
+ *  frame from that source.
+ *
+ *  If each source buffer were locked/unlocked multiple times during
+ *  composition (i.e. once for each element that uses it), the buffer
+ *  contents might change between elements thus yielding wrong visual results.
+ *
+ *  \param scene            Scene
+ */
+OWF_API_CALL void
+WFC_Scene_LockSourcesAndMasks(WFC_SCENE* scene);
+
+/*!
+ *  \brief Check scene for conflicts
+ *
+ *  \param scene            Scene to check
+ *
+ *  \return WFC_TRUE if there's a conflict (inconsistency) in the
+ *  scene graph, WFC_FALSE otherwise.
+ */
+OWF_API_CALL WFCboolean
+WFC_Scene_HasConflicts(WFC_SCENE* scene);
+
+/*!
+ *  \brief Commit changes to scene
+ *
+ *  \param scene            Scene
+ */
+OWF_API_CALL void
+WFC_Scene_Commit(WFC_SCENE* scene);
+
+/*!
+ *  Return handle of the lowest element in the scene.
+ *
+ *  \param scene Scene
+ *  \return Handle of the bottom element
+ */
+OWF_API_CALL WFCElement
+WFC_Scene_LowestElement(WFC_SCENE* scene);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* WFCSCENE_H_ */