The MacOSX Carbon/Cocoa/X11 all in one library patch. Relevant emails:
To: SDL Developers <sdl@libsdl.org>
From: =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb@algonet.se>
Date: Mon, 30 May 2005 23:29:04 +0200
Subject: [SDL] Mac OS X Video Drivers [patch]
I've updated/added the Carbon and X11 video drivers
to the Mac OS X port of SDL 1.2 (the CVS version),
and made the Cocoa driver and runtime *optional*.
The default is still Cocoa, and the "Quartz" driver.
But you can now also use "toolbox" for Carbon, and
"x11" for running with Apple's (or other) X11 server:
export SDL_VIDEODRIVER=x11
export SDL_VIDEO_GL_DRIVER=/usr/X11R6/lib/libGL.dylib
It also checks if the frameworks are available, by a:
#include <Carbon/Carbon.h> or #import <Cocoa/Cocoa.h>
(this should make it configure on plain Darwin as well?)
Here are the new configure targets:
--enable-video-cocoa use Cocoa/Quartz video driver default=yes
--enable-video-carbon use Carbon/QuickDraw video driver default=yes
--enable-video-x11 use X11 video driver default=no
./configure --enable-video-cocoa --enable-video-carbon
--enable-video-x11 \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib
The Carbon version is just an updated version of the old
SDL driver for Mac OS 9, and could probably be improved...
(but it does work, including the Carbon version of SDLmain)
If you disable cocoa, you can run with -framework Carbon only,
and the C version of SDL_main.c. And if you disable carbon too,
you can still use the X11 version which doesn't require SDLmain.
I updated the DrawSprocket version, but did not include it.
(no blitters or VRAM GWorlds etc. available on OS X anyway)
Besides for Mac OS 9, I don't think there's any use for it ?
And note that any performance on Mac OS X equals OpenGL anyway...
You can get "fair" software SDL results on captured CG displays,
but for decent frame rates you need to be using GL for rendering.
Finally, here is the patch itself:
http://www.algonet.se/~afb/SDL-12CVS-macvideo.patch
--anders
PS. It says "video", but as usual it applies to mouse/keyboard too.
------
To: A list for developers using the SDL library <sdl@libsdl.org>
From: =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb@algonet.se>
Date: Sun, 4 Sep 2005 10:02:15 +0200
Subject: [SDL] Updated Mac patch
Updated the previous Mac patch to disable Carbon by default.
Also "fixed" the SDL.spec again, so that it builds on Darwin.
http://www.algonet.se/~afb/SDL-1.2.9-mac.patch
Also applied fine to SDL12 CVS, when I tried it.
2 SDL - Simple DirectMedia Layer
3 Copyright (C) 1997-2004 Sam Lantinga
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with this library; if not, write to the Free
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 /* Include file for SDL custom system window manager hooks */
33 #include "SDL_version.h"
35 #include "begin_code.h"
36 /* Set up for C function definitions, even when using C++ */
41 /* Your application has access to a special type of event 'SDL_SYSWMEVENT',
42 which contains window-manager specific information and arrives whenever
43 an unhandled window event occurs. This event is ignored by default, but
44 you can enable it with SDL_EventState()
46 #ifdef SDL_PROTOTYPES_ONLY
48 typedef struct SDL_SysWMinfo SDL_SysWMinfo;
51 #if defined(__APPLE__) && defined(__MACH__)
52 // conflicts with Quickdraw.h
53 #define Cursor X11Cursor
56 /* This is the structure for custom window manager events */
57 #if (defined(unix) || defined(__unix__) || defined(_AIX) || \
58 defined(__OpenBSD__) || defined(__NetBSD__) || \
59 (defined(__APPLE__) && defined(__MACH__))) && \
60 (!defined(DISABLE_X11) && !defined(__CYGWIN32__) && !defined(ENABLE_NANOX) && \
62 /* AIX is unix, of course, but the native compiler CSet doesn't define unix */
64 #include <X11/Xatom.h>
66 #if defined(__APPLE__) && defined(__MACH__)
67 // matches the re-define above
71 /* These are the various supported subsystems under UNIX */
76 /* The UNIX custom event structure */
79 SDL_SYSWM_TYPE subsystem;
85 /* The UNIX custom window manager information structure.
86 When this structure is returned, it holds information about which
87 low level system it is using, and will be one of SDL_SYSWM_TYPE.
89 typedef struct SDL_SysWMinfo {
91 SDL_SYSWM_TYPE subsystem;
94 Display *display; /* The X11 display */
95 Window window; /* The X11 display window */
96 /* These locking functions should be called around
97 any X11 functions using the display variable.
98 They lock the event thread, so should not be
99 called around event functions or from event filters.
101 void (*lock_func)(void);
102 void (*unlock_func)(void);
104 /* Introduced in SDL 1.0.2 */
105 Window fswindow; /* The X11 fullscreen window */
106 Window wmwindow; /* The X11 managed input window */
111 #elif defined(ENABLE_NANOX)
112 #include <microwin/nano-X.h>
114 /* The generic custom event structure */
115 struct SDL_SysWMmsg {
120 /* The windows custom window manager information structure */
121 typedef struct SDL_SysWMinfo {
122 SDL_version version ;
123 GR_WINDOW_ID window ; /* The display window */
127 #define WIN32_LEAN_AND_MEAN
130 /* The windows custom event structure */
131 struct SDL_SysWMmsg {
133 HWND hwnd; /* The window for the message */
134 UINT msg; /* The type of message */
135 WPARAM wParam; /* WORD message parameter */
136 LPARAM lParam; /* LONG message parameter */
139 /* The windows custom window manager information structure */
140 typedef struct SDL_SysWMinfo {
142 HWND window; /* The Win32 display window */
143 HGLRC hglrc; /* The OpenGL context, if any */
146 #elif defined(__riscos__)
148 /* RISC OS custom event structure */
149 struct SDL_SysWMmsg {
151 int eventCode; /* The window for the message */
155 /* The RISC OS custom window manager information structure */
156 typedef struct SDL_SysWMinfo {
158 int wimpVersion; /* Wimp version running under */
159 int taskHandle; /* The RISC OS task handle */
160 int window; /* The RISC OS display window */
163 #elif defined(__QNXNTO__)
164 #include <sys/neutrino.h>
167 /* The QNX custom event structure */
168 struct SDL_SysWMmsg {
173 /* The QNX custom window manager information structure */
174 typedef struct SDL_SysWMinfo {
181 /* The generic custom event structure */
182 struct SDL_SysWMmsg {
187 /* The generic custom window manager information structure */
188 typedef struct SDL_SysWMinfo {
195 #endif /* SDL_PROTOTYPES_ONLY */
197 /* Function prototypes */
199 * This function gives you custom hooks into the window manager information.
200 * It fills the structure pointed to by 'info' with custom information and
201 * returns 1 if the function is implemented. If it's not implemented, or
202 * the version member of the 'info' structure is invalid, it returns 0.
204 * You typically use this function like this:
205 * SDL_SysWMInfo info;
206 * SDL_VERSION(&info.version);
207 * if ( SDL_GetWMInfo(&info) ) { ... }
209 extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info);
212 /* Ends C function definitions when using C++ */
216 #include "close_code.h"
218 #endif /* _SDL_syswm_h */