User Tools

Site Tools


dev:epic

This is an old revision of the document!


tolua Notes

Here are my notes I use when I have to work on this system.

C++ calling lua

Here is how a C++ class can call into it's lua instance. I think this is where I was confused by what was being asking. Sorry, I don't know why it wasn't apparent to me.

  • I have a LuaObject that has access to it's Rtti/metadata.
    • I also have my own header parser that generates this code.
    • So I have access to the actual class name such as “Forge::Light”.
  • Every class has a class metatable that represent that class in lua
    • These metatables are created and populated during initialization.
    • There is master table stored in the lua registry that has a mapping from class names to metatables.
  • There is also a mapping of c++ lightuserdata (pointer/instance) to metatables.
  • To allow lua full ownership of C++ instances, there is a lua table for garbage collection.
    • When a userdata is collected, this list is checked too see if the instance needs collecting.
    • If it does, it uses the class destructor if it was exposed in the C++ header.

This is an example of the forge::Light class using the rtti/metadata in my editor

lua calling C++

Here is a stripped down class that shows the basics of how the system calls a C++ function from lua.

1) Header files are marked up using comments to expose/export classes and functions.

2) Here is the generated cpp that gets added to the project.

/home/admin/domains/wiki.d20dungeons.com/public_html/data/attic/dev/epic.1666890415.txt.gz · Last modified: (external edit)