#viewport_to_world_2d egui
2 messages · Page 1 of 1 (latest)
#[derive(Deref, Resource)]
struct Scroll(Handle<Image>);
#[derive(Component)]
pub struct ScrollCamera;
fn scroll_setup(
mut commands: Commands,
mut images: ResMut<Assets<Image>>,
mut egui_user_textures: ResMut<EguiUserTextures>,
mut egui_global_settings: ResMut<EguiGlobalSettings>,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
egui_global_settings.auto_create_primary_context = false;
let mut image = Image::new_fill(
Extent3d {
width: 512,
height: 512,
..default()
},
TextureDimension::D2,
&[0, 0, 0, 0],
TextureFormat::Bgra8UnormSrgb,
RenderAssetUsages::default(),
);
image.texture_descriptor.usage |= TextureUsages::RENDER_ATTACHMENT;
let image_handle = images.add(image);
commands.spawn((
Camera2d,
Camera {
target: image_handle.clone().into(),
clear_color: ClearColorConfig::Custom(Color::Srgba(Srgba::new(0., 0., 0., 0.))),
..default()
},
RenderLayers::layer(1),
ScrollCamera,
));
commands.insert_resource(Scroll(image_handle.clone()));
egui_user_textures.add_image(image_handle);
}
fn main_ui(mut contexts: EguiContexts, scroll: Res<Scroll>) -> Result {
let scroll = contexts.image_id(&scroll).unwrap();
egui::Window::new("")
.min_size(Vec2::new(150., 200.))
.anchor(Align2::CENTER_CENTER, Vec2::default())
.frame(Frame::new())
.resizable(Vec2b::new(false, false))
.collapsible(false)
.show(contexts.ctx_mut()?, |ui| {
ui.image(SizedTexture::new(scroll, Vec2::new(300., 300.)))
});
Ok(())
}