Jolt Physics Wrapper

new topic     » topic index » view thread      » older message » newer message

Hello,

I've recently written a wrapper of the Jolt Physics Library. However when trying to make a example program, nothing shows up.

https://github.com/amerkoleci/JoltPhysicsSharp/blob/main/src/joltc/joltc.h - This is the Wrapper code that I made the wrapper from.

https://github.com/michal-z/zig-gamedev/blob/main/libs/zphysics/libs/JoltC/JoltPhysicsC_Tests.c - I tried converting the HelloWorld test to Eu code, which is the code below.

Notice the difference from JPH and JPC. I used the CSharp C port to write the wrapper. As I couldn't figure out how to make the Zig C port into a DLL. So that's why the wrapper uses JPH as its name calling convention for exporting.

https://katfile.com/rdhsy0f8i5c9/Jolt.zip.html - Includes the wrapper, attempted example and JoltC DLL.

I'm not sure if I'm overlooking something that is simple, or I screwed up somewhere else. A fresh pair of eyes may help.

https://github.com/jrouwe/JoltPhysics - The official CPP port of Jolt Physics.

--Hello World Example Jolt Physics 
 
include std/ffi.e 
include std/machine.e 
 
include jolt.e 
 
atom j = JPH_Init() 
 
if j = -1 then 
	puts(1,"Failed to init Jolt Physics!\n") 
	abort(0) 
end if 
 
atom sys = JPH_PhysicsSystem_Create() 
 
atom talloc = JPH_TempAllocator_Create(10 * 1024 * 1024) 
atom job_sys = JPH_JobSystemThreadPool_Create(2048,8,-1) 
 
constant max_bodies = 1024 
constant num_body_mutexes = 0 
constant max_body_pairs = 1024 
constant max_contact_constraints = 1024 
 
atom broad_phase_layer_interface = JPH_BroadPhaseLayerInterface_Create() 
 
atom broad_phase_layer_filter = JPH_ObjectVsBroadPhaseLayerFilter_Create() 
 
atom pair_filter = JPH_ObjectLayerPairFilter_Create() 
 
JPH_PhysicsSystem_Init(sys,max_bodies,num_body_mutexes,max_body_pairs,max_contact_constraints, 
					   broad_phase_layer_interface,broad_phase_layer_filter,pair_filter) 
					    
atom body_act_list = JPH_BodyActivationListener_Create() 
 
JPH_PhysicsSystem_SetBodyActivationListener(sys,body_act_list) 
 
atom contact_list = JPH_ContactListener_Create() 
 
JPH_PhysicsSystem_SetContactListener(sys,contact_list) 
 
atom body_interface = JPH_PhysicsSystem_GetBodyInterface(sys) 
 
atom ground_vec3 = allocate_struct(JPH_Vec3,{100.0,1.0,100.0}) 
atom ground_quat = allocate_struct(JPH_Quat,{0.0,0.0,0.0,1.0}) 
 
atom ground_shape_settings = JPH_BoxShapeSettings_Create(ground_vec3,NULL) 
atom ground_shape = JPH_BoxShape_Create(ground_shape_settings,NULL) 
 
atom ground_settings = JPH_BodyCreationSettings_Create() 
 
atom ground_set = JPH_BodyCreationSettings_Create2(ground_settings, 
												  ground_vec3,ground_quat,JPH_MOTION_TYPE_STATIC, 
												  0) 
												   
atom ground_set2 = JPH_BodyCreationSettings_Create3(ground_shape,ground_vec3,ground_quat,JPH_MOTION_TYPE_STATIC,0) 
 
atom ground_body = JPH_BodyInterface_CreateBody(body_interface,ground_settings) 
 
atom ground_id = JPH_BodyInterface_AssignBodyID2(body_interface,ground_body,1) 
 
JPH_BodyInterface_AddBody(body_interface,ground_body,JPH_ACTIVATION_MODE_DONT_ACTIVATE) 
 
atom sphere_vec3 = allocate_struct(JPH_Vec3,{0.0,2.0,0.0}) 
atom sphere_quat = allocate_struct(JPH_Quat,{0.0,0.0,0.0,1.0}) 
 
atom sphere_rad = 0.5 
atom sphere_shape_settings = JPH_SphereShapeSettings_Create(sphere_rad) 
atom sphere_shape = JPH_SphereShape_Create(sphere_rad) 
 
atom sphere_settings = JPH_BodyCreationSettings_Create() 
 
atom sphere_set = JPH_BodyCreationSettings_Create2(sphere_settings,sphere_vec3,sphere_quat,JPH_MOTION_TYPE_DYNAMIC,0) 
atom sphere_set2 = JPH_BodyCreationSettings_Create3(sphere_shape,sphere_vec3,sphere_quat,JPH_MOTION_TYPE_DYNAMIC,0) 
 
atom sphere_id = JPH_BodyInterface_CreateAndAddBody(body_interface,sphere_shape_settings,JPH_ACTIVATION_MODE_ACTIVATE) 
 
atom sphere_vel = allocate_struct(JPH_Vec3,{0.0,-5.0,0.0}) 
JPH_BodyInterface_SetLinearVelocity(body_interface,sphere_id,sphere_vel) 
 
JPH_PhysicsSystem_OptimizeBroadPhase(sys) 
 
atom step = 0 
 
atom pos = allocate_struct(JPH_Vec3,{0,0,0}) 
sequence vel = {3} 
 
constant delta_time = 1.0 / 60.0 
constant collision_steps = 1 
constant integration_sub_steps = 1 
	 
while JPH_BodyInterface_IsActive(body_interface,sphere_id) do 
	step = step + 1 
	 
	JPH_BodyInterface_GetCenterOfMassPosition(body_interface,sphere_id,pos) 
	 
	JPH_BodyInterface_GetLinearVelocity(body_interface,sphere_id,vel) 
	 
	JPH_PhysicsUpdateError up = JPH_PhysicsSystem_Update(sys,delta_time,collision_steps,integration_sub_steps,talloc,job_sys) 
	 
	if up != JPH_PHYSICS_UPDATE_ERROR_NONE then 
		puts(1,"No Physics!\n") --Not sure if this if statement is needed 
	end if 
	 
	printf(1,"Step: %d\n Position %f, %f, %f,\n %f,%f,%f",{step,pos[1],pos[2],pos[3],vel[1],vel[2],vel[3]}) --nothing shows up on the command line.  
end while 
 
JPH_BodyInterface_RemoveBody(body_interface,sphere_id) 
JPH_BodyInterface_DestroyBody(body_interface,sphere_id) 
JPH_BodyInterface_RemoveBody(body_interface,ground_id) 
JPH_BodyInterface_DestroyBody(body_interface,ground_id) 
JPH_Shape_Destroy(ground_shape) 
JPH_BodyCreationSettings_Destroy(ground_settings) 
JPH_ContactListener_Destroy(contact_list) 
JPH_BodyActivationListener_Destroy(body_act_list) 
JPH_ObjectLayerPairFilter_Destroy(pair_filter) 
JPH_ObjectVsBroadPhaseLayerFilter_Destroy(broad_phase_layer_filter) 
JPH_BroadPhaseLayerInterface_Destroy(broad_phase_layer_interface) 
JPH_JobSystemThreadPool_Destroy(job_sys) 
JPH_TempAllocator_Destroy(talloc) 
JPH_PhysicsSystem_Destroy(sys) 
JPH_Shutdown() 
new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu