view src/video/gem/SDL_gemvideo.h @ 860:2bac79e27868

Create a 2D window and then manually focus a different window on your desktop, call SDL_PumpEvents() so the X11 driver sets its this->hidden->switch_waiting, then set a fullscreen OpenGL window (which makes the X11 driver tear down and create a new window instead of just resizing the existing one), poll for events, and the newly-created window will think it needs to pop back to a window. Fixed by resetting switch_waiting to zero if X11_CreateWindow() had to tear down a previous window.
author Ryan C. Gordon <icculus@icculus.org>
date Thu, 26 Feb 2004 15:12:51 +0000
parents b8d311d90021
children 83db694556eb
line wrap: on
line source

/*
    SDL - Simple DirectMedia Layer
    Copyright (C) 1997-2004 Sam Lantinga

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    Sam Lantinga
    slouken@libsdl.org
*/

#ifdef SAVE_RCSID
static char rcsid =
 "@(#) $Id$";
#endif

#ifndef _SDL_gemvideo_h
#define _SDL_gemvideo_h

#include "SDL_sysvideo.h"
#include "SDL_mutex.h"

/* Hidden "this" pointer for the video functions */
#define _THIS	SDL_VideoDevice *this

/* Functions prototypes */
void GEM_wind_redraw(_THIS, int winhandle, short *inside);

/* Private display data */

#define B2S_C2P_1TO2		(1<<0)	/* C2P convert buffer 1 to buffer 2 */
#define B2S_C2P_1TOS		(1<<1)	/* C2P convert buffer 1 to screen */
#define B2S_VROCPYFM_1TOS	(1<<2)	/* vro_cpyfm() buffer 1 to screen */
#define B2S_VROCPYFM_2TOS	(1<<3)	/* vro_cpyfm() buffer 2 to screen */

#define SDL_NUMMODES	1		/* Fullscreen */

struct SDL_PrivateVideoData {
	Uint16	buf2scr_ops;		/* Operations to get buffer to screen */
    void *buffer1;				/* Our shadow buffers */
	void *buffer2;

	/* VDI infos */
	short vdi_handle;			/* VDI handle */
	short full_w, full_h;		/* Fullscreen size */
    short bpp;					/* Colour depth */
	short pixelsize;			/* Bytes per pixel */
	short old_numcolors;		/* Number of colors in saved palette */
	Uint16 pitch;				/* Line length */
	Uint16 format;				/* Screen format */
	void *screen;				/* Screen address */
	Uint32 red, green, blue, alpha;	/* Screen components */
	Uint32 screensize;
	short	blit_coords[8];		/* Coordinates for bitblt */
	MFDB	src_mfdb, dst_mfdb;	/* VDI MFDB for bitblt */
	Uint16 old_palette[256][3];	/* Saved current palette */

	/* GEM infos */
	short desk_x, desk_y;		/* Desktop properties */
	short desk_w, desk_h;
	short win_handle;			/* Our window handle */
	int window_type;			/* Window type */
	const char *title_name;		/* Window title */
	const char *icon_name;		/* Icon title */
	short version;				/* AES version */
	short wfeatures;			/* AES window features */
	SDL_bool refresh_name;		/* Change window title ? */
	SDL_bool window_fulled;		/* Window maximized ? */
	SDL_bool mouse_relative;	/* Report relative mouse movement */
	SDL_bool locked;			/* AES locked for fullscreen ? */
	short message[8];			/* To self-send an AES message */
	SDL_Rect *SDL_modelist[SDL_NUMMODES+1];	/* Mode list */
	SDL_Surface *icon;			/* The icon */
};

/* Hidden structure -> variables names */
#define VDI_handle			(this->hidden->vdi_handle)
#define VDI_w				(this->hidden->full_w)
#define VDI_h				(this->hidden->full_h)
#define VDI_bpp				(this->hidden->bpp)
#define VDI_pixelsize		(this->hidden->pixelsize)
#define VDI_oldnumcolors	(this->hidden->old_numcolors)
#define VDI_oldpalette		(this->hidden->old_palette)
#define VDI_pitch			(this->hidden->pitch)
#define VDI_format			(this->hidden->format)
#define VDI_screen			(this->hidden->screen)
#define VDI_redmask			(this->hidden->red)
#define VDI_greenmask		(this->hidden->green)
#define VDI_bluemask		(this->hidden->blue)
#define VDI_alphamask		(this->hidden->alpha)
#define VDI_screensize		(this->hidden->screensize)
#define VDI_src_mfdb		(this->hidden->src_mfdb)
#define VDI_dst_mfdb		(this->hidden->dst_mfdb)
#define VDI_blit_coords		(this->hidden->blit_coords)

#define GEM_desk_x			(this->hidden->desk_x)
#define GEM_desk_y			(this->hidden->desk_y)
#define GEM_desk_w			(this->hidden->desk_w)
#define GEM_desk_h			(this->hidden->desk_h)
#define GEM_handle			(this->hidden->win_handle)
#define GEM_win_type		(this->hidden->window_type)
#define GEM_title_name		(this->hidden->title_name)
#define GEM_icon_name		(this->hidden->icon_name)
#define GEM_refresh_name	(this->hidden->refresh_name)
#define GEM_version			(this->hidden->version)
#define GEM_wfeatures		(this->hidden->wfeatures)
#define GEM_win_fulled		(this->hidden->window_fulled)
#define GEM_mouse_relative	(this->hidden->mouse_relative)
#define GEM_locked			(this->hidden->locked)
#define GEM_message			(this->hidden->message)
#define SDL_modelist		(this->hidden->SDL_modelist)
#define GEM_icon			(this->hidden->icon)

#define GEM_buffer1			(this->hidden->buffer1)
#define GEM_buffer2			(this->hidden->buffer2)
#define GEM_bufops			(this->hidden->buf2scr_ops)

#define VDI_FBMASK(amask, rmask, gmask, bmask) \
	VDI_alphamask = (amask); \
	VDI_redmask = (rmask); \
	VDI_greenmask = (gmask); \
	VDI_bluemask = (bmask);

/*
	Possible buffer to screen operations:

	TC: 8 (chunky),15,16,24,32 bpp
	8I: 8 bpp planes
	FB: screen framebuffer address available
	FS: fullscreen

	TC, FB, FS:
		- draw to screen
	8I, FB, FS:
		- draw to buffer 1
		- C2P from buffer 1 to screen

	TC, !FB, FS:
		- draw to buffer 1
		- vro_cpyfm() from buffer 1 to screen
	8I, !FB, FS:
		- draw to buffer 1
		- C2P from buffer 1 to buffer 2
		- vro_cpyfm() from buffer 2 to screen

	TC, FB, !FS:
		- draw to buffer 1
		- vro_cpyfm() from buffer 1 to screen
	8I, FB, !FS:
		- draw to buffer 1
		- C2P from buffer 1 to buffer 2
		- vro_cpyfm() from buffer 2 to screen

	TC, !FB, !FS:
		- draw to buffer 1
		- vro_cpyfm() from buffer 1 to screen
	8I, !FB, !FS:
		- draw to buffer 1
		- C2P from buffer 1 to buffer 2
		- vro_cpyfm() from buffer 2 to screen
*/

#endif /* _SDL_gemvideo_h */