Skip to content

Commit

Permalink
rename outline_mask to outline_mask_ids
Browse files Browse the repository at this point in the history
  • Loading branch information
Wumpf committed Mar 10, 2023
1 parent 97342c4 commit f6f9071
Show file tree
Hide file tree
Showing 17 changed files with 84 additions and 73 deletions.
10 changes: 5 additions & 5 deletions crates/re_renderer/examples/outlines.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ struct Outlines {
}

struct MeshProperties {
outline_mask: OutlineMaskPreference,
outline_mask_ids: OutlineMaskPreference,
position: glam::Vec3,
rotation: glam::Quat,
}
Expand Down Expand Up @@ -89,17 +89,17 @@ impl framework::Example for Outlines {

let mesh_properties = [
MeshProperties {
outline_mask: outline_mask_large_mesh,
outline_mask_ids: outline_mask_large_mesh,
position: glam::Vec3::ZERO,
rotation: glam::Quat::IDENTITY,
},
MeshProperties {
outline_mask: OutlineMaskPreference::some(1, 0),
outline_mask_ids: OutlineMaskPreference::some(1, 0),
position: glam::vec3(2.0, 0.0, -3.0),
rotation: glam::Quat::from_rotation_y(seconds_since_startup),
},
MeshProperties {
outline_mask: OutlineMaskPreference::some(0, 1),
outline_mask_ids: OutlineMaskPreference::some(0, 1),
position: glam::vec3(-2.0, 1.0, 3.0),
rotation: glam::Quat::from_rotation_x(seconds_since_startup),
},
Expand All @@ -117,7 +117,7 @@ impl framework::Example for Outlines {
props.rotation,
props.position,
) * instance.world_from_mesh,
outline_mask: props.outline_mask,
outline_mask_ids: props.outline_mask_ids,
..Default::default()
})
})
Expand Down
6 changes: 3 additions & 3 deletions crates/re_renderer/shader/instanced_mesh.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ struct VertexOut {
@location(2) additive_tint_rgb: Vec3,

@location(3) @interpolate(flat)
outline_mask: UVec2,
outline_mask_ids: UVec2,
};

@vertex
Expand All @@ -41,7 +41,7 @@ fn vs_main(in_vertex: VertexIn, in_instance: InstanceIn) -> VertexOut {
out.texcoord = in_vertex.texcoord;
out.normal_world_space = world_normal;
out.additive_tint_rgb = linear_from_srgb(in_instance.additive_tint_srgb.rgb);
out.outline_mask = in_instance.outline_mask;
out.outline_mask_ids = in_instance.outline_mask_ids;

return out;
}
Expand All @@ -63,5 +63,5 @@ fn fs_main_shaded(in: VertexOut) -> @location(0) Vec4 {

@fragment
fn fs_main_outline_mask(in: VertexOut) -> @location(0) UVec2 {
return in.outline_mask;
return in.outline_mask_ids;
}
4 changes: 2 additions & 2 deletions crates/re_renderer/shader/lines.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var position_data_texture: texture_2d<u32>;

struct BatchUniformBuffer {
world_from_obj: Mat4,
outline_mask: UVec2,
outline_mask_ids: UVec2,
};
@group(2) @binding(0)
var<uniform> batch: BatchUniformBuffer;
Expand Down Expand Up @@ -265,5 +265,5 @@ fn fs_main_outline_mask(in: VertexOut) -> @location(0) UVec2 {
if coverage < 1.0 {
discard;
}
return batch.outline_mask;
return batch.outline_mask_ids;
}
2 changes: 1 addition & 1 deletion crates/re_renderer/shader/mesh_vertex.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ struct InstanceIn {
@location(7) world_from_mesh_normal_row_1: Vec3,
@location(8) world_from_mesh_normal_row_2: Vec3,
@location(9) additive_tint_srgb: Vec4,
@location(10) outline_mask: UVec2,
@location(10) outline_mask_ids: UVec2,
};
26 changes: 13 additions & 13 deletions crates/re_renderer/src/line_strip_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ where
label: label.into(),
world_from_obj: glam::Mat4::IDENTITY,
line_vertex_count: 0,
overall_outline_mask: OutlineMaskPreference::NONE,
additional_outline_mask_vertex_ranges: Vec::new(),
overall_outline_mask_ids: OutlineMaskPreference::NONE,
additional_outline_mask_ids_vertex_ranges: Vec::new(),
});

LineBatchBuilder(self)
Expand Down Expand Up @@ -144,8 +144,8 @@ where

/// Sets an outline mask for every element in the batch.
#[inline]
pub fn outline_mask(mut self, outline_mask: OutlineMaskPreference) -> Self {
self.batch_mut().overall_outline_mask = outline_mask;
pub fn outline_mask_ids(mut self, outline_mask_ids: OutlineMaskPreference) -> Self {
self.batch_mut().overall_outline_mask_ids = outline_mask_ids;
self
}

Expand All @@ -168,7 +168,7 @@ where

LineStripBuilder {
builder: self.0,
outline_mask: OutlineMaskPreference::NONE,
outline_mask_ids: OutlineMaskPreference::NONE,
vertex_range: old_vertex_count..new_vertex_count,
strip_range: old_strip_count..new_strip_count,
}
Expand Down Expand Up @@ -214,7 +214,7 @@ where

LineStripBuilder {
builder: self.0,
outline_mask: OutlineMaskPreference::NONE,
outline_mask_ids: OutlineMaskPreference::NONE,
vertex_range: old_vertex_count..new_vertex_count,
strip_range: old_strip_count..new_strip_count,
}
Expand Down Expand Up @@ -369,7 +369,7 @@ where

pub struct LineStripBuilder<'a, PerStripUserData> {
builder: &'a mut LineStripSeriesBuilder<PerStripUserData>,
outline_mask: OutlineMaskPreference,
outline_mask_ids: OutlineMaskPreference,
vertex_range: Range<usize>,
strip_range: Range<usize>,
}
Expand Down Expand Up @@ -402,11 +402,11 @@ where
self
}

/// Sets an individual outline mask.
/// Sets an individual outline mask ids.
/// Note that this has a relatively high performance impact.
#[inline]
pub fn outline_mask(mut self, outline_mask: OutlineMaskPreference) -> Self {
self.outline_mask = outline_mask;
pub fn outline_mask_ids(mut self, outline_mask_ids: OutlineMaskPreference) -> Self {
self.outline_mask_ids = outline_mask_ids;
self
}

Expand All @@ -424,15 +424,15 @@ where

impl<'a, PerStripUserData> Drop for LineStripBuilder<'a, PerStripUserData> {
fn drop(&mut self) {
if self.outline_mask.is_some() {
if self.outline_mask_ids.is_some() {
self.builder
.batches
.last_mut()
.unwrap()
.additional_outline_mask_vertex_ranges
.additional_outline_mask_ids_vertex_ranges
.push((
self.vertex_range.start as u32..self.vertex_range.end as u32,
self.outline_mask,
self.outline_mask_ids,
));
}
}
Expand Down
31 changes: 18 additions & 13 deletions crates/re_renderer/src/renderer/lines.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ pub mod gpu_data {
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
pub struct BatchUniformBuffer {
pub world_from_obj: wgpu_buffer_types::Mat4,
pub outline_mask: wgpu_buffer_types::UVec2RowPadded,
pub outline_mask_ids: wgpu_buffer_types::UVec2RowPadded,

pub end_padding: [wgpu_buffer_types::PaddingRow; 16 - 5],
}
Expand Down Expand Up @@ -240,7 +240,7 @@ pub struct LineBatchInfo {
pub line_vertex_count: u32,

/// Optional outline mask setting for the entire batch.
pub overall_outline_mask: OutlineMaskPreference,
pub overall_outline_mask_ids: OutlineMaskPreference,

/// Defines an outline mask for an individual vertex ranges (can span several line strips!)
///
Expand All @@ -249,7 +249,7 @@ pub struct LineBatchInfo {
/// Having many of these individual outline masks can be slow as they require each their own uniform buffer & draw call.
/// This feature is meant for a limited number of "extra selections"
/// If an overall mask is defined as well, the per-strip masks is overwriting the overall mask.
pub additional_outline_mask_vertex_ranges: Vec<(Range<u32>, OutlineMaskPreference)>,
pub additional_outline_mask_ids_vertex_ranges: Vec<(Range<u32>, OutlineMaskPreference)>,
}

/// Style information for a line strip.
Expand Down Expand Up @@ -335,8 +335,8 @@ impl LineDrawData {
world_from_obj: glam::Mat4::IDENTITY,
label: "all lines".into(),
line_vertex_count: vertices.len() as _,
overall_outline_mask: OutlineMaskPreference::NONE,
additional_outline_mask_vertex_ranges: Vec::new(),
overall_outline_mask_ids: OutlineMaskPreference::NONE,
additional_outline_mask_ids_vertex_ranges: Vec::new(),
}];
let batches = if batches.is_empty() {
&fallback_batches
Expand Down Expand Up @@ -518,7 +518,11 @@ impl LineDrawData {
.iter()
.map(|batch_info| gpu_data::BatchUniformBuffer {
world_from_obj: batch_info.world_from_obj.into(),
outline_mask: batch_info.overall_outline_mask.0.unwrap_or_default().into(),
outline_mask_ids: batch_info
.overall_outline_mask_ids
.0
.unwrap_or_default()
.into(),
end_padding: Default::default(),
}),
);
Expand All @@ -532,13 +536,14 @@ impl LineDrawData {
batches
.iter()
.flat_map(|batch_info| {
batch_info.additional_outline_mask_vertex_ranges.iter().map(
|(_, mask)| gpu_data::BatchUniformBuffer {
batch_info
.additional_outline_mask_ids_vertex_ranges
.iter()
.map(|(_, mask)| gpu_data::BatchUniformBuffer {
world_from_obj: batch_info.world_from_obj.into(),
outline_mask: mask.0.unwrap_or_default().into(),
outline_mask_ids: mask.0.unwrap_or_default().into(),
end_padding: Default::default(),
},
)
})
})
.collect::<Vec<_>>()
.into_iter(),
Expand All @@ -554,7 +559,7 @@ impl LineDrawData {
.min(Self::MAX_NUM_VERTICES as u32);
let mut active_phases = enum_set![DrawPhase::Opaque];
// Does the entire batch participate in the outline mask phase?
if batch_info.overall_outline_mask.is_some() {
if batch_info.overall_outline_mask_ids.is_some() {
active_phases.insert(DrawPhase::OutlineMask);
}

Expand All @@ -566,7 +571,7 @@ impl LineDrawData {
active_phases,
));

for (range, _) in &batch_info.additional_outline_mask_vertex_ranges {
for (range, _) in &batch_info.additional_outline_mask_ids_vertex_ranges {
batches_internal.push(
line_renderer.create_linestrip_batch(
ctx,
Expand Down
19 changes: 11 additions & 8 deletions crates/re_renderer/src/renderer/mesh_renderer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ mod gpu_data {

pub additive_tint: Color32,
// Need only the first two bytes, but we want to keep everything aligned to at least 4 bytes.
pub outline_mask: [u8; 4],
pub outline_mask_ids: [u8; 4],
}

impl InstanceData {
Expand Down Expand Up @@ -120,7 +120,7 @@ pub struct MeshInstance {
pub additive_tint: Color32,

/// Optional outline mask setting for this instance.
pub outline_mask: OutlineMaskPreference,
pub outline_mask_ids: OutlineMaskPreference,
}

impl Default for MeshInstance {
Expand All @@ -130,7 +130,7 @@ impl Default for MeshInstance {
mesh: None,
world_from_mesh: macaw::Affine3A::IDENTITY,
additive_tint: Color32::TRANSPARENT,
outline_mask: OutlineMaskPreference::NONE,
outline_mask_ids: OutlineMaskPreference::NONE,
}
}
}
Expand Down Expand Up @@ -192,12 +192,15 @@ impl MeshDrawData {
let mut count_with_outlines = 0;

// Put all instances with outlines at the start of the instance buffer range.
let instances = instances
.sorted_by(|a, b| a.outline_mask.is_none().cmp(&b.outline_mask.is_none()));
let instances = instances.sorted_by(|a, b| {
a.outline_mask_ids
.is_none()
.cmp(&b.outline_mask_ids.is_none())
});

for instance in instances {
count += 1;
count_with_outlines += instance.outline_mask.is_some() as u32;
count_with_outlines += instance.outline_mask_ids.is_some() as u32;

let world_from_mesh_mat3 = instance.world_from_mesh.matrix3;
let world_from_mesh_normal =
Expand All @@ -219,8 +222,8 @@ impl MeshDrawData {
world_from_mesh_normal_row_1: world_from_mesh_normal.row(1).to_array(),
world_from_mesh_normal_row_2: world_from_mesh_normal.row(2).to_array(),
additive_tint: instance.additive_tint,
outline_mask: instance
.outline_mask
outline_mask_ids: instance
.outline_mask_ids
.0
.map_or([0, 0, 0, 0], |mask| [mask[0], mask[1], 0, 0]),
});
Expand Down
19 changes: 11 additions & 8 deletions crates/re_viewer/src/misc/selection_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,11 @@ impl SelectionState {
.or_default()
.overall
.selection = SelectionHighlight::SiblingSelection;
let outline_mask =
let outline_mask_ids =
outlines_masks.entry(entity_path.hash()).or_default();
outline_mask.overall =
outline_mask.overall.combine(selection_mask);
outline_mask.any_selection_highlight = true;
outline_mask_ids.overall =
outline_mask_ids.overall.combine(selection_mask);
outline_mask_ids.any_selection_highlight = true;
},
);
}
Expand Down Expand Up @@ -432,16 +432,19 @@ impl SelectionState {
*highlight_target = (*highlight_target).max(highlight);
}
{
let outline_mask = outlines_masks
let outline_mask_ids = outlines_masks
.entry(selected_instance.entity_path.hash())
.or_default();
outline_mask.any_selection_highlight = true;
outline_mask_ids.any_selection_highlight = true;
let outline_mask_target = if let Some(selected_index) =
selected_instance.instance_key.specific_index()
{
outline_mask.instances.entry(selected_index).or_default()
outline_mask_ids
.instances
.entry(selected_index)
.or_default()
} else {
&mut outline_mask.overall
&mut outline_mask_ids.overall
};
*outline_mask_target = outline_mask_target.combine(next_selection_mask());
}
Expand Down
2 changes: 1 addition & 1 deletion crates/re_viewer/src/ui/view_spatial/scene/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ pub struct MeshSource {
// TODO(andreas): Make this Conformal3 once glow is gone?
pub world_from_mesh: macaw::Affine3A,
pub mesh: Arc<LoadedMesh>,
pub outline_mask: OutlineMaskPreference,
pub outline_mask_ids: OutlineMaskPreference,
}

pub struct Image {
Expand Down
2 changes: 1 addition & 1 deletion crates/re_viewer/src/ui/view_spatial/scene/primitives.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ impl SceneSpatialPrimitives {
.map(move |mesh_instance| MeshInstance {
gpu_mesh: mesh_instance.gpu_mesh.clone(),
world_from_mesh: base_transform * mesh_instance.world_from_mesh,
outline_mask: mesh.outline_mask,
outline_mask_ids: mesh.outline_mask_ids,
..Default::default()
})
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ impl Arrows3DPart {
.line_strips
.batch("arrows")
.world_from_obj(world_from_obj)
.outline_mask(entity_highlight.overall);
.outline_mask_ids(entity_highlight.overall);

let visitor = |instance_key: InstanceKey,
arrow: Arrow3D,
Expand Down Expand Up @@ -79,8 +79,8 @@ impl Arrows3DPart {
.flags(re_renderer::renderer::LineStripFlags::CAP_END_TRIANGLE)
.user_data(picking_instance_hash);

if let Some(outline_mask) = entity_highlight.instances.get(&instance_key) {
segment.outline_mask(*outline_mask);
if let Some(outline_mask_ids) = entity_highlight.instances.get(&instance_key) {
segment.outline_mask_ids(*outline_mask_ids);
}
};

Expand Down
Loading

0 comments on commit f6f9071

Please sign in to comment.