#ifndef NEWTON_DYNAMICS_COMMON_BMX_RELEASE_MT_WIN32_X86_H
#define NEWTON_DYNAMICS_COMMON_BMX_RELEASE_MT_WIN32_X86_H

#include <brl.mod/blitz.mod/.bmx/blitz.bmx.release.mt.win32.x86.h>
#include "source.bmx.release.mt.win32.x86.h"
int _bb_newton_dynamics_common();
extern BBBYTE* bmx_newtondynamics_NewtonCreate(BBOBJECT bbt_obj);
extern void NewtonDestroy(BBBYTE* bbt_world);
extern void NewtonDestroyAllBodies(BBBYTE* bbt_world);
extern void NewtonInvalidateCache(BBBYTE* bbt_world);
extern void NewtonUpdate(BBBYTE* bbt_world,BBFLOAT bbt_timestep);
extern void NewtonSetFrictionModel(BBBYTE* bbt_world,BBINT bbt_model);
extern void NewtonSetMinimumFrameRate(BBBYTE* bbt_world,BBFLOAT bbt_framerate);
extern void NewtonSetContactMergeTolerance(BBBYTE* bbt_world,BBFLOAT bbt_tolerance);
extern BBBYTE* bmx_newtondynamics_NewtonCreateDynamicBody(BBOBJECT bbt_obj,BBBYTE* bbt_world,BBBYTE* bbt_coll,BBFLOAT* bbt_matrix);
extern BBBYTE* bmx_newtondynamics_NewtonCreateSphere(BBOBJECT bbt_obj,BBBYTE* bbt_world,BBFLOAT bbt_radius,BBINT bbt_shapeID,BBFLOAT* bbt_offsetMatrix);
extern BBBYTE* bmx_newtondynamics_NewtonCreateBox(BBOBJECT bbt_obj,BBBYTE* bbt_world,BBFLOAT bbt_dx,BBFLOAT bbt_dy,BBFLOAT bbt_dz,BBINT bbt_shapeID,BBFLOAT* bbt_offsetMatrix);
extern BBBYTE* bmx_newtondynamics_NewtonCreateTreeCollision(BBOBJECT bbt_obj,BBBYTE* bbt_world,BBINT bbt_shapeID);
extern BBBYTE* bmx_newtondynamics_NewtonCreateCylinder(BBOBJECT bbt_obj,BBBYTE* bbt_world,BBFLOAT bbt_radius,BBFLOAT bbt_height,BBINT bbt_shapeID,BBFLOAT* bbt_offsetMatrix);
extern BBBYTE* NewtonMeshCreate(BBBYTE* bbt_world);
extern void bmx_newtondynamics_NewtonWorldRayCast(BBBYTE* bbt_world,BBFLOAT bbt_p0x,BBFLOAT bbt_p0y,BBFLOAT bbt_p0z,BBFLOAT bbt_p1x,BBFLOAT bbt_p1y,BBFLOAT bbt_p1z,BBFLOAT(* bbt_fcb)(BBBYTE*,BBBYTE*,BBFLOAT*,BBFLOAT*,BBBYTE*,BBFLOAT),BBOBJECT bbt_delegate,BBINT(* bbt__pfcb)(BBBYTE*,BBBYTE*,BBBYTE*),BBINT bbt_threadIndex);
extern BBINT NewtonWorldGetBodyCount(BBBYTE* bbt_world);
extern BBINT NewtonWorldGetConstraintCount(BBBYTE* bbt_world);
extern void NewtonDestroyCollision(BBBYTE* bbt_coll);
extern void NewtonTreeCollisionBeginBuild(BBBYTE* bbt_coll);
extern void NewtonTreeCollisionEndBuild(BBBYTE* bbt_coll,BBINT bbt_optimize);
extern void NewtonTreeCollisionAddFace(BBBYTE* bbt_coll,BBINT bbt_vertexCount,BBFLOAT* bbt_vertexPtr,BBINT bbt_strideInBytes,BBINT bbt_faceAttribute);
extern void NewtonDestroyBody(BBBYTE* bbt_body);
extern void NewtonBodyGetMatrix(BBBYTE* bbt_body,BBFLOAT* bbt_matrix);
extern void NewtonBodySetForceAndTorqueCallback(BBBYTE* bbt_body,void(* bbt_callback)(BBBYTE*,BBFLOAT,BBINT));
extern void NewtonBodySetSimulationState(BBBYTE* bbt_body,BBINT bbt_state);
extern BBINT NewtonBodyGetSimulationState(BBBYTE* bbt_body);
extern BBINT NewtonBodyGetType(BBBYTE* bbt_body);
extern BBINT NewtonBodyGetCollidable(BBBYTE* bbt_body);
extern void NewtonBodySetCollidable(BBBYTE* bbt_body,BBINT bbt_collidableState);
extern void NewtonBodyGetMassMatrix(BBBYTE* bbt_body,BBFLOAT* bbt_mass,BBFLOAT* bbt_Ixx,BBFLOAT* bbt_Iyy,BBFLOAT* bbt_Izz);
extern void NewtonBodySetMassProperties(BBBYTE* bbt_body,BBFLOAT bbt_mass,BBBYTE* bbt_coll);
extern void NewtonBodySetLinearDamping(BBBYTE* bbt_body,BBFLOAT bbt_linearDamp);
extern void NewtonBodyGetInvMass(BBBYTE* bbt_body,BBFLOAT* bbt_mass,BBFLOAT* bbt_Ixx,BBFLOAT* bbt_Iyy,BBFLOAT* bbt_Izz);
extern void NewtonBodyGetInertiaMatrix(BBBYTE* bbt_body,BBFLOAT* bbt_matrix);
extern void NewtonBodyGetInvInertiaMatrix(BBBYTE* bbt_body,BBFLOAT* bbt_matrix);
extern void NewtonBodySetMatrix(BBBYTE* bbt_body,BBFLOAT* bbt_matrix);
extern void NewtonBodySetTransformCallback(BBBYTE* bbt_body,void(* bbt_callback)(BBBYTE*,BBFLOAT*,BBINT));
extern void bmx_newtondynamics_NewtonBodyGetRotation(BBBYTE* bbt_body,BBFLOAT* bbt_q0,BBFLOAT* bbt_q1,BBFLOAT* bbt_q2,BBFLOAT* bbt_q3);
extern void bmx_newtondynamics_NewtonBodyGetOmega(BBBYTE* bbt_body,BBFLOAT* bbt_ox,BBFLOAT* bbt_oy,BBFLOAT* bbt_oz);
extern void bmx_newtondynamics_NewtonBodyGetVelocity(BBBYTE* bbt_body,BBFLOAT* bbt_vx,BBFLOAT* bbt_vy,BBFLOAT* bbt_vz);
extern void bmx_newtondynamics_NewtonBodyGetForce(BBBYTE* bbt_body,BBFLOAT* bbt_fx,BBFLOAT* bbt_fy,BBFLOAT* bbt_fz);
extern void bmx_newtondynamics_NewtonBodyGetTorque(BBBYTE* bbt_body,BBFLOAT* bbt_tx,BBFLOAT* bbt_ty,BBFLOAT* bbt_tz);
extern void bmx_newtondynamics_NewtonBodyGetForceAcc(BBBYTE* bbt_body,BBFLOAT* bbt_fx,BBFLOAT* bbt_fy,BBFLOAT* bbt_fz);
extern void bmx_newtondynamics_NewtonBodyGetTorqueAcc(BBBYTE* bbt_body,BBFLOAT* bbt_tx,BBFLOAT* bbt_ty,BBFLOAT* bbt_tz);
extern void bmx_newtondynamics_NewtonBodyGetCentreOfMass(BBBYTE* bbt_body,BBFLOAT* bbt_cx,BBFLOAT* bbt_cy,BBFLOAT* bbt_cz);
extern void bmx_newtondynamics_NewtonBodySetAngularDamping(BBBYTE* bbt_body,BBFLOAT bbt_aX,BBFLOAT bbt_aY,BBFLOAT bbt_aZ);
extern void bmx_newtondynamics_NewtonBodyGetAngularDamping(BBBYTE* bbt_body,BBFLOAT* bbt_aX,BBFLOAT* bbt_aY,BBFLOAT* bbt_aZ);
extern void bmx_newtondynamics_NewtonBodySetOmega(BBBYTE* bbt_body,BBFLOAT bbt_ox,BBFLOAT bbt_oy,BBFLOAT bbt_oz,BBFLOAT bbt_ow);
extern void bmx_newtondynamics_NewtonBodySetVelocity(BBBYTE* bbt_body,BBFLOAT bbt_vx,BBFLOAT bbt_vy,BBFLOAT bbt_vz,BBFLOAT bbt_vw);
extern void bmx_newtondynamics_NewtonBodySetForce(BBBYTE* bbt_body,BBFLOAT bbt_fx,BBFLOAT bbt_fy,BBFLOAT bbt_yz,BBFLOAT bbt_fw);
extern void bmx_newtondynamics_NewtonBodySetTorque(BBBYTE* bbt_body,BBFLOAT bbt_tx,BBFLOAT bbt_ty,BBFLOAT bbt_tz,BBFLOAT bbt_tw);
extern void bmx_newtondynamics_NewtonBodyGetAABB(BBBYTE* bbt_body,BBFLOAT* bbt_p0x,BBFLOAT* bbt_p0y,BBFLOAT* bbt_p0z,BBFLOAT* bbt_p1x,BBFLOAT* bbt_p1y,BBFLOAT* bbt_p1z);
extern void bmx_newtondynamics_NewtonBodyAddForce(BBBYTE* bbt_body,BBFLOAT bbt_fx,BBFLOAT bbt_fy,BBFLOAT bbt_yz);
extern void bmx_newtondynamics_NewtonBodyAddTorque(BBBYTE* bbt_body,BBFLOAT bbt_tx,BBFLOAT bbt_ty,BBFLOAT bbt_tz);
extern void bmx_newtondynamics_NewtonBodyCalculateInverseDynamicsForce(BBBYTE* bbt_body,BBFLOAT bbt_timestep,BBFLOAT bbt_vx,BBFLOAT bbt_vy,BBFLOAT bbt_vz,BBFLOAT* bbt_fx,BBFLOAT* bbt_fy,BBFLOAT* bbt_fz);
extern void bmx_newtondynamics_matrix_GetEulerAngles(BBFLOAT* bbt_frontX,BBFLOAT* bbt_pitch0,BBFLOAT* bbt_yaw0,BBFLOAT* bbt_roll0,BBFLOAT* bbt_pitch1,BBFLOAT* bbt_yaw1,BBFLOAT* bbt_roll1);
extern void NewtonMeshDestroy(BBBYTE* bbt_mesh);
extern void NewtonMeshApplyTransform(BBBYTE* bbt_mesh,BBFLOAT* bbt_matrix);
extern void NewtonMeshCalculateOOBB(BBBYTE* bbt_mesh,BBFLOAT* bbt_matrix,BBFLOAT* bbt_x,BBFLOAT* bbt_y,BBFLOAT* bbt_z);
extern void NewtonMeshCalculateVertexNormals(BBBYTE* bbt_mesh,BBFLOAT bbt_angle);
extern void NewtonMeshApplySphericalMapping(BBBYTE* bbt_mesh,BBINT bbt_material);
extern void NewtonMeshApplyCylindricalMapping(BBBYTE* bbt_mesh,BBINT bbt_cylinderMaterial,BBINT bbt_capMaterial);
extern void NewtonMeshApplyBoxMapping(BBBYTE* bbt_mesh,BBINT bbt_front,BBINT bbt_side,BBINT bbt_top);
extern BBINT NewtonMeshIsOpenMesh(BBBYTE* bbt_mesh);
extern void NewtonMeshFixTJoints(BBBYTE* bbt_mesh);
extern void NewtonMeshPolygonize(BBBYTE* bbt_mesh);
extern void NewtonMeshTriangulate(BBBYTE* bbt_mesh);
extern void NewtonMeshBeginFace(BBBYTE* bbt_mesh);
extern void NewtonMeshAddFace(BBBYTE* bbt_mesh,BBINT bbt_vertexCount,BBFLOAT* bbt_vertex,BBINT bbt_strideInBytes,BBINT bbt_materialIndex);
extern void NewtonMeshEndFace(BBBYTE* bbt_mesh);
extern BBINT NewtonMeshGetVertexCount(BBBYTE* bbt_mesh);
extern BBINT NewtonMeshGetVertexStrideInByte(BBBYTE* bbt_mesh);
extern BBDOUBLE* NewtonMeshGetVertexArray(BBBYTE* bbt_mesh);
extern BBINT NewtonMeshGetTotalFaceCount(BBBYTE* bbt_mesh);
extern BBINT NewtonMeshGetTotalIndexCount(BBBYTE* bbt_mesh);
extern BBINT NewtonMeshGetPointCount(BBBYTE* bbt_mesh);
extern BBINT NewtonMeshGetPointStrideInByte(BBBYTE* bbt_mesh);
extern BBDOUBLE* NewtonMeshGetPointArray(BBBYTE* bbt_mesh);
extern BBDOUBLE* NewtonMeshGetNormalArray(BBBYTE* bbt_mesh);
extern BBDOUBLE* NewtonMeshGetUV0Array(BBBYTE* bbt_mesh);
extern BBDOUBLE* NewtonMeshGetUV1Array(BBBYTE* bbt_mesh);

#endif
