zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SDL_pandora.c
Go to the documentation of this file.
1 /*
2  Simple DirectMedia Layer
3  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
4 
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.
8 
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:
12 
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.
20 */
21 #include "SDL_config.h"
22 
23 #if SDL_VIDEO_DRIVER_PANDORA
24 
25 /* SDL internals */
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"
33 
34 /* PND declarations */
35 #include "SDL_pandora.h"
36 #include "SDL_pandora_events.h"
37 
38 /* WIZ declarations */
39 #include "GLES/gl.h"
40 #ifdef WIZ_GLES_LITE
41 static NativeWindowType hNativeWnd = 0; /* A handle to the window we will create. */
42 #endif
43 
44 static SDL_bool PND_initialized = SDL_FALSE;
45 
46 static int
47 PND_available(void)
48 {
49  return 1;
50 }
51 
52 static void
53 PND_destroy(SDL_VideoDevice * device)
54 {
55  SDL_VideoData *phdata = (SDL_VideoData *) device->driverdata;
56 
57  if (device->driverdata != NULL) {
58  device->driverdata = NULL;
59  }
60 }
61 
62 static SDL_VideoDevice *
63 PND_create()
64 {
65  SDL_VideoDevice *device;
66  SDL_VideoData *phdata;
67  int status;
68 
69  /* Check if pandora could be initialized */
70  status = PND_available();
71  if (status == 0) {
72  /* PND could not be used */
73  return NULL;
74  }
75 
76  /* Initialize SDL_VideoDevice structure */
77  device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
78  if (device == NULL) {
80  return NULL;
81  }
82 
83  /* Initialize internal Pandora specific data */
84  phdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
85  if (phdata == NULL) {
87  SDL_free(device);
88  return NULL;
89  }
90 
91  device->driverdata = phdata;
92 
93  phdata->egl_initialized = SDL_TRUE;
94 
95 
96  /* Setup amount of available displays and current display */
97  device->num_displays = 0;
98  device->current_display = 0;
99 
100  /* Set device free function */
101  device->free = PND_destroy;
102 
103  /* Setup all functions which we can handle */
104  device->VideoInit = PND_videoinit;
105  device->VideoQuit = PND_videoquit;
108  device->CreateWindow = PND_createwindow;
114  device->ShowWindow = PND_showwindow;
115  device->HideWindow = PND_hidewindow;
116  device->RaiseWindow = PND_raisewindow;
132  device->PumpEvents = PND_PumpEvents;
133 
134  /* !!! FIXME: implement SetWindowBordered */
135 
136  return device;
137 }
138 
139 VideoBootStrap PND_bootstrap = {
140 #ifdef WIZ_GLES_LITE
141  "wiz",
142  "SDL Wiz Video Driver",
143 #else
144  "pandora",
145  "SDL Pandora Video Driver",
146 #endif
147  PND_available,
148  PND_create
149 };
150 
151 /*****************************************************************************/
152 /* SDL Video and Display initialization/handling functions */
153 /*****************************************************************************/
154 int
156 {
158  SDL_DisplayMode current_mode;
159 
160  SDL_zero(current_mode);
161 #ifdef WIZ_GLES_LITE
162  current_mode.w = 320;
163  current_mode.h = 240;
164 #else
165  current_mode.w = 800;
166  current_mode.h = 480;
167 #endif
168  current_mode.refresh_rate = 60;
169  current_mode.format = SDL_PIXELFORMAT_RGB565;
170  current_mode.driverdata = NULL;
171 
172  SDL_zero(display);
173  display.desktop_mode = current_mode;
174  display.current_mode = current_mode;
175  display.driverdata = NULL;
176 
177  SDL_AddVideoDisplay(&display);
178 
179  return 1;
180 }
181 
182 void
184 {
185 
186 }
187 
188 void
190 {
191 
192 }
193 
194 int
196 {
197  return 0;
198 }
199 
200 int
202 {
204 
205  SDL_WindowData *wdata;
206 
207  uint32_t winargc = 0;
208  int32_t status;
209 
210 
211  /* Allocate window internal data */
212  wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
213  if (wdata == NULL) {
214  return SDL_OutOfMemory();
215  }
216 
217  /* Setup driver data for this window */
218  window->driverdata = wdata;
219 
220  /* Check if window must support OpenGL ES rendering */
221  if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) {
222 
223  EGLBoolean initstatus;
224 
225  /* Mark this window as OpenGL ES compatible */
226  wdata->uses_gles = SDL_TRUE;
227 
228  /* Create connection to OpenGL ES */
229  if (phdata->egl_display == EGL_NO_DISPLAY) {
231  if (phdata->egl_display == EGL_NO_DISPLAY) {
232  return SDL_SetError("PND: Can't get connection to OpenGL ES");
233  }
234 
235  initstatus = eglInitialize(phdata->egl_display, NULL, NULL);
236  if (initstatus != EGL_TRUE) {
237  return SDL_SetError("PND: Can't init OpenGL ES library");
238  }
239  }
240 
241  phdata->egl_refcount++;
242  }
243 
244  /* Window has been successfully created */
245  return 0;
246 }
247 
248 int
249 PND_createwindowfrom(_THIS, SDL_Window * window, const void *data)
250 {
251  return -1;
252 }
253 
254 void
256 {
257 }
258 void
260 {
261 }
262 void
264 {
265 }
266 void
268 {
269 }
270 void
272 {
273 }
274 void
276 {
277 }
278 void
280 {
281 }
282 void
284 {
285 }
286 void
288 {
289 }
290 void
292 {
293 }
294 void
296 {
297 }
298 void
300 {
302  eglTerminate(phdata->egl_display);
303 }
304 
305 /*****************************************************************************/
306 /* SDL Window Manager function */
307 /*****************************************************************************/
308 SDL_bool
309 PND_getwindowwminfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info)
310 {
311  if (info->version.major <= SDL_MAJOR_VERSION) {
312  return SDL_TRUE;
313  } else {
314  SDL_SetError("application not compiled with SDL %d.%d\n",
316  return SDL_FALSE;
317  }
318 
319  /* Failed to get window manager information */
320  return SDL_FALSE;
321 }
322 
323 /*****************************************************************************/
324 /* SDL OpenGL/OpenGL ES functions */
325 /*****************************************************************************/
326 int
327 PND_gl_loadlibrary(_THIS, const char *path)
328 {
330 
331  /* Check if OpenGL ES library is specified for GF driver */
332  if (path == NULL) {
333  path = SDL_getenv("SDL_OPENGL_LIBRARY");
334  if (path == NULL) {
335  path = SDL_getenv("SDL_OPENGLES_LIBRARY");
336  }
337  }
338 
339  /* Check if default library loading requested */
340  if (path == NULL) {
341  /* Already linked with GF library which provides egl* subset of */
342  /* functions, use Common profile of OpenGL ES library by default */
343 #ifdef WIZ_GLES_LITE
344  path = "/lib/libopengles_lite.so";
345 #else
346  path = "/usr/lib/libGLES_CM.so";
347 #endif
348  }
349 
350  /* Load dynamic library */
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");
355  }
356 
357  /* Store OpenGL ES library path and name */
360 
361  /* New OpenGL ES library is loaded */
362  return 0;
363 }
364 
365 void *
366 PND_gl_getprocaddres(_THIS, const char *proc)
367 {
369  void *function_address;
370 
371  /* Try to get function address through the egl interface */
372  function_address = eglGetProcAddress(proc);
373  if (function_address != NULL) {
374  return function_address;
375  }
376 
377  /* Then try to get function in the OpenGL ES library */
378  if (_this->gl_config.dll_handle) {
379  function_address =
381  if (function_address != NULL) {
382  return function_address;
383  }
384  }
385 
386  /* Failed to get GL ES function address pointer */
387  SDL_SetError("PND: Cannot locate OpenGL ES function name");
388  return NULL;
389 }
390 
391 void
393 {
395 
396  if (phdata->egl_initialized == SDL_TRUE) {
397  /* Unload OpenGL ES library */
398  if (_this->gl_config.dll_handle) {
401  }
402  } else {
403  SDL_SetError("PND: GF initialization failed, no OpenGL ES support");
404  }
405 }
406 
409 {
411  SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
412  SDL_DisplayData *didata =
414  EGLBoolean status;
415  int32_t gfstatus;
416  EGLint configs;
417  uint32_t attr_pos;
418  EGLint attr_value;
419  EGLint cit;
420 
421  /* Check if EGL was initialized */
422  if (phdata->egl_initialized != SDL_TRUE) {
423  SDL_SetError("PND: EGL initialization failed, no OpenGL ES support");
424  return NULL;
425  }
426 
427  /* Prepare attributes list to pass them to OpenGL ES */
428  attr_pos = 0;
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;
438 
439  /* Setup alpha size in bits */
440  if (_this->gl_config.alpha_size) {
441  wdata->gles_attributes[attr_pos++] = _this->gl_config.alpha_size;
442  } else {
443  wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
444  }
445 
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;
450  } else {
451  wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE;
452  wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
453  }
454 
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;
458 
459  /* Setup stencil bits */
461  wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
462  wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size;
463  } else {
464  wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
465  wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
466  }
467 
468  /* Set number of samples in multisampling */
470  wdata->gles_attributes[attr_pos++] = EGL_SAMPLES;
471  wdata->gles_attributes[attr_pos++] =
473  }
474 
475  /* Multisample buffers, OpenGL ES 1.0 spec defines 0 or 1 buffer */
477  wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS;
478  wdata->gles_attributes[attr_pos++] =
480  }
481 
482  /* Finish attributes list */
483  wdata->gles_attributes[attr_pos] = EGL_NONE;
484 
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");
490  return NULL;
491  }
492 
493  /* Check if nothing has been found, try "don't care" settings */
494  if (configs == 0) {
495  int32_t it;
496  int32_t jt;
497  GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE };
498 
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 */
503  attr_pos = 0;
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;
516 
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];
521  } else {
522  wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE;
523  wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
524  }
525 
527  wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
528  wdata->gles_attributes[attr_pos++] = jt;
529  } else {
530  wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE;
531  wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE;
532  }
533 
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;
539 
540  /* Request first suitable framebuffer configuration */
541  status =
543  wdata->gles_attributes,
544  wdata->gles_configs, 1, &configs);
545 
546  if (status != EGL_TRUE) {
548  ("PND: Can't find closest configuration for OpenGL ES");
549  return NULL;
550  }
551  if (configs != 0) {
552  break;
553  }
554  }
555  if (configs != 0) {
556  break;
557  }
558  }
559 
560  /* No available configs */
561  if (configs == 0) {
562  SDL_SetError("PND: Can't find any configuration for OpenGL ES");
563  return NULL;
564  }
565  }
566 
567  /* Initialize config index */
568  wdata->gles_config = 0;
569 
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;
574 
575  stencil_found = 0;
576  depth_found = 0;
577 
579  status =
581  wdata->gles_configs[cit], EGL_STENCIL_SIZE,
582  &attr_value);
583  if (status == EGL_TRUE) {
584  if (attr_value != 0) {
585  stencil_found = 1;
586  }
587  }
588  } else {
589  stencil_found = 1;
590  }
591 
592  if (_this->gl_config.depth_size) {
593  status =
595  wdata->gles_configs[cit], EGL_DEPTH_SIZE,
596  &attr_value);
597  if (status == EGL_TRUE) {
598  if (attr_value != 0) {
599  depth_found = 1;
600  }
601  }
602  } else {
603  depth_found = 1;
604  }
605 
606  /* Exit from loop if found appropriate configuration */
607  if ((depth_found != 0) && (stencil_found != 0)) {
608  break;
609  }
610  }
611 
612  /* If best could not be found, use first */
613  if (cit == configs) {
614  cit = 0;
615  }
616  wdata->gles_config = cit;
617 
618  /* Create OpenGL ES context */
619  wdata->gles_context =
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");
624  return NULL;
625  }
626 
627 #ifdef WIZ_GLES_LITE
628  if( !hNativeWnd ) {
629  hNativeWnd = (NativeWindowType)malloc(16*1024);
630 
631  if(!hNativeWnd)
632  printf( "Error : Wiz framebuffer allocatation failed\n" );
633  else
634  printf( "SDL13: Wiz framebuffer allocated: %X\n", hNativeWnd );
635  }
636  else {
637  printf( "SDL13: Wiz framebuffer already allocated: %X\n", hNativeWnd );
638  }
639 
640  wdata->gles_surface =
642  wdata->gles_configs[wdata->gles_config],
643  hNativeWnd, NULL );
644 #else
645  wdata->gles_surface =
647  wdata->gles_configs[wdata->gles_config],
648  (NativeWindowType) 0, NULL);
649 #endif
650 
651 
652  if (wdata->gles_surface == 0) {
653  SDL_SetError("Error : eglCreateWindowSurface failed;\n");
654  return NULL;
655  }
656 
657  /* Make just created context current */
658  status =
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");
667  return NULL;
668  }
669 
671 
672  /* Always clear stereo enable, since OpenGL ES do not supports stereo */
673  _this->gl_config.stereo = 0;
674 
675  /* Get back samples and samplebuffers configurations. Rest framebuffer */
676  /* parameters could be obtained through the OpenGL ES API */
677  status =
679  wdata->gles_configs[wdata->gles_config],
680  EGL_SAMPLES, &attr_value);
681  if (status == EGL_TRUE) {
682  _this->gl_config.multisamplesamples = attr_value;
683  }
684  status =
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;
690  }
691 
692  /* Get back stencil and depth buffer sizes */
693  status =
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;
699  }
700  status =
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;
706  }
707 
708  /* Under PND OpenGL ES output can't be double buffered */
710 
711  /* GL ES context was successfully created */
712  return wdata->gles_context;
713 }
714 
715 int
717 {
719  SDL_WindowData *wdata;
720  EGLBoolean status;
721 
722  if (phdata->egl_initialized != SDL_TRUE) {
723  return SDL_SetError("PND: GF initialization failed, no OpenGL ES support");
724  }
725 
726  if ((window == NULL) && (context == NULL)) {
727  status =
730  if (status != EGL_TRUE) {
731  /* Failed to set current GL ES context */
732  return SDL_SetError("PND: Can't set OpenGL ES context");
733  }
734  } else {
735  wdata = (SDL_WindowData *) window->driverdata;
736  if (wdata->gles_surface == EGL_NO_SURFACE) {
737  return SDL_SetError
738  ("PND: OpenGL ES surface is not initialized for this window");
739  }
740  if (wdata->gles_context == EGL_NO_CONTEXT) {
741  return SDL_SetError
742  ("PND: OpenGL ES context is not initialized for this window");
743  }
744  if (wdata->gles_context != context) {
745  return SDL_SetError
746  ("PND: OpenGL ES context is not belong to this window");
747  }
748  status =
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");
754  }
755  }
756  return 0;
757 }
758 
759 int
760 PND_gl_setswapinterval(_THIS, int interval)
761 {
763  EGLBoolean status;
764 
765  if (phdata->egl_initialized != SDL_TRUE) {
766  return SDL_SetError("PND: EGL initialization failed, no OpenGL ES support");
767  }
768 
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;
776  return 0;
777  }
778  }
779 
780  /* Failed to set swap interval */
781  return SDL_SetError("PND: Cannot set swap interval");
782 }
783 
784 int
786 {
787  return ((SDL_VideoData *) _this->driverdata)->swapinterval;
788 }
789 
790 void
792 {
794  SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
795  SDL_DisplayData *didata =
797 
798 
799  if (phdata->egl_initialized != SDL_TRUE) {
800  SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
801  return;
802  }
803 
804  /* Many applications do not uses glFinish(), so we call it for them */
805  glFinish();
806 
807  /* Wait until OpenGL ES rendering is completed */
808  eglWaitGL();
809 
810  eglSwapBuffers(phdata->egl_display, wdata->gles_surface);
811 }
812 
813 void
815 {
817  EGLBoolean status;
818 
819  if (phdata->egl_initialized != SDL_TRUE) {
820  SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
821  return;
822  }
823 
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");
831  return;
832  }
833  }
834  }
835 
836 #ifdef WIZ_GLES_LITE
837  if( hNativeWnd != 0 )
838  {
839  free(hNativeWnd);
840  hNativeWnd = 0;
841  printf( "SDL13: Wiz framebuffer released\n" );
842  }
843 #endif
844 
845  return;
846 }
847 
848 #endif /* SDL_VIDEO_DRIVER_PANDORA */
849 
850 /* vi: set ts=4 sw=4 expandtab: */
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
Definition: SDL_sysvideo.h:169
void PND_gl_swapwindow(_THIS, SDL_Window *window)
void(* MinimizeWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:195
#define SDL_MINOR_VERSION
Definition: SDL_version.h:61
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
Definition: SDL_sysvideo.h:215
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy)
void(* RaiseWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:193
#define EGL_RED_SIZE
Definition: egl.h:100
int PND_gl_setswapinterval(_THIS, int interval)
DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size)
#define EGL_WINDOW_BIT
Definition: egl.h:149
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
void PND_raisewindow(_THIS, SDL_Window *window)
#define NULL
Definition: ftobjs.h:61
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
#define EGL_NO_SURFACE
Definition: egl.h:71
void(* HideWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:192
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
Definition: SDL_sysvideo.h:226
#define SDL_MAJOR_VERSION
Definition: SDL_version.h:60
#define EGL_SURFACE_TYPE
Definition: egl.h:114
SDL_bool
Definition: SDL_stdinc.h:116
void PND_restorewindow(_THIS, SDL_Window *window)
void PND_gl_deletecontext(_THIS, SDL_GLContext context)
void PND_destroywindow(_THIS, SDL_Window *window)
SDL_EventEntry * free
Definition: SDL_events.c:80
int PND_createwindowfrom(_THIS, SDL_Window *window, const void *data)
#define EGL_SAMPLE_BUFFERS
Definition: egl.h:113
A collection of pixels used in software blitting.
Definition: SDL_surface.h:69
void PND_gl_unloadlibrary(_THIS)
DECLSPEC void SDLCALL SDL_free(void *mem)
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
Definition: SDL_sysvideo.h:201
#define EGL_ALPHA_SIZE
Definition: egl.h:97
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_version version
Definition: SDL_syswm.h:161
#define EGL_NONE
Definition: egl.h:119
Uint8 major
Definition: SDL_version.h:53
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
Definition: SDL_sysvideo.h:186
void * SDL_GLContext
An opaque handle to an OpenGL context.
Definition: SDL_video.h:161
khronos_int32_t EGLint
Definition: eglplatform.h:127
long int32_t
Definition: types.h:9
int PND_createwindow(_THIS, SDL_Window *window)
uint32_t egl_refcount
Definition: SDL_pandora.h:34
EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname)
char * display
Definition: visualinfo.c:85
int(* CreateWindowFrom)(_THIS, SDL_Window *window, const void *data)
Definition: SDL_sysvideo.h:184
if(!yyg->yy_init)
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
int PND_gl_getswapinterval(_THIS)
GLsizei const GLchar *const * path
Definition: glew.h:5828
void PND_getdisplaymodes(_THIS, SDL_VideoDisplay *display)
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
Definition: SDL_video.c:568
void(* free)(_THIS)
Definition: SDL_sysvideo.h:327
#define EGL_TRUE
Definition: egl.h:65
#define EGL_NO_DISPLAY
Definition: egl.h:70
#define EGL_BLUE_SIZE
Definition: egl.h:98
unsigned int EGLBoolean
Definition: egl.h:44
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
int(* GL_SetSwapInterval)(_THIS, int interval)
Definition: SDL_sysvideo.h:228
static SDL_VideoDevice * _this
Definition: SDL_video.c:92
EGLNativeWindowType NativeWindowType
Definition: eglplatform.h:117
void PND_maximizewindow(_THIS, SDL_Window *window)
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx)
void PND_setwindowsize(_THIS, SDL_Window *window)
int(* CreateWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:183
void(* GL_UnloadLibrary)(_THIS)
Definition: SDL_sysvideo.h:224
#define glFinish
Definition: gl_mangle.h:482
#define EGL_BUFFER_SIZE
Definition: egl.h:96
#define EGL_NO_CONTEXT
Definition: egl.h:69
void PND_setwindowicon(_THIS, SDL_Window *window, SDL_Surface *icon)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl2ext.h:848
int(* VideoInit)(_THIS)
Definition: SDL_sysvideo.h:148
#define _THIS
void PND_videoquit(_THIS)
void * driverdata
Definition: SDL_video.h:59
DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile)
DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen)
Definition: SDL_string.c:448
char driver_path[256]
Definition: SDL_sysvideo.h:298
void PND_hidewindow(_THIS, SDL_Window *window)
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:120
DECLSPEC void SDLCALL SDL_UnloadObject(void *handle)
DECLSPEC int SDLCALL SDL_SetError(const char *fmt,...)
Definition: SDL_error.c:53
#define EGL_DONT_CARE
Definition: egl.h:74
void(* SetWindowPosition)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:187
void(* PumpEvents)(_THIS)
Definition: SDL_sysvideo.h:237
#define EGL_DEPTH_SIZE
Definition: egl.h:101
int PND_gl_loadlibrary(_THIS, const char *path)
#define EGL_SAMPLES
Definition: egl.h:112
int(* GL_GetSwapInterval)(_THIS)
Definition: SDL_sysvideo.h:229
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:119
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:83
unsigned int uint32_t
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
Definition: SDL_sysvideo.h:231
#define malloc
Definition: SDL_malloc.c:635
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id)
void(* MaximizeWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:194
int GLint
Definition: gl2.h:28
void(* DestroyWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:202
int PND_setdisplaymode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
void PND_PumpEvents(_THIS)
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
void(* SetWindowSize)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:188
void PND_setwindowgrab(_THIS, SDL_Window *window)
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
Definition: SDL_sysvideo.h:177
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:996
EGLDisplay egl_display
Definition: SDL_pandora.h:33
int PND_gl_makecurrent(_THIS, SDL_Window *window, SDL_GLContext context)
void PND_setwindowtitle(_THIS, SDL_Window *window)
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:225
EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void)
int(* GL_LoadLibrary)(_THIS, const char *path)
Definition: SDL_sysvideo.h:222
#define EGL_GREEN_SIZE
Definition: egl.h:99
SDL_bool egl_initialized
Definition: SDL_pandora.h:32
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval)
void(* GL_SwapWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:230
void(* VideoQuit)(_THIS)
Definition: SDL_sysvideo.h:154
void(* ShowWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:191
#define EGL_STENCIL_SIZE
Definition: egl.h:102
EGLNativeDisplayType NativeDisplayType
Definition: eglplatform.h:115
SDL_GLContext PND_gl_createcontext(_THIS, SDL_Window *window)
DECLSPEC char *SDLCALL SDL_getenv(const char *name)
Definition: SDL_getenv.c:179
#define SDL_zero(x)
Definition: SDL_stdinc.h:254
void * driverdata
Definition: SDL_sysvideo.h:99
void(* SetWindowTitle)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:185
SDL_bool PND_getwindowwminfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
Uint32 format
Definition: SDL_video.h:55
TParseContext * context
DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, const char *name)
void PND_showwindow(_THIS, SDL_Window *window)
Uint32 flags
Definition: SDL_sysvideo.h:81
EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
void * PND_gl_getprocaddres(_THIS, const char *proc)
struct SDL_VideoDevice::@87 gl_config
void *(* GL_GetProcAddress)(_THIS, const char *proc)
Definition: SDL_sysvideo.h:223
GLenum mode
Definition: glew.h:2394
void PND_minimizewindow(_THIS, SDL_Window *window)
void(* RestoreWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:196
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
uint32_t swapinterval
Definition: SDL_pandora.h:35
void PND_setwindowposition(_THIS, SDL_Window *window)
int PND_videoinit(_THIS)