#viewport_to_world_2d egui

2 messages · Page 1 of 1 (latest)

frozen citrus
#

When doing viewport_to_world_2d on a render texture that's an image inside of an egui window, the position is incorrect. I'm guess I would have to access some egui values, but I don't know what. Any help?

frozen citrus
#
#[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(())
}