1/*
2    SDL - Simple DirectMedia Layer
3    Copyright (C) 1997-2012 Sam Lantinga
4
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public
7    License as published by the Free Software Foundation; either
8    version 2 of the License, or (at your option) any later version.
9
10    This library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Library General Public License for more details.
14
15    You should have received a copy of the GNU Library General Public
16    License along with this library; if not, write to the Free
17    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
19    Sam Lantinga
20    slouken@libsdl.org
21*/
22#include "SDL_config.h"
23
24/* Atari OSMesa.ldg implementation of SDL OpenGL support */
25
26#ifndef _SDL_ATARIGL_H_
27#define _SDL_ATARIGL_H_
28
29#if SDL_VIDEO_OPENGL
30#include <GL/osmesa.h>
31#endif
32
33#include "../SDL_sysvideo.h"
34
35/* Hidden "this" pointer for the video functions */
36#define _THIS   SDL_VideoDevice *this
37
38struct SDL_PrivateGLData {
39
40    int gl_active; 	/* to stop switching drivers while we have a valid context */
41
42	int gl_oldmesa;	/* Old OpenGL support ? */
43
44	int	gl_pixelsize;	/* for CopyShadow functions */
45
46	SDL_bool gl_upsidedown; /* Some implementations draw upside down */
47
48	Uint8 *gl_shadow;	/* Shadow buffer for old implementations */
49
50	/* for unsupported OSMesa buffer formats */
51	void (*ConvertSurface)(_THIS, SDL_Surface *surface);
52
53	/* to convert the shadow buffer to the screen format */
54	void (*CopyShadow)(_THIS, SDL_Surface *surface);
55
56#if SDL_VIDEO_OPENGL
57	OSMesaContext	ctx;
58
59	/* OpenGL functions */
60	void (*glGetIntegerv)( GLenum pname, GLint *value );
61	void (*glFinish)(void);
62	void (*glFlush)(void);
63
64	/* osmesa.ldg */
65	OSMesaContext (*OSMesaCreateContextExt)( GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, OSMesaContext sharelist);
66	void (*OSMesaDestroyContext)( OSMesaContext ctx );
67	GLboolean (*OSMesaMakeCurrent)( OSMesaContext ctx, void *buffer, GLenum type, GLsizei width, GLsizei height );
68	void (*OSMesaPixelStore)( GLint pname, GLint value );
69	void * (*OSMesaGetProcAddress)( const char *funcName );
70
71	/* mesa_gl.ldg, tiny_gl.ldg */
72	void *(*OSMesaCreateLDG)( long format, long type, long width, long height );
73	void (*OSMesaDestroyLDG)(void);
74
75	/* Info needed to compare existing context with new asked one */
76	int width, height;
77	GLenum format;
78	GLint depth,stencil,accum;
79#endif
80};
81
82/* Variable names */
83#define gl_active		(this->gl_data->gl_active)
84#define gl_ctx			(this->gl_data->ctx)
85#define gl_oldmesa		(this->gl_data->gl_oldmesa)
86#define gl_pixelsize	(this->gl_data->gl_pixelsize)
87#define gl_upsidedown	(this->gl_data->gl_upsidedown)
88#define gl_shadow		(this->gl_data->gl_shadow)
89#define gl_convert		(this->gl_data->ConvertSurface)
90#define gl_copyshadow	(this->gl_data->CopyShadow)
91#define gl_curformat	(this->gl_data->format)
92#define gl_curdepth		(this->gl_data->depth)
93#define gl_curstencil	(this->gl_data->stencil)
94#define gl_curaccum		(this->gl_data->accum)
95#define gl_curwidth		(this->gl_data->width)
96#define gl_curheight	(this->gl_data->height)
97
98/* OpenGL functions */
99extern int SDL_AtariGL_Init(_THIS, SDL_Surface *current);
100extern void SDL_AtariGL_Quit(_THIS, SDL_bool unload);
101extern void SDL_AtariGL_InitPointers(_THIS);
102
103extern int SDL_AtariGL_LoadLibrary(_THIS, const char *path);
104extern void *SDL_AtariGL_GetProcAddress(_THIS, const char *proc);
105extern int SDL_AtariGL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
106extern int SDL_AtariGL_MakeCurrent(_THIS);
107extern void SDL_AtariGL_SwapBuffers(_THIS);
108
109#endif /* _SDL_ATARIGL_H_ */
110