Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jogl中渲染大型VBO对象_Java_Opengl_Rendering_Jogl_Vbo - Fatal编程技术网

Java 在jogl中渲染大型VBO对象

Java 在jogl中渲染大型VBO对象,java,opengl,rendering,jogl,vbo,Java,Opengl,Rendering,Jogl,Vbo,我正在尝试渲染大型VBO数组对象,其中包含约700000个值,我的元素数组缓冲区中有约1500000个值。但我得到的是一个空白屏幕。另一方面,如果我只使用VAO,我的代码工作正常。我的代码如下: //Data buffers FloatBuffer vertexBuffer = GLBuffers.newDirectFloatBuffer(this.coordCount); vertexBuffer.put(Vertices); vertexBuffer.rewi

我正在尝试渲染大型VBO数组对象,其中包含约700000个值,我的元素数组缓冲区中有约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的,这可能会使您的程序无响应。

它适用于小型vbo对象吗?是的,我已经尝试了50个三角形,它正适用于此。但不适用于大型数据集。您使用的是什么GPU?您是否正在运行软件仿真?您是否确保应用程序不会在加载数据时挂起?这是图形卡型号:01:00.0 VGA兼容控制器:Advanced Micro Devices,Inc.[AMD/ATI]Whistler[Radeon HD 6730M/6770M/7690M XT](版本ff)