Advertisement
Guest User

Untitled

a guest
May 24th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.29 KB | None | 0 0
  1. ffi = require("ffi")
  2.  
  3. ffi.cdef [[
  4.     typedef enum  {
  5.         INVALID_ID = 0,
  6.         OBJECT_ID,
  7.         DATA_ID,
  8.         MODULE_ID,
  9.         STREAM_ID,
  10.  
  11.         // Filesystem.
  12.         FILESYSTEM_FILE_ID,
  13.         FILESYSTEM_DROPPED_FILE_ID,
  14.         FILESYSTEM_FILE_DATA_ID,
  15.  
  16.         // Font
  17.         FONT_GLYPH_DATA_ID,
  18.         FONT_RASTERIZER_ID,
  19.  
  20.         // Graphics
  21.         GRAPHICS_DRAWABLE_ID,
  22.         GRAPHICS_TEXTURE_ID,
  23.         GRAPHICS_IMAGE_ID,
  24.         GRAPHICS_QUAD_ID,
  25.         GRAPHICS_FONT_ID,
  26.         GRAPHICS_PARTICLE_SYSTEM_ID,
  27.         GRAPHICS_SPRITE_BATCH_ID,
  28.         GRAPHICS_CANVAS_ID,
  29.         GRAPHICS_SHADER_ID,
  30.         GRAPHICS_MESH_ID,
  31.         GRAPHICS_TEXT_ID,
  32.         GRAPHICS_VIDEO_ID,
  33.  
  34.         // Image
  35.         IMAGE_IMAGE_DATA_ID,
  36.         IMAGE_COMPRESSED_IMAGE_DATA_ID,
  37.  
  38.         // Joystick
  39.         JOYSTICK_JOYSTICK_ID,
  40.  
  41.         // Math
  42.         MATH_RANDOM_GENERATOR_ID,
  43.         MATH_BEZIER_CURVE_ID,
  44.         MATH_COMPRESSED_DATA_ID,
  45.  
  46.         // Audio
  47.         AUDIO_SOURCE_ID,
  48.  
  49.         // Sound
  50.         SOUND_SOUND_DATA_ID,
  51.         SOUND_DECODER_ID,
  52.  
  53.         // Mouse
  54.         MOUSE_CURSOR_ID,
  55.  
  56.         // Physics
  57.         PHYSICS_WORLD_ID,
  58.         PHYSICS_CONTACT_ID,
  59.         PHYSICS_BODY_ID,
  60.         PHYSICS_FIXTURE_ID,
  61.         PHYSICS_SHAPE_ID,
  62.         PHYSICS_CIRCLE_SHAPE_ID,
  63.         PHYSICS_POLYGON_SHAPE_ID,
  64.         PHYSICS_EDGE_SHAPE_ID,
  65.         PHYSICS_CHAIN_SHAPE_ID,
  66.         PHYSICS_JOINT_ID,
  67.         PHYSICS_MOUSE_JOINT_ID,
  68.         PHYSICS_DISTANCE_JOINT_ID,
  69.         PHYSICS_PRISMATIC_JOINT_ID,
  70.         PHYSICS_REVOLUTE_JOINT_ID,
  71.         PHYSICS_PULLEY_JOINT_ID,
  72.         PHYSICS_GEAR_JOINT_ID,
  73.         PHYSICS_FRICTION_JOINT_ID,
  74.         PHYSICS_WELD_JOINT_ID,
  75.         PHYSICS_ROPE_JOINT_ID,
  76.         PHYSICS_WHEEL_JOINT_ID,
  77.         PHYSICS_MOTOR_JOINT_ID,
  78.  
  79.         // Thread
  80.         THREAD_THREAD_ID,
  81.         THREAD_CHANNEL_ID,
  82.  
  83.         // Video
  84.         VIDEO_VIDEO_STREAM_ID,
  85.  
  86.         // The modules themselves. Only add abstracted modules here.
  87.         MODULE_FILESYSTEM_ID,
  88.         MODULE_GRAPHICS_ID,
  89.         MODULE_IMAGE_ID,
  90.         MODULE_SOUND_ID,
  91.  
  92.         // Count the number of bits needed.
  93.         TYPE_MAX_ENUM
  94.     } Type;
  95.    
  96.     typedef struct Object {
  97.     } Object;
  98.    
  99.     typedef struct Proxy {
  100.         Type type;
  101.         Object * object;
  102.     };
  103. ]]
  104.  
  105. function love.toffi(Object)
  106.     local Proxy = ffi.cast("Proxy *", Object)
  107.     return Proxy.object, tonumber(Proxy.type), Object:type()
  108. end
  109.  
  110. function love.fromffi(CData, Type, TypeName)
  111.     local Object = newproxy(true)
  112.     local Metatable = debug.getregistry()[TypeName]
  113.     debug.setmetatable(Object, Metatable)
  114.    
  115.     local Proxy = ffi.cast("Proxy *", Object)
  116.     Proxy.type = Type
  117.     Proxy.object = CData
  118.    
  119.     return Object
  120. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement