🐁

wgpu+winitでマウスに追従して画像を表示するプログラムを作る

2023/12/04に公開

モチベーション

RustでGUIアプリケーションを作ってみたく,手始めにマウスカーソルに追従するアプリケーション (こういうもの https://github.com/crgimenes/neko ) を作ってみようと思った。

以下作ったものを実行した結果

コードはこちら
https://github.com/Soyukke/MouseTracer

背景透過 + 前面表示

ウィンドウを透過表示し、前面表示にすることで無理やり実現させた。

透過モードで表示するための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を使用した
https://github.com/enigo-rs/enigo

画像表示

wgslで画像をテクスチャとして矩形に表示している。

終わり

gif画像の表示とか、マウスについてくるときに遅延してついてくるとか実装してみたい。

Discussion