Reshuffle things a little bit

Instead of having a function with lots of arguments in
GskVulkanRender that we call from GskVulkanRenderPass which
then just calls back into GskVulkanRenderPass, just create
the new render pass object locally, and an api to add it
to the list that GskVulkanRender keeps. This makes it
a lot easier to preserve all the relevant parameters from
the parent render pass.
This commit is contained in:
Matthias Clasen
2017-09-30 11:04:16 -04:00
parent 983e0b7956
commit 50bea37320
3 changed files with 24 additions and 41 deletions

View File

@@ -310,7 +310,7 @@ gsk_vulkan_render_add_cleanup_image (GskVulkanRender *self,
self->cleanup_images = g_slist_prepend (self->cleanup_images, image);
}
static void
void
gsk_vulkan_render_add_render_pass (GskVulkanRender *self,
GskVulkanRenderPass *pass)
{
@@ -343,38 +343,6 @@ gsk_vulkan_render_add_node (GskVulkanRender *self,
gsk_vulkan_render_pass_add (pass, self, node);
}
void
gsk_vulkan_render_add_node_for_texture (GskVulkanRender *self,
GskRenderNode *node,
const graphene_matrix_t *mv,
const graphene_rect_t *bounds,
GskVulkanImage *target,
VkSemaphore semaphore)
{
GskVulkanRenderPass *pass;
cairo_region_t *clip;
clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) {
0, 0,
gsk_vulkan_image_get_width (target),
gsk_vulkan_image_get_height (target)
});
pass = gsk_vulkan_render_pass_new (self->vulkan,
target,
1,
mv,
bounds,
clip,
semaphore);
cairo_region_destroy (clip);
gsk_vulkan_render_add_render_pass (self, pass);
gsk_vulkan_render_pass_add (pass, self, node);
}
void
gsk_vulkan_render_upload (GskVulkanRender *self)
{

View File

@@ -689,6 +689,8 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self,
{
VkSemaphore semaphore;
graphene_rect_t view;
cairo_region_t *clip;
GskVulkanRenderPass *pass;
graphene_matrix_transform_bounds (&self->mv, bounds, &view);
@@ -715,7 +717,25 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self,
&semaphore);
g_array_append_val (self->wait_semaphores, semaphore);
gsk_vulkan_render_add_node_for_texture (render, node, &self->mv, &view, result, semaphore);
clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) {
0, 0,
gsk_vulkan_image_get_width (result),
gsk_vulkan_image_get_height (result)
});
pass = gsk_vulkan_render_pass_new (self->vulkan,
result,
1,
&self->mv,
&view,
clip,
semaphore);
cairo_region_destroy (clip);
gsk_vulkan_render_add_render_pass (render, pass);
gsk_vulkan_render_pass_add (pass, render, node);
gsk_vulkan_render_add_cleanup_image (render, result);
return result;

View File

@@ -69,13 +69,8 @@ void gsk_vulkan_render_add_cleanup_image (GskVulk
void gsk_vulkan_render_add_node (GskVulkanRender *self,
GskRenderNode *node);
void gsk_vulkan_render_add_node_for_texture (GskVulkanRender *self,
GskRenderNode *node,
const graphene_matrix_t *mv,
const graphene_rect_t *bounds,
GskVulkanImage *target,
VkSemaphore semaphore);
void gsk_vulkan_render_add_render_pass (GskVulkanRender *self,
GskVulkanRenderPass *pass);
void gsk_vulkan_render_upload (GskVulkanRender *self);