e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * DMX utility functions.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_DMX_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_DMX_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <X11/Xlib.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <X11/extensions/dmxext.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_spu.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLXDrawable xwin; /**< backend server's X window */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLXDrawable xsubwin; /**< child of xwin, clipped to screen bounds */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync Display *dpy; /**< DMX back-end server display */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRrecti visrect; /**< visible rect, in front-end screen coords */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRDMXBackendWindowInfo;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern int
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrDMXSupported(Display *dpy);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern CRDMXBackendWindowInfo *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrDMXAllocBackendWindowInfo(unsigned int numBackendWindows);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrDMXFreeBackendWindowInfo(unsigned int numBackendWindows,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRDMXBackendWindowInfo *backendWindows);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Given the DMX front-end display "dpy" and window "xwin", update the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * backend window information in "backendWindows". If new subwindows are
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * needed, and an OpenGL interface pointer is provided, use that interface
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * and the subwindowVisBits to create new subwindows.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern GLboolean
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrDMXGetBackendWindowInfo(Display *dpy, GLXDrawable xwin,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned int numBackendWindows,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRDMXBackendWindowInfo *backendWindows,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const crOpenGLInterface *openGlInterface,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint subwindowVisBits);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_DLM_H */