Benjamin Otte
1b90ce6b33
vulkan: Remove color from push constants
...
It's now handled by the color pipeline.
2016-12-20 18:01:11 +01:00
Benjamin Otte
b04eecf860
vulkan: Pass color rects in instance data
...
This way, we don't need push constants or per-vertex data, we can render
colored rectangles completely via instance data.
2016-12-20 18:01:11 +01:00
Benjamin Otte
4c74695a85
vulkan: Don't pass texture coordinates to the color pipeline
2016-12-20 18:01:11 +01:00
Benjamin Otte
5dfb74c70c
vulkan: Get vertex description from pipeline subclass
2016-12-20 18:01:11 +01:00
Benjamin Otte
b4f04d0c1d
vulkan: Split color and blend pipelines
2016-12-20 18:01:11 +01:00
Benjamin Otte
e68b18aa4e
vulkan: Move vertex data tracking to the pipeline subclass
...
That way, different pipelines can draw different kinds of data.
2016-12-20 18:01:11 +01:00
Benjamin Otte
9aecd6dd56
vulkan: Add GskVulkanBlendPipeline
...
So far that's just a simple pipeline that doesn't do anything.
2016-12-20 18:01:11 +01:00
Benjamin Otte
453478719d
vulkan: Make GskVulkanPipeline derivable
2016-12-20 18:01:11 +01:00
Benjamin Otte
30438c6e8b
gsk: Add cross-fade node
...
And implement stack crossfades with it.
2016-12-20 18:01:11 +01:00
Benjamin Otte
3e4fd32b54
vulkan: Batch upload image barriers together
...
Doesn't seem to help much though...
2016-12-20 18:01:11 +01:00
Benjamin Otte
7b9ace488b
vulkan: Add GskVulkanUploader
...
It's the thing that makes sure pixels end up on the GPU.
2016-12-20 18:01:11 +01:00
Benjamin Otte
85559d1fd9
vulkan: Split out command pool
...
This way we can pass the command pool around.
And that allows us to allocate and submitcustom buffers.
And that is necessary to make staging images work.
2016-12-20 18:01:11 +01:00
Benjamin Otte
ba7ac637bc
vulkan: Implement staging-buffer image upload
...
This is not enabled by default. Use GSK_RENDERING_MODE=staging-buffer to
use the code.
2016-12-20 18:01:11 +01:00
Benjamin Otte
3ef03c8bc0
gsk: Check for NULL in calls to gsk_cairo_node_get_surface()
...
That function does actually sometimes return NULL and is documented to
do so, so handle that case in the renderers (by omitting the node).
2016-12-20 18:01:11 +01:00
Benjamin Otte
e8cd71228a
gsk: Implement linear gradient render nodes
2016-12-20 18:01:11 +01:00
Benjamin Otte
cf520b7a1f
gsk: Add blend nodes
...
Implement blend mode support in GTK background compositing with it.
2016-12-20 18:01:11 +01:00
Benjamin Otte
2118f394d2
gsk: Add missing blend modes
...
This brings GSK blend modes in line with the CSS spec.
2016-12-20 18:01:11 +01:00
Benjamin Otte
08a2a29c26
vulkan: Add infrastructure for multiple pipelines
...
And use it to draw solid colors with a 2nd pipeline.
2016-12-20 18:01:11 +01:00
Benjamin Otte
7d837a2ae6
vulkan: Split PipelineLayout into its own object
...
This way, we can share the layout between different pipelines.
2016-12-20 18:01:11 +01:00
Benjamin Otte
f4f0dba5c6
vulkan: Split render ops into seperate structs
...
This makes it a lot clearer which members are relevant for each
different operation.
2016-12-20 18:01:11 +01:00
Benjamin Otte
62eb9d42aa
vulkan: Add infrastructure for push constants
...
THe code includes fragment push constants for colors, but that code is
so far unused.
2016-12-20 18:01:10 +01:00
Benjamin Otte
23e35706b4
gsk: Add support for rounded clip rectangles
...
Also add support to GtkSnapshot, so people can push rounded clips.
2016-12-20 18:01:10 +01:00
Benjamin Otte
59d638a09f
gsk: Add GskRoundedRect
...
It's essentially a port of GtkRoundedBox to graphene.
2016-12-20 18:01:10 +01:00
Benjamin Otte
1f988d8b05
gsk: Add gsk_clip_node_new()
...
The node is a simple clipping node: It does a rectangular clip of its
contents.
2016-12-20 18:01:10 +01:00
Benjamin Otte
07d39299ea
gsk: Replace gsk_render_node_set_opacity()
...
... with gsk_opacity_node_new().
Also implement support for opacity in gtk_widget_snapshot() using this
new node.
2016-12-20 18:01:10 +01:00
Benjamin Otte
e6d423e0e2
gsk: Remove gsk_renderer_create_fallback()
...
Use gsk_render_node_draw() instead.
2016-12-20 18:01:10 +01:00
Benjamin Otte
ee9aca882d
gsk: Add fallback code to renderers
...
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.
2016-12-20 18:01:10 +01:00
Benjamin Otte
6129daf29b
gsk: Add gsk_color_node_new()
2016-12-20 18:01:10 +01:00
Benjamin Otte
361e2cda27
Call gsk_render_node_draw() instead of creating fallback renderers
2016-12-20 18:01:10 +01:00
Benjamin Otte
e82d02432e
gsk: Add gsk_render_node_draw()
...
Draws a node to a given cairo_t. This is mostly intended for fallback
usage.
2016-12-20 18:01:10 +01:00
Benjamin Otte
02131d590e
snapshot: Change how gtk_snapshot_push/pop works
...
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).
2016-12-20 18:01:10 +01:00
Benjamin Otte
67fb129ed7
gsk: gsk_render_node_set_transform() => GskTransformNode
...
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.
2016-12-20 18:01:10 +01:00
Benjamin Otte
19753062c4
gsK: Move children handling to GskContainerNode
2016-12-20 18:01:09 +01:00
Benjamin Otte
e2625f8649
gsk: Remove GskRenderNode::parent
...
... and all related APIs.
2016-12-20 18:01:09 +01:00
Benjamin Otte
a8f2b3e75e
gsk: Remove world matrix support
...
Use the real transform and compute it manually.
2016-12-20 18:01:09 +01:00
Benjamin Otte
3eb7c4719b
gsk: Remove gsk_render_node_set_bounds()
...
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
2016-12-20 18:01:09 +01:00
Benjamin Otte
4d376c80f3
gsk: Remove gsk_render_node_get_size()
...
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.
2016-12-20 18:01:09 +01:00
Benjamin Otte
d907f60843
gsk: Add GskRenderNodeClass.make_immutable()
2016-12-20 18:01:09 +01:00
Benjamin Otte
e4ee65fd19
gsk: Remove gsk_render_node_set_opaque()
...
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.
2016-12-20 18:01:09 +01:00
Benjamin Otte
684d25bd1a
gsk: Add custom structs to RenderNode subclasses
...
So now we don't need to keep a texture pointer and a surface pointer and
so on in the base struct.
2016-12-20 18:01:09 +01:00
Benjamin Otte
be8b9406e5
gsk: Add GskRenderNodeClass.finalize()
2016-12-20 18:01:09 +01:00
Benjamin Otte
a97b819b81
gsk: Add gsk_container_node_new()
...
It replaces gsk_renderer_create_render_node() which was doing the eact
same thing, only taking an unused extra argument.
2016-12-20 18:01:09 +01:00
Benjamin Otte
f16d523cb2
gsk: Introduce GskRenderNodeClass
...
This is modeled after GtkCssValueClass. So far it doesn't do anything.
2016-12-20 18:01:09 +01:00
Benjamin Otte
3af4fba895
gsk: Split render node subclasses out into their own file
2016-12-20 18:01:09 +01:00
Benjamin Otte
abd184efc9
gsk: Remove gsk_render_node_is_surface/texture()
...
Use gsk_render_node_get_node_type() instead.
2016-12-20 18:01:09 +01:00
Benjamin Otte
cb5c5170f4
gsk: Remove unneeded children modifiers
...
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.
2016-12-20 18:01:09 +01:00
Benjamin Otte
52d2faef88
gsk: Add gsk_cairo_node_new()
...
Split off Cairo drawn content nodes and require you to allocate them
using this new function.
2016-12-20 18:01:09 +01:00
Benjamin Otte
8c8691b469
gsk: Add gsk_texture_node_new()
...
Start the transition into the different node types.
2016-12-20 18:01:09 +01:00
Benjamin Otte
ac5e277a71
gsk: Add GskRenderNodeType
...
For now, this is unused.
2016-12-20 18:01:09 +01:00
Benjamin Otte
f258af9cce
gsk: Remove GskRenderNodeIter
2016-12-20 18:01:09 +01:00