|
1 /* |
|
2 SDL - Simple DirectMedia Layer |
|
3 Copyright (C) 1997-2006 Sam Lantinga |
|
4 |
|
5 This library is free software; you can redistribute it and/or |
|
6 modify it under the terms of the GNU Lesser General Public |
|
7 License as published by the Free Software Foundation; either |
|
8 version 2.1 of the License, or (at your option) any later version. |
|
9 |
|
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 Lesser General Public License for more details. |
|
14 |
|
15 You should have received a copy of the GNU Lesser General Public |
|
16 License along with this library; if not, write to the Free Software |
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
18 |
|
19 Sam Lantinga |
|
20 slouken@libsdl.org |
|
21 */ |
|
22 #include "SDL_config.h" |
|
23 |
|
24 #ifndef _SDL_gemvideo_h |
|
25 #define _SDL_gemvideo_h |
|
26 |
|
27 #include "SDL_mutex.h" |
|
28 #include "../SDL_sysvideo.h" |
|
29 |
|
30 /* The implementation dependent data for the window manager cursor */ |
|
31 struct WMcursor { |
|
32 MFORM *mform_p; |
|
33 }; |
|
34 |
|
35 /* Hidden "this" pointer for the video functions */ |
|
36 #define _THIS SDL_VideoDevice *this |
|
37 |
|
38 /* Functions prototypes */ |
|
39 void GEM_wind_redraw(_THIS, int winhandle, short *inside); |
|
40 |
|
41 /* Private display data */ |
|
42 |
|
43 #define B2S_C2P_1TO2 (1<<0) /* C2P convert buffer 1 to buffer 2 */ |
|
44 #define B2S_C2P_1TOS (1<<1) /* C2P convert buffer 1 to screen */ |
|
45 #define B2S_VROCPYFM_1TOS (1<<2) /* vro_cpyfm() buffer 1 to screen */ |
|
46 #define B2S_VROCPYFM_2TOS (1<<3) /* vro_cpyfm() buffer 2 to screen */ |
|
47 |
|
48 #define SDL_NUMMODES 1 /* Fullscreen */ |
|
49 |
|
50 struct SDL_PrivateVideoData { |
|
51 Uint16 buf2scr_ops; /* Operations to get buffer to screen */ |
|
52 void *buffer1; /* Our shadow buffers */ |
|
53 void *buffer2; |
|
54 |
|
55 /* VDI infos */ |
|
56 short vdi_handle; /* VDI handle */ |
|
57 short full_w, full_h; /* Fullscreen size */ |
|
58 short bpp; /* Colour depth */ |
|
59 short pixelsize; /* Bytes per pixel */ |
|
60 short old_numcolors; /* Number of colors in saved palette */ |
|
61 Uint16 pitch; /* Line length */ |
|
62 Uint16 format; /* Screen format */ |
|
63 void *screen; /* Screen address */ |
|
64 Uint32 red, green, blue, alpha; /* Screen components */ |
|
65 Uint32 screensize; |
|
66 short blit_coords[8]; /* Coordinates for bitblt */ |
|
67 MFDB src_mfdb, dst_mfdb; /* VDI MFDB for bitblt */ |
|
68 Uint16 old_palette[256][3]; /* Saved current palette */ |
|
69 Uint16 cur_palette[256][3]; /* SDL application palette */ |
|
70 /* Function to set/restore palette */ |
|
71 void (*setpalette)(_THIS, Uint16 newpal[256][3]); |
|
72 |
|
73 /* GEM infos */ |
|
74 short desk_x, desk_y; /* Desktop properties */ |
|
75 short desk_w, desk_h; |
|
76 short win_handle; /* Our window handle */ |
|
77 int window_type; /* Window type */ |
|
78 const char *title_name; /* Window title */ |
|
79 const char *icon_name; /* Icon title */ |
|
80 short version; /* AES version */ |
|
81 short wfeatures; /* AES window features */ |
|
82 SDL_bool refresh_name; /* Change window title ? */ |
|
83 SDL_bool window_fulled; /* Window maximized ? */ |
|
84 SDL_bool mouse_relative; /* Report relative mouse movement */ |
|
85 SDL_bool locked; /* AES locked for fullscreen ? */ |
|
86 SDL_bool lock_redraw; /* Prevent redraw till buffers are setup */ |
|
87 short message[8]; /* To self-send an AES message */ |
|
88 void *menubar; /* Menu bar save buffer when going fullscreen */ |
|
89 SDL_bool use_dev_mouse; /* Use /dev/mouse ? */ |
|
90 WMcursor *cursor; /* To restore cursor when leaving/entering window */ |
|
91 |
|
92 SDL_bool fullscreen; /* Fullscreen or windowed mode ? */ |
|
93 SDL_Rect *SDL_modelist[SDL_NUMMODES+1]; /* Mode list */ |
|
94 SDL_Surface *icon; /* The icon */ |
|
95 }; |
|
96 |
|
97 /* Hidden structure -> variables names */ |
|
98 #define VDI_handle (this->hidden->vdi_handle) |
|
99 #define VDI_w (this->hidden->full_w) |
|
100 #define VDI_h (this->hidden->full_h) |
|
101 #define VDI_bpp (this->hidden->bpp) |
|
102 #define VDI_pixelsize (this->hidden->pixelsize) |
|
103 #define VDI_oldnumcolors (this->hidden->old_numcolors) |
|
104 #define VDI_oldpalette (this->hidden->old_palette) |
|
105 #define VDI_curpalette (this->hidden->cur_palette) |
|
106 #define VDI_setpalette (this->hidden->setpalette) |
|
107 #define VDI_pitch (this->hidden->pitch) |
|
108 #define VDI_format (this->hidden->format) |
|
109 #define VDI_screen (this->hidden->screen) |
|
110 #define VDI_redmask (this->hidden->red) |
|
111 #define VDI_greenmask (this->hidden->green) |
|
112 #define VDI_bluemask (this->hidden->blue) |
|
113 #define VDI_alphamask (this->hidden->alpha) |
|
114 #define VDI_screensize (this->hidden->screensize) |
|
115 #define VDI_src_mfdb (this->hidden->src_mfdb) |
|
116 #define VDI_dst_mfdb (this->hidden->dst_mfdb) |
|
117 #define VDI_blit_coords (this->hidden->blit_coords) |
|
118 |
|
119 #define GEM_desk_x (this->hidden->desk_x) |
|
120 #define GEM_desk_y (this->hidden->desk_y) |
|
121 #define GEM_desk_w (this->hidden->desk_w) |
|
122 #define GEM_desk_h (this->hidden->desk_h) |
|
123 #define GEM_handle (this->hidden->win_handle) |
|
124 #define GEM_win_type (this->hidden->window_type) |
|
125 #define GEM_title_name (this->hidden->title_name) |
|
126 #define GEM_icon_name (this->hidden->icon_name) |
|
127 #define GEM_refresh_name (this->hidden->refresh_name) |
|
128 #define GEM_version (this->hidden->version) |
|
129 #define GEM_wfeatures (this->hidden->wfeatures) |
|
130 #define GEM_win_fulled (this->hidden->window_fulled) |
|
131 #define GEM_mouse_relative (this->hidden->mouse_relative) |
|
132 #define GEM_locked (this->hidden->locked) |
|
133 #define GEM_lock_redraw (this->hidden->lock_redraw) |
|
134 #define GEM_message (this->hidden->message) |
|
135 #define SDL_modelist (this->hidden->SDL_modelist) |
|
136 #define GEM_icon (this->hidden->icon) |
|
137 #define GEM_fullscreen (this->hidden->fullscreen) |
|
138 #define GEM_menubar (this->hidden->menubar) |
|
139 #define GEM_usedevmouse (this->hidden->use_dev_mouse) |
|
140 #define GEM_cursor (this->hidden->cursor) |
|
141 |
|
142 #define GEM_buffer1 (this->hidden->buffer1) |
|
143 #define GEM_buffer2 (this->hidden->buffer2) |
|
144 #define GEM_bufops (this->hidden->buf2scr_ops) |
|
145 |
|
146 #define VDI_FBMASK(amask, rmask, gmask, bmask) \ |
|
147 VDI_alphamask = (amask); \ |
|
148 VDI_redmask = (rmask); \ |
|
149 VDI_greenmask = (gmask); \ |
|
150 VDI_bluemask = (bmask); |
|
151 |
|
152 /* |
|
153 Possible buffer to screen operations: |
|
154 |
|
155 TC: 8 (chunky),15,16,24,32 bpp |
|
156 8I: 8 bpp planes |
|
157 FB: screen framebuffer address available |
|
158 FS: fullscreen |
|
159 |
|
160 TC, FB, FS: |
|
161 - draw to screen |
|
162 8I, FB, FS: |
|
163 - draw to buffer 1 |
|
164 - C2P from buffer 1 to screen |
|
165 |
|
166 TC, !FB, FS: |
|
167 - draw to buffer 1 |
|
168 - vro_cpyfm() from buffer 1 to screen |
|
169 8I, !FB, FS: |
|
170 - draw to buffer 1 |
|
171 - C2P from buffer 1 to buffer 2 |
|
172 - vro_cpyfm() from buffer 2 to screen |
|
173 |
|
174 TC, FB, !FS: |
|
175 - draw to buffer 1 |
|
176 - vro_cpyfm() from buffer 1 to screen |
|
177 8I, FB, !FS: |
|
178 - draw to buffer 1 |
|
179 - C2P from buffer 1 to buffer 2 |
|
180 - vro_cpyfm() from buffer 2 to screen |
|
181 |
|
182 TC, !FB, !FS: |
|
183 - draw to buffer 1 |
|
184 - vro_cpyfm() from buffer 1 to screen |
|
185 8I, !FB, !FS: |
|
186 - draw to buffer 1 |
|
187 - C2P from buffer 1 to buffer 2 |
|
188 - vro_cpyfm() from buffer 2 to screen |
|
189 */ |
|
190 |
|
191 #endif /* _SDL_gemvideo_h */ |