2 Simple DirectMedia Layer
3 Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_PANDORA
26 #include "../SDL_sysvideo.h"
27 #include "SDL_version.h"
28 #include "SDL_syswm.h"
29 #include "SDL_loadso.h"
30 #include "SDL_events.h"
31 #include "../../events/SDL_mouse_c.h"
32 #include "../../events/SDL_keyboard_c.h"
34 /* PND declarations */
35 #include "SDL_pandora.h"
36 #include "SDL_pandora_events.h"
38 /* WIZ declarations */
41 static NativeWindowType hNativeWnd = 0; /* A handle to the window we will create. */
44 static SDL_bool PND_initialized = SDL_FALSE;
53 PND_destroy(SDL_VideoDevice * device)
55 SDL_VideoData *phdata = (SDL_VideoData *) device->driverdata;
57 if (device->driverdata != NULL) {
58 device->driverdata = NULL;
62 static SDL_VideoDevice *
65 SDL_VideoDevice *device;
66 SDL_VideoData *phdata;
69 /* Check if pandora could be initialized */
70 status = PND_available();
72 /* PND could not be used */
76 /* Initialize SDL_VideoDevice structure */
77 device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
83 /* Initialize internal Pandora specific data */
84 phdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
91 device->driverdata = phdata;
93 phdata->egl_initialized = SDL_TRUE;
96 /* Setup amount of available displays and current display */
97 device->num_displays = 0;
98 device->current_display = 0;
100 /* Set device free function */
101 device->free = PND_destroy;
103 /* Setup all functions which we can handle */
104 device->VideoInit = PND_videoinit;
105 device->VideoQuit = PND_videoquit;
106 device->GetDisplayModes = PND_getdisplaymodes;
107 device->SetDisplayMode = PND_setdisplaymode;
108 device->CreateWindow = PND_createwindow;
109 device->CreateWindowFrom = PND_createwindowfrom;
110 device->SetWindowTitle = PND_setwindowtitle;
111 device->SetWindowIcon = PND_setwindowicon;
112 device->SetWindowPosition = PND_setwindowposition;
113 device->SetWindowSize = PND_setwindowsize;
114 device->ShowWindow = PND_showwindow;
115 device->HideWindow = PND_hidewindow;
116 device->RaiseWindow = PND_raisewindow;
117 device->MaximizeWindow = PND_maximizewindow;
118 device->MinimizeWindow = PND_minimizewindow;
119 device->RestoreWindow = PND_restorewindow;
120 device->SetWindowGrab = PND_setwindowgrab;
121 device->DestroyWindow = PND_destroywindow;
122 device->GetWindowWMInfo = PND_getwindowwminfo;
123 device->GL_LoadLibrary = PND_gl_loadlibrary;
124 device->GL_GetProcAddress = PND_gl_getprocaddres;
125 device->GL_UnloadLibrary = PND_gl_unloadlibrary;
126 device->GL_CreateContext = PND_gl_createcontext;
127 device->GL_MakeCurrent = PND_gl_makecurrent;
128 device->GL_SetSwapInterval = PND_gl_setswapinterval;
129 device->GL_GetSwapInterval = PND_gl_getswapinterval;
130 device->GL_SwapWindow = PND_gl_swapwindow;
131 device->GL_DeleteContext = PND_gl_deletecontext;
132 device->PumpEvents = PND_PumpEvents;
134 /* !!! FIXME: implement SetWindowBordered */
139 VideoBootStrap PND_bootstrap = {
142 "SDL Wiz Video Driver",
145 "SDL Pandora Video Driver",
151 /*****************************************************************************/
152 /* SDL Video and Display initialization/handling functions */
153 /*****************************************************************************/
157 SDL_VideoDisplay display;
158 SDL_DisplayMode current_mode;
160 SDL_zero(current_mode);
162 current_mode.w = 320;
163 current_mode.h = 240;
165 current_mode.w = 800;
166 current_mode.h = 480;
168 current_mode.refresh_rate = 60;
169 current_mode.format = SDL_PIXELFORMAT_RGB565;
170 current_mode.driverdata = NULL;
173 display.desktop_mode = current_mode;
174 display.current_mode = current_mode;
175 display.driverdata = NULL;
177 SDL_AddVideoDisplay(&display);
189 PND_getdisplaymodes(_THIS, SDL_VideoDisplay * display)
195 PND_setdisplaymode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
201 PND_createwindow(_THIS, SDL_Window * window)
203 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
205 SDL_WindowData *wdata;
207 uint32_t winargc = 0;
211 /* Allocate window internal data */
212 wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
214 return SDL_OutOfMemory();
217 /* Setup driver data for this window */
218 window->driverdata = wdata;
220 /* Check if window must support OpenGL ES rendering */
221 if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) {
223 EGLBoolean initstatus;
225 /* Mark this window as OpenGL ES compatible */
226 wdata->uses_gles = SDL_TRUE;
228 /* Create connection to OpenGL ES */
229 if (phdata->egl_display == EGL_NO_DISPLAY) {
230 phdata->egl_display = eglGetDisplay((NativeDisplayType) 0);
231 if (phdata->egl_display == EGL_NO_DISPLAY) {
232 return SDL_SetError("PND: Can't get connection to OpenGL ES");
235 initstatus = eglInitialize(phdata->egl_display, NULL, NULL);
236 if (initstatus != EGL_TRUE) {
237 return SDL_SetError("PND: Can't init OpenGL ES library");
241 phdata->egl_refcount++;
244 /* Window has been successfully created */
249 PND_createwindowfrom(_THIS, SDL_Window * window, const void *data)
255 PND_setwindowtitle(_THIS, SDL_Window * window)
259 PND_setwindowicon(_THIS, SDL_Window * window, SDL_Surface * icon)
263 PND_setwindowposition(_THIS, SDL_Window * window)
267 PND_setwindowsize(_THIS, SDL_Window * window)
271 PND_showwindow(_THIS, SDL_Window * window)
275 PND_hidewindow(_THIS, SDL_Window * window)
279 PND_raisewindow(_THIS, SDL_Window * window)
283 PND_maximizewindow(_THIS, SDL_Window * window)
287 PND_minimizewindow(_THIS, SDL_Window * window)
291 PND_restorewindow(_THIS, SDL_Window * window)
295 PND_setwindowgrab(_THIS, SDL_Window * window)
299 PND_destroywindow(_THIS, SDL_Window * window)
301 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
302 eglTerminate(phdata->egl_display);
305 /*****************************************************************************/
306 /* SDL Window Manager function */
307 /*****************************************************************************/
309 PND_getwindowwminfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info)
311 if (info->version.major <= SDL_MAJOR_VERSION) {
314 SDL_SetError("application not compiled with SDL %d.%d\n",
315 SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
319 /* Failed to get window manager information */
323 /*****************************************************************************/
324 /* SDL OpenGL/OpenGL ES functions */
325 /*****************************************************************************/
327 PND_gl_loadlibrary(_THIS, const char *path)
329 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
331 /* Check if OpenGL ES library is specified for GF driver */
333 path = SDL_getenv("SDL_OPENGL_LIBRARY");
335 path = SDL_getenv("SDL_OPENGLES_LIBRARY");
339 /* Check if default library loading requested */
341 /* Already linked with GF library which provides egl* subset of */
342 /* functions, use Common profile of OpenGL ES library by default */
344 path = "/lib/libopengles_lite.so";
346 path = "/usr/lib/libGLES_CM.so";
350 /* Load dynamic library */
351 _this->gl_config.dll_handle = SDL_LoadObject(path);
352 if (!_this->gl_config.dll_handle) {
353 /* Failed to load new GL ES library */
354 return SDL_SetError("PND: Failed to locate OpenGL ES library");
357 /* Store OpenGL ES library path and name */
358 SDL_strlcpy(_this->gl_config.driver_path, path,
359 SDL_arraysize(_this->gl_config.driver_path));
361 /* New OpenGL ES library is loaded */
366 PND_gl_getprocaddres(_THIS, const char *proc)
368 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
369 void *function_address;
371 /* Try to get function address through the egl interface */
372 function_address = eglGetProcAddress(proc);
373 if (function_address != NULL) {
374 return function_address;
377 /* Then try to get function in the OpenGL ES library */
378 if (_this->gl_config.dll_handle) {
380 SDL_LoadFunction(_this->gl_config.dll_handle, proc);
381 if (function_address != NULL) {
382 return function_address;
386 /* Failed to get GL ES function address pointer */
387 SDL_SetError("PND: Cannot locate OpenGL ES function name");
392 PND_gl_unloadlibrary(_THIS)
394 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
396 if (phdata->egl_initialized == SDL_TRUE) {
397 /* Unload OpenGL ES library */
398 if (_this->gl_config.dll_handle) {
399 SDL_UnloadObject(_this->gl_config.dll_handle);
400 _this->gl_config.dll_handle = NULL;
403 SDL_SetError("PND: GF initialization failed, no OpenGL ES support");
408 PND_gl_createcontext(_THIS, SDL_Window * window)
410 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
411 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
412 SDL_DisplayData *didata =
413 (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
421 /* Check if EGL was initialized */
422 if (phdata->egl_initialized != SDL_TRUE) {
423 SDL_SetError("PND: EGL initialization failed, no OpenGL ES support");
427 /* Prepare attributes list to pass them to OpenGL ES */
429 wdata->gles_attributes[attr_pos++] = EGL_SURFACE_TYPE;
430 wdata->gles_attributes[attr_pos++] = EGL_WINDOW_BIT;
431 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE;
432 wdata->gles_attributes[attr_pos++] = _this->gl_config.red_size;
433 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE;
434 wdata->gles_attributes[attr_pos++] = _this->gl_config.green_size;
435 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE;
436 wdata->gles_attributes[attr_pos++] = _this->gl_config.blue_size;
437 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE;
439 /* Setup alpha size in bits */
440 if (_this->gl_config.alpha_size) {
441 wdata->gles_attributes[attr_pos++] = _this->gl_config.alpha_size;
443 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
446 /* Setup color buffer size */
447 if (_this->gl_config.buffer_size) {
448 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
449 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size;
451 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
452 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
455 /* Setup depth buffer bits */
456 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
457 wdata->gles_attributes[attr_pos++] = _this->gl_config.depth_size;
459 /* Setup stencil bits */
460 if (_this->gl_config.stencil_size) {
461 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
462 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size;
464 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
465 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
468 /* Set number of samples in multisampling */
469 if (_this->gl_config.multisamplesamples) {
470 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES;
471 wdata->gles_attributes[attr_pos++] =
472 _this->gl_config.multisamplesamples;
475 /* Multisample buffers, OpenGL ES 1.0 spec defines 0 or 1 buffer */
476 if (_this->gl_config.multisamplebuffers) {
477 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS;
478 wdata->gles_attributes[attr_pos++] =
479 _this->gl_config.multisamplebuffers;
482 /* Finish attributes list */
483 wdata->gles_attributes[attr_pos] = EGL_NONE;
485 /* Request first suitable framebuffer configuration */
486 status = eglChooseConfig(phdata->egl_display, wdata->gles_attributes,
487 wdata->gles_configs, 1, &configs);
488 if (status != EGL_TRUE) {
489 SDL_SetError("PND: Can't find closest configuration for OpenGL ES");
493 /* Check if nothing has been found, try "don't care" settings */
497 GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE };
499 for (it = 0; it < 4; it++) {
500 for (jt = 16; jt >= 0; jt--) {
501 /* Don't care about color buffer bits, use what exist */
502 /* Replace previous set data with EGL_DONT_CARE */
504 wdata->gles_attributes[attr_pos++] = EGL_SURFACE_TYPE;
505 wdata->gles_attributes[attr_pos++] = EGL_WINDOW_BIT;
506 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE;
507 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
508 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE;
509 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
510 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE;
511 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
512 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE;
513 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
514 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
515 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
517 /* Try to find requested or smallest depth */
518 if (_this->gl_config.depth_size) {
519 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
520 wdata->gles_attributes[attr_pos++] = depthbits[it];
522 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
523 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
526 if (_this->gl_config.stencil_size) {
527 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
528 wdata->gles_attributes[attr_pos++] = jt;
530 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
531 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
534 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES;
535 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
536 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS;
537 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
538 wdata->gles_attributes[attr_pos] = EGL_NONE;
540 /* Request first suitable framebuffer configuration */
542 eglChooseConfig(phdata->egl_display,
543 wdata->gles_attributes,
544 wdata->gles_configs, 1, &configs);
546 if (status != EGL_TRUE) {
548 ("PND: Can't find closest configuration for OpenGL ES");
560 /* No available configs */
562 SDL_SetError("PND: Can't find any configuration for OpenGL ES");
567 /* Initialize config index */
568 wdata->gles_config = 0;
570 /* Now check each configuration to find out the best */
571 for (cit = 0; cit < configs; cit++) {
572 uint32_t stencil_found;
573 uint32_t depth_found;
578 if (_this->gl_config.stencil_size) {
580 eglGetConfigAttrib(phdata->egl_display,
581 wdata->gles_configs[cit], EGL_STENCIL_SIZE,
583 if (status == EGL_TRUE) {
584 if (attr_value != 0) {
592 if (_this->gl_config.depth_size) {
594 eglGetConfigAttrib(phdata->egl_display,
595 wdata->gles_configs[cit], EGL_DEPTH_SIZE,
597 if (status == EGL_TRUE) {
598 if (attr_value != 0) {
606 /* Exit from loop if found appropriate configuration */
607 if ((depth_found != 0) && (stencil_found != 0)) {
612 /* If best could not be found, use first */
613 if (cit == configs) {
616 wdata->gles_config = cit;
618 /* Create OpenGL ES context */
619 wdata->gles_context =
620 eglCreateContext(phdata->egl_display,
621 wdata->gles_configs[wdata->gles_config], NULL, NULL);
622 if (wdata->gles_context == EGL_NO_CONTEXT) {
623 SDL_SetError("PND: OpenGL ES context creation has been failed");
629 hNativeWnd = (NativeWindowType)malloc(16*1024);
632 printf( "Error : Wiz framebuffer allocatation failed\n" );
634 printf( "SDL13: Wiz framebuffer allocated: %X\n", hNativeWnd );
637 printf( "SDL13: Wiz framebuffer already allocated: %X\n", hNativeWnd );
640 wdata->gles_surface =
641 eglCreateWindowSurface(phdata->egl_display,
642 wdata->gles_configs[wdata->gles_config],
645 wdata->gles_surface =
646 eglCreateWindowSurface(phdata->egl_display,
647 wdata->gles_configs[wdata->gles_config],
648 (NativeWindowType) 0, NULL);
652 if (wdata->gles_surface == 0) {
653 SDL_SetError("Error : eglCreateWindowSurface failed;\n");
657 /* Make just created context current */
659 eglMakeCurrent(phdata->egl_display, wdata->gles_surface,
660 wdata->gles_surface, wdata->gles_context);
661 if (status != EGL_TRUE) {
662 /* Destroy OpenGL ES surface */
663 eglDestroySurface(phdata->egl_display, wdata->gles_surface);
664 eglDestroyContext(phdata->egl_display, wdata->gles_context);
665 wdata->gles_context = EGL_NO_CONTEXT;
666 SDL_SetError("PND: Can't set OpenGL ES context on creation");
670 _this->gl_config.accelerated = 1;
672 /* Always clear stereo enable, since OpenGL ES do not supports stereo */
673 _this->gl_config.stereo = 0;
675 /* Get back samples and samplebuffers configurations. Rest framebuffer */
676 /* parameters could be obtained through the OpenGL ES API */
678 eglGetConfigAttrib(phdata->egl_display,
679 wdata->gles_configs[wdata->gles_config],
680 EGL_SAMPLES, &attr_value);
681 if (status == EGL_TRUE) {
682 _this->gl_config.multisamplesamples = attr_value;
685 eglGetConfigAttrib(phdata->egl_display,
686 wdata->gles_configs[wdata->gles_config],
687 EGL_SAMPLE_BUFFERS, &attr_value);
688 if (status == EGL_TRUE) {
689 _this->gl_config.multisamplebuffers = attr_value;
692 /* Get back stencil and depth buffer sizes */
694 eglGetConfigAttrib(phdata->egl_display,
695 wdata->gles_configs[wdata->gles_config],
696 EGL_DEPTH_SIZE, &attr_value);
697 if (status == EGL_TRUE) {
698 _this->gl_config.depth_size = attr_value;
701 eglGetConfigAttrib(phdata->egl_display,
702 wdata->gles_configs[wdata->gles_config],
703 EGL_STENCIL_SIZE, &attr_value);
704 if (status == EGL_TRUE) {
705 _this->gl_config.stencil_size = attr_value;
708 /* Under PND OpenGL ES output can't be double buffered */
709 _this->gl_config.double_buffer = 0;
711 /* GL ES context was successfully created */
712 return wdata->gles_context;
716 PND_gl_makecurrent(_THIS, SDL_Window * window, SDL_GLContext context)
718 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
719 SDL_WindowData *wdata;
722 if (phdata->egl_initialized != SDL_TRUE) {
723 return SDL_SetError("PND: GF initialization failed, no OpenGL ES support");
726 if ((window == NULL) && (context == NULL)) {
728 eglMakeCurrent(phdata->egl_display, EGL_NO_SURFACE,
729 EGL_NO_SURFACE, EGL_NO_CONTEXT);
730 if (status != EGL_TRUE) {
731 /* Failed to set current GL ES context */
732 return SDL_SetError("PND: Can't set OpenGL ES context");
735 wdata = (SDL_WindowData *) window->driverdata;
736 if (wdata->gles_surface == EGL_NO_SURFACE) {
738 ("PND: OpenGL ES surface is not initialized for this window");
740 if (wdata->gles_context == EGL_NO_CONTEXT) {
742 ("PND: OpenGL ES context is not initialized for this window");
744 if (wdata->gles_context != context) {
746 ("PND: OpenGL ES context is not belong to this window");
749 eglMakeCurrent(phdata->egl_display, wdata->gles_surface,
750 wdata->gles_surface, wdata->gles_context);
751 if (status != EGL_TRUE) {
752 /* Failed to set current GL ES context */
753 return SDL_SetError("PND: Can't set OpenGL ES context");
760 PND_gl_setswapinterval(_THIS, int interval)
762 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
765 if (phdata->egl_initialized != SDL_TRUE) {
766 return SDL_SetError("PND: EGL initialization failed, no OpenGL ES support");
769 /* Check if OpenGL ES connection has been initialized */
770 if (phdata->egl_display != EGL_NO_DISPLAY) {
771 /* Set swap OpenGL ES interval */
772 status = eglSwapInterval(phdata->egl_display, interval);
773 if (status == EGL_TRUE) {
774 /* Return success to upper level */
775 phdata->swapinterval = interval;
780 /* Failed to set swap interval */
781 return SDL_SetError("PND: Cannot set swap interval");
785 PND_gl_getswapinterval(_THIS)
787 return ((SDL_VideoData *) _this->driverdata)->swapinterval;
791 PND_gl_swapwindow(_THIS, SDL_Window * window)
793 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
794 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
795 SDL_DisplayData *didata =
796 (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
799 if (phdata->egl_initialized != SDL_TRUE) {
800 SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
804 /* Many applications do not uses glFinish(), so we call it for them */
807 /* Wait until OpenGL ES rendering is completed */
810 eglSwapBuffers(phdata->egl_display, wdata->gles_surface);
814 PND_gl_deletecontext(_THIS, SDL_GLContext context)
816 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
819 if (phdata->egl_initialized != SDL_TRUE) {
820 SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
824 /* Check if OpenGL ES connection has been initialized */
825 if (phdata->egl_display != EGL_NO_DISPLAY) {
826 if (context != EGL_NO_CONTEXT) {
827 status = eglDestroyContext(phdata->egl_display, context);
828 if (status != EGL_TRUE) {
829 /* Error during OpenGL ES context destroying */
830 SDL_SetError("PND: OpenGL ES context destroy error");
837 if( hNativeWnd != 0 )
841 printf( "SDL13: Wiz framebuffer released\n" );
848 #endif /* SDL_VIDEO_DRIVER_PANDORA */
850 /* vi: set ts=4 sw=4 expandtab: */