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