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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user