首页 > 解决方案 > 如何释放 LWJGL 分配的内存

问题描述

我的带有 LWJGL 的 Java 应用程序无限期地分配内存,直到应用程序被删除。显然这部分代码导致了循环中的内存分配。是否缺少内存释放?求帮助。

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

标签: javamemorylwjgl

解决方案


在您的代码中,没有任何内容可以明确释放。但可能有两个要素:

  1. 您确定释放对象网格使用的资源和缓冲区吗?
  2. 你在使用后是否删除了你的着色器程序?

推荐阅读