OffScreen Canvas3D speed.

Does anyone know if Canvas3D offscreen rendering is hw accelerated ?

yes, it is

Grabbing it is very very very slow if compared with onscreen canvas readRaster().

I also found a major drawback: the offscreen canvas is not antialiased while offscreen is…

here’s my OffScreen canvas implementation. Very simple indeed. It’s derived from the Sun implementation and optimized for subsequent doRender() calls.



class OffScreenCanvas3D extends Canvas3D
{
    private BufferedImage bImage = null;
    private ImageComponent2D buffer = null;

    OffScreenCanvas3D(GraphicsConfiguration graphicsConfiguration, boolean offScreen)
    {
        super(graphicsConfiguration, offScreen);
    }

    void initRender(int width, int height)
    {
        getScreen3D().setSize(width, height);
        getScreen3D().setPhysicalScreenWidth(0.0254 / 90.0 * width);
        getScreen3D().setPhysicalScreenHeight(0.0254 / 90.0 * height);

        
        bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        ImageComponent2D buffer = new ImageComponent2D(ImageComponent.FORMAT_RGBA, bImage,true,false);
        buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ|ImageComponent2D.ALLOW_IMAGE_WRITE);

        setOffScreenBuffer(buffer);
    }

    BufferedImage doRender(int width, int height)
    {
        renderOffScreenBuffer();
        waitForOffScreenRendering();
        bImage = getOffScreenBuffer().getImage();

        return bImage;
    }

    public void postSwap()
    {
        // No-op since we always wait for off-screen rendering to complete
    }
}