summaryrefslogtreecommitdiff
path: root/src/vk/graphics_pipeline_2d_solid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vk/graphics_pipeline_2d_solid.cpp')
-rw-r--r--src/vk/graphics_pipeline_2d_solid.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/vk/graphics_pipeline_2d_solid.cpp b/src/vk/graphics_pipeline_2d_solid.cpp
index 5d210be..380bb65 100644
--- a/src/vk/graphics_pipeline_2d_solid.cpp
+++ b/src/vk/graphics_pipeline_2d_solid.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 Frederico de Oliveira Linhares
+ * Copyright 2022-2023 Frederico de Oliveira Linhares
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -299,33 +299,37 @@ GraphicsPipeline2DSolid::draw(
vkCmdSetScissor(draw_command_buffer, 0, 1, &vk_scissor);
}
+ vkCmdBindPipeline(
+ draw_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
+ this->graphic_pipeline);
+
+ // FIXME: I know sorting is expensive, but I need to figure out better what
+ // to do here.
+ std::sort(view->sprites_to_draw[current_frame].rbegin(),
+ view->sprites_to_draw[current_frame].rend());
+
// Draw sprites
- for(auto& [sprite, positions]: view->sprites_to_draw[current_frame])
+ for(auto& sprite_to_draw: view->sprites_to_draw[current_frame])
{
std::array<VkDescriptorSet, 2> vk_descriptor_sets{
view->descriptor_sets_2d[image_index],
- sprite->descriptor_sets[image_index]};
+ sprite_to_draw.sprite->descriptor_sets[image_index]};
VkDeviceSize offsets[]{0};
vkCmdBindDescriptorSets(
draw_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
cg_core.vk_graphics_pipeline_2d_solid_layout->pipeline, 0,
vk_descriptor_sets.size(), vk_descriptor_sets.data(), 0, nullptr);
- vkCmdBindPipeline(
- draw_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
- this->graphic_pipeline);
vkCmdBindVertexBuffers(
- draw_command_buffer, 0, 1, &sprite->vertex_buffer->buffer, offsets);
-
- for(auto i{0}; i < positions.size(); i++)
- {
- ODOVector4D position{positions[i]};
- vkCmdPushConstants(
- draw_command_buffer,
- cg_core.vk_graphics_pipeline_2d_solid_layout->pipeline,
- VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(ODOVector4D), &position);
- vkCmdDraw(draw_command_buffer, Sprite::vertex_count, 1, 0, 0);
- }
+ draw_command_buffer, 0, 1, &sprite_to_draw.sprite->vertex_buffer->buffer,
+ offsets);
+
+ ODOVector4D position{sprite_to_draw.position};
+ vkCmdPushConstants(
+ draw_command_buffer,
+ cg_core.vk_graphics_pipeline_2d_solid_layout->pipeline,
+ VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(ODOVector4D), &position);
+ vkCmdDraw(draw_command_buffer, Sprite::vertex_count, 1, 0, 0);
}
// Prepare for the next frame.