diff --git a/src/overlay/elements/leaderboard/bg_generator.rs b/src/overlay/elements/leaderboard/bg_generator.rs index 9cb8193..d30462a 100644 --- a/src/overlay/elements/leaderboard/bg_generator.rs +++ b/src/overlay/elements/leaderboard/bg_generator.rs @@ -16,14 +16,15 @@ impl BackgroundGenerator { pub fn generate( device: &Arc, queue: &Arc>, + color: [f32; 4], image_infos: [(u32, u32); N], ) -> Result<[Arc; N]> { Ok(image_infos .iter() .map(|(width, height)| { let image = Image::empty( - *width as u32, - *height as u32, + *width, + *height, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_SAMPLE_COUNT_1_BIT, ) @@ -36,7 +37,7 @@ impl BackgroundGenerator { let render_target = RenderTarget::builder() .add_sub_pass( SubPass::builder(image.width(), image.height()) - .set_prepared_targets(&[image.clone()], 0, [0.0, 0.0, 0.0, 1.0], true) + .set_prepared_targets(&[image.clone()], 0, [0.0, 0.0, 0.0, 0.0], true) .build(&device, &queue)?, ) .build(&device)?; @@ -69,6 +70,15 @@ impl BackgroundGenerator { }, }; + let descriptor_layout = DescriptorSetLayout::builder() + .add_layout_binding( + 0, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_FRAGMENT_BIT, + 0, + ) + .build(device.clone())?; + let pipeline = Pipeline::new_graphics() .set_vertex_shader( vertex_shader.clone(), @@ -97,11 +107,26 @@ impl BackgroundGenerator { .add_scissor(scissor) .build( device.clone(), - &PipelineLayout::builder().build(device.clone())?, + &PipelineLayout::builder() + .add_descriptor_set_layout(&descriptor_layout) + .build(device.clone())?, render_target.render_pass(), 0, )?; + let color_buffer = Buffer::builder() + .set_usage(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) + .set_memory_usage(MemoryUsage::CpuOnly) + .set_data(&color) + .build(device.clone())?; + + let desc_pool = DescriptorPool::builder() + .set_layout(descriptor_layout) + .build(device.clone())?; + + let descriptor_set = desc_pool.prepare_set().allocate()?; + descriptor_set.update(&[DescriptorWrite::uniform_buffers(0, &[&color_buffer])])?; + let ortho = ortho( 0.0, image.width() as f32, @@ -142,6 +167,7 @@ impl BackgroundGenerator { recorder.bind_pipeline(&pipeline)?; + recorder.bind_descriptor_sets_minimal(&[&descriptor_set]); recorder.bind_vertex_buffer(&vertex_buffer); recorder.draw_complete_single_instance(vertex_buffer.size() as u32); @@ -207,7 +233,9 @@ mod test { fn generate_image_test() { let (device, queue) = create_vk_handles().unwrap(); - let images = BackgroundGenerator::generate(&device, &queue, [(120, 40)]).unwrap(); + let images = + BackgroundGenerator::generate(&device, &queue, [1.0, 0.0, 0.0, 1.0], [(120, 40)]) + .unwrap(); for (index, image) in images.iter().enumerate() { image diff --git a/src/overlay/elements/leaderboard/generator.frag b/src/overlay/elements/leaderboard/generator.frag index 72ade95..07bd8fa 100644 --- a/src/overlay/elements/leaderboard/generator.frag +++ b/src/overlay/elements/leaderboard/generator.frag @@ -1,8 +1,12 @@ #version 450 +layout (set = 0, binding = 0) uniform Color { + vec4 val; +} color; + layout (location = 0) out vec4 out_color; void main() { - out_color = vec4(1.0, 1.0, 1.0, 1.0); + out_color = color.val; } diff --git a/src/overlay/elements/leaderboard/leaderboard_entry.rs b/src/overlay/elements/leaderboard/leaderboard_entry.rs index 7ce89dc..60276d7 100644 --- a/src/overlay/elements/leaderboard/leaderboard_entry.rs +++ b/src/overlay/elements/leaderboard/leaderboard_entry.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::Result; use ui::prelude::*; -use utilities::prelude::Color; +use vulkan_rs::prelude::*; #[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] pub enum BehindLeader { @@ -22,9 +22,9 @@ pub struct LeaderBoardEntry { snippet: Arc, - name_label: Arc