X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=Xserver%2Finclude%2Fextensions%2Fmultibuf.h;fp=Xserver%2Finclude%2Fextensions%2Fmultibuf.h;h=2c8889a972c349ed0031583ea0dbda7873b62ea7;hp=0000000000000000000000000000000000000000;hb=b6e6afccf37f4ad0515ef2a698f714fdf1bf23b3;hpb=e3340a110a3b01756b8e67531395a33b40a17d37 diff --git a/Xserver/include/extensions/multibuf.h b/Xserver/include/extensions/multibuf.h new file mode 100644 index 0000000..2c8889a --- /dev/null +++ b/Xserver/include/extensions/multibuf.h @@ -0,0 +1,351 @@ +/* + * $XConsortium: multibuf.h,v 1.18 94/04/17 20:11:21 dpw Exp $ + * $XFree86: xc/include/extensions/multibuf.h,v 3.0 1996/05/06 05:52:38 dawes Exp $ + * +Copyright (c) 1989 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + */ + +#ifndef _MULTIBUF_H_ +#define _MULTIBUF_H_ + +#include + +#define MULTIBUFFER_PROTOCOL_NAME "Multi-Buffering" + +#define MULTIBUFFER_MAJOR_VERSION 1 /* current version numbers */ +#define MULTIBUFFER_MINOR_VERSION 1 /* has ClearImageBufferArea */ + +#define X_MbufGetBufferVersion 0 +#define X_MbufCreateImageBuffers 1 +#define X_MbufDestroyImageBuffers 2 +#define X_MbufDisplayImageBuffers 3 +#define X_MbufSetMBufferAttributes 4 +#define X_MbufGetMBufferAttributes 5 +#define X_MbufSetBufferAttributes 6 +#define X_MbufGetBufferAttributes 7 +#define X_MbufGetBufferInfo 8 +#define X_MbufCreateStereoWindow 9 +#define X_MbufClearImageBufferArea 10 + +/* + * update_action field + */ +#define MultibufferUpdateActionUndefined 0 +#define MultibufferUpdateActionBackground 1 +#define MultibufferUpdateActionUntouched 2 +#define MultibufferUpdateActionCopied 3 + +/* + * update_hint field + */ +#define MultibufferUpdateHintFrequent 0 +#define MultibufferUpdateHintIntermittent 1 +#define MultibufferUpdateHintStatic 2 + +/* + * valuemask fields + */ +#define MultibufferWindowUpdateHint (1L << 0) +#define MultibufferBufferEventMask (1L << 0) + +/* + * mono vs. stereo and left vs. right + */ +#define MultibufferModeMono 0 +#define MultibufferModeStereo 1 +#define MultibufferSideMono 0 +#define MultibufferSideLeft 1 +#define MultibufferSideRight 2 + +/* + * clobber state + */ +#define MultibufferUnclobbered 0 +#define MultibufferPartiallyClobbered 1 +#define MultibufferFullyClobbered 2 + +/* + * event stuff + */ +#define MultibufferClobberNotifyMask 0x02000000 +#define MultibufferUpdateNotifyMask 0x04000000 + +#define MultibufferClobberNotify 0 +#define MultibufferUpdateNotify 1 +#define MultibufferNumberEvents (MultibufferUpdateNotify + 1) + +#define MultibufferBadBuffer 0 +#define MultibufferNumberErrors (MultibufferBadBuffer + 1) + + +#ifndef _MULTIBUF_SERVER_ +/* + * Extra definitions that will only be needed in the client + */ +typedef XID Multibuffer; + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + int send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Multibuffer buffer; /* buffer of event */ + int state; /* see Clobbered constants above */ +} XmbufClobberNotifyEvent; + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + int send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Multibuffer buffer; /* buffer of event */ +} XmbufUpdateNotifyEvent; + + +/* + * per-window attributes that can be got + */ +typedef struct { + int displayed_index; /* which buffer is being displayed */ + int update_action; /* Undefined, Background, Untouched, Copied */ + int update_hint; /* Frequent, Intermittent, Static */ + int window_mode; /* Mono, Stereo */ + int nbuffers; /* Number of buffers */ + Multibuffer *buffers; /* Buffers */ +} XmbufWindowAttributes; + +/* + * per-window attributes that can be set + */ +typedef struct { + int update_hint; /* Frequent, Intermittent, Static */ +} XmbufSetWindowAttributes; + + +/* + * per-buffer attributes that can be got + */ +typedef struct { + Window window; /* which window this belongs to */ + unsigned long event_mask; /* events that have been selected */ + int buffer_index; /* which buffer is this */ + int side; /* Mono, Left, Right */ +} XmbufBufferAttributes; + +/* + * per-buffer attributes that can be set + */ +typedef struct { + unsigned long event_mask; /* events that have been selected */ +} XmbufSetBufferAttributes; + + +/* + * per-screen buffer info (there will be lists of them) + */ +typedef struct { + VisualID visualid; /* visual usuable at this depth */ + int max_buffers; /* most buffers for this visual */ + int depth; /* depth of buffers to be created */ +} XmbufBufferInfo; + +_XFUNCPROTOBEGIN + +extern Bool XmbufQueryExtension( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* event_base_return */, + int* /* error_base_return */ +#endif +); + +extern Status XmbufGetVersion( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* major_version_return */, + int* /* minor_version_return */ +#endif +); + +extern int XmbufCreateBuffers( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* w */, + int /* count */, + int /* update_action */, + int /* update_hint */, + Multibuffer* /* buffers */ +#endif +); + +extern void XmbufDestroyBuffers( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* window */ +#endif +); + +extern void XmbufDisplayBuffers( +#if NeedFunctionPrototypes + Display* /* dpy */, + int /* count */, + Multibuffer* /* buffers */, + int /* min_delay */, + int /* max_delay */ +#endif +); + +extern Status XmbufGetWindowAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* w */, + XmbufWindowAttributes* /* attr */ +#endif +); + +extern void XmbufChangeWindowAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* w */, + unsigned long /* valuemask */, + XmbufSetWindowAttributes* /* attr */ +#endif +); + +extern Status XmbufGetBufferAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Multibuffer /* b */, + XmbufBufferAttributes* /* attr */ +#endif +); + +extern void XmbufChangeBufferAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Multibuffer /* b */, + unsigned long /* valuemask */, + XmbufSetBufferAttributes* /* attr */ +#endif +); + +extern Status XmbufGetScreenInfo( +#if NeedFunctionPrototypes + Display* /* dpy */, + Drawable /* d */, + int* /* nmono_return */, + XmbufBufferInfo** /* mono_info_return */, + int* /* nstereo_return */, + XmbufBufferInfo** /* stereo_info_return */ +#endif +); + +extern Window XmbufCreateStereoWindow( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* parent */, + int /* x */, + int /* y */, + unsigned int /* width */, + unsigned int /* height */, + unsigned int /* border_width */, + int /* depth */, + unsigned int /* class */, + Visual* /* visual */, + unsigned long /* valuemask */, + XSetWindowAttributes* /* attr */, + Multibuffer* /* leftp */, + Multibuffer* /* rightp */ +#endif +); + +extern void XmbufClearBufferArea( +#if NeedFunctionPrototypes + Display* /* dpy */, + Multibuffer /* buffer */, + int /* x */, + int /* y */, + unsigned int /* width */, + unsigned int /* height */, + Bool /* exposures */ +#endif +); + +_XFUNCPROTOEND + +#else + +typedef Bool (* mbInitFunc)(); + +struct _mbufScreen; /* declared in multibufst.h */ + +extern void RegisterMultibufferInit( +#if NeedFunctionPrototypes + ScreenPtr /* pScreen */, + Bool (* /* bufMultibufferInit */)( +#if NeedNestedPrototypes + ScreenPtr /* pScreen */, + struct _mbufScreen * /* pMBScreen */ +#endif + ) +#endif +); + +struct xMbufBufferInfo; /* declared in multibufst.h */ + +extern void RegisterDoubleBufferHardware( +#if NeedFunctionPrototypes + ScreenPtr /* pScreen */, + int /* nInfo */, + struct xMbufBufferInfo * /* pInfo */, + DevUnion * /* frameBuffer */, + DevUnion /* selectPlane */, + void (* /* CopyBufferBitsFunc */ )(), + void (* /* DrawSelectPlaneFunc */ )() +#endif +); + +extern int CreateImageBuffers ( +#if NeedFunctionPrototypes + WindowPtr /* pWin */, + int /* nbuf */, + XID * /* ids */, + int /* action */, + int /* hint */ +#endif +); +extern void DestroyImageBuffers ( +#if NeedFunctionPrototypes + WindowPtr /* pWin */ +#endif +); +extern int DisplayImageBuffers ( +#if NeedFunctionPrototypes + XID * /* ids */, + int /* nbuf */ +#endif +); + +#endif /* _MULTIBUF_SERVER_ */ +#endif /* _MULTIBUF_H_ */