starting with rerun bindings
parent
c85d762ecf
commit
9df43797a1
File diff suppressed because it is too large
Load Diff
|
|
@ -1,8 +1,9 @@
|
|||
[workspace]
|
||||
resolver = "2"
|
||||
members = [
|
||||
"lua_modules/filesystem"
|
||||
"lua_modules/filesystem",
|
||||
"lua_modules/rerun_lua"
|
||||
]
|
||||
|
||||
[workspace.dependencies]
|
||||
mlua = { version = "0.9.1", features = ["lua54", "module"] }
|
||||
mlua = { version = "0.9.1", features = ["lua54", "module", "serde"] }
|
||||
4
justfile
4
justfile
|
|
@ -5,6 +5,10 @@ run-fs: (lua "fs.example.lua")
|
|||
build-filesystem: (_copy-so "dev" "filesystem")
|
||||
deploy-fs: (_deploy "filesystem")
|
||||
|
||||
run-rr: (lua "rr.example.lua")
|
||||
build-rr: (_copy-so "dev" "rerun_lua")
|
||||
deploy-rr: (_deploy "rerun_lua")
|
||||
|
||||
lua file:
|
||||
LUA_CPATH=c_modules/?.so lua lua/{{file}}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
local rr = require("rerun_lua")
|
||||
|
||||
local record = rr.recording("example")
|
||||
|
||||
record:image("54-0.png", "/Users/tbr/Desktop/00054-0.png")
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
mod zip_sink;
|
||||
// mod zip_sink;
|
||||
|
||||
use crate::resource::{Resource, ResourceInputStream};
|
||||
|
||||
pub trait ResourceSink {
|
||||
fn add_file(&mut self, input_stream: DynResourceInputStream) {}
|
||||
// fn add_file(&mut self, input_stream: DynResourceInputStream) {}
|
||||
}
|
||||
pub type DynResourceSink = Box<dyn ResourceSink>;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
[package]
|
||||
name = "rerun_lua"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
|
||||
[dependencies]
|
||||
image = { version = "0.24.7", features = ["png", "jpeg", "tiff"] }
|
||||
mlua = { workspace = true }
|
||||
rerun = "0.8.2"
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
use std::fmt::format;
|
||||
use std::path::PathBuf;
|
||||
use mlua::AnyUserData;
|
||||
use mlua::prelude::*;
|
||||
use rerun::{MsgSender, RecordingStream, RecordingStreamBuilder};
|
||||
use rerun::components::Tensor;
|
||||
|
||||
fn recording(lua: &Lua, name: String) -> LuaResult<AnyUserData> {
|
||||
let stream = RecordingStreamBuilder::new(name)
|
||||
.connect(rerun::default_server_addr(), None)
|
||||
.map_err(|err| LuaError::RuntimeError(err.to_string()))?;
|
||||
lua.create_any_userdata(stream)
|
||||
}
|
||||
|
||||
fn register_bindings(lua: &Lua) -> LuaResult<()> {
|
||||
lua.register_userdata_type::<RecordingStream>(|reg|{
|
||||
reg.add_method("image", |lua, this, (entity_path, image_path): (String,String)| {
|
||||
// let image = ImageReader::open(image_path.as_str())
|
||||
// .map_err(|error| LuaError::RuntimeError(format!("Could not open image file: {}. Error: {}", image_path, error)))?
|
||||
// .decode()
|
||||
// .map_err(|error| LuaError::RuntimeError(format!("Could not read image file: {}. Error: {}", image_path, error)))?;
|
||||
let image_tensor = Tensor::from_image_file(PathBuf::from(image_path.as_str()).as_path())
|
||||
.map_err(|error| LuaError::RuntimeError(format!("Could not read image file {image_path}. Error: {error}")))?;
|
||||
MsgSender::new(entity_path)
|
||||
.with_timeless(true)
|
||||
.with_component(&[image_tensor])
|
||||
.map_err(|error| LuaError::RuntimeError(format!("Could not send message: {}", error)))?
|
||||
.send(this)
|
||||
.map_err(|error| LuaError::RuntimeError(format!("Could not send message {error}")))?;
|
||||
Ok(())
|
||||
});
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[mlua::lua_module]
|
||||
fn rerun_lua(lua: &Lua) -> LuaResult<LuaTable> {
|
||||
register_bindings(lua)?;
|
||||
let exports = lua.create_table()?;
|
||||
exports.set("recording", lua.create_function(recording)?)?;
|
||||
Ok(exports)
|
||||
}
|
||||
Loading…
Reference in New Issue