/* 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.
*/
/*! \defgroup wfc OpenWF Composition SI
* @{
*/
/*! \file wfc.h
*
* \brief OpenWF Composition public API, type definitions and function prototypes
*
* This is one of the three header files defined by the specification.
* This file contains the portable definitions of data types
* and function prototypes.
* Refer to OpenWF Composition specification for the
* additional documentation.
*
*/
/*! @} */
#ifndef _WFC_H_
#define _WFC_H_
#include <WF/wfcplatform.h>
#ifdef __cplusplus
extern "C" {
#endif
#define OPENWFC_VERSION_1_0 (1)
#define WFC_NONE (0)
#define WFC_INVALID_HANDLE ((WFCHandle)0)
#define WFC_DEFAULT_DEVICE_ID (0)
typedef enum {
WFC_FALSE = KHR_BOOLEAN_FALSE,
WFC_TRUE = KHR_BOOLEAN_TRUE,
WFC_BOOLEAN_FORCE_32BIT = 0x7FFFFFFF
} WFCboolean;
typedef WFCHandle WFCDevice;
typedef WFCHandle WFCContext;
typedef WFCHandle WFCSource;
typedef WFCHandle WFCMask;
typedef WFCHandle WFCElement;
typedef enum {
WFC_ERROR_NONE = 0,
WFC_ERROR_OUT_OF_MEMORY = 0x7001,
WFC_ERROR_ILLEGAL_ARGUMENT = 0x7002,
WFC_ERROR_UNSUPPORTED = 0x7003,
WFC_ERROR_BAD_ATTRIBUTE = 0x7004,
WFC_ERROR_IN_USE = 0x7005,
WFC_ERROR_BUSY = 0x7006,
WFC_ERROR_BAD_DEVICE = 0x7007,
WFC_ERROR_BAD_HANDLE = 0x7008,
WFC_ERROR_INCONSISTENCY = 0x7009,
WFC_ERROR_FORCE_32BIT = 0x7FFFFFFF
} WFCErrorCode;
typedef enum {
WFC_DEVICE_FILTER_SCREEN_NUMBER = 0x7020,
WFC_DEVICE_FILTER_FORCE_32BIT = 0x7FFFFFFF
} WFCDeviceFilter;
typedef enum {
/* Read-only */
WFC_DEVICE_CLASS = 0x7030,
WFC_DEVICE_ID = 0x7031,
WFC_DEVICE_FORCE_32BIT = 0x7FFFFFFF
} WFCDeviceAttrib;
typedef enum {
WFC_DEVICE_CLASS_FULLY_CAPABLE = 0x7040,
WFC_DEVICE_CLASS_OFF_SCREEN_ONLY = 0x7041,
WFC_DEVICE_CLASS_FORCE_32BIT = 0x7FFFFFFF
} WFCDeviceClass;
typedef enum {
/* Read-only */
WFC_CONTEXT_TYPE = 0x7051,
WFC_CONTEXT_TARGET_HEIGHT = 0x7052,
WFC_CONTEXT_TARGET_WIDTH = 0x7053,
WFC_CONTEXT_LOWEST_ELEMENT = 0x7054,
/* Read-write */
WFC_CONTEXT_ROTATION = 0x7061,
WFC_CONTEXT_BG_COLOR = 0x7062,
WFC_CONTEXT_FORCE_32BIT = 0x7FFFFFFF
} WFCContextAttrib;
typedef enum {
WFC_CONTEXT_TYPE_ON_SCREEN = 0x7071,
WFC_CONTEXT_TYPE_OFF_SCREEN = 0x7072,
WFC_CONTEXT_TYPE_FORCE_32BIT = 0x7FFFFFFF
} WFCContextType;
typedef enum {
/* Clockwise rotation */
WFC_ROTATION_0 = 0x7081, /* default */
WFC_ROTATION_90 = 0x7082,
WFC_ROTATION_180 = 0x7083,
WFC_ROTATION_270 = 0x7084,
WFC_ROTATION_FORCE_32BIT = 0x7FFFFFFF
} WFCRotation;
typedef enum {
WFC_ELEMENT_DESTINATION_RECTANGLE = 0x7101,
WFC_ELEMENT_SOURCE = 0x7102,
WFC_ELEMENT_SOURCE_RECTANGLE = 0x7103,
WFC_ELEMENT_SOURCE_FLIP = 0x7104,
WFC_ELEMENT_SOURCE_ROTATION = 0x7105,
WFC_ELEMENT_SOURCE_SCALE_FILTER = 0x7106,
WFC_ELEMENT_TRANSPARENCY_TYPES = 0x7107,
WFC_ELEMENT_GLOBAL_ALPHA = 0x7108,
WFC_ELEMENT_MASK = 0x7109,
WFC_ELEMENT_FORCE_32BIT = 0x7FFFFFFF
} WFCElementAttrib;
typedef enum {
WFC_SCALE_FILTER_NONE = 0x7151, /* default */
WFC_SCALE_FILTER_FASTER = 0x7152,
WFC_SCALE_FILTER_BETTER = 0x7153,
WFC_SCALE_FILTER_FORCE_32BIT = 0x7FFFFFFF
} WFCScaleFilter;
typedef enum {
WFC_TRANSPARENCY_NONE = 0, /* default */
WFC_TRANSPARENCY_ELEMENT_GLOBAL_ALPHA = (1 << 0),
WFC_TRANSPARENCY_SOURCE = (1 << 1),
WFC_TRANSPARENCY_MASK = (1 << 2),
WFC_TRANSPARENCY_FORCE_32BIT = 0x7FFFFFFF
} WFCTransparencyType;
typedef enum {
WFC_VENDOR = 0x7200,
WFC_RENDERER = 0x7201,
WFC_VERSION = 0x7202,
WFC_EXTENSIONS = 0x7203,
WFC_STRINGID_FORCE_32BIT = 0x7FFFFFFF
} WFCStringID;
/* Function Prototypes */
/* Device */
WFC_API_CALL WFCint WFC_APIENTRY
wfcEnumerateDevices(WFCint *deviceIds, WFCint deviceIdsCount,
const WFCint *filterList) WFC_APIEXIT;
WFC_API_CALL WFCDevice WFC_APIENTRY
wfcCreateDevice(WFCint deviceId, const WFCint *attribList) WFC_APIEXIT;
WFC_API_CALL WFCErrorCode WFC_APIENTRY
wfcGetError(WFCDevice dev) WFC_APIEXIT;
WFC_API_CALL WFCint WFC_APIENTRY
wfcGetDeviceAttribi(WFCDevice dev, WFCDeviceAttrib attrib) WFC_APIEXIT;
WFC_API_CALL WFCErrorCode WFC_APIENTRY
wfcDestroyDevice(WFCDevice dev) WFC_APIEXIT;
/* Context */
WFC_API_CALL WFCContext WFC_APIENTRY
wfcCreateOnScreenContext(WFCDevice dev,
WFCint screenNumber,
const WFCint *attribList) WFC_APIEXIT;
WFC_API_CALL WFCContext WFC_APIENTRY
wfcCreateOffScreenContext(WFCDevice dev,
WFCNativeStreamType stream,
const WFCint *attribList) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcCommit(WFCDevice dev, WFCContext ctx, WFCboolean wait) WFC_APIEXIT;
WFC_API_CALL WFCint WFC_APIENTRY
wfcGetContextAttribi(WFCDevice dev, WFCContext ctx,
WFCContextAttrib attrib) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcGetContextAttribfv(WFCDevice dev, WFCContext ctx,
WFCContextAttrib attrib, WFCint count, WFCfloat *values) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcSetContextAttribi(WFCDevice dev, WFCContext ctx,
WFCContextAttrib attrib, WFCint value) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcSetContextAttribfv(WFCDevice dev, WFCContext ctx,
WFCContextAttrib attrib,
WFCint count, const WFCfloat *values) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcDestroyContext(WFCDevice dev, WFCContext ctx) WFC_APIEXIT;
/* Source */
WFC_API_CALL WFCSource WFC_APIENTRY
wfcCreateSourceFromStream(WFCDevice dev, WFCContext ctx,
WFCNativeStreamType stream,
const WFCint *attribList) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcDestroySource(WFCDevice dev, WFCSource src) WFC_APIEXIT;
/* Mask */
WFC_API_CALL WFCMask WFC_APIENTRY
wfcCreateMaskFromStream(WFCDevice dev, WFCContext ctx,
WFCNativeStreamType stream,
const WFCint *attribList) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcDestroyMask(WFCDevice dev, WFCMask mask) WFC_APIEXIT;
/* Element */
WFC_API_CALL WFCElement WFC_APIENTRY
wfcCreateElement(WFCDevice dev, WFCContext ctx,
const WFCint *attribList) WFC_APIEXIT;
WFC_API_CALL WFCint WFC_APIENTRY
wfcGetElementAttribi(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib) WFC_APIEXIT;
WFC_API_CALL WFCfloat WFC_APIENTRY
wfcGetElementAttribf(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcGetElementAttribiv(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib, WFCint count, WFCint *values) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcGetElementAttribfv(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib, WFCint count, WFCfloat *values) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcSetElementAttribi(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib, WFCint value) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcSetElementAttribf(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib, WFCfloat value) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcSetElementAttribiv(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib,
WFCint count, const WFCint *values) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcSetElementAttribfv(WFCDevice dev, WFCElement element,
WFCElementAttrib attrib,
WFCint count, const WFCfloat *values) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcInsertElement(WFCDevice dev, WFCElement element,
WFCElement subordinate) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcRemoveElement(WFCDevice dev, WFCElement element) WFC_APIEXIT;
WFC_API_CALL WFCElement WFC_APIENTRY
wfcGetElementAbove(WFCDevice dev, WFCElement element) WFC_APIEXIT;
WFC_API_CALL WFCElement WFC_APIENTRY
wfcGetElementBelow(WFCDevice dev, WFCElement element) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcDestroyElement(WFCDevice dev, WFCElement element) WFC_APIEXIT;
/* Rendering */
WFC_API_CALL void WFC_APIENTRY
wfcActivate(WFCDevice dev, WFCContext ctx) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcDeactivate(WFCDevice dev, WFCContext ctx) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcCompose(WFCDevice dev, WFCContext ctx, WFCboolean wait) WFC_APIEXIT;
WFC_API_CALL void WFC_APIENTRY
wfcFence(WFCDevice dev, WFCContext ctx, WFCEGLDisplay dpy,
WFCEGLSync sync) WFC_APIEXIT;
/* Renderer and extension information */
WFC_API_CALL WFCint WFC_APIENTRY
wfcGetStrings(WFCDevice dev,
WFCStringID name,
const char **strings,
WFCint stringsCount) WFC_APIEXIT;
WFC_API_CALL WFCboolean WFC_APIENTRY
wfcIsExtensionSupported(WFCDevice dev, const char *string) WFC_APIEXIT;
#ifdef __cplusplus
}
#endif
#endif /* _WFC_H_ */