Mercurial > sdl-ios-xcode
annotate src/video/pandora/SDL_pandora.c @ 3502:98a819296cdc
Whenever a window becomes fullscreen, shown, unminimized, and has input focus it will change the display to the corresponding fullscreen video mode.
If it loses any of those properties the desktop mode will be restored.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 01 Dec 2009 08:56:12 +0000 |
parents | 4b594623401b |
children | 64ce267332c6 |
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 |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2009 Sam Lantinga |
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 | 41 /* WIZ declarations */ |
42 #include "GLES/gl.h" | |
43 #ifdef WIZ_GLES_LITE | |
44 static NativeWindowType hNativeWnd = 0; // A handle to the window we will create. | |
45 #endif | |
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 | 100 device->num_displays = 0; |
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 | 141 #ifdef WIZ_GLES_LITE |
142 "wiz", | |
143 "SDL Wiz Video Driver", | |
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 | 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 | 162 #ifdef WIZ_GLES_LITE |
163 current_mode.w = 320; | |
164 current_mode.h = 240; | |
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 | 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 | 301 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
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 | 307 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
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 | 349 #ifdef WIZ_GLES_LITE |
350 path = "/lib/libopengles_lite.so"; | |
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 | 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 = |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
3438
diff
changeset
|
420 (SDL_DisplayData *) SDL_GetDisplayFromWindow(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 | 634 #ifdef WIZ_GLES_LITE |
635 if( !hNativeWnd ) { | |
636 hNativeWnd = (NativeWindowType)malloc(16*1024); | |
637 | |
638 if(!hNativeWnd) | |
639 printf( "Error : Wiz framebuffer allocatation failed\n" ); | |
640 else | |
641 printf( "SDL13: Wiz framebuffer allocated: %X\n", hNativeWnd ); | |
642 } | |
643 else { | |
644 printf( "SDL13: Wiz framebuffer already allocated: %X\n", hNativeWnd ); | |
645 } | |
646 | |
647 wdata->gles_surface = | |
648 eglCreateWindowSurface(phdata->egl_display, | |
649 wdata->gles_configs[wdata->gles_config], | |
650 hNativeWnd, NULL ); | |
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 | 656 #endif |
657 | |
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 = |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
3438
diff
changeset
|
819 (SDL_DisplayData *) SDL_GetDisplayFromWindow(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 | 859 #ifdef WIZ_GLES_LITE |
860 if( hNativeWnd != 0 ) | |
861 { | |
862 free(hNativeWnd); | |
863 hNativeWnd = 0; | |
864 printf( "SDL13: Wiz framebuffer released\n" ); | |
865 } | |
866 #endif | |
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: */ |