I've used a temporary variable in the global scope as you suggested, and it still crashes my engine. Not sure how else to go about this..
On Wed, Nov 12, 2008 at 3:27 AM, Gerwin de Haan <[EMAIL PROTECTED]>wrote: > I don't use Luabind either but osgswig with Python instead. I sometimes > experience similar surprising effects when passing non-declared variables as > function arguments. In that case, the reason for this is often that the > scripting language garbage collector deletes the Vec3f after returning from > the function, essentially leaving any references to the Vec3 dangling. A > correct reference counting mechanism in the scripting binding should prevent > this in most cases. > > The problem you're describing could have similar cause. So just to be sure, > try and define the Vec3f in the global scope and pass a reference as an > argument in your call.: > myvec= Vec3f(2,0,0) > entMan:createStaticEntity( "ball", myvec, false ) > Or, in this function, try and make a copy of the parameter values before > returning. > > regards, > Gerwin > > > On Wed, Nov 12, 2008 at 8:14 AM, Dusten Sobotta <[EMAIL PROTECTED]>wrote: > >> Hello, >> >> I've been working on an engine that combines sdl, osg, bullet, open al, >> and now lua for roughly 6 weeks. Static and dynamic entity creation works >> well on the fly if handled with C++ code, however if I attempt to off-load >> this logic to lua, I run into problems. Below is an example of code that is >> relevant to the problem: >> >> //////////////////////// >> void entityManager::loadStaticEntityList( const std::string& filename ) { >> >> lua_State *L = lua_open(); >> luabind::open(L); >> >> luabind::module( L ) [ >> >> luabind::class_<osg::Vec3f>("Vec3f") >> .def( luabind::constructor< float, float, float >() ) >> ]; >> >> luabind::module( L ) [ >> >> luabind::class_<entityManager>("entityManager") >> .def( luabind::constructor< >() ) >> .def( "createStaticEntity", &entityManager::createStaticEntity ) >> .def("destroyAllEntities", &entityManager::destroyAllEntities ) >> ]; >> >> >> if( luaL_loadfile( L, filename.c_str() ) || lua_pcall( L, 0, 0, 0 ) ) >> throw "could not load entity list"; >> >> >> createStaticEntity( "ball", osg::Vec3f( 0, 0, 0 ), false ); //direct >> C++ call; works! >> >> luaL_dofile( L, filename.c_str() ); >> >> } >> /////////////////////////// >> >> /////////////////////////// >> void entityManager::createStaticEntity( const std::string& type, const >> osg::Vec3f& position, const bool& dimension ) { >> >> entity * newEntity = createEntityP( type, position, dimension ); >> _physicsManager->defineRigidBody( newEntity, type, false, dimension ); >> >> entities[ newEntity->getRigidBody() ] = newEntity; >> staticEntities[ dimension ]->addChild( newEntity->getPAT().get() ); >> staticEntityList.push_back( newEntity ); >> } >> /////////////////////////// >> >> And here is the lua script I'm trying to run: >> >> ------------------------------ >> entMan = entityManager() >> a = Vec3f( 0, 0, 0 ) >> >> --same call from within lua; crashes the engine if uncommented! >> entMan:createStaticEntity( "ball", Vec3f( 2, 0, 0 ), false ) >> ------------------------------ >> >> >> As you can see, a declaration of type Vec3f works from within lua, so I >> don't think that using Vec3f as a parameter is an issue. >> Might anyone know what's going on here? I'm not very familiar with >> luabind, and even less familiar with getting it to play nicely with OSG. >> Any help would be greatly appreciated. >> >> >> >> Thanks for your time, >> >> Dusten >> >> _______________________________________________ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org