Shader의 Lifetime
Shader Creation
- const-expressions에 대한 값을 확정
- 리터럴
@const
함수- const 선언 값
Pipeline Creation
- override-expressions 대한 값을 확정
Shader Execution
- runtime-expressions에 대한 값을 확정
- let 선언 값
- 함수 호출
- 변수 참조, 포인터
- 가변 내용
WGSL 함수
문법
Rust와 문법과 사용방법이 동일하다.
fn negate(v: vec3f) -> vec3f {
return -v;
}
EntryPoints@vertex
, @fragment
, @comute
어노테이션이 붙은 함수는 Shader Entrypoint다.
@must_use@must_use
어노테이션이 붙은 함수는 그 반환값을 사용하지 않으면 컴파일 타임 에러를 뱉는다.
@must_use
fn a() -> i32 {
return 10;
}
fn b() -> i32 {
return 10;
}
fn c() {
let d = a(); // Ok, 반환 값을 사용했음
b(); // Ok, @must_use 어노테이션이 없으므로 괜찮음
if a() < 5 { // Ok, 컨트롤 플로우에서 사용했음
}
a(); // 오류! a()의 반환값을 어디에서도 사용하지 않았기 때문에.
}
WGSL 타입
Vectors
WGSL은 스칼라 타입에 대한 3종류의 벡터를 지원한다. 몇 개의 요소를 가질 수 있냐에 따라 구분된다.
- vec2
- vec3
- vec4
또한 Alias도 제공한다. N은 요소의 수, S는 타입 (i
, u
, f
)일때 vecNS
형식으로 적는다.
- vec2i = vec2
- vec3f = vec3
- vec4u = vec4
Matricesf32
요소에 대한 2x2~4x4 행렬을 지원한다.
- matCxR
- C: Columns
- R: Rows
- T: Type