如何将glow::Framebuffer转换为u64以传入egui::Image::new方法
glow::Framebuffer转u64用于egui::Image的实现方法
glow::Framebuffer是对NativeFramebuffer(NonZeroU32)的封装,你只需要提取内部的原生u32 FBO ID,再无损转换为u64即可。
实现步骤
- 提取Framebuffer内部的原生ID
glow为资源类型提供了原生值访问方法,你可以根据是否需要保留原Framebuffer实例选择对应的方法:
- 如果不需要保留原实例,使用
into_raw()消费实例获取原生ID - 如果需要继续使用原实例,使用
as_raw()获取引用对应的原生ID
- 将获取到的
NonZeroU32类型值调用get()方法拿到u32数值,再通过as u64转换为u64类型即可
代码示例
use egui::TextureId::User; // 需要保留原frame_buffer的场景 let fbo_id = frame_buffer.as_raw().get() as u64; let image = egui::Image::new(User(fbo_id), egui::Vec2::new(1280.0, 720.0));
注意事项
- 转换完成后你需要确保egui的渲染后端已经注册过该FBO对应的纹理资源,否则egui无法正确识别该ID对应的GPU资源,会出现渲染异常
- 如果你使用的glow版本没有提供
as_raw/into_raw方法,可以参考对应版本的官方文档获取原生ID的访问方式
内容的提问来源于stack exchange,提问作者Grayden Hormes
相关产品推荐
相关产品推荐

