Graphics Direct3D中绘制顶点范围的方法
假设我有一个大的着色器程序,只需要渲染特定范围的顶点/三角形 有哪些有效的方法可以做到这一点?哪一个看起来最有希望? 我想出了3种方法,还有其他的吗Graphics Direct3D中绘制顶点范围的方法,graphics,direct3d,vertex-buffer,Graphics,Direct3d,Vertex Buffer,假设我有一个大的着色器程序,只需要渲染特定范围的顶点/三角形 有哪些有效的方法可以做到这一点?哪一个看起来最有希望? 我想出了3种方法,还有其他的吗 批处理绘图调用draw(位置、计数)使用命令列表。(Opengl具有glmultidrawArray) 如果提前知道范围,我们就不必担心构建它们所花费的时间。但是,由于某些范围会发生不可预测的变化,因此保留所有可能的命令列表可能是不现实的 这种方法明显减少了在CPU端构造draw调用所花费的时间,我假设这些调用已经告诉GPU它不需要做任何状态更改
draw(位置、计数)
使用命令列表。(Opengl具有glmultidrawArray
)Draw
,并不断更新逐顶点布尔浮点缓冲区,该缓冲区将在非活动/活动范围内将输出位置乘以0/1掩码
,而不是静态n位逐顶点掩码
。如果遮罩和逐顶点遮罩!=0
更新常量缓冲区可能比更新整个顶点缓冲区便宜。但是,对于这种方法来说,范围的数量可能太大。您可能已经知道,您应该尝试各种方法,并对其进行客观评估。您是否发现了应用程序中的瓶颈?我认为这个问题无法回答。“顶点/三角形范围”顶点还是三角形?是否索引?有没有实例?有多少范围?通常范围有多长?范围的源数据在哪里,在系统RAM或VRAM中,例如由计算着色器生成的?