projects
/
dana
/
dcompmgr.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
9e1f2cf
)
save the window's geometry when fetching the window's region so that if it changes...
author
Dana Jansens
<danakj@orodu.net>
Sun, 16 Mar 2008 04:42:28 +0000
(
00:42
-0400)
committer
Dana Jansens
<danakj@orodu.net>
Sun, 16 Mar 2008 04:42:28 +0000
(
00:42
-0400)
glxrender.c
patch
|
blob
|
history
diff --git
a/glxrender.c
b/glxrender.c
index
6077ccf
..
7a38442
100644
(file)
--- a/
glxrender.c
+++ b/
glxrender.c
@@
-60,6
+60,11
@@
typedef struct {
xcb_xfixes_fetch_region_cookie_t ck_region;
int waiting_region;
xcb_xfixes_fetch_region_cookie_t ck_region;
int waiting_region;
+ int x_region;
+ int y_region;
+ int w_region;
+ int h_region;
+ int bw_region;
} window_data_t;
static gboolean glxrender_find_fb_config(d_screen_t *sc, data_t *d);
} window_data_t;
static gboolean glxrender_find_fb_config(d_screen_t *sc, data_t *d);
@@
-403,7
+408,6
@@
glxrender_update_window_pixmap(d_window_t *w, data_t *d, window_data_t *wd)
d->fbconfig[depth],
px, attrs);
d->fbconfig[depth],
px, attrs);
-
glBindTexture(GL_TEXTURE_2D, wd->texname);
d->bind_func(w->sc->dpy->xlib_dpy,
wd->glpixmap, GLX_FRONT_LEFT_EXT, NULL);
glBindTexture(GL_TEXTURE_2D, wd->texname);
d->bind_func(w->sc->dpy->xlib_dpy,
wd->glpixmap, GLX_FRONT_LEFT_EXT, NULL);
@@
-415,14
+419,13
@@
glxrender_update_window_pixmap(d_window_t *w, data_t *d, window_data_t *wd)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
-
- glxrender_update_window_region(w, wd);
}
static void
glxrender_fetch_window_region(d_window_t *w, window_data_t *wd)
{
}
static void
glxrender_fetch_window_region(d_window_t *w, window_data_t *wd)
{
- if (wd->waiting_region) return;
+ window_get_area(w, &wd->x_region, &wd->y_region,
+ &wd->w_region, &wd->h_region, &wd->bw_region);
wd->ck_region =
xcb_xfixes_fetch_region_unchecked(w->sc->dpy->conn,
wd->ck_region =
xcb_xfixes_fetch_region_unchecked(w->sc->dpy->conn,
@@
-436,15
+439,14
@@
glxrender_update_window_region(d_window_t *w, window_data_t *wd)
{
xcb_xfixes_fetch_region_reply_t *rep;
xcb_rectangle_t area, *rects;
{
xcb_xfixes_fetch_region_reply_t *rep;
xcb_rectangle_t area, *rects;
- int nrects, i, j
, x, y, wid, hei, bwid
;
+ int nrects, i, j;
if (!wd->waiting_region) return;
if (!wd->waiting_region) return;
- window_get_area(w, &x, &y, &wid, &hei, &bwid);
- area.x = x;
- area.y = y;
- area.width = wid + bwid * 2;
- area.height = hei + bwid * 2;
+ area.x = wd->x_region;
+ area.y = wd->y_region;
+ area.width = wd->w_region + wd->bw_region * 2;
+ area.height = wd->h_region + wd->bw_region * 2;
rep = xcb_xfixes_fetch_region_reply(w->sc->dpy->conn, wd->ck_region, NULL);
if (!rep) {
rep = xcb_xfixes_fetch_region_reply(w->sc->dpy->conn, wd->ck_region, NULL);
if (!rep) {
@@
-463,20
+465,20
@@
glxrender_update_window_region(d_window_t *w, window_data_t *wd)
for (i = j = 0; i < nrects * 4; ++j, i += 4) {
wd->texcoords[i+LEFT] =
for (i = j = 0; i < nrects * 4; ++j, i += 4) {
wd->texcoords[i+LEFT] =
- (GLfloat)(rects[j].x - x) / (GLfloat)area.width;
+ (GLfloat)(rects[j].x -
area.
x) / (GLfloat)area.width;
wd->texcoords[i+TOP] =
wd->texcoords[i+TOP] =
- (GLfloat)(rects[j].y - y) / (GLfloat)area.height;
+ (GLfloat)(rects[j].y -
area.
y) / (GLfloat)area.height;
wd->texcoords[i+RIGHT] =
wd->texcoords[i+RIGHT] =
- (GLfloat)(rects[j].x - x + rects[j].width) /
+ (GLfloat)(rects[j].x -
area.
x + rects[j].width) /
(GLfloat)area.width;
wd->texcoords[i+BOTTOM] =
(GLfloat)area.width;
wd->texcoords[i+BOTTOM] =
- (GLfloat)(rects[j].y - y + rects[j].height) /
+ (GLfloat)(rects[j].y -
area.
y + rects[j].height) /
(GLfloat)area.height;
(GLfloat)area.height;
- wd->vertices[i+LEFT] = rects[j].x - x;
- wd->vertices[i+TOP] = rects[j].y - y;
- wd->vertices[i+RIGHT] = rects[j].x - x + rects[j].width;
- wd->vertices[i+BOTTOM] = rects[j].y - y + rects[j].height;
+ wd->vertices[i+LEFT] = rects[j].x -
area.
x;
+ wd->vertices[i+TOP] = rects[j].y -
area.
y;
+ wd->vertices[i+RIGHT] = rects[j].x -
area.
x + rects[j].width;
+ wd->vertices[i+BOTTOM] = rects[j].y -
area.
y + rects[j].height;
}
if (rep)
}
if (rep)
@@
-535,8
+537,6
@@
glxrender_window_resize(d_window_t *w)
assert(wd != NULL);
glxrender_free_window_pixmap(w, d, wd);
assert(wd != NULL);
glxrender_free_window_pixmap(w, d, wd);
-
- glxrender_free_window_region(wd);
glxrender_fetch_window_region(w, wd);
}
glxrender_fetch_window_region(w, wd);
}
@@
-554,8
+554,6
@@
glxrender_window_reshape(d_window_t *w)
assert(wd != NULL);
glxrender_free_window_pixmap(w, d, wd);
assert(wd != NULL);
glxrender_free_window_pixmap(w, d, wd);
-
- glxrender_free_window_region(wd);
glxrender_fetch_window_region(w, wd);
}
glxrender_fetch_window_region(w, wd);
}
@@
-714,6
+712,8
@@
paint_window(d_window_t *w, data_t *d, window_data_t *wd, int x, int y,
if (!wd->glpixmap)
glxrender_update_window_pixmap(w, d, wd);
if (!wd->glpixmap)
glxrender_update_window_pixmap(w, d, wd);
+ if (wd->waiting_region)
+ glxrender_update_window_region(w, wd);
if (wd->nrects < 1) return;
if (wd->nrects < 1) return;