Fix viewport origin of webrender frame (#30088)

* Fix viewport origin of webrender frame

* Update documentations
This commit is contained in:
Ngo Iok Ui (Wu Yu Wei) 2023-08-10 22:01:21 +08:00 committed by GitHub
parent c264993da8
commit 1f7f4cf2be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 1 deletions

View file

@ -918,7 +918,7 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
self.webrender_api.set_document_view( self.webrender_api.set_document_view(
self.webrender_document, self.webrender_document,
self.embedder_coordinates.get_flipped_viewport(), self.embedder_coordinates.get_viewport(),
self.embedder_coordinates.hidpi_factor.get(), self.embedder_coordinates.hidpi_factor.get(),
); );

View file

@ -200,6 +200,13 @@ pub struct EmbedderCoordinates {
} }
impl EmbedderCoordinates { impl EmbedderCoordinates {
/// Get the unflipped viewport rectangle for use with the WebRender API.
pub fn get_viewport(&self) -> DeviceIntRect {
DeviceIntRect::from_untyped(&self.viewport.to_untyped())
}
/// Get the flipped viewport rectangle. This should be used when drawing directly
/// to the framebuffer with OpenGL commands.
pub fn get_flipped_viewport(&self) -> DeviceIntRect { pub fn get_flipped_viewport(&self) -> DeviceIntRect {
let fb_height = self.framebuffer.height; let fb_height = self.framebuffer.height;
let mut view = self.viewport.clone(); let mut view = self.viewport.clone();

View file

@ -381,6 +381,11 @@ where
let wr_document_layer = 0; //TODO let wr_document_layer = 0; //TODO
let webrender_document = let webrender_document =
webrender_api.add_document(coordinates.framebuffer, wr_document_layer); webrender_api.add_document(coordinates.framebuffer, wr_document_layer);
webrender_api.set_document_view(
webrender_document,
coordinates.get_viewport(),
coordinates.hidpi_factor.get(),
);
// Important that this call is done in a single-threaded fashion, we // Important that this call is done in a single-threaded fashion, we
// can't defer it after `create_constellation` has started. // can't defer it after `create_constellation` has started.