#ifdef HAVE_DMX_CONFIG_H
#include <dmx-config.h>
#endif
#include "dmx.h"
#include "dmxvisual.h"
#include "scrnintstr.h"
#ifdef GLXEXT
#include <GL/glxint.h>
extern VisualID glxMatchVisualInConfigList(ScreenPtr pScreen,
VisualPtr pVisual,
__GLXvisualConfig *configs,
int nconfigs);
static Visual *dmxLookupGLXVisual(ScreenPtr pScreen, VisualPtr pVisual)
{
DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
int j;
VisualID vid;
vid = glxMatchVisualInConfigList(pScreen, pVisual,
dmxScreen->glxVisuals,
dmxScreen->numGlxVisuals);
if (vid) {
for (j = 0; j < dmxScreen->beNumVisuals; j++)
if (vid == dmxScreen->beVisuals[j].visualid)
return dmxScreen->beVisuals[j].visual;
}
return NULL;
}
#endif
Visual *dmxLookupVisual(ScreenPtr pScreen, VisualPtr pVisual)
{
DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
int i;
#ifdef GLXEXT
Visual *retval;
#endif
if (!dmxScreen->beDisplay)
return NULL;
#ifdef GLXEXT
if ((retval = dmxLookupGLXVisual(pScreen, pVisual)))
return retval;
#endif
for (i = 0; i < dmxScreen->beNumVisuals; i++) {
if (pVisual->class == dmxScreen->beVisuals[i].class &&
pVisual->bitsPerRGBValue == dmxScreen->beVisuals[i].bits_per_rgb &&
pVisual->ColormapEntries == dmxScreen->beVisuals[i].colormap_size &&
pVisual->nplanes == dmxScreen->beVisuals[i].depth &&
pVisual->redMask == dmxScreen->beVisuals[i].red_mask &&
pVisual->greenMask == dmxScreen->beVisuals[i].green_mask &&
pVisual->blueMask == dmxScreen->beVisuals[i].blue_mask) {
return dmxScreen->beVisuals[i].visual;
}
}
return NULL;
}
Visual *dmxLookupVisualFromID(ScreenPtr pScreen, VisualID vid)
{
Visual *visual;
int i;
if (!dmxScreens[pScreen->myNum].beDisplay)
return NULL;
for (i = 0; i < pScreen->numVisuals; i++) {
if (pScreen->visuals[i].vid == vid) {
visual = dmxLookupVisual(pScreen, &pScreen->visuals[i]);
if (visual) return visual;
}
}
return NULL;
}
Colormap dmxColormapFromDefaultVisual(ScreenPtr pScreen, Visual *visual)
{
DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
int i;
if (dmxScreen->beDisplay) {
for (i = 0; i < dmxScreen->beNumDefColormaps; i++)
if (visual == dmxScreen->beVisuals[i].visual)
return dmxScreen->beDefColormaps[i];
}
return None;
}