On 09/04/2013 10:30 AM, Maniak, Lukasz wrote:
     Fix for thro= wing BadDrawable (invalid Pixmap or Window parameter)

     by Xserver w= hen calling XCreatePixmap or fill_bitmap from

     DRI_glXUseXF= ont.

<= /span>

     current= Drawable which came from __glXGetCurrentContext was not
correct in

     this case, w= e use DefaultRootWindow(dpy) instead.

By "was not correct" do you mean it was zero?

The drawable/window parameter to XCreatePixmap() is really just used to determine the depth for the Pixmap. I think any window/depth should be OK since we're just looking for zero and non-zero pixels when generating the gl bitmaps.



Signed-off-by: Lukasz Maniak &l= t;lukasz.man...@intel.com>

---

src/glx/xfont.c | 6 ++-= ---

1 file changed, 2 insertions(&#= 43;), 4 deletions(-)

diff --git a/src/glx/xfont.c b/= src/glx/xfont.c

index 316c585..60e28ab 100644

--- a/src/glx/xfont.c

+++ b/src/glx/xfont= .c

@@ -215,7 +215,6 @@ _X_HIDD= EN void

DRI_glXUseXFont(struct glx_cont= ext *CC, Font font, int first, int
count, int listbase)

{

     Display *dpy= ;

-   Window win;<= /o:p>

     Pixmap pixma= p;

     GC gc; =

     XGCValu= es values;

@@ -231,7 +230,6 @@ DRI_glX= UseXFont(struct glx_context *CC, Font font,
int first, int count, int lis

     int i;<= /o:p>

     dpy =3D= CC->currentDpy;

-   win =3D CC->cu= rrentDrawable;

     fs =3D = XQueryFont(dpy, font);

     if (!fs) {

@@ -279,7 +277,7 @@ DRI_glX= UseXFont(struct glx_context *CC, Font font,
int first, int count, int lis

     glPixelStore= i(GL_UNPACK_SKIP_PIXELS, 0);

     glPixel= Storei(GL_UNPACK_ALIGNMENT, 1);

-   pixmap =3D XCreat= ePixmap(dpy, win, 10, 10, 1);

+   pixmap =3D XC= reatePixmap(dpy, DefaultRootWindow(dpy), 10, 10, 1);

     values.foreg= round =3D BlackPixel(dpy, DefaultScreen(dpy));

     values.backg= round =3D WhitePixel(dpy, DefaultScreen(dpy));

     values.font = =3D fs->fid;

@@ -342,7 +340,7 @@ DRI_glX= UseXFont(struct glx_context *CC, Font font,
int first, int count, int lis

      &= nbsp; if (valid && (bm_width > 0) && (bm_height > 0))= {

      &= nbsp;    memset(bm, '\0', bm_width * bm_height);

-     =     fill_bitmap(dpy, win, gc, bm_width, bm_height, x, y, c, = bm);

+    &n= bsp;    fill_bitmap(dpy, DefaultRootWindow(dpy), gc, bm_widt=
h, bm_height, x, y, c, bm);

      &= nbsp;    glBitmap(width, height, x0, y0, dx, dy, bm);

#ifdef DEBUG<= /p>


A less invasive change would be to simply replace

 win = CC->currentDrawable;

with

 win = DefaultRootWindow(dpy);

I'd prefer that.

-Brian

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to