annotate src/video/pandora/SDL_pandora.c @ 5282:8e421890cdb8

Fixed bug #1117 There's a new event that's always sent when the window changes size, and that event is what the renderers listen for to determine if they need to rebind their context.
author Sam Lantinga <slouken@libsdl.org>
date Sat, 12 Feb 2011 19:02:14 -0800
parents b530ef003506
children
rev   line source
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
5267
b530ef003506 Happy 2011! :)
Sam Lantinga <slouken@libsdl.org>
parents: 5251
diff changeset
3 Copyright (C) 1997-2011 Sam Lantinga
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Lesser General Public License for more details.
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 Open Pandora SDL driver
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23 Copyright (C) 2009 David Carré
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 (cpasjuste@gmail.com)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25 */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27 /* SDL internals */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28 #include "SDL_config.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 #include "../SDL_sysvideo.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 #include "SDL_version.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 #include "SDL_syswm.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 #include "SDL_loadso.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33 #include "SDL_events.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34 #include "../../events/SDL_mouse_c.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35 #include "../../events/SDL_keyboard_c.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 /* PND declarations */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
38 #include "SDL_pandora.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39 #include "SDL_pandora_events.h"
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
40
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
41 /* WIZ declarations */
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
42 #include "GLES/gl.h"
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
43 #ifdef WIZ_GLES_LITE
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
44 static NativeWindowType hNativeWnd = 0; // A handle to the window we will create.
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
45 #endif
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
46
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
47 static SDL_bool PND_initialized = SDL_FALSE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49 static int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50 PND_available(void)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52 return 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 static void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
56 PND_destroy(SDL_VideoDevice * device)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 SDL_VideoData *phdata = (SDL_VideoData *) device->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60 if (device->driverdata != NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61 device->driverdata = NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
62 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 static SDL_VideoDevice *
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66 PND_create()
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
67 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68 SDL_VideoDevice *device;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
69 SDL_VideoData *phdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70 int status;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
71
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
72 /* Check if pandora could be initialized */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
73 status = PND_available();
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
74 if (status == 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
75 /* PND could not be used */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
76 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
77 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
78
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
79 /* Initialize SDL_VideoDevice structure */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
80 device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
81 if (device == NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
82 SDL_OutOfMemory();
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
83 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
85
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86 /* Initialize internal Pandora specific data */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
87 phdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
88 if (phdata == NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89 SDL_OutOfMemory();
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
90 SDL_free(device);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
92 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
94 device->driverdata = phdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
96 phdata->egl_initialized = SDL_TRUE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
97
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
98
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
99 /* Setup amount of available displays and current display */
3238
96492d29034a David Carre to Sam
Sam Lantinga <slouken@libsdl.org>
parents: 3235
diff changeset
100 device->num_displays = 0;
96492d29034a David Carre to Sam
Sam Lantinga <slouken@libsdl.org>
parents: 3235
diff changeset
101 device->current_display = 0;
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
103 /* Set device free function */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
104 device->free = PND_destroy;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
105
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
106 /* Setup all functions which we can handle */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
107 device->VideoInit = PND_videoinit;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
108 device->VideoQuit = PND_videoquit;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
109 device->GetDisplayModes = PND_getdisplaymodes;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110 device->SetDisplayMode = PND_setdisplaymode;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
111 device->CreateWindow = PND_createwindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
112 device->CreateWindowFrom = PND_createwindowfrom;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
113 device->SetWindowTitle = PND_setwindowtitle;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114 device->SetWindowIcon = PND_setwindowicon;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
115 device->SetWindowPosition = PND_setwindowposition;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116 device->SetWindowSize = PND_setwindowsize;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
117 device->ShowWindow = PND_showwindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118 device->HideWindow = PND_hidewindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
119 device->RaiseWindow = PND_raisewindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120 device->MaximizeWindow = PND_maximizewindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
121 device->MinimizeWindow = PND_minimizewindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
122 device->RestoreWindow = PND_restorewindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
123 device->SetWindowGrab = PND_setwindowgrab;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
124 device->DestroyWindow = PND_destroywindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
125 device->GetWindowWMInfo = PND_getwindowwminfo;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
126 device->GL_LoadLibrary = PND_gl_loadlibrary;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
127 device->GL_GetProcAddress = PND_gl_getprocaddres;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
128 device->GL_UnloadLibrary = PND_gl_unloadlibrary;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
129 device->GL_CreateContext = PND_gl_createcontext;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
130 device->GL_MakeCurrent = PND_gl_makecurrent;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
131 device->GL_SetSwapInterval = PND_gl_setswapinterval;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
132 device->GL_GetSwapInterval = PND_gl_getswapinterval;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
133 device->GL_SwapWindow = PND_gl_swapwindow;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
134 device->GL_DeleteContext = PND_gl_deletecontext;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
135 device->PumpEvents = PND_PumpEvents;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
136
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
137 return device;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
138 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
139
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
140 VideoBootStrap PND_bootstrap = {
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
141 #ifdef WIZ_GLES_LITE
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
142 "wiz",
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
143 "SDL Wiz Video Driver",
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
144 #else
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
145 "pandora",
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
146 "SDL Pandora Video Driver",
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
147 #endif
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
148 PND_available,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
149 PND_create
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
150 };
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
151
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
152 /*****************************************************************************/
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 /* SDL Video and Display initialization/handling functions */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154 /*****************************************************************************/
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
156 PND_videoinit(_THIS)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
157 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
158 SDL_VideoDisplay display;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
159 SDL_DisplayMode current_mode;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
161 SDL_zero(current_mode);
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
162 #ifdef WIZ_GLES_LITE
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
163 current_mode.w = 320;
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
164 current_mode.h = 240;
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
165 #else
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
166 current_mode.w = 800;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
167 current_mode.h = 480;
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
168 #endif
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
169 current_mode.refresh_rate = 60;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
170 current_mode.format = SDL_PIXELFORMAT_RGB565;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
171 current_mode.driverdata = NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
172
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
173 SDL_zero(display);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
174 display.desktop_mode = current_mode;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
175 display.current_mode = current_mode;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
176 display.driverdata = NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
177
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
178 SDL_AddVideoDisplay(&display);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
179
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
180 return 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
181 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
182
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
183 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
184 PND_videoquit(_THIS)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
185 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
186
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
187 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
188
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
189 void
3500
4b594623401b Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents: 3438
diff changeset
190 PND_getdisplaymodes(_THIS, SDL_VideoDisplay * display)
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
191 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
192
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
193 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
194
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
195 int
3500
4b594623401b Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents: 3438
diff changeset
196 PND_setdisplaymode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
197 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
198 return 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
199 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
200
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
201 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
202 PND_createwindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
203 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
204 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
205
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
206 SDL_WindowData *wdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
207
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
208 uint32_t winargc = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
209 int32_t status;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
210
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
211
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
212 /* Allocate window internal data */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
213 wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
214 if (wdata == NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
215 SDL_OutOfMemory();
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
216 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
217 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
218
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
219 /* Setup driver data for this window */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
220 window->driverdata = wdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
221
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
222 /* Check if window must support OpenGL ES rendering */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
223 if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
224
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
225 EGLBoolean initstatus;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
226
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
227 /* Mark this window as OpenGL ES compatible */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
228 wdata->uses_gles = SDL_TRUE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
229
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
230 /* Create connection to OpenGL ES */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
231 if (phdata->egl_display == EGL_NO_DISPLAY) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
232 phdata->egl_display = eglGetDisplay((NativeDisplayType) 0);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
233 if (phdata->egl_display == EGL_NO_DISPLAY) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
234 SDL_SetError("PND: Can't get connection to OpenGL ES");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
235 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
236 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
237
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
238 initstatus = eglInitialize(phdata->egl_display, NULL, NULL);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
239 if (initstatus != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
240 SDL_SetError("PND: Can't init OpenGL ES library");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
241 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
242 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
243 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
244
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
245 phdata->egl_refcount++;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
246 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
247
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
248 /* Window has been successfully created */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
249 return 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
250 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
251
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
252 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
253 PND_createwindowfrom(_THIS, SDL_Window * window, const void *data)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
254 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
255 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
256 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
257
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
258 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
259 PND_setwindowtitle(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
260 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
261 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
262 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
263 PND_setwindowicon(_THIS, SDL_Window * window, SDL_Surface * icon)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
264 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
265 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
266 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
267 PND_setwindowposition(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
268 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
269 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
270 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
271 PND_setwindowsize(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
272 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
273 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
274 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
275 PND_showwindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
276 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
277 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
278 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
279 PND_hidewindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
280 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
281 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
282 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
283 PND_raisewindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
284 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
285 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
286 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
287 PND_maximizewindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
288 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
289 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
290 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
291 PND_minimizewindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
292 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
293 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
294 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
295 PND_restorewindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
296 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
297 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
298 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
299 PND_setwindowgrab(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
300 {
3238
96492d29034a David Carre to Sam
Sam Lantinga <slouken@libsdl.org>
parents: 3235
diff changeset
301 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
96492d29034a David Carre to Sam
Sam Lantinga <slouken@libsdl.org>
parents: 3235
diff changeset
302 eglTerminate(phdata->egl_display);
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
303 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
304 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
305 PND_destroywindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
306 {
3235
d35b649858e0 David Carre to Sam
Sam Lantinga <slouken@libsdl.org>
parents: 3161
diff changeset
307 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
d35b649858e0 David Carre to Sam
Sam Lantinga <slouken@libsdl.org>
parents: 3161
diff changeset
308 eglTerminate(phdata->egl_display);
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
309 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
310
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
311 /*****************************************************************************/
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
312 /* SDL Window Manager function */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
313 /*****************************************************************************/
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
314 SDL_bool
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
315 PND_getwindowwminfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
316 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
317 if (info->version.major <= SDL_MAJOR_VERSION) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
318 return SDL_TRUE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
319 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
320 SDL_SetError("application not compiled with SDL %d.%d\n",
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
321 SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
322 return SDL_FALSE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
323 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
324
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
325 /* Failed to get window manager information */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
326 return SDL_FALSE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
327 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
328
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
329 /*****************************************************************************/
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
330 /* SDL OpenGL/OpenGL ES functions */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
331 /*****************************************************************************/
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
332 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
333 PND_gl_loadlibrary(_THIS, const char *path)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
334 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
335 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
336
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
337 /* Check if OpenGL ES library is specified for GF driver */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
338 if (path == NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
339 path = SDL_getenv("SDL_OPENGL_LIBRARY");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
340 if (path == NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
341 path = SDL_getenv("SDL_OPENGLES_LIBRARY");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
342 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
343 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
344
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
345 /* Check if default library loading requested */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
346 if (path == NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
347 /* Already linked with GF library which provides egl* subset of */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
348 /* functions, use Common profile of OpenGL ES library by default */
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
349 #ifdef WIZ_GLES_LITE
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
350 path = "/lib/libopengles_lite.so";
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
351 #else
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
352 path = "/usr/lib/libGLES_CM.so";
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
353 #endif
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
354 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
355
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
356 /* Load dynamic library */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
357 _this->gl_config.dll_handle = SDL_LoadObject(path);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
358 if (!_this->gl_config.dll_handle) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
359 /* Failed to load new GL ES library */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
360 SDL_SetError("PND: Failed to locate OpenGL ES library");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
361 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
362 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
363
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
364 /* Store OpenGL ES library path and name */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
365 SDL_strlcpy(_this->gl_config.driver_path, path,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
366 SDL_arraysize(_this->gl_config.driver_path));
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
367
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
368 /* New OpenGL ES library is loaded */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
369 return 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
370 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
371
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
372 void *
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
373 PND_gl_getprocaddres(_THIS, const char *proc)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
374 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
375 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
376 void *function_address;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
377
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
378 /* Try to get function address through the egl interface */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
379 function_address = eglGetProcAddress(proc);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
380 if (function_address != NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
381 return function_address;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
382 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
383
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
384 /* Then try to get function in the OpenGL ES library */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
385 if (_this->gl_config.dll_handle) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
386 function_address =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
387 SDL_LoadFunction(_this->gl_config.dll_handle, proc);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
388 if (function_address != NULL) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
389 return function_address;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
390 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
391 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
392
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
393 /* Failed to get GL ES function address pointer */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
394 SDL_SetError("PND: Cannot locate OpenGL ES function name");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
395 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
396 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
397
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
398 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
399 PND_gl_unloadlibrary(_THIS)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
400 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
401 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
402
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
403 if (phdata->egl_initialized == SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
404 /* Unload OpenGL ES library */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
405 if (_this->gl_config.dll_handle) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
406 SDL_UnloadObject(_this->gl_config.dll_handle);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
407 _this->gl_config.dll_handle = NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
408 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
409 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
410 SDL_SetError("PND: GF initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
411 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
412 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
413
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
414 SDL_GLContext
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
415 PND_gl_createcontext(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
416 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
417 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
418 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
419 SDL_DisplayData *didata =
5251
58265e606e4e Window coordinates are in the global space and windows are not tied to a particular display.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
420 (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
421 EGLBoolean status;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
422 int32_t gfstatus;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
423 EGLint configs;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
424 uint32_t attr_pos;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
425 EGLint attr_value;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
426 EGLint cit;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
427
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
428 /* Check if EGL was initialized */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
429 if (phdata->egl_initialized != SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
430 SDL_SetError("PND: EGL initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
431 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
432 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
433
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
434 /* Prepare attributes list to pass them to OpenGL ES */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
435 attr_pos = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
436 wdata->gles_attributes[attr_pos++] = EGL_SURFACE_TYPE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
437 wdata->gles_attributes[attr_pos++] = EGL_WINDOW_BIT;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
438 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
439 wdata->gles_attributes[attr_pos++] = _this->gl_config.red_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
440 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
441 wdata->gles_attributes[attr_pos++] = _this->gl_config.green_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
442 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
443 wdata->gles_attributes[attr_pos++] = _this->gl_config.blue_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
444 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
445
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
446 /* Setup alpha size in bits */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
447 if (_this->gl_config.alpha_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
448 wdata->gles_attributes[attr_pos++] = _this->gl_config.alpha_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
449 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
450 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
451 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
452
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
453 /* Setup color buffer size */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
454 if (_this->gl_config.buffer_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
455 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
456 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
457 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
458 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
459 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
460 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
461
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
462 /* Setup depth buffer bits */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
463 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
464 wdata->gles_attributes[attr_pos++] = _this->gl_config.depth_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
465
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
466 /* Setup stencil bits */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
467 if (_this->gl_config.stencil_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
468 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
469 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
470 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
471 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
472 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
473 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
474
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
475 /* Set number of samples in multisampling */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
476 if (_this->gl_config.multisamplesamples) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
477 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
478 wdata->gles_attributes[attr_pos++] =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
479 _this->gl_config.multisamplesamples;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
480 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
481
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
482 /* Multisample buffers, OpenGL ES 1.0 spec defines 0 or 1 buffer */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
483 if (_this->gl_config.multisamplebuffers) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
484 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
485 wdata->gles_attributes[attr_pos++] =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
486 _this->gl_config.multisamplebuffers;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
487 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
488
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
489 /* Finish attributes list */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
490 wdata->gles_attributes[attr_pos] = EGL_NONE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
491
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
492 /* Request first suitable framebuffer configuration */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
493 status = eglChooseConfig(phdata->egl_display, wdata->gles_attributes,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
494 wdata->gles_configs, 1, &configs);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
495 if (status != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
496 SDL_SetError("PND: Can't find closest configuration for OpenGL ES");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
497 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
498 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
499
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
500 /* Check if nothing has been found, try "don't care" settings */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
501 if (configs == 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
502 int32_t it;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
503 int32_t jt;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
504 GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE };
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
505
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
506 for (it = 0; it < 4; it++) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
507 for (jt = 16; jt >= 0; jt--) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
508 /* Don't care about color buffer bits, use what exist */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
509 /* Replace previous set data with EGL_DONT_CARE */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
510 attr_pos = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
511 wdata->gles_attributes[attr_pos++] = EGL_SURFACE_TYPE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
512 wdata->gles_attributes[attr_pos++] = EGL_WINDOW_BIT;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
513 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
514 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
515 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
516 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
517 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
518 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
519 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
520 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
521 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
522 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
523
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
524 /* Try to find requested or smallest depth */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
525 if (_this->gl_config.depth_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
526 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
527 wdata->gles_attributes[attr_pos++] = depthbits[it];
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
528 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
529 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
530 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
531 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
532
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
533 if (_this->gl_config.stencil_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
534 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
535 wdata->gles_attributes[attr_pos++] = jt;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
536 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
537 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
538 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
539 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
540
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
541 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
542 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
543 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
544 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
545 wdata->gles_attributes[attr_pos] = EGL_NONE;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
546
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
547 /* Request first suitable framebuffer configuration */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
548 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
549 eglChooseConfig(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
550 wdata->gles_attributes,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
551 wdata->gles_configs, 1, &configs);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
552
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
553 if (status != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
554 SDL_SetError
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
555 ("PND: Can't find closest configuration for OpenGL ES");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
556 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
557 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
558 if (configs != 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
559 break;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
560 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
561 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
562 if (configs != 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
563 break;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
564 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
565 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
566
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
567 /* No available configs */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
568 if (configs == 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
569 SDL_SetError("PND: Can't find any configuration for OpenGL ES");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
570 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
571 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
572 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
573
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
574 /* Initialize config index */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
575 wdata->gles_config = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
576
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
577 /* Now check each configuration to find out the best */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
578 for (cit = 0; cit < configs; cit++) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
579 uint32_t stencil_found;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
580 uint32_t depth_found;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
581
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
582 stencil_found = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
583 depth_found = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
584
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
585 if (_this->gl_config.stencil_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
586 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
587 eglGetConfigAttrib(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
588 wdata->gles_configs[cit], EGL_STENCIL_SIZE,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
589 &attr_value);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
590 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
591 if (attr_value != 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
592 stencil_found = 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
593 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
594 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
595 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
596 stencil_found = 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
597 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
598
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
599 if (_this->gl_config.depth_size) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
600 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
601 eglGetConfigAttrib(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
602 wdata->gles_configs[cit], EGL_DEPTH_SIZE,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
603 &attr_value);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
604 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
605 if (attr_value != 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
606 depth_found = 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
607 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
608 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
609 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
610 depth_found = 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
611 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
612
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
613 /* Exit from loop if found appropriate configuration */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
614 if ((depth_found != 0) && (stencil_found != 0)) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
615 break;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
616 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
617 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
618
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
619 /* If best could not be found, use first */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
620 if (cit == configs) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
621 cit = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
622 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
623 wdata->gles_config = cit;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
624
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
625 /* Create OpenGL ES context */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
626 wdata->gles_context =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
627 eglCreateContext(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
628 wdata->gles_configs[wdata->gles_config], NULL, NULL);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
629 if (wdata->gles_context == EGL_NO_CONTEXT) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
630 SDL_SetError("PND: OpenGL ES context creation has been failed");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
631 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
632 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
633
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
634 #ifdef WIZ_GLES_LITE
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
635 if( !hNativeWnd ) {
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
636 hNativeWnd = (NativeWindowType)malloc(16*1024);
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
637
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
638 if(!hNativeWnd)
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
639 printf( "Error : Wiz framebuffer allocatation failed\n" );
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
640 else
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
641 printf( "SDL13: Wiz framebuffer allocated: %X\n", hNativeWnd );
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
642 }
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
643 else {
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
644 printf( "SDL13: Wiz framebuffer already allocated: %X\n", hNativeWnd );
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
645 }
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
646
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
647 wdata->gles_surface =
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
648 eglCreateWindowSurface(phdata->egl_display,
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
649 wdata->gles_configs[wdata->gles_config],
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
650 hNativeWnd, NULL );
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
651 #else
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
652 wdata->gles_surface =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
653 eglCreateWindowSurface(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
654 wdata->gles_configs[wdata->gles_config],
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
655 (NativeWindowType) 0, NULL);
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
656 #endif
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
657
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
658
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
659 if (wdata->gles_surface == 0) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
660 SDL_SetError("Error : eglCreateWindowSurface failed;\n");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
661 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
662 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
663
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
664 /* Make just created context current */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
665 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
666 eglMakeCurrent(phdata->egl_display, wdata->gles_surface,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
667 wdata->gles_surface, wdata->gles_context);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
668 if (status != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
669 /* Destroy OpenGL ES surface */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
670 eglDestroySurface(phdata->egl_display, wdata->gles_surface);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
671 eglDestroyContext(phdata->egl_display, wdata->gles_context);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
672 wdata->gles_context = EGL_NO_CONTEXT;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
673 SDL_SetError("PND: Can't set OpenGL ES context on creation");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
674 return NULL;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
675 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
676
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
677 _this->gl_config.accelerated = 1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
678
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
679 /* Always clear stereo enable, since OpenGL ES do not supports stereo */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
680 _this->gl_config.stereo = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
681
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
682 /* Get back samples and samplebuffers configurations. Rest framebuffer */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
683 /* parameters could be obtained through the OpenGL ES API */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
684 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
685 eglGetConfigAttrib(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
686 wdata->gles_configs[wdata->gles_config],
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
687 EGL_SAMPLES, &attr_value);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
688 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
689 _this->gl_config.multisamplesamples = attr_value;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
690 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
691 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
692 eglGetConfigAttrib(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
693 wdata->gles_configs[wdata->gles_config],
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
694 EGL_SAMPLE_BUFFERS, &attr_value);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
695 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
696 _this->gl_config.multisamplebuffers = attr_value;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
697 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
698
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
699 /* Get back stencil and depth buffer sizes */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
700 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
701 eglGetConfigAttrib(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
702 wdata->gles_configs[wdata->gles_config],
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
703 EGL_DEPTH_SIZE, &attr_value);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
704 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
705 _this->gl_config.depth_size = attr_value;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
706 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
707 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
708 eglGetConfigAttrib(phdata->egl_display,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
709 wdata->gles_configs[wdata->gles_config],
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
710 EGL_STENCIL_SIZE, &attr_value);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
711 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
712 _this->gl_config.stencil_size = attr_value;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
713 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
714
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
715 /* Under PND OpenGL ES output can't be double buffered */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
716 _this->gl_config.double_buffer = 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
717
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
718 /* GL ES context was successfully created */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
719 return wdata->gles_context;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
720 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
721
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
722 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
723 PND_gl_makecurrent(_THIS, SDL_Window * window, SDL_GLContext context)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
724 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
725 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
726 SDL_WindowData *wdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
727 EGLBoolean status;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
728
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
729 if (phdata->egl_initialized != SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
730 SDL_SetError("PND: GF initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
731 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
732 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
733
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
734 if ((window == NULL) && (context == NULL)) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
735 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
736 eglMakeCurrent(phdata->egl_display, EGL_NO_SURFACE,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
737 EGL_NO_SURFACE, EGL_NO_CONTEXT);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
738 if (status != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
739 /* Failed to set current GL ES context */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
740 SDL_SetError("PND: Can't set OpenGL ES context");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
741 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
742 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
743 } else {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
744 wdata = (SDL_WindowData *) window->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
745 if (wdata->gles_surface == EGL_NO_SURFACE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
746 SDL_SetError
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
747 ("PND: OpenGL ES surface is not initialized for this window");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
748 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
749 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
750 if (wdata->gles_context == EGL_NO_CONTEXT) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
751 SDL_SetError
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
752 ("PND: OpenGL ES context is not initialized for this window");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
753 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
754 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
755 if (wdata->gles_context != context) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
756 SDL_SetError
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
757 ("PND: OpenGL ES context is not belong to this window");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
758 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
759 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
760 status =
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
761 eglMakeCurrent(phdata->egl_display, wdata->gles_surface,
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
762 wdata->gles_surface, wdata->gles_context);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
763 if (status != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
764 /* Failed to set current GL ES context */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
765 SDL_SetError("PND: Can't set OpenGL ES context");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
766 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
767 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
768 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
769 return 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
770 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
771
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
772 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
773 PND_gl_setswapinterval(_THIS, int interval)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
774 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
775 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
776 EGLBoolean status;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
777
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
778 if (phdata->egl_initialized != SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
779 SDL_SetError("PND: EGL initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
780 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
781 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
782
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
783 /* Check if OpenGL ES connection has been initialized */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
784 if (phdata->egl_display != EGL_NO_DISPLAY) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
785 /* Set swap OpenGL ES interval */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
786 status = eglSwapInterval(phdata->egl_display, interval);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
787 if (status == EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
788 /* Return success to upper level */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
789 phdata->swapinterval = interval;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
790 return 0;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
791 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
792 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
793
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
794 /* Failed to set swap interval */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
795 SDL_SetError("PND: Cannot set swap interval");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
796 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
797 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
798
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
799 int
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
800 PND_gl_getswapinterval(_THIS)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
801 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
802 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
803
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
804 if (phdata->egl_initialized != SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
805 SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
806 return -1;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
807 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
808
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
809 /* Return default swap interval value */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
810 return phdata->swapinterval;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
811 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
812
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
813 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
814 PND_gl_swapwindow(_THIS, SDL_Window * window)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
815 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
816 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
817 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
818 SDL_DisplayData *didata =
5251
58265e606e4e Window coordinates are in the global space and windows are not tied to a particular display.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
819 (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
820
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
821
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
822 if (phdata->egl_initialized != SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
823 SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
824 return;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
825 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
826
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
827 /* Many applications do not uses glFinish(), so we call it for them */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
828 glFinish();
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
829
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
830 /* Wait until OpenGL ES rendering is completed */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
831 eglWaitGL();
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
832
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
833 eglSwapBuffers(phdata->egl_display, wdata->gles_surface);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
834 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
835
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
836 void
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
837 PND_gl_deletecontext(_THIS, SDL_GLContext context)
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
838 {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
839 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
840 EGLBoolean status;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
841
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
842 if (phdata->egl_initialized != SDL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
843 SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
844 return;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
845 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
846
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
847 /* Check if OpenGL ES connection has been initialized */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
848 if (phdata->egl_display != EGL_NO_DISPLAY) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
849 if (context != EGL_NO_CONTEXT) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
850 status = eglDestroyContext(phdata->egl_display, context);
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
851 if (status != EGL_TRUE) {
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
852 /* Error during OpenGL ES context destroying */
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
853 SDL_SetError("PND: OpenGL ES context destroy error");
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
854 return;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
855 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
856 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
857 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
858
3438
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
859 #ifdef WIZ_GLES_LITE
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
860 if( hNativeWnd != 0 )
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
861 {
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
862 free(hNativeWnd);
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
863 hNativeWnd = 0;
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
864 printf( "SDL13: Wiz framebuffer released\n" );
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
865 }
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
866 #endif
ca5663493497 Scott to slouken
Sam Lantinga <slouken@libsdl.org>
parents: 3238
diff changeset
867
3161
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
868 return;
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
869 }
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
870
494559cc723b OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
871 /* vi: set ts=4 sw=4 expandtab: */