diff -r 000000000000 -r 5d03bc08d59c graphicscomposition/openwfcompositionengine/composition/include/wfccontext.h --- /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_*/