rendered paste bodyIndex: beryl-core/include/beryl.h
===================================================================
--- beryl-core/include/beryl.h (Revision 1715)
+++ beryl-core/include/beryl.h (Arbeitskopie)
@@ -1305,6 +1305,10 @@
CompIcon *icon);
Bool
+imageToTexture (CompScreen *screen, CompTexture *texture,
+ char *image, unsigned int width, unsigned int height);
+
+Bool
bindPixmapToTexture (CompScreen *screen,
CompTexture *texture,
Pixmap pixmap,
Index: beryl-core/src/texture.c
===================================================================
--- beryl-core/src/texture.c (Revision 1715)
+++ beryl-core/src/texture.c (Arbeitskopie)
@@ -103,7 +103,7 @@
free(texture);
}
-static Bool
+Bool
imageToTexture(CompScreen * screen,
CompTexture * texture,
char *image, unsigned int width, unsigned int height)
Index: beryl-group-tab/group.c
===================================================================
--- beryl-group-tab/group.c (Revision 1715)
+++ beryl-group-tab/group.c (Arbeitskopie)
@@ -330,7 +330,7 @@
int x2;
int y2;
- GLuint glowTexture;
+ CompTexture glowTexture;
} GroupScreen;
/*
@@ -2497,7 +2497,49 @@
Bool status;
GROUP_WINDOW(w);
GROUP_SCREEN(w->screen);
+#if 0
+ if (gw->inGroup && gs->opt[GROUP_SCREEN_OPTION_GLOW].value.b) {
+ if (mask & PAINT_WINDOW_TRANSFORMED_MASK)
+ region = getInfiniteRegion();
+ if (region->numRects) {
+ REGION box;
+ CompMatrix matrix;
+
+ box.rects = &box.extents;
+ box.numRects = 1;
+
+ w->vCount = 0;
+
+ int glowBorderX = 12;
+ int glowBorderY = 12;
+ int glowWidth = 128;
+ int glowHeight = 128;
+
+ int overlapX, overlapY;
+ overlapX = (WIN_WIDTH(w) * glowBorderX) / (glowWidth - glowBorderX * 2);
+ overlapY = (WIN_HEIGHT(w) * glowBorderY) / (glowHeight - glowBorderY * 2);
+
+ box.extents.x1 = WIN_X(w) - w->input.left - overlapX;
+ box.extents.y1 = WIN_Y(w) - w->input.top - overlapY;
+ box.extents.x2 = WIN_X(w) + w->input.right + WIN_WIDTH(w) + overlapX;
+ box.extents.y2 = WIN_Y(w) + w->input.right + WIN_HEIGHT(w) + overlapY;
+
+ matrix = gs->glowTexture.matrix;
+ matrix.x0 -= (w->attrib.x * gs->glowTexture.matrix.xx);
+ matrix.y0 -= (w->attrib.y * gs->glowTexture.matrix.yy);
+
+ if (box.extents.x1 < box.extents.x2 &&
+ box.extents.y1 < box.extents.y2) {
+ (*w->screen->addWindowGeometry) (w, &matrix, 1, &box, region);
+ }
+ }
+
+ if (w->vCount)
+ (*w->screen->drawWindowTexture) (w, &gs->glowTexture, attrib,
+ mask | PAINT_WINDOW_TRANSLUCENT_MASK);
+ }
+#endif
UNWRAP(gs, w->screen, drawWindow);
status = (*w->screen->drawWindow) (w, attrib, region, mask);
@@ -2543,13 +2585,14 @@
}
// paint glow
+#if 1
if (gw->inGroup && gs->opt[GROUP_SCREEN_OPTION_GLOW].value.b) {
glPushMatrix();
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_BLEND);
- if (gs->glowTexture) {
- glBindTexture(GL_TEXTURE_2D, gs->glowTexture);
+ if (gs->glowTexture.name) {
+ glBindTexture(GL_TEXTURE_2D, gs->glowTexture.name);
glEnable(GL_TEXTURE_2D);
}
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
@@ -2602,6 +2645,7 @@
damageScreenRegion(w->screen, reg);
}
+#endif
if (gw->inGroup &&
gw->group->tabbed && gw->group->topTab != -1 &&
@@ -3058,13 +3102,8 @@
gs->grabIndex = 0;
// bind texture for glow
- glGenTextures(1, &gs->glowTexture);
- glBindTexture(GL_TEXTURE_2D, gs->glowTexture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, glowTex);
- glBindTexture(GL_TEXTURE_2D, 0);
+ initTexture (s, &gs->glowTexture);
+ imageToTexture (s, &gs->glowTexture, (char*) glowTex, 128, 128);
return TRUE;
}