//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project static const char* rayCastKernelCL= \ "\n" "#define SHAPE_CONVEX_HULL 3\n" "#define SHAPE_PLANE 4\n" "#define SHAPE_CONCAVE_TRIMESH 5\n" "#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6\n" "#define SHAPE_SPHERE 7\n" "\n" "\n" "typedef struct\n" "{\n" " float4 m_from;\n" " float4 m_to;\n" "} b3RayInfo;\n" "\n" "typedef struct\n" "{\n" " float m_hitFraction;\n" " int m_hitResult0;\n" " int m_hitResult1;\n" " int m_hitResult2;\n" " float4 m_hitPoint;\n" " float4 m_hitNormal;\n" "} b3RayHit;\n" "\n" "typedef struct\n" "{\n" " float4 m_pos;\n" " float4 m_quat;\n" " float4 m_linVel;\n" " float4 m_angVel;\n" "\n" " unsigned int m_collidableIdx;\n" " float m_invMass;\n" " float m_restituitionCoeff;\n" " float m_frictionCoeff;\n" "} Body;\n" "\n" "typedef struct Collidable\n" "{\n" " union {\n" " int m_numChildShapes;\n" " int m_bvhIndex;\n" " };\n" " float m_radius;\n" " int m_shapeType;\n" " int m_shapeIndex;\n" "} Collidable;\n" "\n" "\n" "\n" "bool sphere_intersect(float4 spherePos, float radius, float4 rayFrom, float4 rayTo, float* hitFraction)\n" "{\n" " float4 rs = rayFrom - spherePos;\n" " rs.w = 0.f;\n" " float4 rayDir = rayTo-rayFrom;\n" " rayDir.w = 0.f;\n" " float A = dot(rayDir,rayDir);\n" " float B = dot(rs, rayDir);\n" " float C = dot(rs, rs) - (radius * radius);\n" " \n" " float D = B * B - A*C;\n" "\n" " if (D > 0.0)\n" " {\n" " float t = (-B - sqrt(D))/A;\n" "\n" " if ( (t >= 0.0f) && (t < (*hitFraction)) )\n" " {\n" " *hitFraction = t;\n" " return true;\n" " }\n" " }\n" " return false;\n" "}\n" "\n" "float4 setInterpolate3(float4 from, float4 to, float t)\n" "{\n" " float s = 1.0f - t;\n" " float4 result;\n" " result = s * from + t * to;\n" " result.w = 0.f; \n" " return result; \n" "}\n" "\n" "__kernel void rayCastKernel( \n" " int numRays, \n" " const __global b3RayInfo* rays, \n" " __global b3RayHit* hitResults, \n" " const int numBodies, \n" " __global Body* bodies,\n" " __global Collidable* collidables)\n" "{\n" "\n" "\n" " int i = get_global_id(0);\n" " if (i=0)\n" " {\n" " hitResults[i].m_hitFraction = hitFraction;\n" " hitResults[i].m_hitPoint = setInterpolate3(rayFrom, rayTo,hitFraction);\n" " float4 hitNormal = (float4) (hitResults[i].m_hitPoint-bodies[hitBodyIndex].m_pos);\n" " hitResults[i].m_hitNormal = normalize(hitNormal);\n" " hitResults[i].m_hitResult0 = hitBodyIndex;\n" " }\n" " }\n" "}\n" "\n" ;