2-方便的特性
已道心破碎,以后就挑自己觉得重要的抄吧。感觉还不一定能用到我的OpenGL项目上,唉。
命名空间
Slang支持命名空间,且支持三种嵌套方式:
namespace ns1.ns2
{
int f();
}
// equivalent to:
namespace ns1::ns2
{
int f();
}
// equivalent to:
namespace ns1
{
namespace ns2
{
int f();
}
}
和C++一样,能用using
来使用命名空间:
using ns1.ns2;
// or:
using namespace ns1.ns2; // alternative syntax.
结构体
成员函数
Slang支持在结构体中定义(静态)成员函数:
struct Foo
{
int compute(int a, int b)
{
return a + b;
}
}
// ...
Foo foo;
int rs = foo.compute(1,2);
考虑到gpu性能优先,成员函数中的this
是不可修改的,如果执意要修改,需要用[mutating]
属性修饰该成员函数,否则会报错。
getter&setter
可以用property
关键字定义成员变量的getter和setter函数:
struct MyType
{
uint flag;
property highBits : uint
{
get() { return flag >> 16; }
set(uint x) { flag = (flag & 0xFF) + (x << 16); }
}
};
参考资料
- shader-slang/slang: Making it easier to work with shaders (github.com)