我很难让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个块。