diff --git a/Cargo.toml b/Cargo.toml index 3491bdb..2208ff1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ utilities = { git = "https://gavania.de/hodasemi/utilities.git" } paste = "1.0.11" assetpath = { git = "https://gavania.de/hodasemi/vulkan_lib.git" } anyhow = { version = "1.0.68", features = ["backtrace"] } -safer-ffi = { version = "0.0.10", features= ["proc_macros"] } # optional audio = { git = "https://gavania.de/hodasemi/audio.git", optional = true } diff --git a/src/guihandler/gui/colorable.rs b/src/guihandler/gui/colorable.rs index c6254c2..3692777 100644 --- a/src/guihandler/gui/colorable.rs +++ b/src/guihandler/gui/colorable.rs @@ -2,7 +2,7 @@ use crate::prelude::*; use anyhow::Result; -use utilities::prelude::*; +use utilities::{impl_reprc, prelude::*}; use vulkan_rs::prelude::*; use cgmath::{vec4, Vector4}; @@ -166,12 +166,13 @@ impl Colorable { } } -#[derive_ReprC] -#[repr(C)] -#[derive(Debug, Clone, Copy)] -pub struct ColorableVertex { - pub position: Vector4, -} +impl_reprc!( + #[derive(Debug)] + pub struct ColorableVertex { + #[assume_reprc] + position: Vector4, + } +); impl VertexInputDescription for ColorableVertex { fn bindings() -> Vec { diff --git a/src/guihandler/gui/texturedvertex.rs b/src/guihandler/gui/texturedvertex.rs index c9c308b..3b452bc 100644 --- a/src/guihandler/gui/texturedvertex.rs +++ b/src/guihandler/gui/texturedvertex.rs @@ -1,15 +1,16 @@ -use safer_ffi::derive_ReprC; +use utilities::impl_reprc; use vulkan_rs::prelude::*; use std::mem; -#[derive_ReprC] -#[repr(C)] -#[derive(Copy, Clone, Debug)] -pub struct TexturedVertex { - pub position: cgmath::Vector4, - pub texture_coordinates: cgmath::Vector2, -} +impl_reprc!( + pub struct TexturedVertex { + #[assume_reprc] + position: cgmath::Vector4, + #[assume_reprc] + texture_coordinates: cgmath::Vector2, + } +); impl VertexInputDescription for TexturedVertex { fn bindings() -> Vec { diff --git a/src/guihandler/guihandler.rs b/src/guihandler/guihandler.rs index 21994ab..8ecc7ca 100644 --- a/src/guihandler/guihandler.rs +++ b/src/guihandler/guihandler.rs @@ -2,7 +2,7 @@ use crate::prelude::*; use anyhow::Result; use assetpath::AssetPath; use serde::{Deserialize, Serialize}; -use utilities::prelude::*; +use utilities::{impl_reprc, prelude::*}; use vulkan_rs::{prelude::*, render_target::sub_pass::InputAttachmentInfo}; use super::{ @@ -90,11 +90,18 @@ struct DisplayableTexture { _texture: Arc, } +impl_reprc!( + struct ColorBuffer { + #[assume_reprc] + color: f32, + } +); + struct TextableColor { _descriptor_pool: Arc, _descriptor_set: Arc, - _buffer: Arc>, + _buffer: Arc>, } struct CommandBufferState { @@ -546,11 +553,19 @@ impl GuiHandler { let desc_set = DescriptorPool::prepare_set(&desc_pool).allocate()?; let color_array: [f32; 3] = color.into(); + let color_buffer_array: [ColorBuffer; 3] = color_array + .into_iter() + .map(|f| ColorBuffer { color: f }) + .collect::>() + .try_into() + .unwrap_or_else(|_: Vec| { + unreachable!("create array from vec from an array") + }); let buffer = Buffer::builder() .set_usage(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) .set_memory_usage(MemoryUsage::CpuOnly) - .set_data(&color_array) + .set_data(&color_buffer_array) .build(self.device.clone())?; desc_set.update(&[DescriptorWrite::uniform_buffers(0, &[&buffer])])?;