See also http://code.google.com/p/bullet/issues/detail?id=390 Added Demos/DX11ClothDemo (an OpenCL cloth demo will follow soon)
35 lines
1018 B
Common Lisp
35 lines
1018 B
Common Lisp
MSTRINGIFY(
|
|
|
|
// Node indices for each link
|
|
|
|
//#define float3 float4
|
|
|
|
__kernel void
|
|
IntegrateKernel(
|
|
const int numNodes,
|
|
const float solverdt,
|
|
__global float * g_vertexInverseMasses,
|
|
__global float4 * g_vertexPositions,
|
|
__global float4 * g_vertexVelocity,
|
|
__global float4 * g_vertexPreviousPositions,
|
|
__global float4 * g_vertexForceAccumulator)
|
|
{
|
|
int nodeID = get_global_id(0);
|
|
if( nodeID < numNodes )
|
|
{
|
|
float3 position = g_vertexPositions[nodeID].xyz;
|
|
float3 velocity = g_vertexVelocity[nodeID].xyz;
|
|
float3 force = g_vertexForceAccumulator[nodeID].xyz;
|
|
float inverseMass = g_vertexInverseMasses[nodeID];
|
|
|
|
g_vertexPreviousPositions[nodeID] = (float4)(position, 0.f);
|
|
velocity += force * inverseMass * solverdt;
|
|
position += velocity * solverdt;
|
|
|
|
g_vertexForceAccumulator[nodeID] = (float4)(0.f, 0.f, 0.f, 0.0f);
|
|
g_vertexPositions[nodeID] = (float4)(position, 0.f);
|
|
g_vertexVelocity[nodeID] = (float4)(velocity, 0.f);
|
|
}
|
|
}
|
|
|
|
); |