e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_SPU_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_SPU_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef WINDOWS
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPULOAD_APIENTRY __stdcall
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPULOAD_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_dll.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "spu_dispatch_table.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_net.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <iprt/types.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef DARWIN
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# include <OpenGL/OpenGL.h>
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# ifdef VBOX_WITH_COCOA_QT
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# else
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# include <AGL/agl.h>
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_ENTRY_POINT_NAME "SPULoad"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define MAX_THREADS 32 /**< max threads per spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct _SPUSTRUCT SPU;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*SPUGenericFunction)(void);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * SPU Named function descriptor
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char *name;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUGenericFunction fn;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} SPUNamedFunctionTable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * SPU function table descriptor
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUDispatchTable *childCopy;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync void *data;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUNamedFunctionTable *table;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} SPUFunctions;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * SPU Option callback
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * \param spu
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * \param response
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*SPUOptionCB)( void *spu, const char *response );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef enum { CR_BOOL, CR_INT, CR_FLOAT, CR_STRING, CR_ENUM } cr_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * SPU Options table
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const char *option; /**< Name of the option */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cr_type type; /**< Type of option */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int numValues; /**< usually 1 */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const char *deflt; /**< comma-separated string of [numValues] defaults */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const char *min; /**< comma-separated string of [numValues] minimums */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const char *max; /**< comma-separated string of [numValues] maximums */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const char *description; /**< Textual description of the option */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUOptionCB cb; /**< Callback function */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} SPUOptions, *SPUOptionsPtr;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/** Init spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef SPUFunctions *(*SPUInitFuncPtr)(int id, SPU *child,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPU *super, unsigned int, unsigned int );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*SPUSelfDispatchFuncPtr)(SPUDispatchTable *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/** Cleanup spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (*SPUCleanupFuncPtr)(void);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/** Load spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (*SPULoadFunction)(char **, char **, void *, void *, void *,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUOptionsPtr *, int *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * masks for spu_flags
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_PACKER_MASK 0x1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_NO_PACKER 0x0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_HAS_PACKER 0x1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_TERMINAL_MASK 0x2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_NOT_TERMINAL 0x0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_IS_TERMINAL 0x2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_MAX_SERVERS_MASK 0xc
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_MAX_SERVERS_ZERO 0x0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_MAX_SERVERS_ONE 0x4
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define SPU_MAX_SERVERS_UNLIMITED 0x8
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * SPU descriptor
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstruct _SPUSTRUCT {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char *name; /**< Name of the spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char *super_name; /**< Name of the super class of the spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int id; /**< Id num of the spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int spu_flags; /**< options fags for the SPU */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync struct _SPUSTRUCT *superSPU; /**< Pointer to the descriptor for the super class */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRDLL *dll; /**< pointer to shared lib for spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPULoadFunction entry_point; /**< SPU's entry point (SPULoad()) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUInitFuncPtr init; /**< SPU init function */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUSelfDispatchFuncPtr self; /**< */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUCleanupFuncPtr cleanup; /**< SPU cleanup func */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUFunctions *function_table; /**< Function table for spu */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUOptions *options; /**< Options table */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUDispatchTable dispatch_table;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync void *privatePtr; /**< pointer to SPU-private data */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync};
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * These are the OpenGL / window system interface functions
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if defined(WINDOWS)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Windows/WGL
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@{*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef HGLRC (WGL_APIENTRY *wglCreateContextFunc_t)(HDC);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (WGL_APIENTRY *wglDeleteContextFunc_t)(HGLRC);
f53ba2efceac1847585b2052ee98569305e9802dvboxsynctypedef BOOL (WGL_APIENTRY *wglShareListsFunc_t)(HGLRC,HGLRC);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef BOOL (WGL_APIENTRY *wglMakeCurrentFunc_t)(HDC,HGLRC);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef BOOL (WGL_APIENTRY *wglSwapBuffersFunc_t)(HDC);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (WGL_APIENTRY *wglChoosePixelFormatFunc_t)(HDC, CONST PIXELFORMATDESCRIPTOR *);
efc2dd03ce4c5327b18fd0493dde207135d4cc6evboxsynctypedef BOOL (WGL_APIENTRY *wglChoosePixelFormatEXTFunc_t)(HDC, const int *, const FLOAT *, UINT, int *, UINT *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (WGL_APIENTRY *wglDescribePixelFormatFunc_t)(HDC, int, UINT, CONST PIXELFORMATDESCRIPTOR *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (WGL_APIENTRY *wglSetPixelFormatFunc_t)(HDC, int, CONST PIXELFORMATDESCRIPTOR *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef HGLRC (WGL_APIENTRY *wglGetCurrentContextFunc_t)();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef PROC (WGL_APIENTRY *wglGetProcAddressFunc_t)();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef BOOL (WGL_APIENTRY *wglChoosePixelFormatEXTFunc_t)(HDC, const int *, const FLOAT *, UINT, int *, UINT *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef BOOL (WGL_APIENTRY *wglGetPixelFormatAttribivEXTFunc_t)(HDC, int, int, UINT, int *, int *);
efc2dd03ce4c5327b18fd0493dde207135d4cc6evboxsynctypedef BOOL (WGL_APIENTRY *wglGetPixelFormatAttribfvEXTFunc_t)(HDC, int, int, UINT, int *, float *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef const GLubyte *(WGL_APIENTRY *glGetStringFunc_t)( GLenum );
0da792aae5754a1af51cbe1941f455124bb29906vboxsynctypedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringEXTFunc_t)();
0da792aae5754a1af51cbe1941f455124bb29906vboxsynctypedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringARBFunc_t)(HDC);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@}*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#elif defined(DARWIN)
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# ifndef VBOX_WITH_COCOA_QT
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Apple/AGL
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@{*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLContext (*aglCreateContextFunc_t)( AGLPixelFormat, AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglDestroyContextFunc_t)( AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglSetCurrentContextFunc_t)( AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*aglSwapBuffersFunc_t)( AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLPixelFormat (*aglChoosePixelFormatFunc_t) (const AGLDevice *, GLint, const GLint *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglDescribePixelFormatFunc_t)( AGLPixelFormat, GLint, GLint * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* <--set pixel format */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLContext (*aglGetCurrentContextFunc_t)();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* <--get proc address -- none exists */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void* (*aglGetProcAddressFunc_t)( const GLubyte *name );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* These are here just in case */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglDescribeRendererFunc_t)( AGLRendererInfo, GLint, GLint * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*aglDestroyPixelFormatFunc_t)( AGLPixelFormat );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*aglDestroyRendererInfoFunc_t)( AGLRendererInfo );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLDevice* (*aglDevicesOfPixelFormatFunc_t)( AGLPixelFormat, GLint );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglDisableFunc_t)( AGLContext, GLenum );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglEnableFunc_t)( AGLContext, GLenum );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef const GLubyte* (*aglErrorStringFunc_t)( GLenum );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLDrawable (*aglGetDrawableFunc_t)( AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLenum (*aglGetErrorFunc_t)();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglGetIntegerFunc_t)( AGLContext, GLenum, GLint* );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*aglGetVersionFunc_t)( GLint *, GLint * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLint (*aglGetVirtualScreenFunc_t)( AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglIsEnabledFunc_t)( AGLContext, GLenum );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLPixelFormat (*aglNextPixelFormatFunc_t)( AGLPixelFormat );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLRendererInfo (*aglNextRendererInfoFunc_t)( AGLRendererInfo );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef AGLRendererInfo (*aglQueryRendererInfoFunc_t)( const AGLDevice *, GLint );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*aglReserLibraryFunc_t)();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglSetDrawableFunc_t)( AGLContext, AGLDrawable );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglSetFullScreenFunc_t)( AGLContext, GLsizei, GLsizei, GLsizei, GLint );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglSetIntegerFunc_t)( AGLContext, GLenum, const GLint * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglSetOffScreenFunc_t)( AGLContext, GLsizei, GLsizei, GLsizei, void * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglSetVirtualScreenFunc_t)( AGLContext, GLint );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglUpdateContextFunc_t)( AGLContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLboolean (*aglUseFontFunc_t)( AGLContext, GLint, Style, GLint, GLint, GLint, GLint );
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef const GLubyte *(*glGetStringFunc_t)( GLenum );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@}*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Apple/CGL
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@{*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetCurrentContextFunc_t)( CGLContextObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLContextObj (*CGLGetCurrentContextFunc_t)();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLChoosePixelFormatFunc_t)( const CGLPixelFormatAttribute *, CGLPixelFormatObj *, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDestroyPixelFormatFunc_t)( CGLPixelFormatObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDescribePixelFormatFunc_t)( CGLPixelFormatObj , long , CGLPixelFormatAttribute , long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLQueryRendererInfoFunc_t)( unsigned long, CGLRendererInfoObj *, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDestroyRendererInfoFunc_t)( CGLRendererInfoObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDescribeRendererFunc_t)( CGLRendererInfoObj, long, CGLRendererProperty, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLCreateContextFunc_t)( CGLPixelFormatObj, CGLContextObj, CGLContextObj * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDestroyContextFunc_t)( CGLContextObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLCopyContextFunc_t)( CGLContextObj src, CGLContextObj, unsigned long );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLCreatePBufferFunc_t)( long, long, unsigned long, unsigned long, long, CGLPBufferObj * ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDestroyPBufferFunc_t)( CGLPBufferObj ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDescribePBufferFunc_t)( CGLPBufferObj, long *, long *, unsigned long *, unsigned long *, long * ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLTexImagePBufferFunc_t)( CGLContextObj, CGLPBufferObj, unsigned long ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetOffScreenFunc_t)( CGLContextObj, long, long, long, void * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLGetOffScreenFunc_t)( CGLContextObj, long *, long *, long *, void ** );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetFullScreenFunc_t)( CGLContextObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetPBufferFunc_t)( CGLContextObj, CGLPBufferObj, unsigned long, long, long ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLGetPBufferFunc_t)( CGLContextObj, CGLPBufferObj *, unsigned long *, long *, long * ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLClearDrawableFunc_t)( CGLContextObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLFlushDrawableFunc_t)( CGLContextObj ); /* <-- swap buffers */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLEnableFunc_t)( CGLContextObj, CGLContextEnable );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLDisableFunc_t)( CGLContextObj, CGLContextEnable );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLIsEnabledFunc_t)( CGLContextObj, CGLContextEnable, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetParameterFunc_t)( CGLContextObj, CGLContextParameter, const long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLGetParameterFunc_t)( CGLContextObj, CGLContextParameter, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetVirtualScreenFunc_t)( CGLContextObj, long );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLGetVirtualScreenFunc_t)( CGLContextObj, long *);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetOptionFunc_t)( CGLGlobalOption, long );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLGetOptionFunc_t)( CGLGlobalOption, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*CGLGetVersionFunc_t)( long *, long * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef const char * (*CGLErrorStringFunc_t)( CGLError );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/** XXX \todo Undocumented CGL functions. Are these all correct? */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void *CGSConnectionID;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int CGSWindowID;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int CGSSurfaceID;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLSetSurfaceFunc_t)( CGLContextObj, CGSConnectionID, CGSWindowID, CGSSurfaceID );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLGetSurfaceFunc_t)( CGLContextObj, CGSConnectionID, CGSWindowID, CGSSurfaceID* );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CGLError (*CGLUpdateContextFunc_t)( CGLContextObj );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@}*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * X11/GLX
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@{*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (*glXGetConfigFunc_t)( Display *, XVisualInfo *, int, int * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXQueryExtensionFunc_t) (Display *, int *, int * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef const char *(*glXQueryExtensionsStringFunc_t) (Display *, int );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXQueryVersionFunc_t)( Display *dpy, int *maj, int *min );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef XVisualInfo *(*glXChooseVisualFunc_t)( Display *, int, int * );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXContext (*glXCreateContextFunc_t)( Display *, XVisualInfo *, GLXContext, Bool );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXUseXFontFunc_t)(Font font, int first, int count, int listBase);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXDestroyContextFunc_t)( Display *, GLXContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXIsDirectFunc_t)( Display *, GLXContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXMakeCurrentFunc_t)( Display *, GLXDrawable, GLXContext );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXSwapBuffersFunc_t)( Display *, GLXDrawable );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef CR_GLXFuncPtr (*glXGetProcAddressARBFunc_t)( const GLubyte *name );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Display *(*glXGetCurrentDisplayFunc_t)( void );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXContext (*glXGetCurrentContextFunc_t)( void );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXDrawable (*glXGetCurrentDrawableFunc_t)( void );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef char * (*glXGetClientStringFunc_t)( Display *dpy, int name );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXWaitGLFunc_t)(void);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXWaitXFunc_t)(void);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXCopyContextFunc_t)(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef const GLubyte *(*glGetStringFunc_t)( GLenum );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXJoinSwapGroupNVFunc_t)(Display *dpy, GLXDrawable drawable, GLuint group);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXBindSwapBarrierNVFunc_t)(Display *dpy, GLuint group, GLuint barrier);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXQuerySwapGroupNVFunc_t)(Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXQueryMaxSwapGroupsNVFunc_t)(Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXQueryFrameCountNVFunc_t)(Display *dpy, int screen, GLuint *count);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXResetFrameCountNVFunc_t)(Display *dpy, int screen);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef GLX_VERSION_1_3
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXContext (*glXCreateNewContextFunc_t)( Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXWindow (*glXCreateWindowFunc_t)(Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef Bool (*glXMakeContextCurrentFunc_t)( Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXFBConfig *(*glXChooseFBConfigFunc_t)( Display *dpy, int screen, const int *attribList, int *nitems );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXFBConfig *(*glXGetFBConfigsFunc_t)(Display *dpy, int screen, int *nelements);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (*glXGetFBConfigAttribFunc_t)(Display *dpy, GLXFBConfig config, int attribute, int *value);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef XVisualInfo *(*glXGetVisualFromFBConfigFunc_t)(Display *dpy, GLXFBConfig config);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef GLXPbuffer (*glXCreatePbufferFunc_t)( Display *dpy, GLXFBConfig config, const int *attribList );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXDestroyPbufferFunc_t)( Display *dpy, GLXPbuffer pbuf );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef int (*glXQueryContextFunc_t)(Display *dpy, GLXContext ctx, int attribute, int *value);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef void (*glXQueryDrawableFunc_t)(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* GLX_VERSION_1_3 */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*@}*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Package up the WGL/AGL/CGL/GLX function pointers into a struct. We use
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * this in a few different places.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if defined(WINDOWS)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglGetProcAddressFunc_t wglGetProcAddress;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglCreateContextFunc_t wglCreateContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglDeleteContextFunc_t wglDeleteContext;
f53ba2efceac1847585b2052ee98569305e9802dvboxsync wglShareListsFunc_t wglShareLists;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglMakeCurrentFunc_t wglMakeCurrent;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglSwapBuffersFunc_t wglSwapBuffers;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglGetCurrentContextFunc_t wglGetCurrentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglChoosePixelFormatFunc_t wglChoosePixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglDescribePixelFormatFunc_t wglDescribePixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglSetPixelFormatFunc_t wglSetPixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglChoosePixelFormatEXTFunc_t wglChoosePixelFormatEXT;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglGetPixelFormatAttribivEXTFunc_t wglGetPixelFormatAttribivEXT;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglGetPixelFormatAttribfvEXTFunc_t wglGetPixelFormatAttribfvEXT;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync wglGetExtensionsStringEXTFunc_t wglGetExtensionsStringEXT;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#elif defined(DARWIN)
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# ifndef VBOX_WITH_COCOA_QT
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglCreateContextFunc_t aglCreateContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglDestroyContextFunc_t aglDestroyContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglSetCurrentContextFunc_t aglSetCurrentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglSwapBuffersFunc_t aglSwapBuffers;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglChoosePixelFormatFunc_t aglChoosePixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglDestroyPixelFormatFunc_t aglDestroyPixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglDescribePixelFormatFunc_t aglDescribePixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglGetCurrentContextFunc_t aglGetCurrentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglSetDrawableFunc_t aglSetDrawable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglGetDrawableFunc_t aglGetDrawable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglSetFullScreenFunc_t aglSetFullScreen;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglGetProcAddressFunc_t aglGetProcAddress;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglUpdateContextFunc_t aglUpdateContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglUseFontFunc_t aglUseFont;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglSetIntegerFunc_t aglSetInteger;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglGetErrorFunc_t aglGetError;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglGetIntegerFunc_t aglGetInteger;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglEnableFunc_t aglEnable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync aglDisableFunc_t aglDisable;
610972deee47d5e5229ccdb6c86cbb332d2b4626vboxsync# endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLChoosePixelFormatFunc_t CGLChoosePixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDestroyPixelFormatFunc_t CGLDestroyPixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDescribePixelFormatFunc_t CGLDescribePixelFormat;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLQueryRendererInfoFunc_t CGLQueryRendererInfo;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDestroyRendererInfoFunc_t CGLDestroyRendererInfo;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDescribeRendererFunc_t CGLDescribeRenderer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLCreateContextFunc_t CGLCreateContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDestroyContextFunc_t CGLDestroyContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLCopyContextFunc_t CGLCopyContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetCurrentContextFunc_t CGLSetCurrentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetCurrentContextFunc_t CGLGetCurrentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLCreatePBufferFunc_t CGLCreatePBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDestroyPBufferFunc_t CGLDestroyPBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDescribePBufferFunc_t CGLDescribePBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLTexImagePBufferFunc_t CGLTexImagePBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetOffScreenFunc_t CGLSetOffScreen;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetOffScreenFunc_t CGLGetOffScreen;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetFullScreenFunc_t CGLSetFullScreen;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetPBufferFunc_t CGLSetPBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetPBufferFunc_t CGLGetPBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLClearDrawableFunc_t CGLClearDrawable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLFlushDrawableFunc_t CGLFlushDrawable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLEnableFunc_t CGLEnable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLDisableFunc_t CGLDisable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLIsEnabledFunc_t CGLIsEnabled;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetParameterFunc_t CGLSetParameter;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetParameterFunc_t CGLGetParameter;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetVirtualScreenFunc_t CGLSetVirtualScreen;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetVirtualScreenFunc_t CGLGetVirtualScreen;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetOptionFunc_t CGLSetOption;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetOptionFunc_t CGLGetOption;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetVersionFunc_t CGLGetVersion;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLErrorStringFunc_t CGLErrorString;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLSetSurfaceFunc_t CGLSetSurface;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLGetSurfaceFunc_t CGLGetSurface;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CGLUpdateContextFunc_t CGLUpdateContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetConfigFunc_t glXGetConfig;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryExtensionFunc_t glXQueryExtension;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryVersionFunc_t glXQueryVersion;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryExtensionsStringFunc_t glXQueryExtensionsString;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXChooseVisualFunc_t glXChooseVisual;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXCreateContextFunc_t glXCreateContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXDestroyContextFunc_t glXDestroyContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXUseXFontFunc_t glXUseXFont;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXIsDirectFunc_t glXIsDirect;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXMakeCurrentFunc_t glXMakeCurrent;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXSwapBuffersFunc_t glXSwapBuffers;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetProcAddressARBFunc_t glXGetProcAddressARB;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetCurrentDisplayFunc_t glXGetCurrentDisplay;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetCurrentContextFunc_t glXGetCurrentContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetCurrentDrawableFunc_t glXGetCurrentDrawable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetClientStringFunc_t glXGetClientString;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXWaitGLFunc_t glXWaitGL;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXWaitXFunc_t glXWaitX;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXCopyContextFunc_t glXCopyContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* GLX_NV_swap_group */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXJoinSwapGroupNVFunc_t glXJoinSwapGroupNV;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXBindSwapBarrierNVFunc_t glXBindSwapBarrierNV;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQuerySwapGroupNVFunc_t glXQuerySwapGroupNV;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryMaxSwapGroupsNVFunc_t glXQueryMaxSwapGroupsNV;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryFrameCountNVFunc_t glXQueryFrameCountNV;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXResetFrameCountNVFunc_t glXResetFrameCountNV;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef GLX_VERSION_1_3
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXCreateNewContextFunc_t glXCreateNewContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXCreateWindowFunc_t glXCreateWindow;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXMakeContextCurrentFunc_t glXMakeContextCurrent;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXChooseFBConfigFunc_t glXChooseFBConfig;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetFBConfigsFunc_t glXGetFBConfigs;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetFBConfigAttribFunc_t glXGetFBConfigAttrib;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXGetVisualFromFBConfigFunc_t glXGetVisualFromFBConfig;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXCreatePbufferFunc_t glXCreatePbuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXDestroyPbufferFunc_t glXDestroyPbuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryContextFunc_t glXQueryContext;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glXQueryDrawableFunc_t glXQueryDrawable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glGetStringFunc_t glGetString;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} crOpenGLInterface;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/** This is the one required function in _all_ SPUs */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int) SPULoad( char **name, char **super, SPUInitFuncPtr *init,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync SPUOptionsPtr *options, int *flags );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(SPU *) crSPULoad( SPU *child, int id, char *name, char *dir, void *server);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(SPU *) crSPULoadChain( int count, int *ids, char **names, char *dir, void *server );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUUnloadChain(SPU *headSPU);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUInitDispatchTable( SPUDispatchTable *table );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUCopyDispatchTable( SPUDispatchTable *dst, SPUDispatchTable *src );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUChangeInterface( SPUDispatchTable *table, void *origFunc, void *newFunc );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUSetDefaultParams( void *spu, SPUOptions *options );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int) crSPUGetEnumIndex( const SPUOptions *option, const char *optName, const char *value );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(SPUGenericFunction) crSPUFindFunction( const SPUNamedFunctionTable *table, const char *fname );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUInitDispatch( SPUDispatchTable *dispatch, const SPUNamedFunctionTable *table );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crSPUInitDispatchNops(SPUDispatchTable *table);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int) crLoadOpenGL( crOpenGLInterface *crInterface, SPUNamedFunctionTable table[] );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crUnloadOpenGL( void );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int) crLoadOpenGLExtensions( const crOpenGLInterface *crInterface, SPUNamedFunctionTable table[] );
8b5acc777c39ff8e124c6b57135d6d0adb1ca031vboxsyncDECLEXPORT(void) crSPUChangeDispatch(SPUDispatchTable *dispatch, const SPUNamedFunctionTable *newtable);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if defined(GLX)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(XVisualInfo *)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrChooseVisual(const crOpenGLInterface *ws, Display *dpy, int screen,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean directColor, int visBits);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrChooseVisual(const crOpenGLInterface *ws, int visBits);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef USE_OSMESA
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrLoadOSMesa( OSMesaContext (**createContext)( GLenum format, OSMesaContext sharelist ),
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean (**makeCurrent)( OSMesaContext ctx, GLubyte *buffer,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum type, GLsizei width, GLsizei height ),
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync void (**destroyContext)( OSMesaContext ctx ));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_SPU_H */