Skip to content

Commit 625d2bd

Browse files
authored
Revert "Implement billinear filtering of textures (rerun-io#1850)" (rerun-io#1859)
This reverts commit d33dab6.
1 parent 8d25b9e commit 625d2bd

File tree

3 files changed

+32
-97
lines changed

3 files changed

+32
-97
lines changed

crates/re_renderer/shader/rectangle.wgsl

+6-60
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ const COLOR_MAPPER_OFF = 1u;
1616
const COLOR_MAPPER_FUNCTION = 2u;
1717
const COLOR_MAPPER_TEXTURE = 3u;
1818

19-
const FILTER_NEAREST = 1u;
20-
const FILTER_BILINEAR = 2u;
21-
2219
struct UniformBuffer {
2320
/// Top left corner position in world space.
2421
top_left_corner_position: Vec3,
@@ -51,9 +48,6 @@ struct UniformBuffer {
5148
/// Exponent to raise the normalized texture value.
5249
/// Inverse brightness.
5350
gamma: f32,
54-
55-
minification_filter: u32,
56-
magnification_filter: u32,
5751
};
5852

5953
@group(1) @binding(0)
@@ -96,18 +90,6 @@ fn vs_main(@builtin(vertex_index) v_idx: u32) -> VertexOut {
9690
return out;
9791
}
9892

99-
fn is_magnifying(pixel_coord: Vec2) -> bool {
100-
return fwidth(pixel_coord.x) < 1.0;
101-
}
102-
103-
fn tex_filter(pixel_coord: Vec2) -> u32 {
104-
if is_magnifying(pixel_coord) {
105-
return rect_info.magnification_filter;
106-
} else {
107-
return rect_info.minification_filter;
108-
}
109-
}
110-
11193
@fragment
11294
fn fs_main(in: VertexOut) -> @location(0) Vec4 {
11395
// Sample the main texture:
@@ -116,50 +98,14 @@ fn fs_main(in: VertexOut) -> @location(0) Vec4 {
11698
// TODO(emilk): support mipmaps
11799
sampled_value = textureSampleLevel(texture_float_filterable, texture_sampler, in.texcoord, 0.0);
118100
} else if rect_info.sample_type == SAMPLE_TYPE_FLOAT_NOFILTER {
119-
let coord = in.texcoord * Vec2(textureDimensions(texture_float).xy);
120-
if tex_filter(coord) == FILTER_NEAREST {
121-
// nearest
122-
sampled_value = textureLoad(texture_float, IVec2(coord + vec2(0.5)), 0);
123-
} else {
124-
// bilinear
125-
let v00 = textureLoad(texture_float, IVec2(coord) + IVec2(0, 0), 0);
126-
let v01 = textureLoad(texture_float, IVec2(coord) + IVec2(0, 1), 0);
127-
let v10 = textureLoad(texture_float, IVec2(coord) + IVec2(1, 0), 0);
128-
let v11 = textureLoad(texture_float, IVec2(coord) + IVec2(1, 1), 0);
129-
let top = mix(v00, v10, fract(coord.x));
130-
let bottom = mix(v01, v11, fract(coord.x));
131-
sampled_value = mix(top, bottom, fract(coord.y));
132-
}
101+
let icoords = IVec2(in.texcoord * Vec2(textureDimensions(texture_float).xy));
102+
sampled_value = Vec4(textureLoad(texture_float, icoords, 0));
133103
} else if rect_info.sample_type == SAMPLE_TYPE_SINT_NOFILTER {
134-
let coord = in.texcoord * Vec2(textureDimensions(texture_sint).xy);
135-
if tex_filter(coord) == FILTER_NEAREST {
136-
// nearest
137-
sampled_value = Vec4(textureLoad(texture_sint, IVec2(coord + vec2(0.5)), 0));
138-
} else {
139-
// bilinear
140-
let v00 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(0, 0), 0));
141-
let v01 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(0, 1), 0));
142-
let v10 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(1, 0), 0));
143-
let v11 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(1, 1), 0));
144-
let top = mix(v00, v10, fract(coord.x));
145-
let bottom = mix(v01, v11, fract(coord.x));
146-
sampled_value = mix(top, bottom, fract(coord.y));
147-
}
104+
let icoords = IVec2(in.texcoord * Vec2(textureDimensions(texture_sint).xy));
105+
sampled_value = Vec4(textureLoad(texture_sint, icoords, 0));
148106
} else if rect_info.sample_type == SAMPLE_TYPE_UINT_NOFILTER {
149-
let coord = in.texcoord * Vec2(textureDimensions(texture_uint).xy);
150-
if tex_filter(coord) == FILTER_NEAREST {
151-
// nearest
152-
sampled_value = Vec4(textureLoad(texture_uint, IVec2(coord + vec2(0.5)), 0));
153-
} else {
154-
// bilinear
155-
let v00 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(0, 0), 0));
156-
let v01 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(0, 1), 0));
157-
let v10 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(1, 0), 0));
158-
let v11 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(1, 1), 0));
159-
let top = mix(v00, v10, fract(coord.x));
160-
let bottom = mix(v01, v11, fract(coord.x));
161-
sampled_value = mix(top, bottom, fract(coord.y));
162-
}
107+
let icoords = IVec2(in.texcoord * Vec2(textureDimensions(texture_uint).xy));
108+
sampled_value = Vec4(textureLoad(texture_uint, icoords, 0));
163109
} else {
164110
return ERROR_RGBA; // unknown sample type
165111
}

crates/re_renderer/src/renderer/rectangles.rs

+2-16
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,6 @@ mod gpu_data {
192192
const COLOR_MAPPER_FUNCTION: u32 = 2;
193193
const COLOR_MAPPER_TEXTURE: u32 = 3;
194194

195-
const FILTER_NEAREST: u32 = 1;
196-
const FILTER_BILINEAR: u32 = 2;
197-
198195
#[repr(C, align(256))]
199196
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
200197
pub struct UniformBuffer {
@@ -216,8 +213,7 @@ mod gpu_data {
216213

217214
color_mapper: u32,
218215
gamma: f32,
219-
minification_filter: u32,
220-
magnification_filter: u32,
216+
_row_padding: [u32; 2],
221217

222218
_end_padding: [wgpu_buffer_types::PaddingRow; 16 - 6],
223219
}
@@ -279,15 +275,6 @@ mod gpu_data {
279275
}
280276
}
281277

282-
let minification_filter = match rectangle.texture_filter_minification {
283-
super::TextureFilterMin::Linear => FILTER_BILINEAR,
284-
super::TextureFilterMin::Nearest => FILTER_NEAREST,
285-
};
286-
let magnification_filter = match rectangle.texture_filter_magnification {
287-
super::TextureFilterMag::Linear => FILTER_BILINEAR,
288-
super::TextureFilterMag::Nearest => FILTER_NEAREST,
289-
};
290-
291278
Ok(Self {
292279
top_left_corner_position: rectangle.top_left_corner_position.into(),
293280
colormap_function,
@@ -300,8 +287,7 @@ mod gpu_data {
300287
range_min_max: (*range).into(),
301288
color_mapper: color_mapper_int,
302289
gamma: *gamma,
303-
minification_filter,
304-
magnification_filter,
290+
_row_padding: Default::default(),
305291
_end_padding: Default::default(),
306292
})
307293
}

crates/re_viewer/src/ui/view_tensor/ui.rs

+24-21
Original file line numberDiff line numberDiff line change
@@ -426,29 +426,32 @@ impl TextureSettings {
426426
});
427427
ui.end_row();
428428

429-
re_ui
430-
.grid_left_hand_label(ui, "Filtering")
431-
.on_hover_text("Filtering to use when magnifying");
432-
433-
fn tf_to_string(tf: egui::TextureFilter) -> &'static str {
434-
match tf {
435-
egui::TextureFilter::Nearest => "Nearest",
436-
egui::TextureFilter::Linear => "Linear",
429+
// TODO(#1612): support texture filtering again
430+
if false {
431+
re_ui
432+
.grid_left_hand_label(ui, "Filtering")
433+
.on_hover_text("Filtering to use when magnifying");
434+
435+
fn tf_to_string(tf: egui::TextureFilter) -> &'static str {
436+
match tf {
437+
egui::TextureFilter::Nearest => "Nearest",
438+
egui::TextureFilter::Linear => "Linear",
439+
}
437440
}
438-
}
439-
egui::ComboBox::from_id_source("texture_filter")
440-
.selected_text(tf_to_string(options.magnification))
441-
.show_ui(ui, |ui| {
442-
ui.style_mut().wrap = Some(false);
443-
ui.set_min_width(64.0);
441+
egui::ComboBox::from_id_source("texture_filter")
442+
.selected_text(tf_to_string(options.magnification))
443+
.show_ui(ui, |ui| {
444+
ui.style_mut().wrap = Some(false);
445+
ui.set_min_width(64.0);
444446

445-
let mut selectable_value = |ui: &mut egui::Ui, e| {
446-
ui.selectable_value(&mut options.magnification, e, tf_to_string(e))
447-
};
448-
selectable_value(ui, egui::TextureFilter::Nearest);
449-
selectable_value(ui, egui::TextureFilter::Linear);
450-
});
451-
ui.end_row();
447+
let mut selectable_value = |ui: &mut egui::Ui, e| {
448+
ui.selectable_value(&mut options.magnification, e, tf_to_string(e))
449+
};
450+
selectable_value(ui, egui::TextureFilter::Linear);
451+
selectable_value(ui, egui::TextureFilter::Nearest);
452+
});
453+
ui.end_row();
454+
}
452455
}
453456
}
454457

0 commit comments

Comments
 (0)