This is a small cleanup that moves and renames this class. The rename is
simply because we are exposing a lot about the details of Servo's
rendering in the API and it makes sense to start thinking about
abstracting that away a bit.
This also moves the struct to `gfx`, which does have an effect on
Servo's dependency graph. This adds a new dependency on gfx to
`compositing`, but `compositing` had a transitive dependency on
gfx before through `canvas`.
* Offscreen rendering
* shared memory case never actually rendered to backbuffer
* fix compile errors (in theory) when gl crate feature disabled
* update doc comments
* remove dark CentralPanel border covering edges of viewport
* clear to transparent, to avoid pink artifacts
* fix mouse input for browser being consumed by egui
* avoid destroying OpenGL resources unless resizing window
* clean up compositing::gl
* fix flickering around edges after resizing window
* unset invalidate_last_render_target after invalidating
* fix incorrect DRAW_FRAMEBUFFER name when blitting
* bind the widget surface fbo before painting egui
* make composite_specific_target take CompositeTarget, not Option
* compositing: remove cargo feature “gl”
* capitalise FBO in bind log message
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* capitalise FBO in drop log message
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* rename RenderTargetInfo fields and use OnceCell for next field
* rename RenderTargetInfo.read to read_back_from_gpu
* document servo_framebuffer_id in Minibrowser::update
* rename needs_fbo to use_offscreen_framebuffer
* capitalise FBO in unbind log message
* clarify the purpose of Minibrowser::on_event
* fix unused_must_use warning
* reduce nesting in Minibrowser::update
* use implicit format argument in panic
* store Minibrowser.widget_surface_fbo as glow type
* explain why servo_framebuffer_id is None in first call site
* rename output_framebuffer_id to offscreen_framebuffer_id
---------
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
This is the start of the organization of types that are in their own
crates in order to break dependency cycles between other crates. The
idea here is that putting these packages into their own directory is the
first step toward cleaning them up. They have grown organically and it
is difficult to explain to new folks where to put new shared types. Many
of these crates contain more than traits or don't contain traits at all.
Notably, `script_traits` isn't touched because it is vendored from
Gecko. Eventually this will move to `third_party`.
This is a step toward upgrading WebRender, which will be upgraded and
patched in the `third_party` directory. This change vendors the current
private branch of WebRender that we use and adds a `patches` directory
which tracks the changes on top of the upstream WebRender commit
described by third_party/webrender/patches/head.
This will allow the compositor to properly chain scrolling requests up
when a node has reached the extent of the scroll area. This fixes
scrolling on servo.org.
This will ultimately make it simpler to update crate dependencies and
reduce duplicate when specifying requirements. Generally, this change
does not touch dependencies that are only used by a single crate. We
could consider moving them to workspace dependencies in the future.
- Also updates raqote to latest with an upgrade of font-kit to 0.11
applied on as a patch
- Update lyon_geom to the latest version
Major change:
- All matrices are now stored in row major order. This means that
parameters to rotation functions no longer should be negated.
- `post_...()` functions are now named `then()`. `pre_transform()` is removed,
so `then()` is used and the order of operations changed.
There are a few canvas2d-related dependencies that haven't updated, but they
only use euclid internally so that's not blocking landing the rest of the
changes.
Given the size of this patch, I think it's useful to get this landed as-is.
This module adds a structure (WindowGLContext) which holds the
OpenGL parameters that are going to be used by servo-media player
to render video frames using OpenGL.
In order to fill this structure, three new methods were added to
WindowMethods trait. In this patch only the Glutin-based
implementation provides a simple boilerplate.
The WindowGLContext is created in the entry point of libservo, when
the application window is created, and later passed to the
constellation, the pipeline and to the window element in dom, thus
htmlmediaelement has a mean to obtain these parameters via its
window.
This improves the quality of KeyboardEvents
sent by WebDriver. Now key, code, location and
modifiers are set according to spec.
CompositionEvents are discarded as servo
does not handle them at all.