| /**************************************************************************** |
| * |
| * Copyright 2012 - 2014 Vivante Corporation, Sunnyvale, California. |
| * All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining |
| * a copy of this software and associated documentation files (the |
| * 'Software'), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject |
| * to the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial |
| * portions of the Software. |
| * |
| * THE SOFTWARE IS 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 NON-INFRINGEMENT. |
| * IN NO EVENT SHALL VIVANTE AND/OR ITS SUPPLIERS 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 |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| *****************************************************************************/ |
| |
| |
| #ifndef __gc_vdk_h_ |
| #define __gc_vdk_h_ |
| |
| |
| /* Include VDK types. */ |
| #include "gc_vdk_types.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /******************************************************************************* |
| ** Define VDKAPI and VDKLANG macros. ******************************************* |
| ** |
| ** VDKAPI Import or export function scope. |
| ** VDKLANG Language defintion of function. |
| */ |
| #ifdef _WIN32 |
| #ifdef __VDK_EXPORT |
| # define VDKAPI __declspec(dllexport) |
| # else |
| # define VDKAPI __declspec(dllimport) |
| # endif |
| # define VDKLANG __cdecl |
| #else |
| # define VDKAPI |
| # define VDKLANG |
| #endif |
| |
| /******************************************************************************* |
| ** Initialization. ************************************************************* |
| */ |
| |
| VDKAPI vdkPrivate VDKLANG |
| vdkInitialize( |
| void |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkExit( |
| vdkPrivate Private |
| ); |
| |
| /******************************************************************************* |
| ** Display. ******************************************************************** |
| */ |
| |
| VDKAPI vdkDisplay VDKLANG |
| vdkGetDisplayByIndex( |
| vdkPrivate Private, |
| int DisplayIndex |
| ); |
| |
| VDKAPI vdkDisplay VDKLANG |
| vdkGetDisplay( |
| vdkPrivate Private |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetDisplayInfo( |
| vdkDisplay Display, |
| int * Width, |
| int * Height, |
| unsigned long * Physical, |
| int * Stride, |
| int * BitsPerPixel |
| ); |
| |
| |
| VDKAPI int VDKLANG |
| vdkGetDisplayInfoEx( |
| vdkDisplay Display, |
| unsigned int DisplayInfoSize, |
| vdkDISPLAY_INFO * DisplayInfo |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetDisplayVirtual( |
| vdkDisplay Display, |
| int * Width, |
| int * Height |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetDisplayBackbuffer( |
| vdkDisplay Display, |
| unsigned int * Offset, |
| int * X, |
| int * Y |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkSetDisplayVirtual( |
| vdkDisplay Display, |
| unsigned int Offset, |
| int X, |
| int Y |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkDestroyDisplay( |
| vdkDisplay Display |
| ); |
| |
| /******************************************************************************* |
| ** Windows. ******************************************************************** |
| */ |
| |
| VDKAPI vdkWindow VDKLANG |
| vdkCreateWindow( |
| vdkDisplay Display, |
| int X, |
| int Y, |
| int Width, |
| int Height |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetWindowInfo( |
| vdkWindow Window, |
| int * X, |
| int * Y, |
| int * Width, |
| int * Height, |
| int * BitsPerPixel, |
| unsigned int * Offset |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkDestroyWindow( |
| vdkWindow Window |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkSetWindowTitle( |
| vdkWindow Window, |
| const char * Title |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkShowWindow( |
| vdkWindow Window |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkHideWindow( |
| vdkWindow Window |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkDrawImage( |
| vdkWindow Window, |
| int Left, |
| int Top, |
| int Right, |
| int Bottom, |
| int Width, |
| int Height, |
| int BitsPerPixel, |
| void * Bits |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetImage( |
| vdkWindow Window, |
| int Left, |
| int Top, |
| int Right, |
| int Bottom, |
| int * BitsPerPixel, |
| void ** Bits |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkCapturePointer( |
| vdkWindow Window |
| ); |
| |
| /******************************************************************************* |
| ** Pixmaps. ******************************************************************** |
| */ |
| |
| VDKAPI vdkPixmap VDKLANG |
| vdkCreatePixmap( |
| vdkDisplay Display, |
| int Width, |
| int Height, |
| int BitsPerPixel |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetPixmapInfo( |
| vdkPixmap Pixmap, |
| int * Width, |
| int * Height, |
| int * BitsPerPixel, |
| int * Stride, |
| void ** Bits |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkDrawPixmap( |
| vdkPixmap Pixmap, |
| int Left, |
| int Top, |
| int Right, |
| int Bottom, |
| int Width, |
| int Height, |
| int BitsPerPixel, |
| void * Bits |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkDestroyPixmap( |
| vdkPixmap Pixmap |
| ); |
| |
| /******************************************************************************* |
| ** ClientBuffers. ************************************************************** |
| */ |
| |
| VDKAPI vdkClientBuffer VDKLANG |
| vdkCreateClientBuffer( |
| int Width, |
| int Height, |
| int Format, |
| int Type |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkGetClientBufferInfo( |
| vdkClientBuffer ClientBuffer, |
| int * Width, |
| int * Height, |
| int * Stride, |
| void ** Bits |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkDestroyClientBuffer( |
| vdkClientBuffer ClientBuffer |
| ); |
| |
| /******************************************************************************* |
| ** Events. ********************************************************************* |
| */ |
| |
| VDKAPI int VDKLANG |
| vdkGetEvent( |
| vdkWindow Window, |
| vdkEvent * Event |
| ); |
| |
| /******************************************************************************* |
| ** Time. *********************************************************************** |
| */ |
| |
| VDKAPI unsigned int VDKLANG |
| vdkGetTicks( |
| void |
| ); |
| |
| /******************************************************************************* |
| ** EGL support. **************************************************************** |
| */ |
| |
| /* EGL prototypes. */ |
| typedef EGLDisplay (EGLAPIENTRY * EGL_GET_DISPLAY)( |
| EGLNativeDisplayType display_id |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_INITIALIZE)( |
| EGLDisplay dpy, |
| EGLint *major, |
| EGLint *minor |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_TERMINATE)( |
| EGLDisplay dpy |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_RELEASE_THREAD)( |
| void |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_CHOOSE_CONFIG)( |
| EGLDisplay dpy, |
| const EGLint *attrib_list, |
| EGLConfig *configs, |
| EGLint config_size, |
| EGLint *num_config |
| ); |
| |
| typedef EGLSurface (EGLAPIENTRY * EGL_CREATE_WINDOW_SURFACE)( |
| EGLDisplay dpy, |
| EGLConfig config, |
| EGLNativeWindowType win, |
| const EGLint *attrib_list |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_DESTROY_SURFACE)( |
| EGLDisplay dpy, |
| EGLSurface surface |
| ); |
| |
| typedef EGLContext (EGLAPIENTRY * EGL_CREATE_CONTEXT)( |
| EGLDisplay dpy, |
| EGLConfig config, |
| EGLContext share_context, |
| const EGLint *attrib_list |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_DESTROY_CONTEXT)( |
| EGLDisplay dpy, |
| EGLContext ctx |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_MAKE_CURRENT)( |
| EGLDisplay dpy, |
| EGLSurface draw, |
| EGLSurface read, |
| EGLContext ctx |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_SWAP_BUFFERS)( |
| EGLDisplay dpy, |
| EGLSurface surface |
| ); |
| |
| typedef void (* EGL_PROC)(void); |
| |
| typedef EGL_PROC (EGLAPIENTRY * EGL_GET_PROC_ADDRESS)( |
| const char *procname |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_BIND_API)( |
| EGLenum api |
| ); |
| |
| typedef EGLBoolean (EGLAPIENTRY * EGL_SWAP_INTERVAL)( |
| EGLDisplay dpy, |
| EGLint interval |
| ); |
| |
| /* VDK_EGL structure defining the stuff required for EGL support. */ |
| typedef struct _vdkEGL |
| { |
| /* Pointer to VDK private data. */ |
| vdkPrivate vdk; |
| |
| /* Pointer to vdkDisplay structure. */ |
| vdkDisplay display; |
| |
| /* Pointer to vdkWindow structure. */ |
| vdkWindow window; |
| |
| /* EGL version. */ |
| EGLint eglMajor; |
| EGLint eglMinor; |
| |
| /* EGL pointers. */ |
| EGLDisplay eglDisplay; |
| EGLConfig eglConfig; |
| EGLSurface eglSurface; |
| EGLContext eglContext; |
| } |
| vdkEGL; |
| |
| typedef void (EGLAPIENTRY * EGL_ADDRESS)( |
| void); |
| |
| EGL_ADDRESS |
| vdkGetAddress( |
| vdkPrivate Private, |
| const char * Function |
| ); |
| |
| #define VDK_CONFIG_RGB565_D16 ((const EGLint *) 1) |
| #define VDK_CONFIG_RGB565_D24 ((const EGLint *) 3) |
| #define VDK_CONFIG_RGB888_D16 ((const EGLint *) 5) |
| #define VDK_CONFIG_RGB888_D24 ((const EGLint *) 7) |
| #define VDK_CONFIG_RGB565_D16_AA ((const EGLint *) 9) |
| #define VDK_CONFIG_RGB565_D24_AA ((const EGLint *) 11) |
| #define VDK_CONFIG_RGB888_D16_AA ((const EGLint *) 13) |
| #define VDK_CONFIG_RGB888_D24_AA ((const EGLint *) 15) |
| #define VDK_CONFIG_RGB565 ((const EGLint *) 17) |
| #define VDK_CONFIG_RGB888 ((const EGLint *) 19) |
| #define VDK_CONFIG_RGB565_AA ((const EGLint *) 21) |
| #define VDK_CONFIG_RGB888_AA ((const EGLint *) 23) |
| |
| /* OpenVG Configurations. */ |
| #define VDK_CONFIG_RGB565_VG ((const EGLint *) 500) |
| #define VDK_CONFIG_RGB888_VG ((const EGLint *) 501) |
| |
| #define VDK_CONTEXT_ES11 ((const EGLint *) 0) |
| #define VDK_CONTEXT_ES20 ((const EGLint *) 2) |
| |
| VDKAPI int VDKLANG |
| vdkSetupEGL( |
| int X, |
| int Y, |
| int Width, |
| int Height, |
| const EGLint * ConfigurationAttributes, |
| const EGLint * SurfaceAttributes, |
| const EGLint * ContextAttributes, |
| vdkEGL * Egl |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkSwapEGL( |
| vdkEGL * Egl |
| ); |
| |
| VDKAPI void VDKLANG |
| vdkFinishEGL( |
| vdkEGL * Egl |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkSetSwapIntervalEGL( |
| vdkEGL * Egl, |
| int Interval |
| ); |
| |
| /******************************************************************************* |
| ** GL Textures. **************************************************************** |
| */ |
| |
| typedef enum _vdkTextureType |
| { |
| VDK_TGA, |
| VDK_PNG, |
| VDK_PKM, |
| } |
| vdkTextureType; |
| |
| typedef enum _vdkTextureFace |
| { |
| VDK_2D, |
| VDK_POSITIVE_X, |
| VDK_NEGATIVE_X, |
| VDK_POSITIVE_Y, |
| VDK_NEGATIVE_Y, |
| VDK_POSITIVE_Z, |
| VDK_NEGATIVE_Z, |
| } |
| vdkTextureFace; |
| |
| VDKAPI unsigned int VDKLANG |
| vdkLoadTexture( |
| vdkEGL * Egl, |
| const char * FileName, |
| vdkTextureType Type, |
| vdkTextureFace Face |
| ); |
| |
| /******************************************************************************* |
| ** GL Shaders. ***************************************************************** |
| */ |
| |
| VDKAPI unsigned int VDKLANG |
| vdkMakeProgram( |
| vdkEGL * Egl, |
| const char * VertexShader, |
| const char * FragmentShader, |
| char ** Log |
| ); |
| |
| VDKAPI int VDKLANG |
| vdkDeleteProgram( |
| vdkEGL * Egl, |
| unsigned int Program |
| ); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __gc_vdk_h_ */ |