Skip to content

@tmrw-realityos/charm / Exports / WebGPURenderContext

Class: WebGPURenderContext

This class allows to have some global container for all the shared resources like shaders, pipelines, and bindgroups. It also adds methods that simplify using WebGPU, for storing small uniform buffers, create bindGroups or create Samplers.

To send small blocks of data (< 256bytes) to a shader you can use the storeInGenericBuffer:

typescript
//store inside a global shared buffer
const offset = renderContext.storeInGenericBuffer(mydata.buffer);

//during rendering call this method to bind the global uniforms bindgroup
renderContext.bindGenericBufferOffset( renderpass, bind_group_index, offset );

Keep in mind that this buffer must be uploaded to the GPU before the rendering calls are sent to the command buffer. This is already done in the FrameGraph execute method, but if you are not using the frame graph you must call manually to:

typescript
renderContext.updateGenericBuffer();

Table of contents

Constructors

Properties

Accessors

Methods

Constructors

constructor

new WebGPURenderContext(device): WebGPURenderContext

Parameters

NameType
deviceGPUDevice

Returns

WebGPURenderContext

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:60

Properties

bindGroupCache

bindGroupCache: Map<number, GPUBindGroup>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:38


bindGroupLayoutCache

bindGroupLayoutCache: Map<string, GPUBindGroupLayout>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:39


computeCache

computeCache: Cache<GPUShaderModule>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:48


computePipelineCache

computePipelineCache: Cache<GPUComputePipeline>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:43


currentGenericDataOffset

currentGenericDataOffset: number

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:58


device

device: GPUDevice

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:30


genericBuffer

genericBuffer: WebGPUBuffer

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:52


genericData

genericData: Uint8Array

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:51


genericReadOnlyStorageBufferBindGroup

genericReadOnlyStorageBufferBindGroup: GPUBindGroup

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:57


genericStagingBuffer

genericStagingBuffer: WebGPUBuffer

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:54


genericStagingData

genericStagingData: Uint8Array

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:53


genericStorageBufferBindGroup

genericStorageBufferBindGroup: GPUBindGroup

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:56


genericUniformBufferBindGroup

genericUniformBufferBindGroup: GPUBindGroup

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:55


renderPipelineCache

renderPipelineCache: Cache<GPURenderPipeline>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:41


renderPipelineDescriptorCache

renderPipelineDescriptorCache: Cache<GPURenderPipelineDescriptor>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:45


samplerCache

samplerCache: Map<number, GPUSampler>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:40


shaderCache

shaderCache: Cache<WebGPUShader>

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:47

Accessors

renderPipelineDescriptorCacheValues

get renderPipelineDescriptorCacheValues(): GPURenderPipelineDescriptor[]

Returns

GPURenderPipelineDescriptor[]

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:114

Methods

applyShaderToTexture

applyShaderToTexture(encoder, input, destination, shader, data): void

Parameters

NameType
encoderGPUCommandEncoder
inputGPUTexture
destinationGPUTexture
shaderWebGPUShader
dataArrayBuffer

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:470


bindGenericReadOnlyStorageBufferOffset

bindGenericReadOnlyStorageBufferOffset(passEncoder, index, offset): void

Parameters

NameType
passEncoderGPURenderPassEncoder | GPUComputePassEncoder
indexnumber
offsetnumber

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:175


bindGenericStorageBufferOffset

bindGenericStorageBufferOffset(passEncoder, index, offset): void

Parameters

NameType
passEncoderGPURenderPassEncoder | GPUComputePassEncoder
indexnumber
offsetnumber

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:165


bindGenericUniformBuffer

bindGenericUniformBuffer(renderPass, index, data): void

Parameters

NameType
renderPassGPURenderPassEncoder
indexnumber
dataArrayBuffer

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:156


bindGenericUniformBufferOffset

bindGenericUniformBufferOffset(passEncoder, index, offset): void

Parameters

NameType
passEncoderGPURenderPassEncoder | GPUComputePassEncoder
indexnumber
offsetnumber

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:146


clearCache

clearCache(): void

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:103


createSimpleBindGroup

createSimpleBindGroup(layout, items, label): GPUBindGroup

Allows to create a bindgroup very easy (single string) and fast (cached descriptor). The layout could be an existing GPUBindGroupLayout or a string describing it, using syntax described in the function createSimpleBindGroupLayout.

Parameters

NameType
layoutstring | GPUBindGroupLayout
items(null | WebGPUBuffer | GPUSampler | GPUTextureView | GPUBufferBinding | WebGPUTexture)[]
labelstring

Returns

GPUBindGroup

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:394


createSimpleBindGroupLayout

createSimpleBindGroupLayout(types_key, label): GPUBindGroupLayout

Helper to build BindGroupLayout using a very simple interface: You must pass a string that contain a description of usage of every bindGroupItem in the right order, separated by commas. The properties of a single item are separated by '|' character: Example: "vs|uniform,fs|texture" means two items, one uniform for the vertex shader and one texture for the fragment shader.

Here is a list of all available keywords:

  • vs: used in a vertex shader
  • fs: used in a fragment shader
  • cs: used in a compute shader
  • uniform: used as uniform in a shader
  • read: read only buffer
  • store: storage buffer
  • texture: texture 2D
  • texture_multisampled: texture multisampled
  • cube: texture Cubemap
  • sampler: texture sampler
  • dynamic: uniform buffer with dynamic offset All this keywords can be mixed to define all properties of every item. This string also applies as a hash for reusing bindgroup layouts. Use this method in conjunction with createSimpleBindGroup.

Parameters

NameType
types_keystring
labelstring

Returns

GPUBindGroupLayout

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:304


createSimpleRenderPassDescriptor

createSimpleRenderPassDescriptor(targetTexture): GPURenderPassDescriptor

An easy way to create a RenderPassDescriptor given a texture

Parameters

NameType
targetTextureGPUTexture

Returns

GPURenderPassDescriptor

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:437


destroy

destroy(): void

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:99


getQuadBindGroup

getQuadBindGroup(input): GPUBindGroup

Helper when you want to render a screen quad to apply some fx to a texture. It creates a BindGroup with the texture, sampler and generic uniform together.

Parameters

NameType
inputGPUTexture

Returns

GPUBindGroup

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:457


getSampler

getSampler(textureSampler): GPUSampler

Creates a GPUSampler from a TextureSampler object, caching the result.

Parameters

NameType
textureSamplerTextureSampler

Returns

GPUSampler

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:229


getTextureSamplerDescriptor

getTextureSamplerDescriptor(textureSampler): GPUSamplerDescriptor

Transforms a TextureSampler object into a GPUSamplerDescriptor object. It caches the result to go faster.

Parameters

NameType
textureSamplerTextureSampler

Returns

GPUSamplerDescriptor

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:243


readGenericBuffer

readGenericBuffer(syncStagingbuffer?, offset?, size?): Promise<Uint8Array>

Readback from the generic buffer. The generic stagingbuffer must be unmapped prior to calling this method.

Parameters

NameTypeDefault valueDescription
syncStagingbufferbooleantrueCopy genericBuffer to genericStagingbuffer. Set to false if the staging buffer is already synchronized.
offset?numberundefinedByte offset to read from
size?numberundefinedByte size to read

Returns

Promise<Uint8Array>

Readback data

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:194


resetGenericBufferOffset

resetGenericBufferOffset(): void

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:224


storeInGenericBuffer

storeInGenericBuffer(data): number

Use this function when you want to send a small chunk of data to your shader during rendering for uniforms. Instead of creating a buffer, it will store your data in a global buffer, and return an offset that you can use to bind it later.

Parameters

NameType
dataArrayBuffer

Returns

number

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:122


updateGenericBuffer

updateGenericBuffer(): void

Returns

void

Defined in

packages/charm/src/graphics/WebGPU/WebGPURenderContext.ts:140