2022/06/01(水) [n年前の日記]
#1 [xscreensaver][xlib] Xlibについて調べてる
xscreensaver用のスクリーンセーバで何かしらを描画する時は Xlib なるものを使って描画するのが一般的らしいのだけど。その Xlib とやらで拡大縮小描画みたいなことはできないのかなとググってるところ。
スクリーンセーバの面倒なところは、ディスプレイの解像度/ウインドウサイズが、環境によって異なる点。例えば 1920x1080 のサイズで画像等をイイ感じにレイアウトしても、1024x768 だの 3840×2160 だの、そういったディスプレイで表示しようとすると、見た目は滅茶苦茶になってしまう。どうにかならんか。
そこで思いつくのが、320x240、640x480、1280x720等のお決まりのサイズで一旦画面を作っておいて、ソレを目的のウインドウサイズに拡大、もしくは縮小して描画する方法。love2d や Unity では、そういうことをして全画面表示にする場合もちょくちょくあったりする。
そんなわけで、Xlib にそういう機能は無いのかな、拡大縮小描画ができれば楽になるよなとググっているわけだけど…。どうやらそんな機能は存在していない模様。あくまで等倍でしか画像の描画はできませんよ、みたいな話をチラホラ目にした。
そういうことをしたいなら、OpenGL だか glx だか、そのあたりを使わないといかんのだろうか。
ただ、hacks/*.c を眺めたところ、自力で拡大縮小処理をしているものもあるように思えた。例えば apple2-main.c の中には scale_image() という関数があるし、xscreensaver-getimage.c の中にも scale_ximage() という関数がある。名前からして画像の拡大縮小処理をしてそう。1ドットずつ処理をしていくから処理時間がかかりそうではあるけれど。
スクリーンセーバの面倒なところは、ディスプレイの解像度/ウインドウサイズが、環境によって異なる点。例えば 1920x1080 のサイズで画像等をイイ感じにレイアウトしても、1024x768 だの 3840×2160 だの、そういったディスプレイで表示しようとすると、見た目は滅茶苦茶になってしまう。どうにかならんか。
そこで思いつくのが、320x240、640x480、1280x720等のお決まりのサイズで一旦画面を作っておいて、ソレを目的のウインドウサイズに拡大、もしくは縮小して描画する方法。love2d や Unity では、そういうことをして全画面表示にする場合もちょくちょくあったりする。
そんなわけで、Xlib にそういう機能は無いのかな、拡大縮小描画ができれば楽になるよなとググっているわけだけど…。どうやらそんな機能は存在していない模様。あくまで等倍でしか画像の描画はできませんよ、みたいな話をチラホラ目にした。
そういうことをしたいなら、OpenGL だか glx だか、そのあたりを使わないといかんのだろうか。
ただ、hacks/*.c を眺めたところ、自力で拡大縮小処理をしているものもあるように思えた。例えば apple2-main.c の中には scale_image() という関数があるし、xscreensaver-getimage.c の中にも scale_ximage() という関数がある。名前からして画像の拡大縮小処理をしてそう。1ドットずつ処理をしていくから処理時間がかかりそうではあるけれど。
[ ツッコむ ]
以上、1 日分です。