mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-12 05:20:17 +00:00
gpu: Move global syncing out
This is necessary so that fallback code can properly sync itself, instead of just add_node(). Fixes a bunch of glitches when fallbacks would be used.
This commit is contained in:
parent
73ac2d0a1c
commit
0ed45c5f40
@ -142,6 +142,20 @@ gsk_gpu_node_processor_emit_scissor_op (GskGpuNodeProcessor *self)
|
||||
self->pending_globals &= ~GSK_GPU_GLOBAL_SCISSOR;
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_gpu_node_processor_sync_globals (GskGpuNodeProcessor *self,
|
||||
GskGpuGlobals ignored)
|
||||
{
|
||||
GskGpuGlobals required;
|
||||
|
||||
required = self->pending_globals & ~ignored;
|
||||
|
||||
if (required & (GSK_GPU_GLOBAL_MATRIX | GSK_GPU_GLOBAL_SCALE | GSK_GPU_GLOBAL_CLIP))
|
||||
gsk_gpu_node_processor_emit_globals_op (self);
|
||||
if (required & GSK_GPU_GLOBAL_SCISSOR)
|
||||
gsk_gpu_node_processor_emit_scissor_op (self);
|
||||
}
|
||||
|
||||
void
|
||||
gsk_gpu_node_processor_process (GskGpuFrame *frame,
|
||||
GskGpuImage *target,
|
||||
@ -273,6 +287,8 @@ gsk_gpu_node_processor_add_fallback_node (GskGpuNodeProcessor *self,
|
||||
{
|
||||
GskGpuImage *image;
|
||||
|
||||
gsk_gpu_node_processor_sync_globals (self, 0);
|
||||
|
||||
image = gsk_gpu_upload_cairo_op (self->frame,
|
||||
node,
|
||||
&self->scale,
|
||||
@ -669,7 +685,6 @@ gsk_gpu_node_processor_add_node (GskGpuNodeProcessor *self,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
GskRenderNodeType node_type;
|
||||
GskGpuGlobals required_globals;
|
||||
|
||||
/* This catches the corner cases of empty nodes, so after this check
|
||||
* there's quaranteed to be at least 1 pixel that needs to be drawn */
|
||||
@ -686,11 +701,7 @@ gsk_gpu_node_processor_add_node (GskGpuNodeProcessor *self,
|
||||
return;
|
||||
}
|
||||
|
||||
required_globals = self->pending_globals & ~nodes_vtable[node_type].ignored_globals;
|
||||
if (required_globals & (GSK_GPU_GLOBAL_MATRIX | GSK_GPU_GLOBAL_SCALE | GSK_GPU_GLOBAL_CLIP))
|
||||
gsk_gpu_node_processor_emit_globals_op (self);
|
||||
if (required_globals & GSK_GPU_GLOBAL_SCISSOR)
|
||||
gsk_gpu_node_processor_emit_scissor_op (self);
|
||||
gsk_gpu_node_processor_sync_globals (self, nodes_vtable[node_type].ignored_globals);
|
||||
g_assert ((self->pending_globals & ~nodes_vtable[node_type].ignored_globals) == 0);
|
||||
|
||||
if (nodes_vtable[node_type].process_node)
|
||||
|
Loading…
Reference in New Issue
Block a user