- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
async init() {
const engine = this.engine = new BABYLON.WebGPUEngine(this.canvas);
await engine.initAsync();
}
async initCompute() {
const supportCS = this.engine.getCaps().supportComputeShaders;
if (!supportCS) {
return true;
}
const computeShaderSource = document.getElementById("calculate").value.replace('WORK_GROUP_SIZE', this.WORK_GROUP_SIZE);
this.computeShader = new BABYLON.ComputeShader("compute", this.engine, { computeSource: computeShaderSource }, {
bindingsMapping:
{
"params": { group: 0, binding: 0 },
"ssboIn": { group: 0, binding: 1 },
"ssboOut": { group: 0, binding: 2 },
}
});
const simParamsBuffer = new BABYLON.UniformBuffer(this.engine);
simParamsBuffer.updateFloat2("time", t, this.numInstances);
simParamsBuffer.update();
const ssboInBuffer = new BABYLON.StorageBuffer(this.engine, this.ssboData.byteLength);
ssboInBuffer.update(this.ssboData);
const ssboOutBuffer = new BABYLON.StorageBuffer(this.engine, this.ssboData.byteLength);
this.computeShader.setUniformBuffer("params", simParamsBuffer);
this.computeShader.setStorageBuffer("ssboIn", ssboInBuffer);
this.computeShader.setStorageBuffer("ssboOut", ssboOutBuffer);
const handler = () => {
ssboOutBuffer.read().then((res) => {
const resFloats = new Float32Array(res.buffer);
//console.log(resFloats);
this.ssboData.set(resFloats);
ssboInBuffer.update(this.ssboData);
this.computeShader.setStorageBuffer("ssboIn", ssboInBuffer);
this.computeShader.dispatchWhenReady(this.numGroups).then(handler);
this.loadPositions();
});
};
this.computeShader.dispatchWhenReady(this.numGroups).then(handler);
}
Наговнокодить кому нибудь Compute Shader для WebGPU? полный код тут https://pastebin.com/EigxhfqV . Тут короче симуляция гравитации расчетным методом... просто было делать нехрен и скушно... что бы запустить это говно надо Chrome Canary с включенным WebGPU поддержкой.
guest6 28.11.2021 19:10 # 0
CHayT 28.11.2021 22:44 # +2
> var force = G * m1 * m2 / distanceSquared;
У вас петух уплыл.
ASD_77 29.11.2021 02:42 # 0
TOPT 29.11.2021 06:20 # +1
ISO 29.11.2021 19:39 # 0
> single precision
И правда — уплыл, и уплыл очень далеко.
bormand 29.11.2021 19:41 # 0
А, Float32Array.
ISO 29.11.2021 19:49 # +2
ASD_77 30.11.2021 03:00 # 0
Kozel 30.11.2021 04:57 # +2
ASD_77 30.11.2021 12:04 # 0
ISO 30.11.2021 13:49 # +3
guest6 11.06.2023 22:23 # 0
И бухгалтер работает по другой линии — по линии библиотекаря
3a_O6e_Horu 12.06.2023 10:16 # 0
bormand 28.11.2021 19:17 # 0
ASD_77 28.11.2021 19:40 # 0
cKpunToBou_neTyx 28.11.2021 19:55 # −1
в качестве защитной реакции
ucnaHckuu_CTblD 28.11.2021 20:38 # 0
Steve_Brown 01.12.2021 14:35 # 0
А вдруг там под ней действительно сиська.
ropuJIJIa 02.12.2021 15:15 # 0
1024-- 02.12.2021 17:57 # +1
MaaKut 02.12.2021 18:14 # 0
Чаевые.
OMuKPOH 05.12.2021 01:05 # 0
guest6 11.06.2023 22:15 # 0
вдруг бывает только пук
guest6 11.06.2023 22:31 # 0