2017-05-26 1 views
0

J'essaie de charger des textures pour mon projet lwjgl avec la méthode intégrée ImageIO.read (fichier).Blocs de programme lors de l'appel ImageIO.read (fichier)

La création d'un nouvel objet Fichier fonctionne, c'est dans la méthode ImageIO.read() que j'ai un problème.

public Texture(String fileName) { 

System.out.println("Texture init called"); 

try { 
    File img = new File("brick.png"); 
    System.out.println(img.exists()); //Returns true 
    System.out.println(img.getAbsolutePath()); //Returns the correct path "/Users/griffinbabe/Documents/workspace/LWJGLTest/brick.png" 
    System.out.println(img.canRead()); //Returns true 
    Image im = ImageIO.read(img); //Blocks here, letting no printStackTrace, and letting the program running. 
    System.out.println("Yes you did it!"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Ceci est étrange, je n'ai jamais rencontré le problème. Si cela peut vous aider, je l'utilise sur mac os Sierra et j'utilise openGL.

Voici la classe principale, où le nouvel objet Texture est initialisé.

public Window(int sizeX, int sizeY,Game game) { 
    this.game = game; 

    if (!glfwInit()) { 
     throw new IllegalStateException("GLFW failed to initialize."); 
    } 

    window = glfwCreateWindow(sizeX,sizeY,"Game3Graphics",0,0); 

    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); 

    if (window == 0) { 
     throw new IllegalStateException("Failed to create window."); 
    } 

    GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor()); 
    glfwSetWindowPos(window, (videoMode.width()-sizeX)/2, (videoMode.height()-sizeY)/2); 

    glfwShowWindow(window); 

    glfwMakeContextCurrent(window); 

    GL.createCapabilities(); 

    glEnable(GL_TEXTURE_2D); 

    Texture texture = new Texture("brick.png"); //Here is the init call. 

    System.out.println("texture finished loading"); 

Une idée de ce que cela pourrait être?

Merci.

[EDIT]

Étrangement, la méthode ImageIO.read() fonctionne si je l'appelle avant de créer une fenêtre avec glfwCreateWindow(). Cela a quelque chose à voir avec lwjgl, pas l'accès au fichier.

+1

Où est le fichier "brick.png" par rapport au répertoire de l'utilisateur? Pourquoi utilisez-vous des fichiers en premier lieu et non des ressources? –

+0

@HovercraftFullOfEels Je suppose qu'il existe d'autres façons de charger des images. J'utilise celui-ci parce que c'est assez simple. Le fichier brick.png est placé dans le dossier du projet eclipse (même dossier que 'src'). Je l'ai toujours fait comme ça et c'est la première fois que j'ai un problème avec. – GriffinBabe

+0

@ CraigR8806 SlickUtils n'est plus pris en charge dans LWJGL plus, depuis LWJGL 3 – GriffinBabe

Répondre

0

Je ne pouvais pas comprendre le vrai problème alors j'ai essayé de déclencher le constructeur de texture dans beaucoup d'endroits. Apparemment, tout fonctionne bien si vous appelez ImageIO.read() AVANT la méthode glfwCreateWindow().

J'ai donc juste besoin de charger d'abord l'image buffered, puis de créer une fenêtre et enfin charger la texture dans le GPU via les méthodes OpenGL habituelles.

Ceci est probablement un bogue de version. Je suis sur LWJGL 3.1.2 build 29