aboutsummaryrefslogtreecommitdiff
path: root/tests/bullet/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC/UpdatePositions.cl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bullet/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC/UpdatePositions.cl')
-rw-r--r--tests/bullet/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC/UpdatePositions.cl36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/bullet/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC/UpdatePositions.cl b/tests/bullet/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC/UpdatePositions.cl
new file mode 100644
index 00000000..ae7599a8
--- /dev/null
+++ b/tests/bullet/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC/UpdatePositions.cl
@@ -0,0 +1,36 @@
+MSTRINGIFY(
+
+//#define float3 float4
+
+__kernel void
+updateVelocitiesFromPositionsWithoutVelocitiesKernel(
+ const int numNodes,
+ const float isolverdt,
+ __global float4 * g_vertexPositions,
+ __global float4 * g_vertexPreviousPositions,
+ __global int * g_vertexClothIndices,
+ __global float * g_clothDampingFactor,
+ __global float4 * g_vertexVelocities,
+ __global float4 * g_vertexForces)
+
+{
+ int nodeID = get_global_id(0);
+ if( nodeID < numNodes )
+ {
+ float3 position = g_vertexPositions[nodeID].xyz;
+ float3 previousPosition = g_vertexPreviousPositions[nodeID].xyz;
+ float3 velocity = g_vertexVelocities[nodeID].xyz;
+ int clothIndex = g_vertexClothIndices[nodeID];
+ float dampingFactor = g_clothDampingFactor[clothIndex];
+ float velocityCoefficient = (1.f - dampingFactor);
+
+ float3 difference = position - previousPosition;
+
+ velocity = difference*velocityCoefficient*isolverdt;
+
+ g_vertexVelocities[nodeID] = (float4)(velocity, 0.f);
+ g_vertexForces[nodeID] = (float4)(0.f, 0.f, 0.f, 0.f);
+ }
+}
+
+); \ No newline at end of file