textureStore
이 페이지에서

textureStore

함수

Writes one texel to a storage texture at the integer coord, on a binding declared "write" or "read_write"; returns nothing.

이름마다 붙은 시그니처와 설명은 커밋 26de7be8의 컴파일러 소스에서 그대로 가져온 영어 원문입니다.

구문

declare function textureStore<F extends StorageFormat, A extends 'write' | 'read_write'>(
tex: texture_storage_2d<F, A>,
coord: TexelCoord2,
value: StorageTexel<F>,
): void
declare function textureStore<F extends StorageFormat, A extends 'write' | 'read_write'>(
tex: texture_storage_2d_array<F, A>,
coord: TexelCoord2,
layer: number,
value: StorageTexel<F>,
): void

매개변수나 반환 위치에 쓰인 number는 스칼라가 들어갈 자리입니다. 앰비언트 파일은 GPU 스칼라를 브랜드가 붙은 number로 선언하고 그 브랜드는 선택이라서, 리터럴도 브랜드가 붙은 스칼라도 이 자리에 들어갑니다.

type f32 = number & { readonly [f32Tag]?: true }

직접 쓰는 선언에는 여전히 너비가 필요합니다. 필드나 매개변수에 number만 적으면 거부되며, 그 행과 컴파일러가 낸 메시지는 TypeScript에서 페이지에 있습니다.

시그니처에는 앰비언트 파일이 스스로 쓰려고 선언한 타입이 나올 수 있습니다. 아래가 그 선언입니다.

TexelCoord2
type TexelCoord2 = vec2i | vec2u
StorageFormat
type StorageFormat = 'rgba8unorm' | 'rgba8snorm' | 'rgba8uint' | 'rgba8sint' | 'rgba16uint' | 'rgba16sint' | 'rgba16float' | 'r32uint' | 'r32sint' | 'r32float' | 'rg32uint' | 'rg32sint' | 'rg32float' | 'rgba32uint' | 'rgba32sint' | 'rgba32float' | 'bgra8unorm'
StorageTexel
type StorageTexel<F extends StorageFormat> = F extends `${string}uint` ? vec4u : F extends `${string}sint` ? vec4i : vec4

매개변수

반환값

void

설명

The value is the texel the format decides: a "…uint" format stores a vec4u, a "…sint" one a vec4i, and every other one a vec4. Compiles to textureStore on WGSL; GLSL ES 3.00 has no image load/store, so a module using it emits WGSL alone and the CPU oracle, which has no texture memory, drops the write.

대상별 출력

WGSL
textureStore(a, b, c)
GLSL ES 3.00
textureStore has no GLSL ES 3.00 spelling (image load/store is ES 3.10)

예제

함께 보기

이 페이지 편집 문제 보고