簡體   English   中英

在jogl中渲染大型VBO對象

[英]Rendering large VBO objects in jogl

我正在嘗試渲染大型VBO數組對象,其中包含〜700000個值,並且我的element_array緩沖區中有〜1500000個值。 但是我得到的是空白屏幕。 另一方面,如果我僅使用VAO,則我的代碼可以正常工作。 我的代碼如下:

    //Data buffers
    FloatBuffer vertexBuffer = GLBuffers.newDirectFloatBuffer(this.coordCount);
    vertexBuffer.put(Vertices);
    vertexBuffer.rewind();

    IntBuffer indexBuffer = GLBuffers.newDirectIntBuffer(this.indexCount);
    indexBuffer.put(index);
    indexBuffer.rewind();

    //setting up the VBO
    int nVBO = 2;
    int[] VBO = new int[nVBO];

    gl.glGenBuffers(nVBO, VBO,0);

    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, VBO[0]);
    gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER,VBO[1]);

    gl.glBufferData(GL.GL_ARRAY_BUFFER, this.coordCount*Float.SIZE, vertexBuffer, GL.GL_STATIC_DRAW);
    gl.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, this.indexCount*Integer.SIZE, indexBuffer, GL.GL_STATIC_DRAW);

    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, VBO[0]);
    gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, VBO[1]);

    gl.glEnableClientState(GLPointerFunc.GL_VERTEX_ARRAY);

    gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
    //gl.glVertexPointer(3, GL.GL_FLOAT, 0, vertexBuffer);


    //gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4);
    gl.glDrawElements(GL.GL_TRIANGLES, this.indexCount, GL.GL_UNSIGNED_INT, 0);
    //gl.glDrawElements(GL.GL_TRIANGLES, this.indexCount, GL.GL_UNSIGNED_INT, indexBuffer);


    gl.glDisableClientState(GLPointerFunc.GL_VERTEX_ARRAY);
    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
    gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);

關於如何解決此問題的任何線索/建議?

每次循環運行時都會調用此代碼塊嗎? 如果是這樣,則應將vbo階段划分為不同的塊。 此示例代碼可以幫助您進行划分。 (在我發布的鏈接中,您應該只關注initVBO和renderVbo函數)我猜您是按順序初始化vbo的,這可能會使您的程序無響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM