gpt4 book ai didi

c++ - 连续的 glDrawArraysIndirect 调用

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:22 32 4
gpt4 key购买 nike

假设我想用 glDrawArraysIndirect 启动一个着色器程序,所以我有一个缓冲区,它在开始时包含一个顶点数,后面是命令的其他数据。该缓冲区作为原子计数器缓冲区绑定(bind)到同一个着色器程序,顶点着色器按某种规则减少顶点计数。如果最后顶点数不为 0,则应重新启动着色器程序。所以这一直进行到顶点数为 0

但是了解程序是否需要重新启动的最佳方法是什么?是否可以在不读回数据(顶点数)的情况下完全做到这一点?如果不是,读回数据的最有效方法是什么?我目前正在一个循环中运行着色器程序,迭代次数固定,可以保证将顶点数减少到 0,但是通过这种方法,我浪费了绘制调用的时间0 个顶点(每个大约 3 毫秒),还是比读回数据更好?我有 10 个绘制调用,通常在第 3 到第 6 个绘制调用时顶点数为 0

最佳答案

任何 CPU 回读操作都不太可能比将这些东西留在 GPU 上更快。这是因为它必须激发完整的 GPU/CPU 同步,这将扼杀任何流水线和异步执行的希望。

当您还没有说出您正在做的事情时,很难说做您正在做的事情的有效方法是什么。例如,开发一个唯一的工作是计算每个渲染命令需要多少次迭代的计算着色器是否合理?如果是这样,那么 CS 调用就可以构建一系列间接渲染命令,这些命令可以通过 glMultiDrawIndirect 一次发送。

关于c++ - 连续的 glDrawArraysIndirect 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539269/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com