Appearance
@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
new WebGPUDynamicUniforms()
new WebGPUDynamicUniforms(
device):WebGPUDynamicUniforms
Defined in: packages/charm/src/graphics/WebGPU/WebGPUDynamicUniforms.ts:54
Parameters
device
GPUDevice
Returns
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