Quantization node (#887)

Add basic quantization node
This commit is contained in:
Dennis Kobert
2022-12-31 18:30:35 +01:00
committed by Keavon Chambers
parent 79ad3e7908
commit 74bfd630a9
10 changed files with 528 additions and 25 deletions
@@ -105,12 +105,37 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
DocumentInputType {
name: "Path",
data_type: FrontendGraphDataType::Text,
default: NodeInput::value(TaggedValue::String(String::new()), true),
default: NodeInput::value(TaggedValue::String(String::new()), false),
},
],
outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::gpu_map_properties,
},
#[cfg(feature = "quantization")]
DocumentNodeType {
name: "QuantizeImage",
category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::quantization::GenerateQuantizationNode", &[concrete!("&TypeErasedNode")]),
inputs: &[
DocumentInputType {
name: "Image",
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
},
DocumentInputType {
name: "samples",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::U32(100), false),
},
DocumentInputType {
name: "Fn index",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::U32(0), false),
},
],
outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::quantize_properties,
},
DocumentNodeType {
name: "Invert RGB",
category: "Image Adjustments",
@@ -141,6 +141,20 @@ fn number_widget(document_node: &DocumentNode, node_id: NodeId, index: usize, na
})),
])
}
if let NodeInput::Value {
tagged_value: TaggedValue::U32(x),
exposed: false,
} = document_node.inputs[index]
{
widgets.extend_from_slice(&[
WidgetHolder::unrelated_separator(),
WidgetHolder::new(Widget::NumberInput(NumberInput {
value: Some(x as f64),
on_update: update_value(|x: &NumberInput| TaggedValue::U32(x.value.unwrap() as u32), node_id, index),
..NumberInput::default()
})),
])
}
widgets
}
@@ -199,6 +213,12 @@ pub fn posterize_properties(document_node: &DocumentNode, node_id: NodeId, _cont
vec![LayoutGroup::Row { widgets: value }]
}
pub fn quantize_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let value = number_widget(document_node, node_id, 1, "Levels", NumberInput::new().min(1.).max(1000.).int(), true);
let index = number_widget(document_node, node_id, 1, "Fit Fn Index", NumberInput::new().min(0.).max(2.).int(), true);
vec![LayoutGroup::Row { widgets: value }, LayoutGroup::Row { widgets: index }]
}
pub fn exposure_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let value = number_widget(document_node, node_id, 1, "Value", NumberInput::new().min(-3.).max(3.), true);