LINUX.ORG.RU

ODE + Tao.Ode = что за хня?


0

0

решил писать проЭкт на с#(чтоб быстро и на венде работало без 
геморроя), но, похоже, геморрой вылез в другом месте. Я использую 
биндинги Tao.Ode 1.3.0.1 и Ode 0.7. Короче дело вот в чем: callback 
функция

public static void dNearCallbackFunc(
   IntPtr data,
   IntPtr o1,
   IntPtr o2
	)
	{
		IntPtr b1 = Ode.dGeomGetBody (o1);
		IntPtr b2 = Ode.dGeomGetBody (o2);		
		
		if (b1 == IntPtr.Zero || b2==IntPtr.Zero) return;
		if (Ode.dAreConnected(b1,b2)!=0) return;
		
		Ode.dContactGeom[] contactgeoms = new Ode.dContactGeom[4];
		int n;
		unsafe
		{
		Console.WriteLine("###DEBUG### Ode.dContactGeom struct size is: "+sizeof(Ode.dContactGeom));
		n = Ode.dCollide(o1,o2,4,contactgeoms,sizeof(Ode.dContactGeom));
		Console.WriteLine(n.ToString());
		Ode.dContact[] contact = new Ode.dContact[n];
						
		for(int i = 0; i < contact.Length; i++)
			{
				contact[i] = new Ode.dContact();
				contact[i].surface.mode = (int)Ode.dContactFlags.dContactBounce | (int)Ode.dContactFlags.dContactSoftCFM; 
				contact[i].surface.mu = Ode.dInfinity; 
				contact[i].surface.mu2 = 0; 
				contact[i].surface.bounce = 0.1f; 
				contact[i].surface.bounce_vel = 0.1f; 
				contact[i].surface.soft_cfm = 0.01f; 

				contact[i].geom = contactgeoms[i];
				
				IntPtr c = Ode.dJointCreateContact(world,contactgroup,ref contact[i]);
				Ode.dJointAttach(c,contact[i].geom.g1,contact[i].geom.g2);
				
				  
			}
		}
	}

вылетает аккурат при вызове 
Ode.dCollide(o1,o2,4,contactgeoms,sizeof(Ode.dContactGeom));

матерится на assert size>=(int)sizeof(dContactGeom)

так вот или я чего-то не понимаю, или разработчики что-то упустили, но
 в моно sizeof(dContactGeom) возвращает 36, а assert требует чтоб size
 == 52! Но даже если передать это число, вылетает сегфолт, потому что 
структура в моно не может уместить возвращаемые данные из нативной 
либы. Вот такие пироги. Может кто знает, как лечить, не переписывая 
врапер или сам движок?
★★★★★

все разобрался, там в врапере некоторые структуры отличались параметрами.

lester_dev ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.