starting with rerun bindings

develop
Kinch 2023-09-27 11:26:53 +02:00
parent c85d762ecf
commit 9df43797a1
7 changed files with 5936 additions and 10 deletions

5873
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -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"] }

View File

@ -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}}

5
lua/rr.example.lua Normal file
View 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")

View File

@ -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>;

View File

@ -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"

View File

@ -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)
}