| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
This makes it a lot clearer which members are relevant for each
different operation.
|
|
|
|
|
| |
THe code includes fragment push constants for colors, but that code is
so far unused.
|
|
|
|
| |
Also add support to GtkSnapshot, so people can push rounded clips.
|
|
|
|
| |
It's essentially a port of GtkRoundedBox to graphene.
|
|
|
|
|
| |
The node is a simple clipping node: It does a rectangular clip of its
contents.
|
|
|
|
|
|
|
| |
... with gsk_opacity_node_new().
Also implement support for opacity in gtk_widget_snapshot() using this
new node.
|
|
|
|
| |
Use gsk_render_node_draw() instead.
|
|
|
|
|
|
|
| |
This code makes renderers fall back to Cairo rendering if they don't
know how to handle a render node's type.
This allows adding new render nodes with impunity.
|
| |
|
| |
|
|
|
|
|
| |
Draws a node to a given cairo_t. This is mostly intended for fallback
usage.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of appending a container node and adding the nodes to it as they
come in, we now collect the nodes until gtk_snapshot_pop() is called and
then hand them out in a container node.
The caller of gtk_snapshot_push() is then responsible for doing whatever
he wants with the created node.
Another addigion is the keep_coordinates flag to gtk_snapshot_push()
which allows callers to keep the current offset and clip region or
discard it. Discarding is useful when doing transforms, keeping it is
useful when inserting effect nodes (like the ones I'm about to add).
|
|
|
|
|
|
|
|
|
|
| |
Instead of having a setter for the transform, have a GskTransformNode.
Most of the oprations that GTK does do not require a transform, so it
doesn't make sense to have it as a primary attribute.
Also, changing the transform requires updating the uniforms of the GL
renderer, so we're happy if we can avoid that.
|
| |
|
|
|
|
| |
... and all related APIs.
|
|
|
|
| |
Use the real transform and compute it manually.
|
|
|
|
|
|
|
| |
gsk_render_node_get_bounds() still exists and is computed via vfunc
call:
- containers dynamically compute the bounds from their children
- surface and texture nodes get bounds passed on construction
|
|
|
|
|
|
|
|
|
|
| |
In the brave new world of refactored render nodes, this function doesn't
really make any sense anymore. We could turn it into a vfunc, but I
don't think it's useful.
Especially because even in the brave old world, this function was
causing a vastl overallocation of nodes when the GL renderer needed render
targets.
|
| |
|
|
|
|
|
|
|
| |
If we ever feel, we need this function again, we can readd it later.
But nobody is using it other than for overriding opactiy. And you can
just override opacity directly if you care.
|
|
|
|
|
| |
So now we don't need to keep a texture pointer and a surface pointer and
so on in the base struct.
|
| |
|
|
|
|
|
| |
It replaces gsk_renderer_create_render_node() which was doing the eact
same thing, only taking an unused extra argument.
|
|
|
|
| |
This is modeled after GtkCssValueClass. So far it doesn't do anything.
|
| |
|
|
|
|
| |
Use gsk_render_node_get_node_type() instead.
|
|
|
|
|
|
|
| |
Creating render nodes is fire-and-forget, so all one should do is create
a container, append, append, append and then send it off to the
renderer. So there's no need to replace, insert between or anything
else.
|
|
|
|
|
| |
Split off Cairo drawn content nodes and require you to allocate them
using this new function.
|
|
|
|
| |
Start the transition into the different node types.
|
|
|
|
| |
For now, this is unused.
|
| |
|
| |
|
| |
|
|
|
|
| |
If you want to hide something, don't render it.
|
| |
|
|
|
|
| |
It is no longer GDK_WINDOWING_VULKAN.
|
|
|
|
|
|
|
|
|
| |
- Recognize "gl" as well as "opengl" for the GL renderer
- GSK_RENDERER=help now works
- g_warning() for an unrecognized renderer (typo detection!)
- g_print() the actual renderer that is used (and error messages when
selecting) when a GSK_RENDERER is given, so you'll notice if your
renderer isn't taken.
|
|
|
|
| |
And with this change, the GPU looks bored again.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
By creating unlimited render objects, we would never wait on the GPU.
This would mean that if the GPU was the bottleneck, we would fill its
queue with render commands faster than it could process them.
And because the nvidia binary driver and my code work surprisingly well
and bugfree, this lead to exhaustion of RAM. I had 50GB of swap
configured and my hard disk was quicker as swap storage than my GPU was
at processing the commands, so stuff still filled up.
At that point my computer became rather unresponsive and I decided to
reboot it, so I that could write this patch.
|
|
|
|
|
| |
If we need more than we have reserved as maximum, recreate the
descriptor pool with a higher maximum.
|
|
|
|
|
|
| |
Add SURFACE and TEXTURE operations. This way, we actually render more
than one node every frame because not everything is a fallback node
anymore that gets composited with its children into a cairo surface.
|
|
|
|
|
|
| |
Instead of pushing the root matrix, push the world matrix for the
current node. That way, the bounds we emit as vertices are actually
properly transformed.
|
|
|
|
| |
We will need that once we actually composite stuff.
|
|
|
|
|
|
|
|
|
| |
First, we collect all the info about descriptor sets into a hash table,
then we use its size to determine the amount of sets and allocate those
before we finally go ahead and use the hash table's contents to
initialize the descriptor sets.
And then we're ready to render.
|
|
|
|
| |
It now gets to maintain things.
|
|
|
|
|
| |
Also create them on-demand, as they need to be created per-image and
per-framebuffer, so we don't want to create loads of them.
|
|
|
|
|
| |
This gives us proper refcounting here, too. And there's no longer a
difference between the different types of images.
|
|
|
|
| |
This is to enable lazy framebuffer creation later.
|
|
|
|
| |
This way, we can do real refcounting on them.
|
|
|
|
|
|
| |
Instead of having to decie at compile-time, check if
GSK_RENDERING=staging-image was given, and if so, select the staging
image upload mode.
|