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