text: /*
      SDL - Simple DirectMedia Layer
      Copyright (C) 1997-2009 Sam Lantinga
  
      This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Library General Public
      License as published by the Free Software Foundation; either
      version 2 of the License, or (at your option) any later version.
  
      This library is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Library General Public License for more details.
  
      You should have received a copy of the GNU Library General Public
      License along with this library; if not, write to the Free
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
      Sam Lantinga
      slouken@libsdl.org
  */
  #include "SDL_config.h"
  
  /* Atari OSMesa.ldg implementation of SDL OpenGL support */
  
  #ifndef _SDL_ATARIGL_H_
  #define _SDL_ATARIGL_H_
  
  #if SDL_VIDEO_OPENGL
  #include <GL/osmesa.h>
  #endif
  
  #include "../SDL_sysvideo.h"
  
  /* Hidden "this" pointer for the video functions */
  #define _THIS   SDL_VideoDevice *this
  
  struct SDL_PrivateGLData {
  
      int gl_active; 	/* to stop switching drivers while we have a valid context */
  	
  	int gl_oldmesa;	/* Old OpenGL support ? */
  
  	int	gl_pixelsize;	/* for CopyShadow functions */
  
  	SDL_bool gl_upsidedown; /* Some implementations draw upside down */
  
  	Uint8 *gl_shadow;	/* Shadow buffer for old implementations */
  
  	/* for unsupported OSMesa buffer formats */
  	void (*ConvertSurface)(_THIS, SDL_Surface *surface);	
  
  	/* to convert the shadow buffer to the screen format */
  	void (*CopyShadow)(_THIS, SDL_Surface *surface);	
  
  #if SDL_VIDEO_OPENGL
  	OSMesaContext	ctx;
  
  	/* OpenGL functions */
  	void (*glGetIntegerv)( GLenum pname, GLint *value );
  	void (*glFinish)(void);
  	void (*glFlush)(void);
  
  	/* osmesa.ldg */
  	OSMesaContext (*OSMesaCreateContextExt)( GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, OSMesaContext sharelist);
  	void (*OSMesaDestroyContext)( OSMesaContext ctx );
  	GLboolean (*OSMesaMakeCurrent)( OSMesaContext ctx, void *buffer, GLenum type, GLsizei width, GLsizei height );
  	void (*OSMesaPixelStore)( GLint pname, GLint value );
  	void * (*OSMesaGetProcAddress)( const char *funcName );
  
  	/* mesa_gl.ldg, tiny_gl.ldg */
  	void *(*OSMesaCreateLDG)( long format, long type, long width, long height );
  	void (*OSMesaDestroyLDG)(void);
  
  	/* Info needed to compare existing context with new asked one */
  	int width, height;
  	GLenum format;
  	GLint depth,stencil,accum;
  #endif
  };
  
  /* Variable names */
  #define gl_active		(this->gl_data->gl_active)
  #define gl_ctx			(this->gl_data->ctx)
  #define gl_oldmesa		(this->gl_data->gl_oldmesa)
  #define gl_pixelsize	(this->gl_data->gl_pixelsize)
  #define gl_upsidedown	(this->gl_data->gl_upsidedown)
  #define gl_shadow		(this->gl_data->gl_shadow)
  #define gl_convert		(this->gl_data->ConvertSurface)
  #define gl_copyshadow	(this->gl_data->CopyShadow)
  #define gl_curformat	(this->gl_data->format)
  #define gl_curdepth		(this->gl_data->depth)
  #define gl_curstencil	(this->gl_data->stencil)
  #define gl_curaccum		(this->gl_data->accum)
  #define gl_curwidth		(this->gl_data->width)
  #define gl_curheight	(this->gl_data->height)
  
  /* OpenGL functions */
  extern int SDL_AtariGL_Init(_THIS, SDL_Surface *current);
  extern void SDL_AtariGL_Quit(_THIS, SDL_bool unload);
  extern void SDL_AtariGL_InitPointers(_THIS);
  
  extern int SDL_AtariGL_LoadLibrary(_THIS, const char *path);
  extern void *SDL_AtariGL_GetProcAddress(_THIS, const char *proc);
  extern int SDL_AtariGL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
  extern int SDL_AtariGL_MakeCurrent(_THIS);
  extern void SDL_AtariGL_SwapBuffers(_THIS);
  
  #endif /* _SDL_ATARIGL_H_ */
  