🐁
wgpu+winitでマウスに追従して画像を表示するプログラムを作る
モチベーション
RustでGUIアプリケーションを作ってみたく,手始めにマウスカーソルに追従するアプリケーション (こういうもの https://github.com/crgimenes/neko ) を作ってみようと思った。
以下作ったものを実行した結果
コードはこちら
背景透過 + 前面表示
ウィンドウを透過表示し、前面表示にすることで無理やり実現させた。
透過モードで表示するためのwgpu config
let mut config = wgpu::SurfaceConfiguration {
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
format: swapchain_format,
width: size.width,
height: size.height,
present_mode: wgpu::PresentMode::Fifo,
alpha_mode: wgpu::CompositeAlphaMode::PostMultiplied,
};
常に全面表示 & 透過ウィンドウで表示するためのwinit設定
let mut builder = winit::window::WindowBuilder::new()
.with_decorations(false)
.with_always_on_top(true)
.with_inner_size(LogicalSize::new(WINDOW_WIDTH, WINDOW_WIDTH))
.with_transparent(true);
マウス座標の取得
enigoというcrateを使用した
画像表示
wgslで画像をテクスチャとして矩形に表示している。
終わり
gif画像の表示とか、マウスについてくるときに遅延してついてくるとか実装してみたい。
Discussion