diff options
author | Keith Packard <keithp@keithp.com> | 2016-05-13 16:19:38 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2016-05-26 09:17:59 -0700 |
commit | 181a4bd0cc436f89582408196038ff37032f9bac (patch) | |
tree | bfe2f05ad19c6468c82ae88f08efed2385992e8e /glamor/glamor_transfer.c | |
parent | b07bc700b3cf2f5c8912fc5b9e0dad2baf395525 (diff) |
glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2]
A1 and A8 pixmaps are usually stored in the Red channel to conform
with more recent GL versions. When using these pixmaps as mask values,
that works great. When using these pixmaps as source values, then the
value we want depends on what the destination looks like.
For RGBA or RGB destinations, then we want to use the Red channel
for A values and leave RGB all set to zero.
For A destinations, then we want to leave the R values in the Red
channel so that they end up in the Red channel of the output.
This patch adds a helper function, glamor_bind_texture, which performs
the glBindTexture call along with setting the swizzle parameter
correctly for the Red channel. The swizzle parameter for the Alpha
channel doesn't depend on the destination as it's safe to leave it
always swizzled from the Red channel.
This fixes incorrect rendering in firefox for this page:
https://gfycat.com/HoarseCheapAmericankestrel
while not breaking rendering for this page:
https://feedly.com
v2: Add change accidentally left in patch for missing
glDisable(GL_COLOR_LOGIC_OP).
Found by Emil Velikov <emil.l.velikov@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=63397
Signed-off-by: Keith Packard <keithp@keithp.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
Diffstat (limited to 'glamor/glamor_transfer.c')
-rw-r--r-- | glamor/glamor_transfer.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/glamor/glamor_transfer.c b/glamor/glamor_transfer.c index ed81195b6..d788d06f4 100644 --- a/glamor/glamor_transfer.c +++ b/glamor/glamor_transfer.c @@ -83,8 +83,7 @@ glamor_upload_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox, BoxPtr boxes = in_boxes; int nbox = in_nbox; - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, fbo->tex); + glamor_bind_texture(glamor_priv, GL_TEXTURE0, fbo, TRUE); while (nbox--) { |