Как освободить память, выделенную LWJGL - PullRequest
0 голосов
/ 10 июля 2020

Мое Java приложение с LWJGL выделяет память на неопределенный срок, пока приложение не будет удалено. Очевидно, эта часть кода вызывает выделение памяти в цикле. Отсутствует ли выпуск памяти? Обращается за помощью.

public void renderMesh(GameObject object, Camera camera) {
    GL30.glBindVertexArray(object.getMesh().getVAO());
    GL30.glEnableVertexAttribArray(0);
    GL30.glEnableVertexAttribArray(1);
    GL30.glEnableVertexAttribArray(2);
    
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, object.getMesh().getIBO());
    
    shader.bind();
    shader.setUniform("model", Matrix4f.transform(object.getPosition(), object.getRotate(), object.getScale()));
    shader.setUniform("view", Matrix4f.view(camera.getPosition(), camera.getRotation()));
    shader.setUniform("projection", window.getProjectionMatrix());
    
    GL13.glActiveTexture(GL13.GL_TEXTURE0);
    GL13.glBindTexture(GL11.GL_TEXTURE_2D, object.getMesh().getMaterial(0).getTextureID());

    GL11.glDrawElements(GL11.GL_TRIANGLES, object.getMesh().getIndices().length, GL11.GL_UNSIGNED_INT, 0);
    
    shader.unbind();
    
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
        
    GL30.glDisableVertexAttribArray(0);
    GL30.glDisableVertexAttribArray(1);
    GL30.glDisableVertexAttribArray(2);
    GL30.glBindVertexArray(0);
}

1 Ответ

0 голосов
/ 17 июля 2020

В вашем коде нет ничего явно освобождаемого. Но, возможно, есть два элемента:

  1. Вы уверены, что освободите ресурсы и буферы, используемые сетками вашего объекта?
  2. И удалили ли вы свою шейдерную программу после использования?
...