선언

선언

선언은 상수나 변수나 레이아웃에 이름을 붙입니다. 셋 중 무엇이냐에 따라 생성되는 코드가 있는지 없는지가 갈립니다.

  • 스칼라 const

    모듈 상수입니다. 스칼라는 선언 자리에서 값 하나로 접힙니다. module-const

    TypeScript
    const GAIN: f32 = 1.5 * 2.
    생성된 WGSL
    const GAIN: f32 = 3.0;
  • 벡터 const

    벡터나 배열 상수는 값을 식으로 지니고, 백엔드가 그 식을 평가합니다. palette-const

    TypeScript
    const TINT: vec3 = vec3(0.2, 0.4, 0.9)
    생성된 WGSL
    const TINT: vec3<f32> = vec3<f32>(0.2, 0.4, 0.9);
  • 지역 let

    변경 가능한 지역 변수입니다. 타입은 표기가 정하고, WGSL은 영으로 채워 둡니다. bitfield-bands

    TypeScript
    export function band(x: f32): f32 {
    let w: f32
    w = x * 2.
    return w
    }
    생성된 WGSL
    fn band(x: f32) -> f32 {
    var w: f32;
    w = (x * 2.0);
    return w;
    }
  • 모듈 let

    모듈 변수입니다. 호출마다 하나씩 생깁니다. private-state

    TypeScript
    let seed: u32 = 7
    생성된 WGSL
    var<private> seed: u32 = 7u;
  • var

    거절

    호출별 변수는 let, 모듈 상수는 const입니다.

    TypeScript
    var k = 1.

    컴파일러 진단

    TS8014 Top-level var is not allowed. Use `let` for a per-invocation variable or `const` for a module constant.

  • enum

    멤버마다 모듈 상수가 하나씩 생깁니다. 이름은 Enum_Member, 타입은 i32입니다.

    TypeScript
    enum Mode {
    Flat,
    Shaded,
    Wire,
    }
    생성된 WGSL
    const Mode_Flat: i32 = 0;
    const Mode_Shaded: i32 = 1;
    const Mode_Wire: i32 = 2;
  • const enum

    같은 상수가 생깁니다. 여기서 const enum은 다르지 않습니다.

    TypeScript
    const enum Flag {
    None = 0,
    Both = 3,
    }
    생성된 WGSL
    const Flag_None: i32 = 0;
    const Flag_Both: i32 = 3;
  • type 별칭

    대상을 가리키는 다른 이름입니다. 타입이 올 수 있는 자리마다 풀립니다.

    TypeScript
    type Meters = f32
    생성된 WGSL
    fn deeper(d: f32) -> f32 {
    return (d * 2.0);
    }
  • interface

    구조체입니다. 같은 필드를 쓴 class와 결과가 같습니다.

    TypeScript
    interface Camera {
    view: mat4
    pos: vec3
    }
    생성된 WGSL
    struct Camera {
    view: mat4x4<f32>,
    pos: vec3<f32>,
    }
  • 구조체가 되는 클래스

    구조체입니다. 필드가 호스트의 메모리 레이아웃을 정합니다. ray-class

    TypeScript
    class Ray {
    origin: vec3
    dir: vec3
    }
    생성된 WGSL
    struct Ray {
    origin: vec3<f32>,
    dir: vec3<f32>,
    }
  • namespace

    멤버는 Ns_member로 펼쳐지고, namespace 자체는 아무것도 생성하지 않습니다.

    TypeScript
    namespace Palette {
    export const WARM: vec3 = vec3(0.9, 0.6, 0.3)
    export function tint(x: f32): vec3 {
    return WARM * x
    }
    }
    생성된 WGSL
    const Palette_WARM: vec3<f32> = vec3<f32>(0.9, 0.6, 0.3);
    fn Palette_tint(x: f32) -> vec3<f32> {
    return (Palette_WARM * x);
    }

이 페이지 편집 문제 보고