@@ -64,7 +64,7 @@ describe('gravity example', () => {
6464
6565 @compute @workgroup_size(1) fn computeCollisionsShader_0(input: computeCollisionsShader_Input_7) {
6666 let currentId = input.gid.x;
67- var current = inState_1[currentId];
67+ var current = CelestialBody_2( inState_1[currentId].destroyed, inState_1[currentId].position, inState_1[currentId].velocity, inState_1[currentId].mass, inState_1[currentId].radiusMultiplier, inState_1[currentId].collisionBehavior, inState_1[currentId].textureIndex, inState_1[currentId].ambientLightFactor) ;
6868 if ((current.destroyed == 0)) {
6969 for (var i = 0; (i < celestialBodiesCount_3); i++) {
7070 let otherId = u32(i);
@@ -95,7 +95,14 @@ describe('gravity example', () => {
9595 outState_6[input.gid.x] = current;
9696 }
9797
98- struct CelestialBody_2 {
98+ struct Time_2 {
99+ passed: f32,
100+ multiplier: f32,
101+ }
102+
103+ @group(0) @binding(0) var<uniform> time_1: Time_2;
104+
105+ struct CelestialBody_4 {
99106 destroyed: u32,
100107 position: vec3f,
101108 velocity: vec3f,
@@ -106,46 +113,39 @@ describe('gravity example', () => {
106113 ambientLightFactor: f32,
107114 }
108115
109- @group(1) @binding(1) var<storage, read> inState_1: array<CelestialBody_2>;
110-
111- @group(1) @binding(2) var<storage, read_write> outState_3: array<CelestialBody_2>;
112-
113- struct Time_5 {
114- passed: f32,
115- multiplier: f32,
116- }
117-
118- @group(0) @binding(0) var<uniform> time_4: Time_5;
116+ @group(1) @binding(1) var<storage, read> inState_3: array<CelestialBody_4>;
119117
120- @group(1) @binding(0) var<uniform> celestialBodiesCount_6 : i32;
118+ @group(1) @binding(0) var<uniform> celestialBodiesCount_5 : i32;
121119
122- fn radiusOf_7 (body: CelestialBody_2 ) -> f32 {
120+ fn radiusOf_6 (body: CelestialBody_4 ) -> f32 {
123121 return (pow(((body.mass * 0.75) / 3.141592653589793f), 0.333) * body.radiusMultiplier);
124122 }
125123
124+ @group(1) @binding(2) var<storage, read_write> outState_7: array<CelestialBody_4>;
125+
126126 struct computeGravityShader_Input_8 {
127127 @builtin(global_invocation_id) gid: vec3u,
128128 }
129129
130130 @compute @workgroup_size(1) fn computeGravityShader_0(input: computeGravityShader_Input_8) {
131- let current = (&inState_1[input.gid.x] );
132- let newCurrent = (&outState_3[ input.gid.x]) ;
133- let dt = (time_4.passed * time_4.multiplier );
134- if (((* current) .destroyed == 1)) {
131+ let dt = (time_1.passed * time_1.multiplier );
132+ let currentId = input.gid.x;
133+ var current = CelestialBody_4(inState_3[currentId].destroyed, inState_3[currentId].position, inState_3[currentId].velocity, inState_3[currentId].mass, inState_3[currentId].radiusMultiplier, inState_3[currentId].collisionBehavior, inState_3[currentId].textureIndex, inState_3[currentId].ambientLightFactor );
134+ if ((current.destroyed == 1)) {
135135 return;
136136 }
137- (*newCurrent).velocity = (*current).velocity;
138- for (var i = 0; (i < celestialBodiesCount_6); i++) {
139- let other = (&inState_1[i]);
137+ for (var i = 0; (i < celestialBodiesCount_5); i++) {
138+ let other = (&inState_3[i]);
140139 if (((u32(i) == input.gid.x) || ((*other).destroyed == 1))) {
141140 continue;
142141 }
143- let dist = max((radiusOf_7((* current)) + radiusOf_7 ((*other))), distance((* current) .position, (*other).position));
144- let gravityForce = ((((* current) .mass * (*other).mass) / dist) / dist);
145- var direction = normalize(((*other).position - (* current) .position));
146- (*newCurrent) .velocity = ((*newCurrent) .velocity + (direction * ((gravityForce / (* current) .mass) * dt)));
142+ let dist = max((radiusOf_6( current) + radiusOf_6 ((*other))), distance(current.position, (*other).position));
143+ let gravityForce = (((current.mass * (*other).mass) / dist) / dist);
144+ var direction = normalize(((*other).position - current.position));
145+ current .velocity = (current .velocity + (direction * ((gravityForce / current.mass) * dt)));
147146 }
148- (*newCurrent).position = ((*current).position + ((*newCurrent).velocity * dt));
147+ current.position = (current.position + (current.velocity * dt));
148+ outState_7[input.gid.x] = current;
149149 }
150150
151151 struct Camera_2 {
0 commit comments