@fluxgpu/engine
WebGPU executor and high-level API for FluxGPU.
Overview
This package provides the main GPU abstraction layer:
- GPUContext: High-level WebGPU wrapper
- ComputePass: Compute pipeline management
- RenderPass: Render pipeline management
- UniformBuffer: Type-safe uniform buffer handling
Installation
pnpm add @fluxgpu/engine @fluxgpu/dsl
Usage
Initialize GPU Context
import { GPUContext } from '@fluxgpu/engine';
const canvas = document.getElementById('canvas') as HTMLCanvasElement;
const gpu = await GPUContext.create({ canvas });Create Compute Pass
const computePass = gpu.createComputePass(computeShaderCode, [256]);
computePass.bind(0, [
{ binding: 0, resource: particleBuffer },
{ binding: 1, resource: uniformBuffer.buffer },
]);
gpu.frame((encoder, target) => {
computePass.dispatch(encoder, particleCount);
});Create Render Pass
const renderPass = gpu.createRenderPass(vertexShader, fragmentShader, {
topology: 'triangle-list',
});
renderPass.bind(0, [
{ binding: 0, resource: particleBuffer },
]);
gpu.frame((encoder, target) => {
renderPass.draw(encoder, target, vertexCount, {
clearColor: { r: 0, g: 0, b: 0, a: 1 },
});
});import { defineStruct, f32, vec2 } from '@fluxgpu/dsl';
const Uniforms = defineStruct('Uniforms', {
time: f32,
resolution: vec2(f32),
});
const uniformBuffer = gpu.createUniformBuffer(Uniforms);
uniformBuffer.update({
time: performance.now() / 1000,
resolution: [canvas.width, canvas.height],
});API Reference
GPUContext
| Method |
Description |
create(options) |
Create GPU context from canvas |
createComputePass(shader, workgroupSize) |
Create compute pipeline |
createRenderPass(vertex, fragment, options) |
Create render pipeline |
createUniformBuffer(structType) |
Create typed uniform buffer |
frame(callback) |
Execute frame with command encoder |
ComputePass
| Method |
Description |
bind(group, bindings) |
Bind resources to group |
dispatch(encoder, count) |
Dispatch compute work |
RenderPass
| Method |
Description |
bind(group, bindings) |
Bind resources to group |
draw(encoder, target, count, options) |
Draw vertices |