a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/*
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Copyright © 2003 Keith Packard
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * documentation for any purpose is hereby granted without fee, provided that
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * the above copyright notice appear in all copies and that both that
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * copyright notice and this permission notice appear in supporting
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * documentation, and that the name of Keith Packard not be used in
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * advertising or publicity pertaining to distribution of the software without
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * specific, written prior permission. Keith Packard makes no
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * representations about the suitability of this software for any purpose. It
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * is provided "as is" without express or implied warranty.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * PERFORMANCE OF THIS SOFTWARE.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#ifdef HAVE_DIX_CONFIG_H
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include <dix-config.h>
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#endif
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#ifndef _DAMAGE_H_
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define _DAMAGE_H_
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct _damage *DamagePtr;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef enum _damageReportLevel {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportRawRegion,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportDeltaRegion,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportBoundingBox,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportNonEmpty,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportNone
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} DamageReportLevel;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef void (*DamageReportFunc) (DamagePtr pDamage, RegionPtr pRegion,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync void *closure);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef void (*DamageScreenCreateFunc) (DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef void (*DamageScreenRegisterFunc) (DrawablePtr, DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef void (*DamageScreenUnregisterFunc) (DrawablePtr, DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef void (*DamageScreenDestroyFunc) (DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct _damageScreenFuncs {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageScreenCreateFunc Create;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageScreenRegisterFunc Register;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageScreenUnregisterFunc Unregister;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageScreenDestroyFunc Destroy;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} DamageScreenFuncsRec, *DamageScreenFuncsPtr;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void miDamageCreate(DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void miDamageRegister(DrawablePtr, DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void miDamageUnregister(DrawablePtr, DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void miDamageDestroy(DamagePtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT Bool
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageSetup(ScreenPtr pScreen);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT DamagePtr
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncDamageCreate(DamageReportFunc damageReport,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageDestroyFunc damageDestroy,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportLevel damageLevel,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync Bool isInternal, ScreenPtr pScreen, void *closure);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageDrawInternal(ScreenPtr pScreen, Bool enable);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageRegister(DrawablePtr pDrawable, DamagePtr pDamage);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageUnregister(DamagePtr pDamage);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageDestroy(DamagePtr pDamage);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT Bool
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageSubtract(DamagePtr pDamage, const RegionPtr pRegion);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageEmpty(DamagePtr pDamage);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT RegionPtr
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageRegion(DamagePtr pDamage);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT RegionPtr
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamagePendingRegion(DamagePtr pDamage);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* In case of rendering, call this before the submitting the commands. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageRegionAppend(DrawablePtr pDrawable, RegionPtr pRegion);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* Call this directly after the rendering operation has been submitted. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageRegionProcessPending(DrawablePtr pDrawable);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* Call this when you create a new Damage and you wish to send an initial damage message (to it). */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportDamage(DamagePtr pDamage, RegionPtr pDamageRegion);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* Avoid using this call, it only exists for API compatibility. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageDamageRegion(DrawablePtr pDrawable, const RegionPtr pRegion);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT void
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageSetReportAfterOp(DamagePtr pDamage, Bool reportAfter);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT DamageScreenFuncsPtr DamageGetScreenFuncs(ScreenPtr);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#endif /* _DAMAGE_H_ */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync