Re: boost bind/lambda
Nigel Atkinson <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <1294212363.1623.8.camel@octavo> |
You could bind GLfloat as a class. I've done this in the past with Ogre3d's "Real" witch is a typedef for float or double. Depending on how your using in your scripts, that's all you may need to do, i.e without any defined methods. This makes GLfloat in scripts similar to an opaque pointer, where it's allways come from C++ and only really used by C++. You can also add operators and a constructor as well, to get more scripting use out of it. Using it this way as with pointers (arrays) make take a little tweaking, I'll have to have a play around when I have time. Nigel On Wed, 2011-01-05 at 06:17 +0000, Tony Kostanjsek wrote: > I might've been mistaken on the function pointer issue, but I've only used it > that way. > > > > ----- Ursprüngliche Mail ---- > Von: beo wulf <[email protected]> > An: [email protected] > Gesendet: Mittwoch, den 5. Januar 2011, 6:55:19 Uhr > Betreff: Re: [luabind] boost bind/lambda > > Why does wrapping it on a tag_function work then? > > Writing wrappers is out of the question -- there are too many functions. > > On Tue, Jan 4, 2011 at 9:51 PM, Tony Kostanjsek <[email protected]> wrote: > > "def" requires an address or function pointer, but bind returns a temporary > > functor instance. Try to use a static instance or write a wrapper function > > implementation and pass that. > > > > Something like <type> func = bind(...) > > .def("glLightfv", &func) > > I'm not sure what <type> would look like though. > > > > Alternatively, something like this might work: > > void wrappedGlLightfv(GLenum light, GLenum pname, const > > boost::shared_ptr<std::vector<GLfloat>> fv) > > { > > glLightfv(light, pname, &fv->get()->front()); // not quite sure about > front(), > > but you get the idea > > } > > > > ... > > .def("glLightfv", wrappedGlLightfv) > > ... > > > > ----- Ursprüngliche Mail ---- > > Von: beo wulf <[email protected]> > > An: [email protected] > > Gesendet: Mittwoch, den 5. Januar 2011, 6:35:09 Uhr > > Betreff: [luabind] boost bind/lambda > > > > Goal: I want to luabind all of OpenGL. > > Problem: glLightfv( int, int, GLfloat*) > > > > Almost solution: boost::bind > > > > The following code almost works -- it can use boost::bind to convert > > functions that take arg GLfloat* to take an arg of > > boost::shared_ptr<std::vector<GLfloat>> instead. However, boost::bind > > and luabind seem to not work with each other (in particular, the line > > > > , def("glLightfv2", bind(glLightfv, _1, _2, _3)) // ths line does not compile > > > > Why? > > > > Full code below: > > > > > > > > #include <boost/shared_ptr.hpp> > > #include <boost/bind.hpp> > > > > #include <vector> > > #include <iostream> > > > > #include <luabind/luabind.hpp> > > #include <luabind/operator.hpp> > > #include <luabind/adopt_policy.hpp> > > #include <luabind/copy_policy.hpp> > > #include <luabind/class_info.hpp> > > > > #include <GL/gl.h> > > > > > > > > #define P boost::shared_ptr > > #define V std::vector > > > > float foo(int x, int y, float* f) { > > float ans = 0; > > ans = x + y + f[0] + f[1] + f[2]; > > return ans; > > } > > > > float* get_raw(P<V<float> > p) { > > return &((*p)[0]); > > } > > > > void test() { // works fine > > P<V<float> > p(new V<float>()); > > p->push_back(1); > > p->push_back(2); > > p->push_back(3); > > > > // I want this to output 9 > > std::cout << bind(foo, _1, _2, bind(get_raw, _3))(1, 2, p) << std::endl; > > } > > > > > > int main() { > > using namespace luabind; > > > > lua_State *L; > > > > module( L ) > > [ > > namespace_("gl") [ > > def( "glLightfv", glLightfv) > > // Why do these two lines not compile? > > // , def( "glLightfv2", bind(glLightfv, _1, _2, _3)) > > // , def( "glLightfv3", bind(glLightfv, _1, _2, bind(get_raw, _3))) > > ] > > ] > > > > ; > > } > > > > ------------------------------------------------------------------------------ > > Learn how Oracle Real Application Clusters (RAC) One Node allows customers > > to consolidate database storage, standardize their database environment, and, > > should the need arise, upgrade to a full multi-node Oracle RAC database > > without downtime or disruption > > http://p.sf.net/sfu/oracle-sfdevnl > > _______________________________________________ > > luabind-user mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > > > > > > > > ------------------------------------------------------------------------------ > > Learn how Oracle Real Application Clusters (RAC) One Node allows customers > > to consolidate database storage, standardize their database environment, and, > > should the need arise, upgrade to a full multi-node Oracle RAC database > > without downtime or disruption > > http://p.sf.net/sfu/oracle-sfdevnl > > _______________________________________________ > > luabind-user mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > > ------------------------------------------------------------------------------ > Learn how Oracle Real Application Clusters (RAC) One Node allows customers > to consolidate database storage, standardize their database environment, and, > should the need arise, upgrade to a full multi-node Oracle RAC database > without downtime or disruption > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > luabind-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > > > ------------------------------------------------------------------------------ > Learn how Oracle Real Application Clusters (RAC) One Node allows customers > to consolidate database storage, standardize their database environment, and, > should the need arise, upgrade to a full multi-node Oracle RAC database > without downtime or disruption > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > luabind-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/luabind-user ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user