用于粒子系统/优化的OpenGL预计算顶点/矩阵

时间:2018-11-14 22:56:04

标签: c++ opengl optimization vbo particle-system

我有一个粒子系统,我想使其尽可能快地对主显示功能没有任何影响,我基本上将所有粒子计算放在单独的无限线程上,并与WaitForEvent()保持同步(Windows), DataLock标志等。

我使用glColorPointer,glNormalPointer,glVertexPointer等指向GPU上的缓冲数据(glGenBuffers,glBufferData),然后使用glDrawElements进行渲染。

目前我没有代码,所以希望不会有问题,但是我会尽力描述一下基础架构:

  • 主[初始化]

    1. 创建一个N粒子大小为30%的预计算队列,并进行顺序计算(线程1#2)
  • 线程1

    1. 等待“计算事件”信号,或者如果预计算队列未满,请继续
    2. 遍历N个粒子并更新位置/速度,并将其存储在pUpdate中
    3. 如果预计算队列未满,请向其中添加pUpdate
  • 主[渲染]

    1. glActiveTexture(TEXTURE0)
    2. glCol / glNorm / glTex / glVertexPointer
    3. 如果pre-calc为空,请使用最新的pUpdate
    4. 或使用预计算之一并删除
    5. 使用glBufferSubData()将项目存储在缓冲区中
    6. DrawElements()绘制它们
    7. 交换缓冲区

问题在于,Render函数在添加1之前会每秒使用约50次预计算(这会加快渲染速度,同时剩余的空间也足够多)。短期内,预​​计算为空,因此一切变慢,程序恢复为Main-Render#3

有什么想法吗?

0 个答案:

没有答案