Skip to content

@tmrw-realityos/charm


@tmrw-realityos/charm / WebGPUDynamicUniforms

Class: WebGPUDynamicUniforms

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:37

This class helps handle sending small chunks of data as uniforms to shaders. Instead of creating a buffer for every one of them, you can use this one with some offset.

Usage

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

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

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

To mark a variable that will use this buffer, you must assign a name that contains the word DYNAMIC like: uniforms_DYNAMIC.

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
dynUniforms.updateBuffer();

You can find dynUniforms inside renderContext as context.dynUniforms

Constructors

Constructor

new WebGPUDynamicUniforms(device): WebGPUDynamicUniforms

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:54

Parameters

device

GPUDevice

Returns

WebGPUDynamicUniforms

Properties

buffer

buffer: WebGPUBuffer

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:41


CSReadBindGroup

CSReadBindGroup: GPUBindGroup

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:52


CSStoreBindGroup

CSStoreBindGroup: GPUBindGroup

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:51


currentOffset

currentOffset: number

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:42


data

data: Uint8Array

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:40


device

device: GPUDevice

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:38


FSBindGroup

FSBindGroup: GPUBindGroup

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:49


stagingBuffer

stagingBuffer: WebGPUBuffer

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:45


stagingData

stagingData: Uint8Array

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:44


stagingOffset

stagingOffset: number

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:46


VSBindGroup

VSBindGroup: GPUBindGroup

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:48


VSFSBindGroup

VSFSBindGroup: GPUBindGroup

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:50

Methods

bindBuffer()

bindBuffer(renderPass, index, data, usage): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:206

Allows to pass small chunk of memory to shader, it is required that the variable has the DYNAMIC word in the name, like uniforms_DYNAMIC. To know more how to use, check the intro.

Parameters

renderPass

GPUComputePassEncoder | GPURenderPassEncoder

index

number

data

TypedArray

usage

ShaderUsage

Returns

void


bindBufferOffset()

bindBufferOffset(renderPass, index, offset, usage): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:186

Parameters

renderPass

GPUComputePassEncoder | GPURenderPassEncoder

index

number

offset

number

usage

ShaderUsage

Returns

void


bindReadOnlyStorageBufferOffset()

bindReadOnlyStorageBufferOffset(passEncoder, index, offset): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:261

Parameters

passEncoder

GPUComputePassEncoder

index

number

offset

number

Returns

void


bindStorageBufferOffset()

bindStorageBufferOffset(passEncoder, index, offset): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:253

Parameters

passEncoder

GPUComputePassEncoder

index

number

offset

number

Returns

void


destroy()

destroy(): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:152

Returns

void


isFull()

isFull(): boolean

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:269

Returns

boolean


readBuffer()

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

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:223

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

Parameters

syncStagingbuffer

boolean = true

Copy genericBuffer to genericStagingbuffer. Set to false if the staging buffer is already synchronized.

offset?

number

Byte offset to read from

size?

number

Byte size to read

Returns

Promise<Uint8Array<ArrayBufferLike>>

Readback data


reset()

reset(): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:157

Returns

void


store()

store(data): number

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:167

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

data

TypedArray

Data to store in. Bytelength must be a multiple of four and less than 256.

Returns

number

Offset in the generic buffer needed for binding in bindBufferOffset


updateBuffer()

updateBuffer(): void

Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:182

Returns

void