mirror of
https://github.com/emilk/egui.git
synced 2026-08-29 04:40:03 -04:00
PaintCallbackInfo::viewport_in_pixels now guarantees to stay in bounds (#3604)
* Fixes https://github.com/rerun-io/rerun/issues/4297 * tested against a very hasty and incomplete port of egui/trunk, found [here](https://github.com/rerun-io/rerun/tree/andreas/experimental-egui-trunk) In rare cases in can happen that the viewport returned by `PaintCallbackInfo` is outside the bounds of the screen. for at least [wgpu/webgpu in particular](https://www.w3.org/TR/webgpu/#dom-gpurenderpassencoder-setviewport) this is invalid usage, other backends might be affected as well. Since this happened due to a float rounding error (in one repro case I had I got (width==1126.5625) + (offset=715.4376) = 1842.0001 for a resolution of 1842) I decided to do away with fractional values on the viewport alltogether. They _technically_ make sense since a viewport is only specifying the NDC to pixel coordinate conversion, but practically this may lead to surprising sub-sampling issues. --------- Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -404,10 +404,10 @@ impl Painter {
|
||||
let viewport_px = info.viewport_in_pixels();
|
||||
unsafe {
|
||||
self.gl.viewport(
|
||||
viewport_px.left_px.round() as _,
|
||||
viewport_px.from_bottom_px.round() as _,
|
||||
viewport_px.width_px.round() as _,
|
||||
viewport_px.height_px.round() as _,
|
||||
viewport_px.left_px,
|
||||
viewport_px.from_bottom_px,
|
||||
viewport_px.width_px,
|
||||
viewport_px.height_px,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user