diff -r 19ce5231ffe4 -r 6356de74619b egl/sfopenvg/riMiniEGL.h --- a/egl/sfopenvg/riMiniEGL.h Fri Sep 24 16:48:05 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,233 +0,0 @@ -#ifndef __RIMINIEGL_H -#define __RIMINIEGL_H - -/*------------------------------------------------------------------------ - * - * EGL 1.3 - * ------- - * - * Copyright (c) 2007 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. - * - *//** - * \file - * \brief Simple implementation of EGL 1.3 - * \note caveats: - - always renders into the backbuffer and blits it to window (no single buffered rendering) - - no native Windows or Mac OS X pixmap support - - no power management events - - no support for swap interval - * \todo what happens in egl functions when eglTerminate has been called but the context and surface are still in use? - * \todo OSDeinitMutex should be called in case getEGL fails. - *//*-------------------------------------------------------------------*/ -#include "egl.h" -#include "riContext.h" - -#ifdef BUILD_WITH_PRIVATE_EGL -#include "eglinternal.h" -#endif - -#ifdef BUILD_WITH_PRIVATE_OPENVG -#include "openvginternal.h" -#endif - -//============================================================================================== - -namespace OpenVGRI -{ -class RIEGLSurface; -class RIEGLContext; -class RIEGLThread; - -/*-------------------------------------------------------------------*//*! -* \brief -* \param -* \return -* \note -*//*-------------------------------------------------------------------*/ - -class RIEGLConfig -{ -public: - RIEGLConfig() : m_desc(Color::formatToDescriptor(VG_sRGBA_8888)), m_configID(0) {} - ~RIEGLConfig() {} - void set(int r, int g, int b, int a, int l, int bpp, int samples, int maskBits, int ID) - { - m_desc.redBits = r; - m_desc.greenBits = g; - m_desc.blueBits = b; - m_desc.alphaBits = a; - m_desc.luminanceBits = l; - m_desc.alphaShift = 0; - m_desc.luminanceShift = 0; - m_desc.blueShift = b ? a : 0; - m_desc.greenShift = g ? a + b : 0; - m_desc.redShift = r ? a + b + g : 0; - m_desc.format = (VGImageFormat)-1; - m_desc.internalFormat = l ? Color::sLA : Color::sRGBA; - m_desc.bitsPerPixel = bpp; - RI_ASSERT(Color::isValidDescriptor(m_desc)); - m_samples = samples; - m_maskBits = maskBits; - m_configID = ID; - m_config = (EGLConfig)ID; - } - - Color::Descriptor configToDescriptor(bool sRGB, bool premultiplied) const - { - Color::Descriptor desc = m_desc; - unsigned int f = m_desc.luminanceBits ? Color::LUMINANCE : 0; - f |= sRGB ? Color::NONLINEAR : 0; - f |= premultiplied ? Color::PREMULTIPLIED : 0; - desc.internalFormat = (Color::InternalFormat)f; - return desc; - } - - //EGL RED SIZE bits of Red in the color buffer - //EGL GREEN SIZE bits of Green in the color buffer - //EGL BLUE SIZE bits of Blue in the color buffer - //EGL ALPHA SIZE bits of Alpha in the color buffer - //EGL LUMINANCE SIZE bits of Luminance in the color buffer - Color::Descriptor m_desc; - int m_samples; - int m_maskBits; - EGLint m_configID; //EGL CONFIG ID unique EGLConfig identifier - EGLConfig m_config; - //EGL BUFFER SIZE depth of the color buffer (sum of channel bits) - //EGL ALPHA MASK SIZE number alpha mask bits (always 8) - //EGL BIND TO TEXTURE RGB boolean True if bindable to RGB textures. (always EGL_FALSE) - //EGL BIND TO TEXTURE RGBA boolean True if bindable to RGBA textures. (always EGL_FALSE) - //EGL COLOR BUFFER TYPE enum color buffer type (EGL_RGB_BUFFER, EGL_LUMINANCE_BUFFER) - //EGL CONFIG CAVEAT enum any caveats for the configuration (always EGL_NONE) - //EGL DEPTH SIZE integer bits of Z in the depth buffer (always 0) - //EGL LEVEL integer frame buffer level (always 0) - //EGL MAX PBUFFER WIDTH integer maximum width of pbuffer (always INT_MAX) - //EGL MAX PBUFFER HEIGHT integer maximum height of pbuffer (always INT_MAX) - //EGL MAX PBUFFER PIXELS integer maximum size of pbuffer (always INT_MAX) - //EGL MAX SWAP INTERVAL integer maximum swap interval (always 1) - //EGL MIN SWAP INTERVAL integer minimum swap interval (always 1) - //EGL NATIVE RENDERABLE boolean EGL TRUE if native rendering APIs can render to surface (always EGL_FALSE) - //EGL NATIVE VISUAL ID integer handle of corresponding native visual (always 0) - //EGL NATIVE VISUAL TYPE integer native visual type of the associated visual (always EGL_NONE) - //EGL RENDERABLE TYPE bitmask which client rendering APIs are supported. (always EGL_OPENVG_BIT) - //EGL SAMPLE BUFFERS integer number of multisample buffers (always 0) - //EGL SAMPLES integer number of samples per pixel (always 0) - //EGL STENCIL SIZE integer bits of Stencil in the stencil buffer (always 0) - //EGL SURFACE TYPE bitmask which types of EGL surfaces are supported. (always EGL WINDOW BIT | EGL PIXMAP BIT | EGL PBUFFER BIT) - //EGL TRANSPARENT TYPE enum type of transparency supported (always EGL_NONE) - //EGL TRANSPARENT RED VALUE integer transparent red value (undefined) - //EGL TRANSPARENT GREEN VALUE integer transparent green value (undefined) - //EGL TRANSPARENT BLUE VALUE integer transparent blue value (undefined) -}; - - -/*-------------------------------------------------------------------*//*! -* \brief -* \param -* \return -* \note -*//*-------------------------------------------------------------------*/ - -#define EGL_NUMCONFIGS 60 - -class RIEGLDisplay -{ -public: - RIEGLDisplay(EGLDisplay id); - ~RIEGLDisplay(); - - int getNumConfigs() const { return EGL_NUMCONFIGS; } - const RIEGLConfig& getConfigByIdx(int i) const { RI_ASSERT(i >= 0 && i < EGL_NUMCONFIGS); return m_configs[i]; } - const RIEGLConfig& getConfig(const EGLConfig config) const { for(int i=0;i m_contexts; - Array m_surfaces; - - RIEGLConfig m_configs[EGL_NUMCONFIGS]; -}; - -/*-------------------------------------------------------------------*//*! -* \brief -* \param -* \return -* \note -*//*-------------------------------------------------------------------*/ - -class EGL -{ -public: - EGL(); - ~EGL(); - - void addReference() { m_referenceCount++; } - int removeReference() { m_referenceCount--; RI_ASSERT(m_referenceCount >= 0); return m_referenceCount; } - - void addDisplay(RIEGLDisplay* display) { RI_ASSERT(display); m_displays.push_back(display); } //throws bad alloc - void removeDisplay(RIEGLDisplay* display) { RI_ASSERT(display); bool res = m_displays.remove(display); RI_ASSERT(res); RI_UNREF(res); } - RIEGLDisplay* getDisplay(const EGLDisplay displayID) const; - EGLDisplay findDisplay(const EGLContext ctx) const; - - void addCurrentThread(RIEGLThread* thread) { RI_ASSERT(thread); m_currentThreads.push_back(thread); } //throws bad alloc - void removeCurrentThread(RIEGLThread* thread) { RI_ASSERT(thread); bool res = m_currentThreads.remove(thread); RI_ASSERT(res); RI_UNREF(res); } - RIEGLThread* getCurrentThread() const; - - RIEGLThread* getThread(); - void destroyThread(); - - bool isInUse(const void* image) const; - -private: - EGL(const EGL&); // Not allowed. - const EGL& operator=(const EGL&); // Not allowed. - - Array m_threads; //threads that have called EGL - Array m_currentThreads; //threads that have a bound context - Array m_displays; - - int m_referenceCount; -}; - -void* eglvgGetCurrentVGContext(void); -bool eglvgIsInUse(void* image); - -} //end of namespace - -#endif /* __RIMINIEGL_H */ - -