builtin 변수

builtin 변수

gl_* 전역 변수는 매개변수나 클래스 필드나 반환 자리에 붙는 @builtin(...) 속성입니다. 어떤 값인지는 속성이 말하고 그것이 어느 전역 변수가 될지는 생성기가 정합니다. 파일 하나가 두 타깃에 모두 닿는 방식이 이것입니다.

GLSL ES 3.00TypeShade설명
gl_Position
@builtin("position")

버텍스 출력에 붙는 같은 id입니다. vec4 하나를 반환하는 버텍스 진입점은 아무것도 적지 않아도 이것을 답니다.

gl_FragCoord
@builtin("position")

프래그먼트 입력에 붙는 같은 id입니다. y 원점이 다릅니다. 이 타깃은 창 아래쪽부터 세고 WebGPU는 위쪽부터 세므로, .y를 읽는 셰이더는 스스로 뒤집어야 합니다.

uint(gl_VertexID)
@builtin("vertex_index")

인덱스가 여기서는 u32이고 저기서는 int이라, 읽기를 선언한 타입으로 감쌉니다.

uint(gl_InstanceID)
@builtin("instance_index")

같은 이유로 같은 방식으로 감쌉니다.

gl_FrontFacing
@builtin("front_facing")

양쪽 모두 bool이라 읽기에 캐스트가 붙지 않습니다.

gl_FragDepth
@builtin("frag_depth")

프래그먼트 진입점이 반환하는 구조체의 필드로, 색상 옆에 적습니다.

둘은 이 인터페이스에 이름이 없습니다. 프런트엔드가 선언 자리에서 그 표기를 거부하며, 아래 문장은 같은 이름에 대해 WGSL 백엔드가 내는 말이고 대신 무엇을 쓰면 되는지 알려 줍니다.

GLSL ES 3.00대신 적을 것
gl_PointSize

does not exist in WGSL — WebGPU point-list primitives are always 1px. Expand an instanced quad in the vertex stage instead

gl_PointCoord

does not exist in WGSL — there is no point-sprite coordinate. Interpolate a @location(n) corner uv from the expanded quad instead

이 페이지 편집 문제 보고