diff options
author | Franklin Wei <git@fwei.tk> | 2017-01-21 15:18:31 -0500 |
---|---|---|
committer | Franklin Wei <git@fwei.tk> | 2017-12-23 21:01:26 -0500 |
commit | a855d6202536ff28e5aae4f22a0f31d8f5b325d0 (patch) | |
tree | 8c75f224dd64ed360505afa8843d016b0d75000b /apps/plugins/sdl/src/video/fbcon/SDL_fbvideo.h | |
parent | 01c6dcf6c7b9bb1ad2fa0450f99bacc5f3d3e04b (diff) | |
download | rockbox-a855d6202536ff28e5aae4f22a0f31d8f5b325d0.tar.gz rockbox-a855d6202536ff28e5aae4f22a0f31d8f5b325d0.zip |
Port of Duke Nukem 3D
This ports Fabien Sanglard's Chocolate Duke to run on a version of SDL
for Rockbox.
Change-Id: I8f2c4c78af19de10c1633ed7bb7a997b43256dd9
Diffstat (limited to 'apps/plugins/sdl/src/video/fbcon/SDL_fbvideo.h')
-rw-r--r-- | apps/plugins/sdl/src/video/fbcon/SDL_fbvideo.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/apps/plugins/sdl/src/video/fbcon/SDL_fbvideo.h b/apps/plugins/sdl/src/video/fbcon/SDL_fbvideo.h new file mode 100644 index 0000000000..1443d2b251 --- /dev/null +++ b/apps/plugins/sdl/src/video/fbcon/SDL_fbvideo.h | |||
@@ -0,0 +1,200 @@ | |||
1 | /* | ||
2 | SDL - Simple DirectMedia Layer | ||
3 | Copyright (C) 1997-2012 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_fbvideo_h | ||
25 | #define _SDL_fbvideo_h | ||
26 | |||
27 | #include <sys/types.h> | ||
28 | #include <termios.h> | ||
29 | #include <linux/fb.h> | ||
30 | |||
31 | #include "SDL_mouse.h" | ||
32 | #include "SDL_mutex.h" | ||
33 | #include "../SDL_sysvideo.h" | ||
34 | #if SDL_INPUT_TSLIB | ||
35 | #include "tslib.h" | ||
36 | #endif | ||
37 | |||
38 | /* Hidden "this" pointer for the video functions */ | ||
39 | #define _THIS SDL_VideoDevice *this | ||
40 | |||
41 | typedef void FB_bitBlit( | ||
42 | Uint8 *src_pos, | ||
43 | int src_right_delta, /* pixels, not bytes */ | ||
44 | int src_down_delta, /* pixels, not bytes */ | ||
45 | Uint8 *dst_pos, | ||
46 | int dst_linebytes, | ||
47 | int width, | ||
48 | int height); | ||
49 | |||
50 | /* This is the structure we use to keep track of video memory */ | ||
51 | typedef struct vidmem_bucket { | ||
52 | struct vidmem_bucket *prev; | ||
53 | int used; | ||
54 | int dirty; | ||
55 | char *base; | ||
56 | unsigned int size; | ||
57 | struct vidmem_bucket *next; | ||
58 | } vidmem_bucket; | ||
59 | |||
60 | /* Private display data */ | ||
61 | struct SDL_PrivateVideoData { | ||
62 | int console_fd; | ||
63 | struct fb_var_screeninfo cache_vinfo; | ||
64 | struct fb_var_screeninfo saved_vinfo; | ||
65 | int saved_cmaplen; | ||
66 | __u16 *saved_cmap; | ||
67 | |||
68 | int current_vt; | ||
69 | int saved_vt; | ||
70 | int keyboard_fd; | ||
71 | int saved_kbd_mode; | ||
72 | struct termios saved_kbd_termios; | ||
73 | |||
74 | int mouse_fd; | ||
75 | #if SDL_INPUT_TSLIB | ||
76 | struct tsdev *ts_dev; | ||
77 | #endif | ||
78 | |||
79 | char *mapped_mem; | ||
80 | char *shadow_mem; | ||
81 | int mapped_memlen; | ||
82 | int mapped_offset; | ||
83 | char *mapped_io; | ||
84 | long mapped_iolen; | ||
85 | int flip_page; | ||
86 | char *flip_address[2]; | ||
87 | int rotate; | ||
88 | int shadow_fb; /* Tells whether a shadow is being used. */ | ||
89 | FB_bitBlit *blitFunc; | ||
90 | int physlinebytes; /* Length of a line in bytes in physical fb */ | ||
91 | |||
92 | #define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */ | ||
93 | int SDL_nummodes[NUM_MODELISTS]; | ||
94 | SDL_Rect **SDL_modelist[NUM_MODELISTS]; | ||
95 | |||
96 | vidmem_bucket surfaces; | ||
97 | int surfaces_memtotal; | ||
98 | int surfaces_memleft; | ||
99 | |||
100 | SDL_mutex *hw_lock; | ||
101 | int switched_away; | ||
102 | struct fb_var_screeninfo screen_vinfo; | ||
103 | Uint32 screen_arealen; | ||
104 | Uint8 *screen_contents; | ||
105 | __u16 screen_palette[3*256]; | ||
106 | |||
107 | void (*wait_vbl)(_THIS); | ||
108 | void (*wait_idle)(_THIS); | ||
109 | }; | ||
110 | /* Old variable names */ | ||
111 | #define console_fd (this->hidden->console_fd) | ||
112 | #define current_vt (this->hidden->current_vt) | ||
113 | #define saved_vt (this->hidden->saved_vt) | ||
114 | #define keyboard_fd (this->hidden->keyboard_fd) | ||
115 | #define saved_kbd_mode (this->hidden->saved_kbd_mode) | ||
116 | #define saved_kbd_termios (this->hidden->saved_kbd_termios) | ||
117 | #define mouse_fd (this->hidden->mouse_fd) | ||
118 | #if SDL_INPUT_TSLIB | ||
119 | #define ts_dev (this->hidden->ts_dev) | ||
120 | #endif | ||
121 | #define cache_vinfo (this->hidden->cache_vinfo) | ||
122 | #define saved_vinfo (this->hidden->saved_vinfo) | ||
123 | #define saved_cmaplen (this->hidden->saved_cmaplen) | ||
124 | #define saved_cmap (this->hidden->saved_cmap) | ||
125 | #define mapped_mem (this->hidden->mapped_mem) | ||
126 | #define shadow_mem (this->hidden->shadow_mem) | ||
127 | #define mapped_memlen (this->hidden->mapped_memlen) | ||
128 | #define mapped_offset (this->hidden->mapped_offset) | ||
129 | #define mapped_io (this->hidden->mapped_io) | ||
130 | #define mapped_iolen (this->hidden->mapped_iolen) | ||
131 | #define flip_page (this->hidden->flip_page) | ||
132 | #define flip_address (this->hidden->flip_address) | ||
133 | #define rotate (this->hidden->rotate) | ||
134 | #define shadow_fb (this->hidden->shadow_fb) | ||
135 | #define blitFunc (this->hidden->blitFunc) | ||
136 | #define physlinebytes (this->hidden->physlinebytes) | ||
137 | #define SDL_nummodes (this->hidden->SDL_nummodes) | ||
138 | #define SDL_modelist (this->hidden->SDL_modelist) | ||
139 | #define surfaces (this->hidden->surfaces) | ||
140 | #define surfaces_memtotal (this->hidden->surfaces_memtotal) | ||
141 | #define surfaces_memleft (this->hidden->surfaces_memleft) | ||
142 | #define hw_lock (this->hidden->hw_lock) | ||
143 | #define switched_away (this->hidden->switched_away) | ||
144 | #define screen_vinfo (this->hidden->screen_vinfo) | ||
145 | #define screen_arealen (this->hidden->screen_arealen) | ||
146 | #define screen_contents (this->hidden->screen_contents) | ||
147 | #define screen_palette (this->hidden->screen_palette) | ||
148 | #define wait_vbl (this->hidden->wait_vbl) | ||
149 | #define wait_idle (this->hidden->wait_idle) | ||
150 | |||
151 | /* Accelerator types that are supported by the driver, but are not | ||
152 | necessarily in the kernel headers on the system we compile on. | ||
153 | */ | ||
154 | #ifndef FB_ACCEL_MATROX_MGAG400 | ||
155 | #define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */ | ||
156 | #endif | ||
157 | #ifndef FB_ACCEL_3DFX_BANSHEE | ||
158 | #define FB_ACCEL_3DFX_BANSHEE 31 /* 3Dfx Banshee */ | ||
159 | #endif | ||
160 | |||
161 | /* These functions are defined in SDL_fbvideo.c */ | ||
162 | extern void FB_SavePaletteTo(_THIS, int palette_len, __u16 *area); | ||
163 | extern void FB_RestorePaletteFrom(_THIS, int palette_len, __u16 *area); | ||
164 | |||
165 | /* These are utility functions for working with video surfaces */ | ||
166 | |||
167 | static __inline__ void FB_AddBusySurface(SDL_Surface *surface) | ||
168 | { | ||
169 | ((vidmem_bucket *)surface->hwdata)->dirty = 1; | ||
170 | } | ||
171 | |||
172 | static __inline__ int FB_IsSurfaceBusy(SDL_Surface *surface) | ||
173 | { | ||
174 | return ((vidmem_bucket *)surface->hwdata)->dirty; | ||
175 | } | ||
176 | |||
177 | static __inline__ void FB_WaitBusySurfaces(_THIS) | ||
178 | { | ||
179 | vidmem_bucket *bucket; | ||
180 | |||
181 | /* Wait for graphic operations to complete */ | ||
182 | wait_idle(this); | ||
183 | |||
184 | /* Clear all surface dirty bits */ | ||
185 | for ( bucket=&surfaces; bucket; bucket=bucket->next ) { | ||
186 | bucket->dirty = 0; | ||
187 | } | ||
188 | } | ||
189 | |||
190 | static __inline__ void FB_dst_to_xy(_THIS, SDL_Surface *dst, int *x, int *y) | ||
191 | { | ||
192 | *x = (long)((char *)dst->pixels - mapped_mem)%this->screen->pitch; | ||
193 | *y = (long)((char *)dst->pixels - mapped_mem)/this->screen->pitch; | ||
194 | if ( dst == this->screen ) { | ||
195 | *x += this->offset_x; | ||
196 | *y += this->offset_y; | ||
197 | } | ||
198 | } | ||
199 | |||
200 | #endif /* _SDL_fbvideo_h */ | ||