'Convert glow::Framebuffer to u64
egui::Image::new
can take a User(u64)
as the first parameter. I have a glow::Framebuffer that I want to pass to the function like
egui::Image::new(User(frame_buffer), egui::Vec2::new(1280.0, 720.0));
It looks like glow::Frambuffer
is a NativeFramebuffer(NonZeroU32)
. How do I convert a glow::Framebuffer
to a u64
?
Solution 1:[1]
NonZeroU64
has implemented From<NonZeroU32>
and u64
has implemented From<NonZeroU64>
so you can use from
method of these two types to safely convert the type. Here is a brief example.
use std::num::*;
#[derive(Debug)]
struct NativeFrameBuffer(NonZeroU32);
#[derive(Debug)]
struct User(u64);
fn test(u:User) {
println!("{:?}", u);
}
fn main() {
let u32num = NonZeroU32::new(10u32).unwrap();
let fb = NativeFrameBuffer(u32num);
test(User(u64::from(NonZeroU64::from(fb.0))));
}
Solution 2:[2]
I solved it like this
pub fn unwrap_color_attachment(&self) -> u32 {
#[cfg(not(target_os = "wasm"))]
unsafe { mem::transmute(self.color_attachment) }
}
egui::Image::new(User(my_framebuffer_wrapper.unwrap_color_attachment() as u64), egui::Vec2::new(1280.0, 720.0));
unsafe is required
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | whilrun |
Solution 2 |