LWJGL - 为什么我的浮子缓冲区不能直接分配?

时间:2014-04-05 13:26:44

标签: java lwjgl

我很难让LWJGL接受我的浮子缓冲区。

我正在使用LWJGL的方法来分配直接浮动缓冲区,但它仍然会为“直接分配”抛出异常。

块类中的两个实例变量:

  

私有Floatbuffer缓冲区;
    private int vertCount;

填充我的顶点数组后:

  

buffer = BufferUtils.createFloatBuffer(vertCount);
    buffer.put(vertArray);
    buffer.rewind();

通过以下方式获取VBO的句柄:

  

vertID = VBOutil.createVBOID();

     

public static int createVBOID()
    {
                IntBuffer buffer = BufferUtils.createIntBuffer(1);
        GL15.glGenBuffers(缓冲液);

  return buffer.get(0);  
     

}

我用来绑定缓冲区的方法:

  

public static void vertexBufferData(int id,FloatBuffer buffer)
    {
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,id);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER,buffer,GL15.GL_STATIC_DRAW);
    }

我的程序流是这样的,每一帧调用都发送到vertexBufferData,然后发送到以下方法:

  

public static void render(int vertID,int numIndices)
    {
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,vertID);

  GL11.glVertexPointer(3,  GL11.GL_FLOAT, 40, 0);  
  GL11.glNormalPointer(GL11.GL_FLOAT, 40, 12);  
  GL11.glColorPointer(4, GL11.GL_FLOAT,  40, 24);  

  GL11.glDrawArrays(GL11.GL_QUADS,  0, numIndices);  

  GL11.glPopMatrix();  
     

}

非常感谢提供的任何帮助。我一直坚持这个问题。

编辑:
这是堆栈跟踪:

  

线程“main”中的异常java.lang.NullPointerException
    在org.lwjgl.BufferChecks.checkDirect(BufferChecks.java:138)
    在org.lwjgl.opengl.GL15.glBufferData(GL15.java:155)
    在lwjgl.VBOutil.vertexBufferData(VBOutil.java:27)
    在lwjgl.Chunk.bind(Chunk.java:35)
    在lwjgl.ChunkLoader.bind(ChunkLoader.java:81)
    在lwjgl.ChunkLoader.render(ChunkLoader.java:68)
    在lwjgl.Scene.update(Scene.java:19)
    在lwjgl.Main.gameLoop(Main.java:32)
    在lwjgl.Main.main(Main.java:17)

vertArray是一个浮点数组。

我的块类是沿着单纯形噪声函数的立方体构成的地形的抽象。我构造'块'并将它们添加到块arraylist中,如果它们在噪声表面的阈值内。然后从每个块中获取顶点信息并将其添加到浮点运算符中。知道大小后,我将顶点信息放入一个数组中,通过LWGL的实用方法放入浮点缓冲区。现在我的chunkloader类只保存1个块,以便我可以调试这个问题。我打算为每个chunk使用单独的VBO句柄,因为chunkloader不应该有超过9个块。

0 个答案:

没有答案