render: split rendering into two phases
In the first phase we collect a list of simple operations (copying textures and filling rectangles.) In the second phase we send this list to the graphics API to be executed. As part of this, we also remove the use of scissors.
This commit is contained in:
parent
a2a04512ed
commit
5e8a6eb86f
27 changed files with 732 additions and 384 deletions
|
|
@ -1085,7 +1085,14 @@ impl Node for ContainerNode {
|
|||
.node_child_active_changed(self.deref(), active, depth + 1);
|
||||
}
|
||||
|
||||
fn node_render(&self, renderer: &mut Renderer, x: i32, y: i32) {
|
||||
fn node_render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
x: i32,
|
||||
y: i32,
|
||||
_max_width: i32,
|
||||
_max_height: i32,
|
||||
) {
|
||||
renderer.render_container(self, x, y);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -111,7 +111,14 @@ impl Node for DisplayNode {
|
|||
FindTreeResult::AcceptsInput
|
||||
}
|
||||
|
||||
fn node_render(&self, renderer: &mut Renderer, x: i32, y: i32) {
|
||||
fn node_render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
x: i32,
|
||||
y: i32,
|
||||
_max_width: i32,
|
||||
_max_height: i32,
|
||||
) {
|
||||
renderer.render_display(self, x, y);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -420,7 +420,14 @@ impl Node for FloatNode {
|
|||
}
|
||||
}
|
||||
|
||||
fn node_render(&self, renderer: &mut Renderer, x: i32, y: i32) {
|
||||
fn node_render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
x: i32,
|
||||
y: i32,
|
||||
_max_width: i32,
|
||||
_max_height: i32,
|
||||
) {
|
||||
renderer.render_floating(self, x, y)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ pub async fn output_render_data(state: Rc<State>) {
|
|||
}
|
||||
|
||||
impl OutputNode {
|
||||
pub fn perform_screencopies(&self, fb: &Framebuffer, tex: &Texture) {
|
||||
pub fn perform_screencopies(&self, fb: &Framebuffer, tex: &Rc<Texture>) {
|
||||
if let Some(workspace) = self.workspace.get() {
|
||||
if !workspace.capture.get() {
|
||||
return;
|
||||
|
|
@ -620,7 +620,14 @@ impl Node for OutputNode {
|
|||
FindTreeResult::AcceptsInput
|
||||
}
|
||||
|
||||
fn node_render(&self, renderer: &mut Renderer, x: i32, y: i32) {
|
||||
fn node_render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
x: i32,
|
||||
y: i32,
|
||||
_max_width: i32,
|
||||
_max_height: i32,
|
||||
) {
|
||||
renderer.render_output(self, x, y);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,14 @@ impl Node for PlaceholderNode {
|
|||
FindTreeResult::AcceptsInput
|
||||
}
|
||||
|
||||
fn node_render(&self, renderer: &mut Renderer, x: i32, y: i32) {
|
||||
fn node_render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
x: i32,
|
||||
y: i32,
|
||||
_max_width: i32,
|
||||
_max_height: i32,
|
||||
) {
|
||||
renderer.render_placeholder(self, x, y);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -170,7 +170,14 @@ impl Node for WorkspaceNode {
|
|||
FindTreeResult::AcceptsInput
|
||||
}
|
||||
|
||||
fn node_render(&self, renderer: &mut Renderer, x: i32, y: i32) {
|
||||
fn node_render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
x: i32,
|
||||
y: i32,
|
||||
_max_width: i32,
|
||||
_max_height: i32,
|
||||
) {
|
||||
renderer.render_workspace(self, x, y);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue