Java 缓冲VBO数据时的小延迟
我正在开发一个以minecraft为灵感的图形引擎,不久将在实际游戏中实现。我已经让引擎在几何应力测试下达到60+每秒。我只使用LWJGL进行图形辅助。在本地内存上更新VBO数据时,我曾经有过很大的延迟,但我通过多线程、优化和同步通用块剔除器/构造函数解决了这一问题 在剔除后将VBO数据缓冲到视频内存的过程中,我偶尔会遇到一个小故障(20-3000毫秒),这可能会导致屏幕在该时间段内冻结。我认为出现延迟的原因是因为我每两帧通过glBufferData(静态绘制模式)向VBO(3-5mb)发送大量几何数据。我已经实现了块截锥剔除、块截锥剔除、空气块剔除和定向环境剔除器 这给我留下了两个问题:Java 缓冲VBO数据时的小延迟,java,multithreading,opengl,vbo,lwjgl,Java,Multithreading,Opengl,Vbo,Lwjgl,我正在开发一个以minecraft为灵感的图形引擎,不久将在实际游戏中实现。我已经让引擎在几何应力测试下达到60+每秒。我只使用LWJGL进行图形辅助。在本地内存上更新VBO数据时,我曾经有过很大的延迟,但我通过多线程、优化和同步通用块剔除器/构造函数解决了这一问题 在剔除后将VBO数据缓冲到视频内存的过程中,我偶尔会遇到一个小故障(20-3000毫秒),这可能会导致屏幕在该时间段内冻结。我认为出现延迟的原因是因为我每两帧通过glBufferData(静态绘制模式)向VBO(3-5mb)发送大量
更新2:当我添加了隐藏面剔除(两个接触面=两个都不渲染)后,问题巧合地解决了。我现在不需要额外的性能提升,因为仅此一项就可以将缓冲区大小降低90%,帧速率提高400%。谢谢你的回答。是的,有两种方法
1.我尝试将此函数替换为我的VBO更新程序函数,但它没有发送任何数据。这似乎对ARB不起作用。2.将其设置为动态,虽然有一点帮助,但还不够。3.仍然需要进行实验,在这么晚的时间里努力工作。4.它尽我所能小(浮动)。5.完成。6.已经有了。7.不是选项,因为我使用的是drawrangeelements和交错格式。8.设置了双缓冲。9我尝试过这样做,但无论我多么希望它能工作,它都无法与此设置一起工作。这就给我留下了一些实验和遮挡剔除的机会。@Sean你确定9点吗。您应该能够使用GL_三角形_带和退化三角形制作任何形状。此外,还要确保正确使用glBufferSubData,因为它需要一系列必须更新的数据。glBufferSubData通常应该更快,因为它不必重新锁定缓冲区。但是,缓冲区必须足够大,以容纳顶点数据。