Added GLES 1.x spinning cube-rendering code to eglbringuptest
The coordinate, color and index data are uploaded to server-side
buffers by the CGLES1Cube::KhrSetup function. CGLES1Cube::KhrPaint
just sets the view matrix and issues a draw command.
Which demo to display can be selected by passing its name on the
command line, e.g.
eglbringuptest vgline
eglbringuptest gles1cube
If no name is provided, the application defaults to vgline.
/* 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 wfcstructs.h
*
* \brief Composition SI data structures
*/
#ifndef WFCSTRUCTS_H_
#define WFCSTRUCTS_H_
#include "WF/wfc.h"
#include "owftypes.h"
#include "owfimage.h"
#include "owfattributes.h"
#include "owfmessagequeue.h"
#include "owfthread.h"
#include "owfmutex.h"
#include "owfarray.h"
#include "owfpool.h"
#include "owflinkedlist.h"
#include "owfdisplaycontextgeneral.h"
#ifdef __cplusplus
extern "C"
{
#endif
struct WFC_CONTEXT_;
typedef struct WFC_DEVICE_ {
WFCDevice deviceId;
WFCHandle handle;
WFCErrorCode latestUnreadError;
OWF_ARRAY contexts;
OWF_ARRAY providers;
OWF_ARRAY elements;
OWF_MUTEX mutex;
} WFC_DEVICE;
typedef struct PHYSICAL_DEVICE_ {
OWF_ARRAY iDeviceInstanceArray;
OWFint gDeviceHandleID;
} PHYSICAL_DEVICE;
typedef struct {
OWFNativeStreamBuffer targetBuffer;
/* */
void* targetPixels;
/* Mapped to the external format target image buffer each frame */
OWF_IMAGE* targetImage;
/* Mapped to the internal format target image to compose to */
OWF_IMAGE* internalTargetImage;
/* The unrotated target buffer */
OWF_IMAGE_INST unrotatedTargetImage;
/* The rotated version of the target buffer for hardware rotation,
* or a de-rotated version of the internal buffer into another scratch buffer for software rotation
*/
OWF_IMAGE_INST rotatedTargetImage;
/* The internal target buffer composed to for 0 and 180 degree rotation */
OWF_IMAGE_INST unrotatedInternalTargetImage;
/* The internal target buffer composed to for 90 and 270 degree rotation */
OWF_IMAGE_INST rotatedInternalTargetImage;
} WFC_CONTEXT_STATE;
/*!
Scratch buffers needed:
1 for cropped source image
1 for cropped mask image
1 for scaled element image
1 for mask
*/
#define SCRATCH_BUFFER_COUNT 5
typedef struct {
/*! elements, ordered by depth; starting from bottom */
struct WFC_CONTEXT_* context;
OWF_NODE* elements;
} WFC_SCENE;
/*!
Element's composition state parameters.
*/
typedef struct {
/*! original source image and mask image - inputs to the first stage */
OWF_IMAGE* originalSourceImage;
OWF_IMAGE* originalMaskImage;
/*! converted source image -
results of the first stage in the
composition */
OWF_IMAGE_INST convertedSourceImage;
/*! cropped source image - result of cropping stage */
OWF_IMAGE_INST croppedSourceImage;
/*! mirrored source intermediate image - temp buffer used in mirroring stage */
OWF_IMAGE_INST rotatedSourceIntermediateImage;
/*! mirrored source image - result of mirroring stage */
OWF_IMAGE_INST flippedSourceImage;
/*! rotated source image - result of rotation stage */
OWF_IMAGE_INST rotatedSourceImage;
/*! these are the "final size" (i.e. destination
size) versions of the previous. used in
the blending stage */
OWF_IMAGE_INST scaledSourceImage;
OWF_RECTANGLE scaledSrcRect;
OWF_IMAGE_INST maskImage;
/*! support for blending operation */
OWF_BLEND_INFO blendInfo;
/*! source and target extents */
WFCfloat sourceRect[4];
WFCfloat destinationRect[4];
OWF_RECTANGLE dstRect;
/*! source fp viewport */
WFCfloat transformedSourceRect[4];
/*! oversized integer crop */
OWF_RECTANGLE oversizedCropRect;
/* Other attributes copied from element */
OWFsubpixel globalAlpha;
WFCScaleFilter sourceScaleFilter;
WFCbitfield transparencyTypes;
/*! rotation method */
WFCRotation rotation;
/*! flipping */
WFCboolean sourceFlip;
} WFC_ELEMENT_STATE;
typedef enum
{
WFC_IMAGE_SOURCE,
WFC_IMAGE_MASK
} WFC_IMAGE_PROVIDER_TYPE;
typedef struct
{
OWFNativeStreamBuffer buffer;
OWFint lockCount;
OWF_IMAGE_INST image;
} WFC_LOCK_STREAM;
typedef struct
{
WFCHandle handle;
WFC_IMAGE_PROVIDER_TYPE type;
OWFNativeStreamType streamHandle;
void* owner;
WFCint contentUpdated;
WFCint contentVisible;
WFCint composed;
WFCint visited;
WFC_LOCK_STREAM lockedStream;
} WFC_IMAGE_PROVIDER;
typedef struct {
WFCElement handle;
WFC_DEVICE* device;
struct WFC_CONTEXT_* context;
/*! element attributes */
WFCfloat srcRect[4];
WFCfloat dstRect[4];
WFCboolean sourceFlip;
WFCRotation sourceRotation;
WFCScaleFilter sourceScaleFilter;
WFCbitfield transparencyTypes;
WFCfloat globalAlpha;
WFCMask maskHandle;
WFCSource sourceHandle;
/*! client scene and composed scene dereferenced image providers */
WFC_IMAGE_PROVIDER* mask;
WFC_IMAGE_PROVIDER* source;
WFC_IMAGE_PROVIDER* cachedMask;
WFC_IMAGE_PROVIDER* cachedSource;
/*! shared element? (must not be destroyed by a scene) */
WFCboolean shared;
/*! set in WFC_Element_BeginComposition to indicate whether
the element should be included in composition */
WFCboolean skipCompose;
/*! Set in WFC_Element_BeginComposition to indicate whether
* the mask stream should be included in composition */
WFCboolean maskComposed;
} WFC_ELEMENT;
typedef enum
{
WFC_CONTEXT_STATE_PASSIVE,
WFC_CONTEXT_STATE_ACTIVATING,
WFC_CONTEXT_STATE_ACTIVE,
WFC_CONTEXT_STATE_DEACTIVATING
} WFC_CONTEXT_ACTIVATION_STATE;
typedef EGLint (*TFPtrEglPrivateSignalSyncNok) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
#define INITIAL_CONTEXT_SERIAL_NUMBER 0
typedef struct WFC_CONTEXT_ {
WFCContext handle;
WFC_DEVICE* device;
/*! work-in-progress scene */
WFC_SCENE* workScene;
WFC_SCENE* committedScene;
WFC_SCENE* snapshotScene;
/*! pools for resource allocation */
OWF_POOL* scenePool;
OWF_POOL* nodePool;
OWF_POOL* elementPool;
/*! screen number for on-screen contexts */
WFCint screenNumber;
/*! scratch buffers used in composition to store per-element
intermediate results */
void* scratchBuffer[SCRATCH_BUFFER_COUNT];
/*! onscreen/offscreen write stream */
OWFNativeStreamType stream;
WFCContextType type;
WFCint targetWidth;
WFCint targetHeight;
WFCRotation rotation;
OWFuint32 backgroundColor;
WFCElement lowestElement;
OWF_ATTRIBUTE_LIST attributes;
WFCint clientElementCount;
/*! timing & synchronization */
OWF_MESSAGE_QUEUE composerQueue;
OWF_THREAD composerThread;
WFC_CONTEXT_ACTIVATION_STATE activationState;
OWF_SEMAPHORE compositionSemaphore;
OWF_SEMAPHORE commitSemaphore;
OWF_MUTEX updateFlagMutex;
OWF_MUTEX sceneMutex;
WFCint sourceUpdateCount;
WFC_CONTEXT_STATE state;
OWF_DISPCTX displayContext;
WFCEGLDisplay nextSyncObjectDisplay;
WFC_ELEMENT_STATE prototypeElementState;
TFPtrEglPrivateSignalSyncNok eglPrivateSignalSync;
} WFC_CONTEXT;
typedef struct WFC_CONTENT_UPDATED_PARAM_ {
WFCint length;
WFCint id;
WFCint par;
WFCint serialNumber;
WFCint immediateAvailable;
WFCint immediateVisibility;
} WFC_CONTENT_UPDATED_PARAM;
#define IMAGE_PROVIDER(x) ((WFC_IMAGE_PROVIDER*)(x))
#define ELEMENT(x) ((WFC_ELEMENT*)(x))
#define CONTEXT(x) ((WFC_CONTEXT*)(x))
#define DEVICE(x) ((WFC_DEVICE*)(x))
#define SCENE(x) ((WFC_SCENE*)(x))
#define STREAM(x) ((OWF_STREAM*)(x))
#ifdef __cplusplus
}
#endif
#endif /*STRUCTS_H_*/