annotate src/video/x11/SDL_x11opengles.h @ 3485:e77a69aae239

Mason Wheeler to sdl I updated SDL, and suddenly my SDL frames stopped working. They'd "initialize" full of gibberish, and I couldn't render anything to them. After a bit of digging, I found a problem: the renderer initialization routine in my SDL frame code wasn't getting called anymore. procedure TSdlFrame.Paint; begin if SDL_SelectRenderer(FWindowID) = -1 then CreateRenderer; SDL_RenderPresent; end; function TSdlFrame.CreateRenderer: boolean; const pf: tagPIXELFORMATDESCRIPTOR = (nSize: sizeof(pf); nVersion: 1; dwFlags: PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; iPixelType: PFD_TYPE_RGBA; cColorBits: 24; cAlphaBits: 8; iLayerType: PFD_MAIN_PLANE); RENDERERS: array[TRendererType] of AnsiString = ('software', 'gdi', 'opengl', 'd3d'); var pFormat: integer; begin if (SDL_SelectRenderer(FWindowID) = 0) then begin result := true; Exit; end; if FRendererType = rtOpenGL then begin pFormat := ChoosePixelFormat(canvas.Handle, @pf); if not SetPixelFormat(canvas.Handle, pFormat, @pf) then outputDebugString(PChar(SysErrorMessage(GetLastError))); if wglCreateContext(canvas.Handle) = 0 then outputDebugString(PChar(SysErrorMessage(GetLastError))); end; if (SDL_CreateRenderer(FWindowID, SDL_RendererIndex(RENDERERS[FRendererType]), [sdlrPresentFlip3, sdlrAccelerated]) = 0) then begin SDL_ShowWindow(FWindowID); assert(SDL_SetRenderDrawColor(0, 0, 0, 255) = 0); FFlags := SDL_GetWindowFlags(FWindowID); if assigned(FOnAvailable) then FOnAvailable(self); end else outputDebugString(pChar(format('SDL_CreateRenderer failed: %s', [sdl_GetError]))); result := SDL_SelectRenderer(FWindowID) = 0; end; This is a critical issue. The Paint method gets called when the control receives a WM_PAINT message from Windows. I can't create the renderer before then, or it will fail and cause trouble. And when I do create it, it needs to be created with certain parameters. So imagine my surprise when I started debugging into the DLL and found that SDL_SelectRenderer was trying to be "helpful" by creating the renderer for me if it didn't already exist! Now not only does my initialization code not get called, I end up with the wrong renderer and so things don't render as expected when I try to use the window.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 24 Nov 2009 04:48:12 +0000
parents c68d2ca5970f
children f7b03b6838cb
rev   line source
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
3 Copyright (C) 1997-2004 Sam Lantinga
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Library General Public
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2 of the License, or (at your option) any later version.
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Library General Public License for more details.
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Library General Public
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 Open Pandora SDL driver
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23 Copyright (C) 2009 David Carré
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 (cpasjuste@gmail.com)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25 */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27 #include <GLES/gl.h>
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28 #include <GLES/egl.h>
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 #include <dlfcn.h>
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 #if defined(__OpenBSD__) && !defined(__ELF__)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 #define dlsym(x,y) dlsym(x, "_" y)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 #endif
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34 #include "../SDL_sysvideo.h"
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36 typedef struct SDL_PrivateGLESData
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
38 int egl_active; /* to stop switching drivers while we have a valid context */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39 XVisualInfo *egl_visualinfo;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
40 EGLDisplay egl_display;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
41 EGLContext egl_context; /* Current GLES context */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
42 EGLSurface egl_surface;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
43 EGLConfig egl_config;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
44
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
45 EGLDisplay(*eglGetDisplay) (NativeDisplayType display);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
46 EGLBoolean(*eglInitialize) (EGLDisplay dpy, EGLint * major,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
47 EGLint * minor);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48 EGLBoolean(*eglTerminate) (EGLDisplay dpy);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50 void *(*eglGetProcAddress) (const GLubyte * procName);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52 EGLBoolean(*eglChooseConfig) (EGLDisplay dpy,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 const EGLint * attrib_list,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54 EGLConfig * configs,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 EGLint config_size, EGLint * num_config);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
56
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57 EGLContext(*eglCreateContext) (EGLDisplay dpy,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 EGLConfig config,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59 EGLContext share_list,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60 const EGLint * attrib_list);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
62 EGLBoolean(*eglDestroyContext) (EGLDisplay dpy, EGLContext ctx);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64 EGLSurface(*eglCreateWindowSurface) (EGLDisplay dpy,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 EGLConfig config,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66 NativeWindowType window,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
67 const EGLint * attrib_list);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68 EGLBoolean(*eglDestroySurface) (EGLDisplay dpy, EGLSurface surface);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
69
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70 EGLBoolean(*eglMakeCurrent) (EGLDisplay dpy, EGLSurface draw,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
71 EGLSurface read, EGLContext ctx);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
72
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
73 EGLBoolean(*eglSwapBuffers) (EGLDisplay dpy, EGLSurface draw);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
74
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
75 const char *(*eglQueryString) (EGLDisplay dpy, EGLint name);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
76
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
77 EGLBoolean(*eglGetConfigAttrib) (EGLDisplay dpy, EGLConfig config,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
78 EGLint attribute, EGLint * value);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
79
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
80 } SDL_PrivateGLESData;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
81
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
82 /* OpenGLES functions */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
83 extern SDL_GLContext X11_GLES_CreateContext(_THIS, SDL_Window * window);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84 extern XVisualInfo *X11_GLES_GetVisual(_THIS, Display * display, int screen);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
85 extern int X11_GLES_MakeCurrent(_THIS, SDL_Window * window,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86 SDL_GLContext context);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
87 extern int X11_GLES_GetAttribute(_THIS, SDL_GLattr attrib, int *value);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
88 extern int X11_GLES_LoadLibrary(_THIS, const char *path);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89 extern void *X11_GLES_GetProcAddress(_THIS, const char *proc);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
90 extern void X11_GLES_UnloadLibrary(_THIS);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
92 extern int X11_GLES_SetSwapInterval(_THIS, int interval);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93 extern int X11_GLES_GetSwapInterval(_THIS);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
94 extern void X11_GLES_SwapWindow(_THIS, SDL_Window * window);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95 extern void X11_GLES_DeleteContext(_THIS, SDL_GLContext context);