builtin 변수
gl_* 전역 변수는 매개변수나 클래스 필드나 반환 자리에 붙는 @builtin(...) 속성입니다. 어떤 값인지는 속성이 말하고 그것이 어느 전역 변수가 될지는 생성기가 정합니다. 파일 하나가 두 타깃에 모두 닿는 방식이 이것입니다.
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 백엔드가 내는 말이고 대신 무엇을 쓰면 되는지 알려 줍니다.
gl_PointSizedoes not exist in WGSL — WebGPU point-list primitives are always 1px. Expand an instanced quad in the vertex stage instead
gl_PointCoorddoes not exist in WGSL — there is no point-sprite coordinate. Interpolate a @location(n) corner uv from the expanded quad instead