Skip to content

Commit

Permalink
Adding binary serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
gents83 committed Feb 23, 2024
1 parent 9323a2b commit c831bba
Show file tree
Hide file tree
Showing 41 changed files with 1,039 additions and 354 deletions.
1 change: 1 addition & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
//"models/DamagedHelmet/DamagedHelmet.scene"
//"models/craftman/craftman.scene"
"models/stanford_bunny/stanford_bunny.scene"
//"models/bunnies/bunnies.scene"
//"models/girl/girl.scene"
//"models/suzanne/suzanne.scene"
//"models/OriginalSponza/OriginalSponza.scene"
Expand Down
1 change: 1 addition & 0 deletions crates/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ image = { git = "https://github.com/image-rs/image", default-features = false, f
pyo3 = { git = "https://github.com/PyO3/pyo3", features = ["macros", "extension-module", "auto-initialize", "abi3-py310", "generate-import-lib"] }
rand = { git = "https://github.com/rust-random/rand", features = ["std"] }
serde_json = { git = "https://github.com/serde-rs/json"}
flexbuffers = { version = "2.0.0"}
ttf-parser = { git = "https://github.com/RazrFalcon/ttf-parser" }
superluminal-perf = { git = "https://github.com/EmbarkStudios/superluminal-perf-rs" }
uuid = { git = "https://github.com/uuid-rs/uuid", features = ["serde", "v4", "v5", "js"] }
Expand Down
2 changes: 1 addition & 1 deletion crates/blender/src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ fn add_node_in_blender(
let category = node.category();
let base_class = "LogicNodeBase";
let description = node.description();
let serialized_class = node.serialize_node(serializable_registry);
let serialized_class = node.serialize_node(serializable_registry.clone());

py.import_bound("INOX")
.unwrap()
Expand Down
2 changes: 1 addition & 1 deletion crates/bvh/src/gpu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use inox_serialize::{Deserialize, Serialize};

use crate::{BVHTree, INVALID_INDEX};

#[repr(C, align(16))]
#[repr(C)]
#[derive(Serialize, Deserialize, Default, PartialEq, Clone, Copy, Debug)]
#[serde(crate = "inox_serialize")]
pub struct GPUBVHNode {
Expand Down
5 changes: 3 additions & 2 deletions crates/core/src/systems/window_system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::{implement_unique_system_uid, ContextRc, System};
use inox_messenger::{Listener, MessageHubRc};
use inox_platform::{Window, WindowEvent};
use inox_resources::{ConfigBase, ConfigEvent, SharedDataRc};
use inox_serialize::read_from_file;
use inox_serialize::{read_from_file, SerializationType};

use crate::config::Config;

Expand Down Expand Up @@ -59,7 +59,8 @@ impl System for WindowSystem {
let filename = self.config.get_filename().to_string();
read_from_file(
self.config.get_filepath(plugin_name).as_path(),
self.shared_data.serializable_registry(),
self.shared_data.serializable_registry().clone(),
SerializationType::Json,
Box::new(move |data: Config| {
message_hub.send_event(ConfigEvent::Loaded(filename.clone(), data));
}),
Expand Down
2 changes: 1 addition & 1 deletion crates/graphics/src/data/light_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ pub enum LightType {
Spot = 1 << 2,
}

#[repr(C, align(16))]
#[repr(C)]
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone, Copy)]
#[serde(crate = "inox_serialize")]
pub struct LightData {
Expand Down
2 changes: 1 addition & 1 deletion crates/graphics/src/data/texture_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ impl From<usize> for TextureType {
}
}

#[repr(C, align(16))]
#[repr(C)]
#[derive(Default, Debug, PartialEq, Clone, Copy)]
pub struct TextureInfo {
pub texture_and_layer_index: i32, //negatives are LUT textures - 29bit + 3bit
Expand Down
8 changes: 5 additions & 3 deletions crates/graphics/src/resources/compute_pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ use inox_resources::{
DataTypeResource, Handle, Resource, ResourceId, ResourceTrait, SerializableResource,
SharedDataRc,
};
use inox_serialize::{inox_serializable::SerializableRegistryRc, read_from_file, SerializeFile};
use inox_serialize::{
inox_serializable::SerializableRegistryRc, read_from_file, SerializationType, SerializeFile,
};

use crate::{BindingData, ComputePipelineData, RenderContext, Shader, SHADER_ENTRY_POINT};

Expand Down Expand Up @@ -56,10 +58,10 @@ impl SerializableResource for ComputePipeline {
}
fn deserialize_data(
path: &std::path::Path,
registry: &SerializableRegistryRc,
registry: SerializableRegistryRc,
f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
read_from_file::<Self::DataType>(path, registry, f);
read_from_file::<Self::DataType>(path, registry, SerializationType::Json, f);
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/graphics/src/resources/font.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ impl SerializableResource for Font {
}
fn deserialize_data(
path: &Path,
_registry: &SerializableRegistryRc,
_registry: SerializableRegistryRc,
mut f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
f(FontData::new(path));
Expand Down
8 changes: 5 additions & 3 deletions crates/graphics/src/resources/light.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ use inox_messenger::MessageHubRc;
use inox_resources::{
DataTypeResource, ResourceEvent, ResourceId, ResourceTrait, SerializableResource, SharedDataRc,
};
use inox_serialize::{inox_serializable::SerializableRegistryRc, read_from_file, SerializeFile};
use inox_serialize::{
inox_serializable::SerializableRegistryRc, read_from_file, SerializationType, SerializeFile,
};

use crate::{LightData, INVALID_INDEX};

Expand Down Expand Up @@ -48,10 +50,10 @@ impl SerializableResource for Light {

fn deserialize_data(
path: &std::path::Path,
registry: &SerializableRegistryRc,
registry: SerializableRegistryRc,
f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
read_from_file::<Self::DataType>(path, registry, f);
read_from_file::<Self::DataType>(path, registry, SerializationType::Binary, f);
}
}
impl DataTypeResource for Light {
Expand Down
8 changes: 5 additions & 3 deletions crates/graphics/src/resources/material.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ use inox_resources::{
DataTypeResource, Handle, Resource, ResourceEvent, ResourceId, ResourceTrait,
SerializableResource, SharedDataRc,
};
use inox_serialize::{inox_serializable::SerializableRegistryRc, read_from_file, SerializeFile};
use inox_serialize::{
inox_serializable::SerializableRegistryRc, read_from_file, SerializationType, SerializeFile,
};

pub type MaterialId = ResourceId;

Expand Down Expand Up @@ -46,10 +48,10 @@ impl SerializableResource for Material {

fn deserialize_data(
path: &std::path::Path,
registry: &SerializableRegistryRc,
registry: SerializableRegistryRc,
f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
read_from_file::<Self::DataType>(path, registry, f);
read_from_file::<Self::DataType>(path, registry, SerializationType::Binary, f);
}
}

Expand Down
14 changes: 8 additions & 6 deletions crates/graphics/src/resources/mesh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ use inox_resources::{
DataTypeResource, DataTypeResourceEvent, Handle, Resource, ResourceEvent, ResourceId,
ResourceTrait, SerializableResource, SharedData, SharedDataRc,
};
use inox_serialize::{inox_serializable::SerializableRegistryRc, read_from_file, SerializeFile};
use inox_serialize::{
inox_serializable::SerializableRegistryRc, read_from_file, SerializationType, SerializeFile,
};

pub type MeshId = ResourceId;

#[bitmask]
#[repr(u32)]
#[repr(C, align(16))]
#[repr(C)]
pub enum MeshFlags {
None = 0,
Visible = 1,
Expand All @@ -29,8 +31,8 @@ pub enum MeshFlags {
fn test_serialize() {
let flags = MeshFlags::Visible | MeshFlags::Tranparent;
let registry = SerializableRegistryRc::default();
let s = inox_serialize::serialize(&flags, &registry);
println!("{}", s);
let s = inox_serialize::serialize(&flags, registry);
println!("{}", String::from_utf8(s).unwrap());
}

#[derive(Clone)]
Expand Down Expand Up @@ -72,10 +74,10 @@ impl SerializableResource for Mesh {

fn deserialize_data(
path: &std::path::Path,
registry: &SerializableRegistryRc,
registry: SerializableRegistryRc,
f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
read_from_file::<Self::DataType>(path, registry, f);
read_from_file::<Self::DataType>(path, registry, SerializationType::Binary, f);
}
}

Expand Down
8 changes: 5 additions & 3 deletions crates/graphics/src/resources/render_pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ use inox_resources::{
DataTypeResource, Handle, Resource, ResourceId, ResourceTrait, SerializableResource,
SharedDataRc,
};
use inox_serialize::{inox_serializable::SerializableRegistryRc, read_from_file, SerializeFile};
use inox_serialize::{
inox_serializable::SerializableRegistryRc, read_from_file, SerializationType, SerializeFile,
};

use crate::{
BindingData, BlendFactor, RenderContext, RenderPipelineData, Shader, TextureFormat,
Expand Down Expand Up @@ -71,10 +73,10 @@ impl SerializableResource for RenderPipeline {

fn deserialize_data(
path: &std::path::Path,
registry: &SerializableRegistryRc,
registry: SerializableRegistryRc,
f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
read_from_file::<Self::DataType>(path, registry, f);
read_from_file::<Self::DataType>(path, registry, SerializationType::Json, f);
}
}

Expand Down
8 changes: 5 additions & 3 deletions crates/graphics/src/resources/shader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ use inox_messenger::MessageHubRc;
use inox_resources::{
DataTypeResource, ResourceId, ResourceTrait, SerializableResource, SharedDataRc,
};
use inox_serialize::{inox_serializable::SerializableRegistryRc, read_from_file};
use inox_serialize::{
inox_serializable::SerializableRegistryRc, read_from_file, SerializationType,
};
use wgpu::ShaderModule;

use crate::{RenderContext, ShaderData, SHADER_EXTENSION};
Expand Down Expand Up @@ -110,10 +112,10 @@ impl SerializableResource for Shader {

fn deserialize_data(
path: &std::path::Path,
registry: &SerializableRegistryRc,
registry: SerializableRegistryRc,
f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
read_from_file::<Self::DataType>(path, registry, f);
read_from_file::<Self::DataType>(path, registry, SerializationType::Binary, f);
}
}

Expand Down
12 changes: 5 additions & 7 deletions crates/graphics/src/resources/texture.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ use inox_resources::{
use inox_serialize::inox_serializable::SerializableRegistryRc;
use inox_uid::{generate_random_uid, Uid, INVALID_UID};

use crate::{TextureData, TextureFormat, TextureUsage, INVALID_INDEX, platform::has_multisampling_support};
use crate::{
platform::has_multisampling_support, TextureData, TextureFormat, TextureUsage, INVALID_INDEX,
};

pub type TextureId = ResourceId;

Expand Down Expand Up @@ -120,7 +122,7 @@ impl SerializableResource for Texture {

fn deserialize_data(
path: &Path,
_registry: &SerializableRegistryRc,
_registry: SerializableRegistryRc,
mut f: Box<dyn FnMut(Self::DataType) + 'static>,
) {
let mut file = File::new(path);
Expand All @@ -142,11 +144,7 @@ impl SerializableResource for Texture {
format: TextureFormat::Rgba8Unorm,
data: Some(image_data.into_rgba8().to_vec()),
usage: TextureUsage::TextureBinding | TextureUsage::CopyDst,
sample_count: if has_multisampling_support() {
8
} else {
1
},
sample_count: if has_multisampling_support() { 8 } else { 1 },
is_LUT,
});
}
Expand Down
5 changes: 3 additions & 2 deletions crates/graphics/src/systems/debug_drawer_system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use inox_messenger::{Listener, MessageHubRc};
use inox_resources::{
ConfigBase, ConfigEvent, DataTypeResource, Handle, Resource, SerializableResource, SharedDataRc,
};
use inox_serialize::read_from_file;
use inox_serialize::{read_from_file, SerializationType};
use inox_uid::{generate_random_uid, generate_uid_from_string};

use super::config::Config;
Expand Down Expand Up @@ -302,7 +302,8 @@ impl System for DebugDrawerSystem {
let filename = self.config.get_filename().to_string();
read_from_file(
self.config.get_filepath(plugin_name).as_path(),
self.shared_data.serializable_registry(),
self.shared_data.serializable_registry().clone(),
SerializationType::Json,
Box::new(move |data: Config| {
message_hub.send_event(ConfigEvent::Loaded(filename.clone(), data));
}),
Expand Down
5 changes: 3 additions & 2 deletions crates/graphics/src/systems/rendering_system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use inox_messenger::Listener;
use inox_resources::{
ConfigBase, ConfigEvent, Handle, OnCreateData, SerializableResource, SharedDataRc,
};
use inox_serialize::read_from_file;
use inox_serialize::{read_from_file, SerializationType};

use crate::{
RenderContextRc, RendererState, Texture, ENV_MAP_UID, LUT_PBR_CHARLIE_UID, LUT_PBR_GGX_UID,
Expand Down Expand Up @@ -55,7 +55,8 @@ impl System for RenderingSystem {
let filename = self.config.get_filename().to_string();
read_from_file(
self.config.get_filepath(plugin_name).as_path(),
self.shared_data.serializable_registry(),
self.shared_data.serializable_registry().clone(),
SerializationType::Json,
Box::new(move |data: Config| {
message_hub.send_event(ConfigEvent::Loaded(filename.clone(), data));
}),
Expand Down
10 changes: 5 additions & 5 deletions crates/nodes/src/logic_nodes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ fn test_node() {
use crate::LogicNodeRegistry;

let serializable_registry = SerializableRegistryRc::default();
let mut registry = LogicNodeRegistry::new(&serializable_registry);
let mut registry = LogicNodeRegistry::new(serializable_registry.clone());
registry.register_node::<ScriptInitNode>();
registry.register_node::<RustExampleNode>();

Expand All @@ -133,7 +133,7 @@ fn test_node() {
assert_eq!(tree.get_links_count(), 4);

let init = ScriptInitNode::default();
let serialized_data = init.serialize_node(&serializable_registry);
let serialized_data = init.serialize_node(serializable_registry.clone());

if let Some(n) = registry.deserialize_node(&serialized_data) {
tree.add_node(n);
Expand Down Expand Up @@ -168,7 +168,7 @@ fn test_node() {
);
assert!(*node_a.node().get_input::<bool>("in_bool").unwrap());
assert!(!*node_a.node().get_output::<bool>("out_bool").unwrap());
let serialized_data = node_a.serialize_node(&serializable_registry);
let serialized_data = node_a.serialize_node(serializable_registry.clone());

if let Some(n) = registry.deserialize_node(&serialized_data) {
tree.add_node(n);
Expand All @@ -178,8 +178,8 @@ fn test_node() {
tree.add_default_node::<RustExampleNode>("NodeB");
assert_eq!(tree.get_nodes_count(), 3);

let serialized_tree = serialize(&tree, &serializable_registry);
if let Ok(new_tree) = deserialize::<NodeTree>(&serialized_tree, &serializable_registry) {
let serialized_tree = serialize(&tree, serializable_registry.clone());
if let Some(new_tree) = deserialize::<NodeTree>(&serialized_tree, serializable_registry) {
let mut logic_data = LogicData::from(new_tree);
logic_data.init();
logic_data.execute(&std::time::Duration::from_millis(30));
Expand Down
13 changes: 5 additions & 8 deletions crates/nodes/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,22 +103,19 @@ macro_rules! implement_node {
}
fn serialize_node(
&self,
registry: &inox_serializable::SerializableRegistryRc,
) -> String {
registry: inox_serializable::SerializableRegistryRc,
) -> Vec<u8> {
inox_serialize::serialize(self, registry)
}
fn deserialize_node(
&self,
s: &str,
registry: &inox_serializable::SerializableRegistryRc,
s: &[u8],
registry: inox_serializable::SerializableRegistryRc,
) -> Option<Self>
where
Self: Sized,
{
if let Ok(n) = inox_serialize::deserialize(s, registry) {
return Some(n);
}
None
inox_serialize::deserialize(s, registry)
}
}
};
Expand Down
4 changes: 2 additions & 2 deletions crates/nodes/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ pub trait NodeTrait: Any + Send + Sync + 'static {
fn execytion_type(&self) -> NodeExecutionType;
fn execute(&mut self, pin: &PinId, context: &LogicContext) -> NodeState;
fn duplicate(&self) -> Box<dyn NodeTrait + Send + Sync>;
fn serialize_node(&self, registry: &SerializableRegistryRc) -> String;
fn deserialize_node(&self, s: &str, registry: &SerializableRegistryRc) -> Option<Self>
fn serialize_node(&self, registry: SerializableRegistryRc) -> Vec<u8>;
fn deserialize_node(&self, s: &[u8], registry: SerializableRegistryRc) -> Option<Self>
where
Self: Sized;
}
Expand Down
Loading

0 comments on commit c831bba

Please sign in to comment.