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 (at) libsdl.org 21 */ 22 #include "SDL_config.h" 23 24 #ifndef _SDL_dgavideo_h 25 #define _SDL_dgavideo_h 26 27 #include <X11/Xlib.h> 28 #include <X11/Xlibint.h> 29 #include <X11/Xproto.h> 30 31 #include "SDL_mouse.h" 32 #include "SDL_mutex.h" 33 #include "../SDL_sysvideo.h" 34 35 #if SDL_VIDEO_DRIVER_X11_DPMS 36 #include <X11/extensions/dpms.h> 37 #endif 38 39 /* Hidden "this" pointer for the video functions */ 40 #define _THIS SDL_VideoDevice *this 41 42 /* Define this if you need the DGA driver to be thread-safe */ 43 #define LOCK_DGA_DISPLAY 44 #ifdef LOCK_DGA_DISPLAY 45 #define LOCK_DISPLAY() SDL_mutexP(event_lock) 46 #define UNLOCK_DISPLAY() SDL_mutexV(event_lock) 47 #else 48 #define LOCK_DISPLAY() 49 #define UNLOCK_DISPLAY() 50 #endif 51 52 53 /* This is the structure we use to keep track of video memory */ 54 typedef struct vidmem_bucket { 55 struct vidmem_bucket *prev; 56 int used; 57 int dirty; 58 Uint8 *base; 59 unsigned int size; 60 struct vidmem_bucket *next; 61 } vidmem_bucket; 62 63 /* Private display data */ 64 struct SDL_PrivateVideoData { 65 Display *DGA_Display; 66 Colormap DGA_colormap; 67 int visualClass; 68 69 #define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */ 70 int SDL_nummodes[NUM_MODELISTS]; 71 SDL_Rect **SDL_modelist[NUM_MODELISTS]; 72 73 /* Information for the video surface */ 74 Uint8 *memory_base; 75 int memory_pitch; 76 SDL_mutex *hw_lock; 77 int sync_needed; 78 int was_flipped; 79 80 /* Information for hardware surfaces */ 81 vidmem_bucket surfaces; 82 int surfaces_memtotal; 83 int surfaces_memleft; 84 85 /* Information for double-buffering */ 86 int flip_page; 87 int flip_yoffset[2]; 88 Uint8 *flip_address[2]; 89 90 /* Used to handle DGA events */ 91 int event_base; 92 #ifdef LOCK_DGA_DISPLAY 93 SDL_mutex *event_lock; 94 #endif 95 96 /* Screensaver settings */ 97 int screensaver_timeout; 98 BOOL dpms_enabled; 99 }; 100 /* Old variable names */ 101 #define DGA_Display (this->hidden->DGA_Display) 102 #define DGA_Screen DefaultScreen(DGA_Display) 103 #define DGA_colormap (this->hidden->DGA_colormap) 104 #define DGA_visualClass (this->hidden->visualClass) 105 #define memory_base (this->hidden->memory_base) 106 #define memory_pitch (this->hidden->memory_pitch) 107 #define flip_page (this->hidden->flip_page) 108 #define flip_yoffset (this->hidden->flip_yoffset) 109 #define flip_address (this->hidden->flip_address) 110 #define sync_needed (this->hidden->sync_needed) 111 #define was_flipped (this->hidden->was_flipped) 112 #define SDL_nummodes (this->hidden->SDL_nummodes) 113 #define SDL_modelist (this->hidden->SDL_modelist) 114 #define surfaces (this->hidden->surfaces) 115 #define surfaces_memtotal (this->hidden->surfaces_memtotal) 116 #define surfaces_memleft (this->hidden->surfaces_memleft) 117 #define hw_lock (this->hidden->hw_lock) 118 #define DGA_event_base (this->hidden->event_base) 119 #define event_lock (this->hidden->event_lock) 120 #define screensaver_timeout (this->hidden->screensaver_timeout) 121 #define dpms_enabled (this->hidden->dpms_enabled) 122 123 #endif /* _SDL_dgavideo_h */ 124