Dave:

You have uncovered 2 bugs in Java3D and both of which will be fixed in 1.2.1
beta.


        Bug1: TYPE_3BYTE_BGR does make a copy on windows, the way to avoid copy
              on windows is to use TYPE_CUSTOM

        Bug2: ByReference texture and raster does not work with immediate mode.


As far as filing Java3D bugs, the best way to do this is to send mail to
[EMAIL PROTECTED]



-Uma


> MIME-Version: 1.0
> Date: Thu, 15 Jun 2000 18:59:10 -0500
> From: Dave Hale <[EMAIL PROTECTED]>
> Subject: [JAVA3D] ImageComponent2D by reference does not work with immediate
mode?
> To: [EMAIL PROTECTED]
>
> The code below demonstrates what may be a bug in immediate-mode rendering of
> a texture with image data set by reference. I tested this on:
>
> Java3D 1.2 Maintenance Release Implementation
> JDK 1.3
> Windows NT 4.0
> PentiumIII laptop (Dell Inspiron 7500) with ATI Rage Mobility P OpenGL
>
> Also, despite statements in Java3D demos (and this mailing list) that a
> BufferedImage of TYPE_3BYTE_BGR enables images by reference, I have not
> found this to be true. Therefore, the code below uses a BufferedImage of
> TYPE_CUSTOM, which is the only way I know of (on Windows) to avoid copying
> from a BufferedImage to an ImageComponent2D.
>
> Finally, if someone can point me to a better place to submit a Java3D bug,
> I'd appreciate it. I noticed that I can view Java3D bugs in the Developer
> Connection Bug Database, but I could not find a category for Java3D in the
> "submit bug" form.
>
> Regards,
> Dave
>
> ---
>
> import java.applet.Applet;
> import java.awt.*;
> import java.awt.color.*;
> import java.awt.image.*;
> import com.sun.j3d.utils.applet.MainFrame;
> import com.sun.j3d.utils.universe.*;
> import javax.media.j3d.*;
> import javax.vecmath.*;
>
> /**
>  * Demonstrates a bug in Java3D 1.2.
>  *
>  * Immediate-mode rendering of texture with image data set by reference
>  * yields an (incorrect) all-white image. When by reference is not
> specified,
>  * the displayed image is (correct) shades of gray. Search for byReference
>  * below.
>  *
>  * @author Dave Hale, Landmark Graphics
>  * @version 06/14/2000
>  */
> public class ImmTexByRefBug extends Applet implements Runnable {
>
>   public ImmTexByRefBug() {
>     setLayout(new BorderLayout());
>     GraphicsConfiguration config =
> SimpleUniverse.getPreferredConfiguration();
>     canvas = new Canvas3D(config);
>     canvas.stopRenderer();
>     add("Center",canvas);
>     SimpleUniverse u = new SimpleUniverse(canvas);
>     u.getViewingPlatform().setNominalViewingTransform();
>     new Thread(this).start();
>   }
>
>   public void render() {
>     if (gc == null) {
>       gc = canvas.getGraphicsContext3D();
>       gc.setAppearance(new Appearance());
>       tc = new TexturedQuad();
>     }
>     gc.clear();
>     gc.draw(tc);
>     canvas.swap();
>   }
>
>   public void run() {
>     while (true) {
>       render();
>       Thread.yield();
>     }
>   }
>
>   public static void main(String[] args) {
>     new MainFrame(new ImmTexByRefBug(),256,256);
>   }
>
>   private Canvas3D canvas;
>   private GraphicsContext3D gc = null;
>   private TexturedQuad tc = null;
>
>   private class TexturedQuad extends Shape3D {
>
>     public TexturedQuad() {
>
>       QuadArray qa = new QuadArray(
>         4,QuadArray.COORDINATES|QuadArray.TEXTURE_COORDINATE_2);
>       this.setGeometry(qa);
>       float[] coords = {
>         -0.5f, -0.5f,  0.0f,
>          0.5f, -0.5f,  0.0f,
>          0.5f,  0.5f,  0.0f,
>         -0.5f,  0.5f,  0.0f,
>       };
>       qa.setCoordinates(0,coords);
>       int w = 256;
>       int h = 256;
>       float dw = 0.5f/(float)w;
>       float dh = 0.5f/(float)h;
>       float[] txcoords = {
>              dw,      dh,
>         1.0f-dw,      dh,
>         1.0f-dw, 1.0f-dh,
>              dw, 1.0f-dh,
>       };
>       qa.setTextureCoordinates(0,0,txcoords);
>
>       Appearance a = new Appearance();
>       this.setAppearance(a);
>
>       // If byReference==true, then textured quad is white (WRONG!).
>       // If byReference==false, then textured quad is shades of gray
> (RIGHT).
>       boolean byReference = true;
>       boolean yUp = true;
>
>       // This is the only way I've found to avoid the copy for RGB images.
>       // Documentation says TYPE_3BYTE_BGR will also avoid the copy, but
>       // it does not (another bug?).
>       ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
>       int[] nbits = {8,8,8};
>       ColorModel cm = new ComponentColorModel(
>         cs,nbits,false,false,Transparency.OPAQUE,0);
>       int[] bandoffset = {0,1,2};
>       WritableRaster wr = java.awt.image.Raster.createInterleavedRaster(
>         DataBuffer.TYPE_BYTE,w,h,w*3,3,bandoffset,null);
>       BufferedImage bi = new BufferedImage(cm,wr,false,null);
>       byte[] data =
> ((DataBufferByte)bi.getRaster().getDataBuffer()).getData();
>       for (int i=0,k=0; i<h; ++i) {
>         for (int j=0; j<w; ++j) {
>           byte c = (byte)((i+j)*255/(w+h-2));
>           data[k++] = c;
>           data[k++] = c;
>           data[k++] = c;
>         }
>       }
>       ImageComponent2D ic = new ImageComponent2D(
>         ImageComponent.FORMAT_RGB8,w,h,byReference,yUp);
>       ic.set(bi);
>       Texture2D tx = new Texture2D(Texture.BASE_LEVEL,Texture.RGB,w,h);
>       tx.setMagFilter(Texture.BASE_LEVEL_LINEAR);
>       tx.setMinFilter(Texture.BASE_LEVEL_LINEAR);
>       tx.setImage(0,ic);
>       tx.setEnable(true);
>       a.setTexture(tx);
>     }
>   }
> }
>
> ===========================================================================
> 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".

===========================================================================
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