graphicscomposition/openwfcompositionengine/composition/include/wfccontext.h
changeset 0 5d03bc08d59c
child 152 9f1c3fea0f87
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicscomposition/openwfcompositionengine/composition/include/wfccontext.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,358 @@
+/* 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 wfccontext.h
+ *
+ *  \brief Context handling interface
+ */
+#ifndef WFCCONTEXT_H_
+#define WFCCONTEXT_H_
+
+#include "WF/wfc.h"
+#include "wfcstructs.h"
+#include "wfcdevice.h"
+#include "owfscreen.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define MAX_SOURCE_WIDTH        OWF_SURFACE_WIDTH
+#define MAX_SOURCE_HEIGHT       OWF_SURFACE_HEIGHT
+/*!
+Initialize context attributes
+\return ATTR_ERROR_NONE if attributes have been properly initialised.
+*/
+OWF_API_CALL OWF_ATTRIBUTE_LIST_STATUS
+WFC_Context_InitializeAttributes(WFC_CONTEXT* context,
+                                 WFCContextType type);
+
+/*!
+ *  \brief Create new context on device
+ *
+ *  \param device Device on which the context should be created
+ *  \param type Context type (on- or off-screen)
+ *
+ *  \return New context object or NULL in case of failure
+*/
+OWF_API_CALL WFC_CONTEXT*
+WFC_Context_Create(WFC_DEVICE* device,
+                   WFCNativeStreamType stream,
+                   WFCContextType type,
+                   WFCint screenNum);
+/*!
+ * \brief Releases the resources associated with the context.  
+ * Some of these resources hold reference-counts on the context,
+ * so this must be called BEFORE the main attempt to destroy the context.
+ * 
+ *  \param type Context type (on- or off-screen)
+ */
+OWF_API_CALL void
+WFC_Context_Shutdown(WFC_CONTEXT* context);
+
+/*!
+ *  \brief Setup context rendering target
+ *
+ *  \param context Context
+ *  \param stream Target stream to use for rendering
+ */
+OWF_API_CALL void
+WFC_Context_SetTargetStream(WFC_CONTEXT* context,
+                            OWFNativeStreamType stream);
+
+/*!
+ * \brief Checks if the given stream would be valid as an off-screen context target.
+ * Checks that the format can be rendered TO.
+ * Also checks that the image size is acceptable (within the scratch buffers).
+ * This is called before the context is created so is effectively a "static" context method.
+ * 
+ *  \param stream Target stream to use for rendering
+ */
+OWF_API_CALL WFCboolean
+WFC_Context_IsValidTargetStream(OWFNativeStreamType stream);
+/*!
+ * \brief Checks that the image size is acceptable (within the scratch buffers).
+ * This is called before the source is created.
+ * 
+ *  \param stream source stream to use for rendering.
+ */
+OWF_API_CALL WFCboolean
+WFC_Context_IsValidSourceStream(OWFNativeStreamType stream);
+/*!
+ * \brief Destroy all masks in context
+ *
+ * \param context Context
+ */
+OWF_API_CALL void
+WFC_Context_DestroyMasks(WFC_CONTEXT* context);
+
+/*!
+ * \brief Destroy all context sources
+ */
+OWF_API_CALL void
+WFC_Context_DestroySources(WFC_CONTEXT* context);
+
+/*!
+ *  \brief Destroy all context elements
+ *
+ *  \param context Context object
+ */
+OWF_API_CALL void
+WFC_Context_DestroyElements(WFC_CONTEXT* context);
+
+/*!
+ *  \brief Find element from current scene
+ *
+ *  \param context Context object
+ *  \param element Element to find
+ *
+ *  \return Element object or NULL if element hasn't been inserted
+ *  into current scene.
+ */
+OWF_API_CALL WFC_ELEMENT*
+WFC_Context_FindElement(WFC_CONTEXT* context,
+                        WFCElement element);
+
+/*!
+ *  \brief Activate/deactivate auto-composition on context
+ *
+ *  \param context Context
+ *  \param act Auto-composition enable/disable
+ */
+OWF_API_CALL void
+WFC_Context_Activate(WFC_CONTEXT* context,
+                     WFCboolean act);
+
+/*!
+ *  \brief Insert composition request to command stream
+ *
+ *  \param device
+ *  \param context
+ *  \param wait WFD_TRUE if executed synchronously
+ */
+OWF_API_CALL WFCboolean
+WFC_Context_InvokeComposition(WFC_DEVICE* device,
+                              WFC_CONTEXT* context,
+                              WFCboolean wait);
+
+/*!
+ *
+ *  \brief Insert commit request to command stream
+ *
+ *  \param device
+ *  \param context
+ *  \param wait WFD_TRUE if executed synchronously
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_InvokeCommit(WFC_DEVICE* device,
+                         WFC_CONTEXT* context,
+                         WFCboolean wait);
+
+/*!
+ *  \brief Insert fence token to context's command stream
+ *
+ *  \param dpy
+ *  \param context
+ *  \param sync
+ */
+OWF_API_CALL void
+WFC_Context_InsertFence(WFC_CONTEXT* context,
+                        WFCEGLDisplay dpy,
+                        WFCEGLSync sync);
+
+/*!
+ *  \brief Create element
+ *
+ *  \param context
+ */
+OWF_API_CALL WFC_ELEMENT*
+WFC_Context_CreateElement(WFC_CONTEXT* context);
+
+/*! \brief Destroy element
+ *  \param context
+ *  \param element
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_DestroyElement(WFC_CONTEXT* context, WFCElement element);
+
+/*!
+ *  \brief IncreaseClientElementCount
+ *
+ *  \param context
+ *  \return positive increased current element count; negative or zero indicating the count can't be increased
+ */
+OWF_API_CALL WFCint
+WFC_Context_IncreaseClientElementCount(WFC_CONTEXT* context);
+
+/*!
+ *  \brief DecreaseClientElementCount
+ *
+ *  \param context
+ *  \return positive or zero decreased current element count; negative indicating the count can't be decreased - p0robably already zero
+ */
+OWF_API_CALL WFCint
+WFC_Context_DecreaseClientElementCount(WFC_CONTEXT* context);
+
+/*!
+ *  \brief Insert element into context's scene
+ *
+ *  \param context
+ *  \param element
+ *  \param subordinate
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_InsertElement(WFC_CONTEXT* context,
+                          WFCElement element,
+                          WFCElement subordinate);
+
+/*!
+ *  \brief Remove element from context's scene
+ *
+ *  \param context
+ *  \param element
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_RemoveElement(WFC_CONTEXT* context,
+                          WFCElement element);
+
+/*!
+ *  \brief Fetch the handle of the element that is above the given element.
+ *
+ *  \param context
+ *  \param element
+ *
+ *  \return Error code. On return, the location pointed by result
+ *  will contain handle of the element above OR WFC_INVALID_HANDLE,
+ *  if no element is above given element.
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_GetElementAbove(WFC_CONTEXT* context,
+                            WFCElement element,
+                            WFCElement* result);
+
+/*!
+ *  \brief Fetch the handle of the element that is below the given element.
+ *
+ *  \param context
+ *  \param element
+ *
+ *  \return Error code. On return, the location pointed by result
+ *  will contain handle of the element below OR WFC_INVALID_HANDLE,
+ *  if no element is below given element.
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_GetElementBelow(WFC_CONTEXT* context,
+                            WFCElement element,
+                            WFCElement* result);
+
+/*!
+ *  \brief Get context attribute value
+ *
+ *  \param context
+ *  \param attrib
+ *  \param value
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_GetAttribi(WFC_CONTEXT* context,
+                       WFCContextAttrib attrib,
+                       WFCint* value);
+
+/*!
+ *  \brief Set context attribute value
+ *
+ *  \param context
+ *  \param attrib
+ *  \param value
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_SetAttribi(WFC_CONTEXT* context,
+                       WFCContextAttrib attrib,
+                       WFCint value);
+
+/*!
+ *  \brief Get context attribute value
+ *
+ *  \param context
+ *  \param attrib
+ *  \param value
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_GetAttribfv(WFC_CONTEXT* context,
+                        WFCContextAttrib attrib,
+                        WFCint count,
+                        WFCfloat* values);
+
+/*!
+ *  \brief Set context attribute value
+ *
+ *  \param context
+ *  \param attrib
+ *  \param value
+ *
+ *  \return WFCErrorCode
+ */
+OWF_API_CALL WFCErrorCode
+WFC_Context_SetAttribfv(WFC_CONTEXT* context,
+                        WFCContextAttrib attrib,
+                        WFCint count,
+                        const WFCfloat* values);
+
+
+/*!
+ *  \brief Stream content notification callback
+ *
+ *  \param stream Handle of the stream
+ *  \param event Stream event type
+ *  \param data Context
+ */
+OWF_API_CALL void
+WFC_Context_SourceStreamUpdated(OWFNativeStreamType stream,
+                                OWFint event,
+                                void* data,
+                                void* param);
+
+/*!
+ *  \brief Check if context is currently activated
+ *
+ *  \param context
+ */
+
+OWF_API_CALL WFCboolean
+WFC_Context_Active(WFC_CONTEXT* context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*WFCCONTEXT_H_*/