Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let face = self.library.new_face(path, 0).unwrap();
- face.set_pixel_sizes(0, 48).unwrap();
- let mut characters = Vec::with_capacity(CHARACTERS_SIZE);
- for char in 33..CHARACTERS_SIZE {
- face.load_char(char, freetype::face::LoadFlag::RENDER)
- .unwrap();
- let glyph = face.glyph();
- let bitmap = glyph.bitmap();
- let image_size = Extent2D {
- width: bitmap.width() as u32,
- height: bitmap.rows() as u32,
- };
- // Reusing the sampler
- let texture = VulkanImage::new(
- instance,
- bitmap.buffer(),
- image_size,
- vk::Format::R8G8B8A8_UNORM,
- Some(SamplerInfo::default()),
- );
- // TODO: store everything in an Texture Atlas
- let descriptor_sets = VulkanInstance::allocate_descriptor_sets(
- &instance.device,
- instance.descriptor_pool, // TODO: use own descriptor_pool
- descriptor_set_layout,
- instance.swapchain_images.len(),
- );
- for &descriptor_set in descriptor_sets.iter() {
- let image_info = vk::DescriptorImageInfo::default()
- .image_layout(vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL)
- .image_view(texture.image_view)
- .sampler(texture.sampler);
- let desc_sets = [vk::WriteDescriptorSet {
- dst_set: descriptor_set,
- dst_binding: 0, // From DescriptorSetLayoutBinding
- descriptor_count: 1,
- descriptor_type: vk::DescriptorType::COMBINED_IMAGE_SAMPLER,
- p_image_info: &image_info,
- ..Default::default()
- }];
- unsafe {
- instance.device.update_descriptor_sets(&desc_sets, &[]);
- }
- }
- let character = Character {
- descriptor_sets,
- size: IVec2::new(bitmap.width(), bitmap.rows()),
- bearing: IVec2::new(glyph.bitmap_left(), glyph.bitmap_top()),
- advance: glyph.advance().x as u32,
- };
- characters.push(character);
- }
- Font {
- characters,
- buffer_cache: HashMap::new(),
- }
Advertisement
Add Comment
Please, Sign In to add comment