williamr@4: /* Copyright (c) 2009 The Khronos Group Inc. williamr@4: * williamr@4: * Permission is hereby granted, free of charge, to any person obtaining a williamr@4: * copy of this software and/or associated documentation files (the williamr@4: * "Materials"), to deal in the Materials without restriction, including williamr@4: * without limitation the rights to use, copy, modify, merge, publish, williamr@4: * distribute, sublicense, and/or sell copies of the Materials, and to williamr@4: * permit persons to whom the Materials are furnished to do so, subject to williamr@4: * the following conditions: williamr@4: * williamr@4: * The above copyright notice and this permission notice shall be included williamr@4: * in all copies or substantial portions of the Materials. williamr@4: * williamr@4: * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, williamr@4: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF williamr@4: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. williamr@4: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY williamr@4: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, williamr@4: * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE williamr@4: * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. williamr@4: */ williamr@4: williamr@4: /*! \defgroup wfc OpenWF Composition SI williamr@4: * @{ williamr@4: */ williamr@4: williamr@4: /*! \file wfc.h williamr@4: * williamr@4: * \brief OpenWF Composition public API, type definitions and function prototypes williamr@4: * williamr@4: * This is one of the three header files defined by the specification. williamr@4: * This file contains the portable definitions of data types williamr@4: * and function prototypes. williamr@4: williamr@4: * Refer to OpenWF Composition specification for the williamr@4: * additional documentation. williamr@4: * williamr@4: */ williamr@4: williamr@4: /*! @} */ williamr@4: williamr@4: #ifndef _WFC_H_ williamr@4: #define _WFC_H_ williamr@4: williamr@4: #include williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: #define OPENWFC_VERSION_1_0 (1) williamr@4: williamr@4: #define WFC_NONE (0) williamr@4: williamr@4: #define WFC_INVALID_HANDLE ((WFCHandle)0) williamr@4: williamr@4: #define WFC_DEFAULT_DEVICE_ID (0) williamr@4: williamr@4: typedef enum { williamr@4: WFC_FALSE = KHR_BOOLEAN_FALSE, williamr@4: WFC_TRUE = KHR_BOOLEAN_TRUE, williamr@4: WFC_BOOLEAN_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCboolean; williamr@4: williamr@4: typedef WFCHandle WFCDevice; williamr@4: typedef WFCHandle WFCContext; williamr@4: typedef WFCHandle WFCSource; williamr@4: typedef WFCHandle WFCMask; williamr@4: typedef WFCHandle WFCElement; williamr@4: williamr@4: typedef enum { williamr@4: WFC_ERROR_NONE = 0, williamr@4: WFC_ERROR_OUT_OF_MEMORY = 0x7001, williamr@4: WFC_ERROR_ILLEGAL_ARGUMENT = 0x7002, williamr@4: WFC_ERROR_UNSUPPORTED = 0x7003, williamr@4: WFC_ERROR_BAD_ATTRIBUTE = 0x7004, williamr@4: WFC_ERROR_IN_USE = 0x7005, williamr@4: WFC_ERROR_BUSY = 0x7006, williamr@4: WFC_ERROR_BAD_DEVICE = 0x7007, williamr@4: WFC_ERROR_BAD_HANDLE = 0x7008, williamr@4: WFC_ERROR_INCONSISTENCY = 0x7009, williamr@4: WFC_ERROR_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCErrorCode; williamr@4: williamr@4: typedef enum { williamr@4: WFC_DEVICE_FILTER_SCREEN_NUMBER = 0x7020, williamr@4: WFC_DEVICE_FILTER_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCDeviceFilter; williamr@4: williamr@4: typedef enum { williamr@4: /* Read-only */ williamr@4: WFC_DEVICE_CLASS = 0x7030, williamr@4: WFC_DEVICE_ID = 0x7031, williamr@4: WFC_DEVICE_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCDeviceAttrib; williamr@4: williamr@4: typedef enum { williamr@4: WFC_DEVICE_CLASS_FULLY_CAPABLE = 0x7040, williamr@4: WFC_DEVICE_CLASS_OFF_SCREEN_ONLY = 0x7041, williamr@4: WFC_DEVICE_CLASS_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCDeviceClass; williamr@4: williamr@4: typedef enum { williamr@4: /* Read-only */ williamr@4: WFC_CONTEXT_TYPE = 0x7051, williamr@4: WFC_CONTEXT_TARGET_HEIGHT = 0x7052, williamr@4: WFC_CONTEXT_TARGET_WIDTH = 0x7053, williamr@4: WFC_CONTEXT_LOWEST_ELEMENT = 0x7054, williamr@4: williamr@4: /* Read-write */ williamr@4: WFC_CONTEXT_ROTATION = 0x7061, williamr@4: WFC_CONTEXT_BG_COLOR = 0x7062, williamr@4: WFC_CONTEXT_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCContextAttrib; williamr@4: williamr@4: typedef enum { williamr@4: WFC_CONTEXT_TYPE_ON_SCREEN = 0x7071, williamr@4: WFC_CONTEXT_TYPE_OFF_SCREEN = 0x7072, williamr@4: WFC_CONTEXT_TYPE_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCContextType; williamr@4: williamr@4: typedef enum { williamr@4: /* Clockwise rotation */ williamr@4: WFC_ROTATION_0 = 0x7081, /* default */ williamr@4: WFC_ROTATION_90 = 0x7082, williamr@4: WFC_ROTATION_180 = 0x7083, williamr@4: WFC_ROTATION_270 = 0x7084, williamr@4: WFC_ROTATION_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCRotation; williamr@4: williamr@4: typedef enum { williamr@4: WFC_ELEMENT_DESTINATION_RECTANGLE = 0x7101, williamr@4: WFC_ELEMENT_SOURCE = 0x7102, williamr@4: WFC_ELEMENT_SOURCE_RECTANGLE = 0x7103, williamr@4: WFC_ELEMENT_SOURCE_FLIP = 0x7104, williamr@4: WFC_ELEMENT_SOURCE_ROTATION = 0x7105, williamr@4: WFC_ELEMENT_SOURCE_SCALE_FILTER = 0x7106, williamr@4: WFC_ELEMENT_TRANSPARENCY_TYPES = 0x7107, williamr@4: WFC_ELEMENT_GLOBAL_ALPHA = 0x7108, williamr@4: WFC_ELEMENT_MASK = 0x7109, williamr@4: WFC_ELEMENT_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCElementAttrib; williamr@4: williamr@4: typedef enum { williamr@4: WFC_SCALE_FILTER_NONE = 0x7151, /* default */ williamr@4: WFC_SCALE_FILTER_FASTER = 0x7152, williamr@4: WFC_SCALE_FILTER_BETTER = 0x7153, williamr@4: WFC_SCALE_FILTER_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCScaleFilter; williamr@4: williamr@4: typedef enum { williamr@4: WFC_TRANSPARENCY_NONE = 0, /* default */ williamr@4: WFC_TRANSPARENCY_ELEMENT_GLOBAL_ALPHA = (1 << 0), williamr@4: WFC_TRANSPARENCY_SOURCE = (1 << 1), williamr@4: WFC_TRANSPARENCY_MASK = (1 << 2), williamr@4: WFC_TRANSPARENCY_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCTransparencyType; williamr@4: williamr@4: typedef enum { williamr@4: WFC_VENDOR = 0x7200, williamr@4: WFC_RENDERER = 0x7201, williamr@4: WFC_VERSION = 0x7202, williamr@4: WFC_EXTENSIONS = 0x7203, williamr@4: WFC_STRINGID_FORCE_32BIT = 0x7FFFFFFF williamr@4: } WFCStringID; williamr@4: williamr@4: williamr@4: /* Function Prototypes */ williamr@4: williamr@4: /* Device */ williamr@4: WFC_API_CALL WFCint WFC_APIENTRY williamr@4: wfcEnumerateDevices(WFCint *deviceIds, WFCint deviceIdsCount, williamr@4: const WFCint *filterList) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCDevice WFC_APIENTRY williamr@4: wfcCreateDevice(WFCint deviceId, const WFCint *attribList) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCErrorCode WFC_APIENTRY williamr@4: wfcGetError(WFCDevice dev) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCint WFC_APIENTRY williamr@4: wfcGetDeviceAttribi(WFCDevice dev, WFCDeviceAttrib attrib) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCErrorCode WFC_APIENTRY williamr@4: wfcDestroyDevice(WFCDevice dev) WFC_APIEXIT; williamr@4: williamr@4: /* Context */ williamr@4: WFC_API_CALL WFCContext WFC_APIENTRY williamr@4: wfcCreateOnScreenContext(WFCDevice dev, williamr@4: WFCint screenNumber, williamr@4: const WFCint *attribList) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCContext WFC_APIENTRY williamr@4: wfcCreateOffScreenContext(WFCDevice dev, williamr@4: WFCNativeStreamType stream, williamr@4: const WFCint *attribList) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcCommit(WFCDevice dev, WFCContext ctx, WFCboolean wait) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCint WFC_APIENTRY williamr@4: wfcGetContextAttribi(WFCDevice dev, WFCContext ctx, williamr@4: WFCContextAttrib attrib) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcGetContextAttribfv(WFCDevice dev, WFCContext ctx, williamr@4: WFCContextAttrib attrib, WFCint count, WFCfloat *values) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcSetContextAttribi(WFCDevice dev, WFCContext ctx, williamr@4: WFCContextAttrib attrib, WFCint value) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcSetContextAttribfv(WFCDevice dev, WFCContext ctx, williamr@4: WFCContextAttrib attrib, williamr@4: WFCint count, const WFCfloat *values) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcDestroyContext(WFCDevice dev, WFCContext ctx) WFC_APIEXIT; williamr@4: williamr@4: /* Source */ williamr@4: WFC_API_CALL WFCSource WFC_APIENTRY williamr@4: wfcCreateSourceFromStream(WFCDevice dev, WFCContext ctx, williamr@4: WFCNativeStreamType stream, williamr@4: const WFCint *attribList) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcDestroySource(WFCDevice dev, WFCSource src) WFC_APIEXIT; williamr@4: williamr@4: /* Mask */ williamr@4: WFC_API_CALL WFCMask WFC_APIENTRY williamr@4: wfcCreateMaskFromStream(WFCDevice dev, WFCContext ctx, williamr@4: WFCNativeStreamType stream, williamr@4: const WFCint *attribList) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcDestroyMask(WFCDevice dev, WFCMask mask) WFC_APIEXIT; williamr@4: williamr@4: /* Element */ williamr@4: WFC_API_CALL WFCElement WFC_APIENTRY williamr@4: wfcCreateElement(WFCDevice dev, WFCContext ctx, williamr@4: const WFCint *attribList) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCint WFC_APIENTRY williamr@4: wfcGetElementAttribi(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCfloat WFC_APIENTRY williamr@4: wfcGetElementAttribf(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcGetElementAttribiv(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib, WFCint count, WFCint *values) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcGetElementAttribfv(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib, WFCint count, WFCfloat *values) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcSetElementAttribi(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib, WFCint value) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcSetElementAttribf(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib, WFCfloat value) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcSetElementAttribiv(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib, williamr@4: WFCint count, const WFCint *values) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcSetElementAttribfv(WFCDevice dev, WFCElement element, williamr@4: WFCElementAttrib attrib, williamr@4: WFCint count, const WFCfloat *values) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcInsertElement(WFCDevice dev, WFCElement element, williamr@4: WFCElement subordinate) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcRemoveElement(WFCDevice dev, WFCElement element) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCElement WFC_APIENTRY williamr@4: wfcGetElementAbove(WFCDevice dev, WFCElement element) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCElement WFC_APIENTRY williamr@4: wfcGetElementBelow(WFCDevice dev, WFCElement element) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcDestroyElement(WFCDevice dev, WFCElement element) WFC_APIEXIT; williamr@4: williamr@4: /* Rendering */ williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcActivate(WFCDevice dev, WFCContext ctx) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcDeactivate(WFCDevice dev, WFCContext ctx) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcCompose(WFCDevice dev, WFCContext ctx, WFCboolean wait) WFC_APIEXIT; williamr@4: WFC_API_CALL void WFC_APIENTRY williamr@4: wfcFence(WFCDevice dev, WFCContext ctx, WFCEGLDisplay dpy, williamr@4: WFCEGLSync sync) WFC_APIEXIT; williamr@4: williamr@4: /* Renderer and extension information */ williamr@4: WFC_API_CALL WFCint WFC_APIENTRY williamr@4: wfcGetStrings(WFCDevice dev, williamr@4: WFCStringID name, williamr@4: const char **strings, williamr@4: WFCint stringsCount) WFC_APIEXIT; williamr@4: WFC_API_CALL WFCboolean WFC_APIENTRY williamr@4: wfcIsExtensionSupported(WFCDevice dev, const char *string) WFC_APIEXIT; williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: williamr@4: #endif /* _WFC_H_ */