f78b12e570284aa8291f4ca1add24937fd107403vboxsync/*
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * Mesa 3-D graphics library
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * Version: 7.1
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * Permission is hereby granted, free of charge, to any person obtaining a
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * copy of this software and associated documentation files (the "Software"),
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * to deal in the Software without restriction, including without limitation
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * and/or sell copies of the Software, and to permit persons to whom the
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * Software is furnished to do so, subject to the following conditions:
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * The above copyright notice and this permission notice shall be included
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * in all copies or substantial portions of the Software.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync */
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync/**
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * \mainpage Mesa GL API Module
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * \section GLAPIIntroduction Introduction
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * The Mesa GL API module is responsible for dispatching all the
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * gl*() functions. All GL functions are dispatched by jumping through
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * the current dispatch table (basically a struct full of function
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * pointers.)
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * A per-thread current dispatch table and per-thread current context
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * pointer are managed by this module too.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * This module is intended to be non-Mesa-specific so it can be used
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * with the X/DRI libGL also.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync */
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#ifndef _GLAPI_H
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _GLAPI_H
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define GL_GLEXT_PROTOTYPES
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#include "GL/gl.h"
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#include "GL/glext.h"
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#include "glthread.h"
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncstruct _glapi_table;
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsynctypedef void (*_glapi_proc)(void); /* generic function pointer */
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsynctypedef void (*_glapi_warning_func)(void *ctx, const char *str, ...);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#if defined(USE_MGL_NAMESPACE)
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _glapi_set_dispatch _mglapi_set_dispatch
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _glapi_get_dispatch _mglapi_get_dispatch
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _glapi_set_context _mglapi_set_context
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _glapi_get_context _mglapi_get_context
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _glapi_Context _mglapi_Context
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define _glapi_Dispatch _mglapi_Dispatch
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#endif
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync/*
f78b12e570284aa8291f4ca1add24937fd107403vboxsync * Number of extension functions which we can dynamically add at runtime.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync */
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#define MAX_EXTENSION_FUNCS 300
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync/**
f78b12e570284aa8291f4ca1add24937fd107403vboxsync ** Define the GET_CURRENT_CONTEXT() macro.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync ** \param C local variable which will hold the current context.
f78b12e570284aa8291f4ca1add24937fd107403vboxsync **/
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#if defined (GLX_USE_TLS)
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncconst extern void *_glapi_Context;
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncconst extern struct _glapi_table *_glapi_Dispatch;
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern TLS void * _glapi_tls_Context;
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_tls_Context
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#else
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern void *_glapi_Context;
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern struct _glapi_table *_glapi_Dispatch;
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync# ifdef THREADS
f78b12e570284aa8291f4ca1add24937fd107403vboxsync# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())
f78b12e570284aa8291f4ca1add24937fd107403vboxsync# else
f78b12e570284aa8291f4ca1add24937fd107403vboxsync# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context
f78b12e570284aa8291f4ca1add24937fd107403vboxsync# endif
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#endif /* defined (GLX_USE_TLS) */
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync/**
f78b12e570284aa8291f4ca1add24937fd107403vboxsync ** GL API public functions
f78b12e570284aa8291f4ca1add24937fd107403vboxsync **/
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern void
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_check_multithread(void);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern void
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_set_context(void *context);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern void *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_get_context(void);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern void
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_set_dispatch(struct _glapi_table *dispatch);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern struct _glapi_table *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_get_dispatch(void);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern int
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_begin_dispatch_override(struct _glapi_table *override);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern void
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_end_dispatch_override(int layer);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncstruct _glapi_table *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_get_override_dispatch(int layer);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern GLuint
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_get_dispatch_table_size(void);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern int
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_add_dispatch( const char * const * function_names,
f78b12e570284aa8291f4ca1add24937fd107403vboxsync const char * parameter_signature );
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern _glapi_proc
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_get_proc_address(const char *funcName);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsyncextern struct _glapi_table *
f78b12e570284aa8291f4ca1add24937fd107403vboxsync_glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
f78b12e570284aa8291f4ca1add24937fd107403vboxsync
f78b12e570284aa8291f4ca1add24937fd107403vboxsync#endif