2013-01-22 2 views
1

타일 기반의 게임을 만들고 있고 타일의 텍스처는 16x16입니다. 내가 렌더링 할 수 있도록 텍스처를로드하려고 할 때마다, 는이 오류를 얻을 :16x16 텍스처가 너무 크고 Java OpenGL

java.io.IOException: Attempt to allocate a texture to big for the current hardware 
at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:292) 
at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:231) 
at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:184) 
at org.newdawn.slick.opengl.TextureLoader.getTexture(TextureLoader.java:64) 
at org.newdawn.slick.opengl.TextureLoader.getTexture(TextureLoader.java:24) 
at main.Tile.loadTexture(Tile.java:124) 
at main.Draw.drawMap(Draw.java:282) 
at main.Draw.render(Draw.java:324) 
at main.LaunchWindow.main(LaunchWindow.java:65) 
Exception in thread "main" java.lang.NullPointerException 
at main.Draw.drawMap(Draw.java:284) 
at main.Draw.render(Draw.java:324) 
at main.LaunchWindow.main(LaunchWindow.java:65) 

지금, 나는 나의 GPU가 그것 때문에 1GB의 카드를 처리 할 수있는 것을 알고있다.

나는

GL11.glGetInteger(GL11.GL_MAX_TEXTURE_SIZE) 

를 실행하고 여기에

16384은 텍스처로드 코드입니다 가지고 :

: 그것은 렌더링해야 할 때

public void loadTexture(String a){ 
    try { 
     texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream(a)); 
     System.out.println(texture.getTextureRef()); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

그리고라는 코드를

public void drawMap(Map b){ 
    Color.white.bind(); 
    glBegin(GL_QUADS); 

    b.divideMap(10); 
    Tile[][] t = b.makeMap(b.getK()); 

    for(int y = 0; y < b.tiles.length; y++){ 
     for(int x = 0; x < b.tiles[y].length; x++){ 
      Texture a; 
      t[y][x].loadTexture(t[y][x].getLocation()); 
      a = t[y][x].getTexture(); 
      System.out.println(a.getTextureRef()); 
      a.bind(); 
      glTexCoord2f(0,0); 
      glVertex2f(x,y); 
      glTexCoord2f(1,0); 
      glVertex2f(x + a.getWidth(), y); 
      glTexCoord2f(1,1); 
      glVertex2f(x + a.getWidth(), y + a.getHeight()); 
      glTexCoord2f(0,1); 
      glVertex2f(x, y + a.getHeight()); 
     } 
    } 

    glEnd(); 
} 

답변

3

단 프레임 워크를 알지 못하지만 코드에서 모든 프레임을 모든 프레임에로드하고 결코 프레임을 릴리스하지 않는 것을 확인합니다. 몇 프레임이 지나면 너는 추억에 남는다.

관련 문제