Hi Kelvin,
First of all thanks for accepting and filing bug#4632388. Secondly,
I filed a couple of reports in Sun's Bug Database in late December
and since then haven't heard anything from Sun. So I though maybe
it's a good idea to post reports to this mailing list.
Thanks,
-Oleg Pariser @ NASA-JPL Multimission Image Processing Lab
[EMAIL PROTECTED]
>Date: Thu, 20 Dec 2001 17:23:54 -0800 (PST)
>From: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
>To: [EMAIL PROTECTED]
>Subject: Your Report: J3DGraphics.drawAndFlushImage(...) is ignoring
>GraphicsContext3D.setStereoMode()
>X-IM-Review-ID: 137628
>Status: O
>
> ************************************************
>Your report has been assigned an internal review ID of: 137628
>
>This review ID is NOT visible on the "Java Developer Connection" (JDC).
>
>dateCreated: Thu Dec 20 18:23:52 MST 2001
>type: bug
>cust_name: Oleg Pariser
>cust_email: [EMAIL PROTECTED]
>jdcid: opariser
>status: Waiting
>category: java3d
>subcategory: other
>company: Jet Propulsion Laboratory
>release: 1.2.1
>hardware: sun4
>OSversion: sol2.7
>priority: 4
>synopsis: J3DGraphics.drawAndFlushImage(...) is ignoring
>GraphicsContext3D.setStereoMode()
>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 :
>In Immidiate mode, J3DGraphics2D.drawAndFlushImage(...) is
>ignoring
>GraphicsContext3D.setStereoMode(GraphicsContext3D.STEREO_LEFT)
>setting and renders to both eyes(i.e. stereoMode
>STEREO_BOTH). What is interesting, if I set stereoMode to
>STEREO_LEFT, then call GraphicsContext3D.draw(...), then
>call J3DGraphics2D.drawAndFlushImage(...), the result is
>correct: image is drawn only to left eye.
>But if I set stereoMode to STEREO_LEFT and call
>J3DGraphics2D.drawAndFlushImage(...) *without* calling
>GraphicsContext3D.draw(...) first, the image gets drawn to
>both eyes.
>
>P.S. In describing the problem I used STEREO_LEFT, but the
>same is applicable to STEREO_RIGHT
>
>STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
>1.Compile and run submitted test program which requires two
>imageFileNames to run.
>2. Notice that images gets rendered to both eyes, even
>though the expected result is image#1 rendered to
>STEREO_LEFT and image#2 rendered to STEREO_RIGHT
>
>EXPECTED VERSUS ACTUAL BEHAVIOR :
>Expected result: After calling
>GraphicsContext3D.setStereoMode(GraphicsContext3D.STEREO_LEFT)
>J3DGraphics2D.drawAndFlushImage(...) renders only in left
>eye.
>Actual result: J3DGraphics2D.drawAndFlushImage(...) renders
>in both eyes.
>
>This bug can be reproduced always.
>
>---------- BEGIN SOURCE ----------
>import java.awt.*;
>import java.awt.image.*;
>import java.awt.color.*;
>import javax.vecmath.*;
>import javax.media.j3d.*;
>import com.sun.j3d.utils.universe.SimpleUniverse;
>import javax.swing.event.*;
>import java.awt.event.*;
>import javax.media.j3d.*;
>import javax.media.jai.*;
>import com.sun.media.jai.codec.ImageCodec;
>import com.sun.j3d.utils.geometry.ColorCube;
>import java.awt.image.renderable.*;
>import java.io.*;
>import javax.swing.*;
>
>public class StereoCanvas extends Canvas3D {
>
> //Properties
>
> private GraphicsContext3D _gc3D;
> private J3DGraphics2D _j3DG2D;
> private BufferedImage _imageLeft;
> private BufferedImage _imageRight;
>
> public StereoCanvas(GraphicsConfiguration config,
> BufferedImage imageLeft,
> BufferedImage imageRight)
> {
> super(config);
>
> _imageLeft = imageLeft;
> _imageRight = imageRight;
> //Make sure that stereo is enabled
> setStereoEnable(true);
> //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)));
>
> }
> _gc3D.setStereoMode(GraphicsContext3D.STEREO_BOTH);
> _j3DG2D = getGraphics2D();
> _gc3D.clear();
> _j3DG2D.flush(true);
>
>
> _gc3D.setStereoMode(GraphicsContext3D.STEREO_LEFT);
> //If the line below uncommented then this test program
> //runs correctly
> //_gc3D.draw(new ColorCube(0.01));
> _j3DG2D.drawAndFlushImage(_imageLeft, 0, 0, null);
> _gc3D.setStereoMode(GraphicsContext3D.STEREO_RIGHT);
> //If the line below uncommented then this test program
> //runs correctly
> //_gc3D.draw(new ColorCube(0.01));
> _j3DG2D.drawAndFlushImage(_imageRight, 0, 0, null);
>
> _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 != 2) {
> System.out.println("Usage: java StereoCanvas
>imageLeftFileName imageRightFileName");
> }
> GraphicsConfigTemplate3D template = new
>GraphicsConfigTemplate3D();
> template.setStereo(GraphicsConfigTemplate.REQUIRED) ;
> GraphicsConfiguration config
> =
>GraphicsEnvironment.getLocalGraphicsEnvironment().
>
>getDefaultScreenDevice().getBestConfiguration(template);
> PlanarImage imageLeft = JAI.create("fileload", argv[0]);
> PlanarImage imageRight = JAI.create("fileload", argv[1]);
> StereoCanvas myCanvas3D =
> new StereoCanvas(config,
> imageLeft.getAsBufferedImage(),
> imageRight.getAsBufferedImage());
>
> JFrame jFrame = new JFrame();
> jFrame.getContentPane().setLayout(new BorderLayout());
>
> jFrame.getContentPane().add(myCanvas3D,
>BorderLayout.CENTER);
>
> jFrame.pack();
> jFrame.setSize(200, 300);
> jFrame.setVisible(true);
> }
>}
>
>---------- END SOURCE ----------
>
>CUSTOMER WORKAROUND :
>Set stereoMode to STEREO_LEFT and call
>GraphicsContext3D.draw(...) before calling
>J3DGraphics2D.drawAndFlushImage(...)
>workaround:
>comments: (company - Jet Propulsion Laboratory , 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".