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)