Commit b4651b2a authored by Sunny Sachanandani's avatar Sunny Sachanandani

Modified configure.in to allow building with Xrender. Fixed all problems that...

Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Builds fine now :)
parent 9de49fce
...@@ -1128,16 +1128,13 @@ AC_HELP_STRING([--enable-video-x11-xrandr], [enable X11 Xrandr extension for ful ...@@ -1128,16 +1128,13 @@ AC_HELP_STRING([--enable-video-x11-xrandr], [enable X11 Xrandr extension for ful
]) ])
if test x$have_xrandr_h_hdr = xyes; then if test x$have_xrandr_h_hdr = xyes; then
if test x$enable_x11_shared = xyes && test x$xrandr_lib != x ; then if test x$enable_x11_shared = xyes && test x$xrandr_lib != x ; then
echo "-- dynamic libXrender -> $xrender_lib"
echo "-- dynamic libXrandr -> $xrandr_lib" echo "-- dynamic libXrandr -> $xrandr_lib"
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER, "$xrender_lib")
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR, "$xrandr_lib") AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR, "$xrandr_lib")
definitely_enable_video_x11_xrandr=yes definitely_enable_video_x11_xrandr=yes
else else
AC_CHECK_LIB(Xrender, XRenderQueryExtension, have_xrender_lib=yes)
AC_CHECK_LIB(Xrandr, XRRQueryExtension, have_xrandr_lib=yes) AC_CHECK_LIB(Xrandr, XRRQueryExtension, have_xrandr_lib=yes)
if test x$have_xrender_lib = xyes && test x$have_xrandr_lib = xyes ; then if test x$have_xrandr_lib = xyes ; then
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXrandr -lXrender" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXrandr"
definitely_enable_video_x11_xrandr=yes definitely_enable_video_x11_xrandr=yes
fi fi
fi fi
...@@ -1199,6 +1196,32 @@ AC_HELP_STRING([--enable-video-x11-scrnsaver], [enable X11 screensaver extension ...@@ -1199,6 +1196,32 @@ AC_HELP_STRING([--enable-video-x11-scrnsaver], [enable X11 screensaver extension
if test x$definitely_enable_video_x11_scrnsaver = xyes; then if test x$definitely_enable_video_x11_scrnsaver = xyes; then
AC_DEFINE(SDL_VIDEO_DRIVER_X11_SCRNSAVER) AC_DEFINE(SDL_VIDEO_DRIVER_X11_SCRNSAVER)
fi fi
AC_ARG_ENABLE(video-x11-xrender,
AC_HELP_STRING([--enable-video-x11-xrender], [enable X11 Xrender extension [[default=yes]]]),
, enable_video_x11_xrender=yes)
if test x$enable_video_x11_xrender = xyes; then
AC_CHECK_HEADER(X11/extensions/Xrender.h,
have_xrender_h_hdr=yes,
have_xrender_h_hdr=no,
[#include <X11/Xlib.h>
])
if test x$have_xrender_h_hdr = xyes; then
if test x$enable_x11_shared = xyes && test x$xrender_lib != x ; then
echo "-- dynamic libXrender -> $xrender_lib"
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER, "$xrender_lib")
definitely_enable_video_x11_xrender=yes
else
AC_CHECK_LIB(Xrender, XRenderQueryExtension, have_xrender_lib=yes)
if test x$have_xrender_lib = xyes ; then
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXrender"
definitely_enable_video_x11_xrender=yes
fi
fi
fi
fi
if test x$definitely_enable_video_x11_xrender = xyes; then
AC_DEFINE(SDL_VIDEO_DRIVER_X11_XRENDER)
fi
AC_ARG_ENABLE(render-x11, AC_ARG_ENABLE(render-x11,
AC_HELP_STRING([--enable-render-x11], [enable the X11 render driver [[default=yes]]]), AC_HELP_STRING([--enable-render-x11], [enable the X11 render driver [[default=yes]]]),
......
...@@ -280,6 +280,8 @@ ...@@ -280,6 +280,8 @@
#undef SDL_VIDEO_DRIVER_X11_XV #undef SDL_VIDEO_DRIVER_X11_XV
#undef SDL_VIDEO_DRIVER_X11_XRENDER #undef SDL_VIDEO_DRIVER_X11_XRENDER
#undef SDL_VIDEO_RENDER_X11
#undef SDL_VIDEO_RENDER_D3D #undef SDL_VIDEO_RENDER_D3D
#undef SDL_VIDEO_RENDER_GDI #undef SDL_VIDEO_RENDER_GDI
#undef SDL_VIDEO_RENDER_OGL #undef SDL_VIDEO_RENDER_OGL
......
...@@ -219,7 +219,7 @@ X11_CreateRenderer(SDL_Window * window, Uint32 flags) ...@@ -219,7 +219,7 @@ X11_CreateRenderer(SDL_Window * window, Uint32 flags)
if(XRenderQueryExtension(data->display, &event_basep, &error_basep) == True) { if(XRenderQueryExtension(data->display, &event_basep, &error_basep) == True) {
data->xrender_available = SDL_TRUE; data->xrender_available = SDL_TRUE;
data->xwindow_pict_fmt = XRenderFindVisualFormat(data->display, data->visual); data->xwindow_pict_fmt = XRenderFindVisualFormat(data->display, data->visual);
if(!xwindow_pict_fmt) { if(!data->xwindow_pict_fmt) {
data->xrender_available = SDL_FALSE; data->xrender_available = SDL_FALSE;
} }
data->xwindow_pict_attr.graphics_exposures = False; data->xwindow_pict_attr.graphics_exposures = False;
...@@ -285,8 +285,8 @@ X11_CreateRenderer(SDL_Window * window, Uint32 flags) ...@@ -285,8 +285,8 @@ X11_CreateRenderer(SDL_Window * window, Uint32 flags)
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
if(data->xrender_available == SDL_TRUE) { if(data->xrender_available == SDL_TRUE) {
data->pixmap_picts[i] = data->pixmap_picts[i] =
XCreatePicture(data->display, data->pixmap[i], data->xwindow_pict_fmt, XRenderCreatePicture(data->display, data->pixmaps[i], data->xwindow_pict_fmt,
data->xwindow_pict_attr_valuemask, &xwindow_pict_attr); data->xwindow_pict_attr_valuemask, &data->xwindow_pict_attr);
if(!data->pixmap_picts[i]) { if(!data->pixmap_picts[i]) {
data->xrender_available = SDL_FALSE; data->xrender_available = SDL_FALSE;
} }
...@@ -354,7 +354,7 @@ X11_DisplayModeChanged(SDL_Renderer * renderer) ...@@ -354,7 +354,7 @@ X11_DisplayModeChanged(SDL_Renderer * renderer)
XFreePixmap(data->display, data->pixmaps[i]); XFreePixmap(data->display, data->pixmaps[i]);
data->pixmaps[i] = None; data->pixmaps[i] = None;
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
data->pictures[i] = None; data->pixmap_picts[i] = None;
#endif #endif
} }
} }
...@@ -368,10 +368,10 @@ X11_DisplayModeChanged(SDL_Renderer * renderer) ...@@ -368,10 +368,10 @@ X11_DisplayModeChanged(SDL_Renderer * renderer)
} }
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
if(data->xrender_available == SDL_TRUE) { if(data->xrender_available == SDL_TRUE) {
data->pictures[i] = data->pixmap_picts[i] =
XCreatePicture(data->display, data->pixmap[i], data->xwindow_pict_fmt, XRenderCreatePicture(data->display, data->pixmaps[i], data->xwindow_pict_fmt,
data->xwindow_pict_attr_valuemask, &data->xwindow_pict_attr); data->xwindow_pict_attr_valuemask, &data->xwindow_pict_attr);
if(!data->pictures[i]) { if(!data->pixmap_picts[i]) {
data->xrender_available = SDL_FALSE; data->xrender_available = SDL_FALSE;
} }
} }
...@@ -380,7 +380,7 @@ X11_DisplayModeChanged(SDL_Renderer * renderer) ...@@ -380,7 +380,7 @@ X11_DisplayModeChanged(SDL_Renderer * renderer)
if (n > 0) { if (n > 0) {
data->drawable = data->pixmaps[0]; data->drawable = data->pixmaps[0];
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
data->drawable_pict = data->pictures[0]; data->drawable_pict = data->pixmap_picts[0];
#endif #endif
} }
data->current_pixmap = 0; data->current_pixmap = 0;
...@@ -419,7 +419,7 @@ X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -419,7 +419,7 @@ X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
// Assume the texture is supported by Xrender // Assume the texture is supported by Xrender
data->xrender_available = SDL_TRUE; data->xrender_available = SDL_TRUE;
if(renderdata->xrender_available == SDL_False) { if(renderdata->xrender_available == SDL_FALSE) {
if (texture->format != display->current_mode.format) { if (texture->format != display->current_mode.format) {
SDL_SetError("Texture format doesn't match window format"); SDL_SetError("Texture format doesn't match window format");
return -1; return -1;
...@@ -523,21 +523,24 @@ X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -523,21 +523,24 @@ X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
x11_fmt_mask = x11_fmt_mask =
(PictFormatDepth | PictFormatRedMask | PictFormatGreenMask (PictFormatDepth | PictFormatRedMask | PictFormatGreenMask
| PictFormatBlueMask); | PictFormatBlueMask);
x11_templ_fmt.depth = (data->format).BitsPerPixel; Uint32 Rmask, Gmask, Bmask, Amask;
x11_temp_fmt.direct.redMask = (data->format).Rmask; int bpp;
x11_temp_fmt.direct.greenMask = (data->format).Gmask; SDL_PixelFormatEnumToMasks(data->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
x11_temp_fmt.direct.blueMask = (data->format).Bmask; x11_templ_fmt.depth = bpp;
x11_temp_fmt.direct.alphaMask = (data->format).Amask; x11_templ_fmt.direct.redMask = Rmask;
x11_templ_fmt.direct.greenMask = Gmask;
x11_templ_fmt.direct.blueMask = Bmask;
x11_templ_fmt.direct.alphaMask = Amask;
/* Return one matching XRenderPictFormat */ /* Return one matching XRenderPictFormat */
data->pict_fmt = data->picture_fmt =
XRenderFindFormat(renderdata->display, x11_fmt_mask, &x11_templ_fmt, 1); XRenderFindFormat(renderdata->display, x11_fmt_mask, &x11_templ_fmt, 1);
if(!data->pict_fmt) { if(!data->picture_fmt) {
data->xrender_available = SDL_FALSE; data->xrender_available = SDL_FALSE;
} }
data->picture_attr_valuemask = CPGraphicsExposure; data->picture_attr_valuemask = CPGraphicsExposure;
(data->picture_attr).graphics_exposures = False; (data->picture_attr).graphics_exposures = False;
data->picture = data->picture =
XCreatePicture(renderdata->display, data->pixmap, data->picture_fmt, XRenderCreatePicture(renderdata->display, data->pixmap, data->picture_fmt,
data->picture_attr_valuemask, &(data->picture_attr)); data->picture_attr_valuemask, &(data->picture_attr));
if(!data->picture) { if(!data->picture) {
data->xrender_available = SDL_FALSE; data->xrender_available = SDL_FALSE;
...@@ -997,8 +1000,13 @@ X11_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count) ...@@ -997,8 +1000,13 @@ X11_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
if(data->xrender_available == SDL_TRUE) if(data->xrender_available == SDL_TRUE)
{ {
XRenderColor xrender_foreground_color;
xrender_foreground_color.red = renderer->r;
xrender_foreground_color.green = renderer->g;
xrender_foreground_color.blue = renderer->b;
xrender_foreground_color.alpha = renderer->a;
XRenderFillRectangles(data->display, PictOpSrc, data->drawable_pict, XRenderFillRectangles(data->display, PictOpSrc, data->drawable_pict,
(XRenderColor)foreground, xrects, xcount); &xrender_foreground_color, xrects, xcount);
} }
else else
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment