graphics, black box

I tried your idea and I get this exception:

java.lang.IllegalArgumentException: Number of remaining buffer elements is 1024, must be at least 4096
at org.lwjgl.BufferChecks.throwBufferSizeException(BufferChecks.java:125)
at org.lwjgl.BufferChecks.checkBufferSize(BufferChecks.java:140)
at org.lwjgl.NondirectBufferWrapper.wrapBuffer(NondirectBufferWrapper.java:101)
at org.lwjgl.opengl.GL11.glTexImage2D(GL11.java:2703)
at Texture.setImage(Texture.java:128)
at Texture.setImage(Texture.java:209)
at Game.init(Game.java:74)
at Game.main(Game.java:41)
at __SHELL0.run(__SHELL0.java:7)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at bluej.runtime.ExecServer$3.run(ExecServer.java:792)

I did have to make the Image IO read a url though
ImageIO.read(url);

4 bytes per pixel… so need 4x the bytes in your buffer.

Cas :slight_smile:

how do I control that?

In “setImage(BufferedImage img)”, I transform the BufferedImage in a intBuffer or a ByteBuffer.

The image that you try to load fall in a case that I didn’t accounter before (it’s treaky for me to make a general rules… if someone can help me).

So basicly, you need to add in “setImage(BufferedImage img)” your image type :


if ( ???? )
{
   ByteBuffer imageData = ByteBuffer.allocateDirect(4 * img.getWidth() * img.getHeight());
   byte data[] = (byte[]) img.getRaster().getDataElements(0, 0, img.getWidth(), img.getHeight(), null);
   imageData.put(data);
   imageData.flip();
        
   setImage(img.getWidth(),img.getHeight(),GL11.GL_RGBA,imageData);
}


hmmmm, may be there is an error too (GL11.GL_UNSIGNED_INT). I can’t test it right now :


{
      bind();
    
      GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 
                        0, type, GL11.GL_UNSIGNED_INT, imageData);
 
      int error = GL11.glGetError();
      if( error != GL11.GL_NO_ERROR)
      {
        System.out.println("Texture.setImage : error OpenGL ("+error+")");
      }
  
      unbind();
    }

What type of image are you loading ? Can you give me a link to your image ?
I’m interresting to complet my own library ;D

it is a simple gif. here is the link: http://www.planetalia.com/cursos/Java-Invaders/res/nave.gif

I am trying out slick. and I get this error.


java.lang.NoClassDefFoundError: org/newdawn/slick/util/LogSystem
	at TestUtils.init(TestUtils.java:104)
	at TestUtils.start(TestUtils.java:47)
	at TestUtils.main(TestUtils.java:220)
Caused by: java.lang.ClassNotFoundException: org.newdawn.slick.util.LogSystem
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	at TestUtils.init(TestUtils.java:104)
	at TestUtils.start(TestUtils.java:47)
	at TestUtils.main(TestUtils.java:220)
	at __SHELL8.run(__SHELL8.java:7)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at bluej.runtime.ExecServer$3.run(ExecServer.java:792)

thx for you guys’s help :slight_smile:

heckboy can you just post a link to your source code, ill go through it and take a look.

I noticed your using blueJ, maybe try get into eclipse its honestly alot better.

another good resource for LWJGL help is: www.lwjgl.org/forum

it was for this tut:

https://bob.newdawnsoftware.com/repos/slick/trunk/Slick/src/org/newdawn/slick/tests/TestUtils.java

I have tried moving to netbeans b4, I just am way to used to blueJ. I iwll look into eclipse though.

i used to use blueJ, but its no good for organising big projects.

Pssss, I forgot to put gif with transparency… new code :wink:

public void setImage(BufferedImage img)
    {
      // System.out.println("IMAGE : opaque("+img.getTransparency()+") type("+img.getType()+")");
        
      if(img.getTransparency() == Transparency.OPAQUE)
      {
        if ((img.getType() == BufferedImage.TYPE_BYTE_BINARY)||(img.getType() == BufferedImage.TYPE_BYTE_INDEXED))
        {
          BufferedImage img2 = new BufferedImage(img.getWidth(),img.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
          Graphics g = img2.getGraphics();
          g.drawImage(img, 0, 0, null);
          g.dispose();
          setImage(img2);
        }
        else
        {
          ByteBuffer imageData = ByteBuffer.allocateDirect(3 * img.getWidth() * img.getHeight());
          byte data[] = (byte[]) img.getRaster().getDataElements(0, 0, img.getWidth(), img.getHeight(), null);
          imageData.put(data);
          imageData.flip();
        
          setImage(img.getWidth(),img.getHeight(),GL11.GL_RGB,imageData);
        }
      }
      else
      {
        if ((img.getType() == BufferedImage.TYPE_BYTE_BINARY)||(img.getType() == BufferedImage.TYPE_BYTE_INDEXED))
        {
          BufferedImage img2 = new BufferedImage(img.getWidth(),img.getHeight(),BufferedImage.TYPE_INT_ARGB);
          Graphics g = img2.getGraphics();
          g.drawImage(img, 0, 0, null);
          g.dispose();
          setImage(img2);
        }
        else if (img.getType() == BufferedImage.TYPE_INT_ARGB )
        {
          IntBuffer imageData = BufferUtils.createIntBuffer(img.getWidth() * img.getHeight());
          int data[] = (int[]) img.getRaster().getDataElements(0, 0, img.getWidth(), img.getHeight(), null);
          imageData.put(data);
          imageData.flip();
        
          setImage(img.getWidth(),img.getHeight(),GL11.GL_RGBA,imageData);
        }
        else
        {
          ByteBuffer imageData = ByteBuffer.allocateDirect(4 * img.getWidth() * img.getHeight());
          byte data[] = (byte[]) img.getRaster().getDataElements(0, 0, img.getWidth(), img.getHeight(), null);
          imageData.put(data);
          imageData.flip();
        
          setImage(img.getWidth(),img.getHeight(),GL11.GL_RGBA,imageData);
        }
      }
    }

Netbeans and Eclipse are similar in functionality and complexity. You might need time to get used to these “big” IDEs, but if you take the time, it might be worth it in the long run. I would advice to try the user tutorials for both IDEs. Netbeans have a good list of them here: http://www.netbeans.org/kb/trails/java-se.html. Eclipse at least has an online help center with some getting started articles: http://help.eclipse.org/ganymede/index.jsp.