【问题标题】:Inside a metal shader code, how to define an in/out parameter variable of a function?在金属着色器代码中,如何定义函数的输入/输出参数变量?
【发布时间】:2019-11-24 12:00:05
【问题描述】:

我有这个功能:

void myFunct(const int A, ?out? int B){B = B + A;} 

如何声明 B 使得函数可以更新其值并将其返回给调用者?

【问题讨论】:

  • 假设 Metal 中的标准 C++ 语义,void myFunct(const int A, int &B) { B = B + A; }

标签: c++ ios objective-c metal metalkit


【解决方案1】:

Metal 是一种基于 C++ 的编程语言,允许您将指针传递给函数。为此,只需将函数参数声明为指针类型。

void myFunct(const int A, device int *B)
{
   *B = *B + A;
} 

device int *C = 0;
myFunct(1, C);

你也可以通过引用传递变量:

void myFunct(const int A, device int &B)
{
   B = B + A;
} 

device int *C = 0;
myFunct(1, *C)

或引用指针:

void myFunct(const int A, device int *&B)
{
   *B = *B + A;
} 

device int *C = 0;
myFunct(1, C);

【讨论】:

  • 感谢 0xBFE1A8,但是使用 @bg2b 建议的 &B 和使用 *B 之间有什么区别?
  • & 表示引用。它基本上是引擎盖下的指针,但您不必写 *B。此外,您可以保证引用指向某个东西(它不能是空指针)。两种方法都可以。
  • @lok​​i 在 c++ 中,我们可以通过指针或引用将参数传递给函数。在这两种情况下,我们得到相同的结果。 What are the reasons we use one over the other?
猜你喜欢
  • 2018-06-26
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多