[I just saw Jim's reply but here's what I was going to send anyway].

On 9/30/2013 10:52 PM, Clemens Eisserer wrote:
Hi,

I am currently testing compatibility of the xrender pipeline with
different composition operations, and I noticed for AlphaComposite.SRC
the D3D and OGL pipelines store pre-multiplied colors in surfaces
without an alpha-channel.

For example the following code results in a black rectangle, instead
of a red one when rendering to a BufferedImage of type INT_RGB:

                 ((Graphics2D) g).setComposite(AlphaComposite.Src);
                 g.setColor(new Color(255, 0, 0, 2));
                 g.fillRect(10, 10, 100, 100);

Is this intentional or should it be considered a bug?


Thanks, Clemens

Do you really mean rendering to a BufferedImage ?
I can reproduce this but only rendering directly to the D3D/OGL surface.
Does my example below capture what you mean ?
It sounds wrong as if there's no alpha channel the values should be stored
non-premultiplied.

Having said that if I set the source alpha to 0, then I'd expected
the dest RGB to be 0,0,0. And that is what the h/w pipes do, but
not the s/w pipe which just stores red.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

public class SrcComp extends Canvas {

    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;
        int w = getWidth();
        int h = getHeight();
        g2d.setColor(Color.black);
        g2d.fillRect(0, 0, w, h);
        g2d.setComposite(AlphaComposite.Src);
        g2d.setColor(new Color(255, 0, 0, 0));
        g2d.fillRect(50, 50, w/2, h/2);
    }

    public static void main(String[] args) {

        SrcComp test = new SrcComp();
        final Frame frame = new Frame();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                frame.dispose();
            }        });
        frame.add(test);
        frame.pack();
        frame.setSize(600, 600);
        frame.setVisible(true);
    }
}

-phil.

Reply via email to