gpt4 book ai didi

c++ - 在着色器中动态变化

转载 作者:行者123 更新时间:2023-11-30 04:11:10 27 4
gpt4 key购买 nike

我有一个简短的问题,即什么才是更正确的处理方法。

我在以下示例中使用 C++ DirectX11。

例子:如果您按下一个键,它将启用纹理,如果您按下另一个键,它将禁用纹理。

方法一:最初我打算这样做的方法是向 cbuffer 添加一个 bool 变量,然后将 bool 的结果传递给该变量以确定着色器是否渲染纹理。

方法二:当我阅读我在 DirectX 上购买的书时,我注意到他对每个对象都有一个单独的技术,然后他为每个技术设置了一堆传递到像素着色器的变量。我尝试用上面的例子来做到这一点,这样我就有了两种技术,一种有纹理,一种没有纹理,然后根据键输入来改变技术名称。

最初,第二种方法对我来说似乎很奇怪,即使对于他为每个对象设置的变量,我也认为将变量传递给 cbuffer 变量然后只用 if 语句包围某些区域会更好。这让我想到第一种在着色器中创建标志以动态更改它们的方法可能是处理超出我目前理解的事情的糟糕方法,所以我很好奇是否有人可以为我清理它并解释它是否重要的是你做什么。

最佳答案

动态分支,即使所有线程都采用相同的分支,每次运行着色器时都会产生非零成本。另一方面,创建不同的着色器是启动时的固定成本。但是,我建议不要使用效果/技术,因为这些在最新版本的编译器中已被弃用。相反,您应该直接创建单独的着色器。

关于c++ - 在着色器中动态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20305552/

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