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();
}