Login  Register

PNG Texture not showing (new guy)

Posted by midramble on Oct 12, 2012; 5:15am
URL: https://forum.jogamp.org/PNG-Texture-not-showing-new-guy-tp4026475.html

Hello all. I'm pretty new to JOGL and I've created the below code just to display a png with an alpha channel as a texture on a simple quad. The code throws no exceptions; however, the texture doesn't show and neither does the background color of the quad. As you can also see I've tried other methods of binding textures (the code that is /* */ blocked out) that also didn't work. I just can't seem to see what I'm doing wrong.

[Below is my main class]
public class redoubt
{
    public static void main(String[] args)
    {
    // setup OpenGL Version 2
    GLProfile profile = GLProfile.get(GLProfile.GL2);
    GLCapabilities capabilities = new GLCapabilities(profile);
    capabilities.setRedBits(8);
        capabilities.setBlueBits(8);
        capabilities.setGreenBits(8);
        capabilities.setAlphaBits(8);
        capabilities.setSampleBuffers(true);
 
    // Create canvas
    GLCanvas glcanvas = new GLCanvas(capabilities);
    glcanvas.addGLEventListener(new mainrend());
    glcanvas.setSize( 500, 500 );
    glcanvas.setBackground(Color.WHITE);
 
        JFrame frame = new JFrame( "Redoubt" );
        frame.getContentPane().add(glcanvas);
 
        // shutdown the program on windows close event
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent ev) {
                System.exit(0);
            }
        });
 
        frame.setSize( frame.getContentPane().getPreferredSize() );
        frame.setVisible( true );
    }
}


[below is my render class]
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.Raster;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import javax.imageio.ImageIO;
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.glu.GLU;
import javax.media.opengl.glu.gl2.GLUgl2;

import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureData;
import com.jogamp.opengl.util.texture.TextureIO;
 
class mainrend implements GLEventListener
{
        private GLUgl2 glu = new GLUgl2();
    private Texture dude;
 
    public void init(GLAutoDrawable gLDrawable)
    {
    System.out.println("init() called");
        GL2 gl = gLDrawable.getGL().getGL2();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        gl.glShadeModel(GL2.GL_FLAT);
        gl.glEnable(GL.GL_TEXTURE_2D);
        gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
        gl.glEnable(GL.GL_BLEND);
       
        /*
        try {
            InputStream stream = getClass().getResourceAsStream("dude.png");
            TextureData data = TextureIO.newTextureData(GLProfile.get(GLProfile.GL2) ,stream, false, "png");
            dude = TextureIO.newTexture(data);
            System.out.println("texture load complete");
        }
        catch (IOException exc) {
            System.out.println("text load went to crap with " + exc);
        }
        */
       
    }
   
    public void display(GLAutoDrawable gLDrawable)
    {
    System.out.println("display called");
        final GL2 gl = gLDrawable.getGL().getGL2();
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
       
       
       
        gl.glLoadIdentity();
        gl.glTranslatef(0.0f, 0.0f, -10.0f);
       
        //texture prep
        int Text;
        int retval[]= new int[1];
        gl.glGenTextures(1, retval, 0);
        Text = retval[0];
        gl.glBindTexture(GL.GL_TEXTURE_2D, Text);
       
        mmify(glu, "dude.png");

       
                //Load texture
        /*
        dude.enable(gl);
        dude.bind(gl);
        */
        System.out.println("texture loaded?");
       
       
       
        gl.glBegin(GL2.GL_QUADS);
        gl.glVertex3f(-1.0f, 1.0f, 0.0f);
        gl.glVertex3f(1.0f, 1.0f, 0.0f);
        gl.glVertex3f(1.0f, -1.0f, 0.0f);
        gl.glVertex3f(-1.0f, -1.0f, 0.0f);
        gl.glEnd();
        gl.glFlush();
    }
 
 
    public void displayChanged(GLAutoDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)
    {
    System.out.println("displayChanged called");
    }
 
   
 
    public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height)
    {
    System.out.println("reshape() called: x = "+x+", y = "+y+", width = "+width+", height = "+height);
        final GL2 gl = gLDrawable.getGL().getGL2();
 
        if (height <= 0) // avoid a divide by zero error!
        {
            height = 1;
        }
 
        final float h = (float) width / (float) height;
 
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL2.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, h, 1.0, 20.0);
        gl.glMatrixMode(GL2.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
 
 
        public void dispose(GLAutoDrawable arg0)
        {
                System.out.println("dispose() called");
        }
       
        //create mipmap from png... hence mipmapify
        public void mmify(GLU glu, String imgname) {
                try {
                        InputStream inpstr = ClassLoader.getSystemResourceAsStream(imgname);
                        BufferedInputStream buffinst = new BufferedInputStream(inpstr);
                        BufferedImage buffimg = ImageIO.read(buffinst);
                        Raster rast = buffimg.getRaster();
                        DataBufferByte dbuffb = (DataBufferByte)rast.getDataBuffer();
                        byte b[] = dbuffb.getData();
                        int textsize = b.length;
                        ByteBuffer texture = ByteBuffer.allocateDirect(textsize);
                        texture.order(ByteOrder.nativeOrder());
                        texture.put(b, 0, textsize);
                        texture.rewind();
                        int iwidth = buffimg.getWidth();
                        System.out.println("made iwidth int " + iwidth);
                        int iheight = buffimg.getHeight();
                        System.out.println("made iheight int " + iheight);
                        System.out.println("buffer size = " + textsize);
                        System.out.println("middle 4 bytes are: " + b[(textsize/2)] + ", " + b[textsize/2+1] + ", " + b[textsize/2+2] + ", " + b[textsize/2+3]);
                       
                        glu.gluBuild2DMipmaps(GL.GL_TEXTURE_2D, GL.GL_RGBA8, iwidth, iheight, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, texture);
                }
                catch (Exception e) {
                        System.out.println("Some crap happend in mmify " + e);
                }
        }
}