Here is another report.
Thanks,
-Oleg
>
>  ************************************************
>Your report has been assigned an internal review ID of: 137624
>
>This review ID is NOT visible on the "Java Developer Connection" (JDC).
>--------------------------------------------
>dateCreated: Thu Dec 20 16:59:56 MST 2001
>type: bug
>cust_name: Oleg Pariser
>cust_email: [EMAIL PROTECTED]
>jdcid: opariser
>status: Waiting
>category: java3d
>subcategory: other
>company: Jet Propulsion Lab
>release: 1.2.1
>hardware: sun4
>OSversion: sol2.7
>priority: 4
>synopsis: J3DGraphics2D.drawAndFlushImage(...) doesn't work well
>with J3DG2D.copyArea()
>description: FULL PRODUCT VERSION :
>java version "1.4.0-beta3"
>Java(TM) 2 Runtime Environment, Standard Edition (build
>1.4.0-beta3-b84)
>Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed
>mode)
>
>FULL OPERATING SYSTEM VERSION :
>SunOS monolith 5.7 Generic_106541-16 sun4u sparc
>SUNW,Ultra-5_10
>
>
>
>EXTRA RELEVANT SYSTEM CONFIGURATION :
>Java 3D(TM) 1.3 Beta 1
>Java Advanced Imaging(JAI) v1.1.1
>
>A DESCRIPTION OF THE PROBLEM :
>The new method call in Java3D v1.3 beta1
>J3DGraphics2D.drawAndFlushImage(...) gives inconsistent
>results when followed by J3DGraphics2D.copyArea(...) call.
>By inconsistent results I mean repainting the image leads to
>the one of the following:
>a) copyArea is not copied
>b) copyArea is copied( correct result)
>c) Only first few rows of Image repainted, the rest is
>background color.
>d) Only copied area gets repainted, the rest is background
>color.
>e) The whole image area of background color.
>
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>Here is a rendering loop:
>
>_j3DG2D.flush(true);
>_gc3D.clear();
>_j3DG2D.drawAndFlushImage(_image, 0, 0, null);
>_j3DG2D.copyArea(30, 30, 100, 100, 100, 200);
>_j3DG2D.flush(true);
>_gc3D.flush(true);
>
>If I substitute _j3DG2D.drawAndFlushImage(_image, 0, 0,
>null) call with equivalent two separate calls listed below,
>then the behavior of the program is consistent and correct.
>
>_j3DG2D.drawImage(_image, 0, 0, null);
>_j3DG2D.flush(true);
>
>
>
>STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
>1.Compile and run attached program Test.java
>2.Resize window or do something else to trigger
>paint(Graphics g) execution.
>3.Look at the results.
>
>EXPECTED VERSUS ACTUAL BEHAVIOR :
>Expected result is that image gets redrawn with portion of
>the image gets copied as specified by copyArea(...) call.
>
>Actual result varies:
>a) copyArea is not copied
>b) copyArea is copied( correct result)
>c) Only first few rows of Image repainted, the rest is
>background color.
>d) Only copied area gets repainted, the rest is background
>color.
>e) The whole image area of background color.
>
>This bug can be reproduced always.
>
>---------- BEGIN SOURCE ----------
>import java.awt.*;
>import java.awt.image.*;
>import java.awt.color.*;
>import javax.swing.*;
>import javax.vecmath.*;
>import javax.media.j3d.*;
>import javax.media.jai.*;
>import com.sun.j3d.utils.universe.SimpleUniverse;
>import com.sun.media.jai.codec.ImageCodec;
>
>public class Test extends Canvas3D {
>
>     //Properties
>
>     private GraphicsContext3D     _gc3D;
>     private J3DGraphics2D         _j3DG2D;
>     private BufferedImage         _image;
>
>     public Test(GraphicsConfiguration config, BufferedImage
>image)
>     {
>       super(config);
>
>       _image = image;
>
>       //Stop the renderer, since we use immediate mode rendering.
>       stopRenderer();
>       // Create a simple scene and attach it to the virtual universe
>               SimpleUniverse universe = new SimpleUniverse(this);
>
>         // This will move the ViewPlatform back a bit so the
>         // objects in the scene can be viewed.
>
>universe.getViewingPlatform().setNominalViewingTransform();
>     }
>
>     public void paint(Graphics g)
>     {
>       super.paint(g);
>               if(_gc3D == null || _j3DG2D == null) {
>
>           setDoubleBufferEnable(false);
>
>           _gc3D = getGraphicsContext3D();
>           _gc3D.setBufferOverride(true);
>           _gc3D.setAppearance(new Appearance());
>           _gc3D.setBackground(new Background(new
>Color3f(Color.black)));
>
>           _j3DG2D = getGraphics2D();
>       }
>
>       _j3DG2D.flush(true);
>       _gc3D.clear();
>
>       _j3DG2D.drawAndFlushImage(_image, 0, 0, null);
>       /*
>       _j3DG2D.drawImage(_image, 0, 0, null);
>       _j3DG2D.flush(true);
>       */
>       _j3DG2D.copyArea(30, 30, 100, 100, 100, 200);
>       _j3DG2D.flush(true);
>       _gc3D.flush(true);
>     }
>
>     /**
>      * This function simply calls paint(Graphics g) which is
>different
>      * from parent's implementation
>      */
>     public void update(Graphics g)
>     {
>       paint(g);
>     }
>
>     public static void main(String[] argv)
>     {
>       if(argv.length != 1){
>           System.out.println("Usage: java Test imageFileName");
>           System.exit(0);
>       }
>       GraphicsConfigTemplate3D template = new
>GraphicsConfigTemplate3D();
>       GraphicsConfiguration config
>                     =
>GraphicsEnvironment.getLocalGraphicsEnvironment().
>
>getDefaultScreenDevice().getBestConfiguration(template);
>
>       PlanarImage image = JAI.create("fileload", argv[0]);
>       Test myCanvas3D = new Test(config,
>image.getAsBufferedImage());
>
>       JFrame jFrame = new JFrame();
>       jFrame.getContentPane().setLayout(new BorderLayout());
>               jFrame.getContentPane().add(myCanvas3D,
>BorderLayout.CENTER);
>
>       jFrame.pack();
>       jFrame.setSize(400, 500);
>       jFrame.setVisible(true);
>     }
>}
>---------- END SOURCE ----------
>
>CUSTOMER WORKAROUND :
>Instead of using new feature in Java3D v1.3
>J3DGraphics2D.drawAndFlushImage(...), use two separate
>calls:
>J3DGraphics2D.drawImage(...);
>J3DGraphics2D.flush(true);
>
>which is equivalent but involves extra image copy which
>affects performance.
>workaround:
>comments: (company - Jet Propulsion Lab , email - [EMAIL PROTECTED])


--

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to