2022/06/09(木) [n年前の日記]
#1 [xscreensaver] xscreensaverでタイルマップ描画
_昨日、
Xlibを使ってタイルマップ描画ができるか試してそれっぽくなったけれど、同じ処理を xscreensaver上でも実現できるのか気になったので試してみた。
環境は、Ubuntu Linux 20.04 LTS。Windows10 x64 21H2 + VMware Player 16.2.3 build-19376536 上で動かしてる。CPU は Ryzen 5 5600X。VMware に3コアを割り振ってる。
こんな感じになった。
動いてくれて一安心。
ただ、CPU使用率が高い気もする…。1440x900の画面解像度なら20%程度だけど、1920x1080にすると30%ぐらいになる。元画面は640x360で固定してるから…画面解像度まで拡大する処理が結構重いのだろうか。
ちなみに、VMware の設定でCPUコアを1つにして動作確認してみたけれど、3コアを指定した場合とCPU使用率は変わらなかった。xscreensaver は、複数コアが載っている環境でも、使用率の表示結果が違ってくるわけではないっぽい。
環境は、Ubuntu Linux 20.04 LTS。Windows10 x64 21H2 + VMware Player 16.2.3 build-19376536 上で動かしてる。CPU は Ryzen 5 5600X。VMware に3コアを割り振ってる。
こんな感じになった。
動いてくれて一安心。
ただ、CPU使用率が高い気もする…。1440x900の画面解像度なら20%程度だけど、1920x1080にすると30%ぐらいになる。元画面は640x360で固定してるから…画面解像度まで拡大する処理が結構重いのだろうか。
ちなみに、VMware の設定でCPUコアを1つにして動作確認してみたけれど、3コアを指定した場合とCPU使用率は変わらなかった。xscreensaver は、複数コアが載っている環境でも、使用率の表示結果が違ってくるわけではないっぽい。
◎ ソース。 :
今回は、xscreensaver-6.04.tar.gz をDL・解凍して、中にファイルを追加する形で実験。
_XScreenSaver
_XScreenSaver: Download
ソース(*.c)、マニュアル(*.man)。hacks/ 以下にコピーする。
_hellotilemap.c
_hellotilemap.man
設定画面定義ファイル(*.xml)。hacks/config/ 以下にコピーする。
_hellotilemap.xml
使用画像。hacks/images/ にコピーする。
_scifi_bg_chip.png
使用画像を .h に変換したファイル。hacks/images/gen/ 以下にコピーする。ただ、本来は、make時に *.png から自動生成されるはず。
_scifi_bg_chip_png.h
hacks/Makefile.in や driver/XScreenSaver.ad.in の変更点は以下。「hellotilemap」で検索すれば、どのあたりを修正してるか分かるかなと。
_makefile.in.patch
_xscreensaver.ad.in.patch
一応、xscreensaver に自作のスクリーンセーバを追加して、ビルドする手順もざっくりとメモ。公式リポジトリ版を上書きしちゃうけど…。
少し解説。
基本的には、 _昨日、 書いた、 _09tilemap1.c をコピペしていっただけ。
ただし、xscreensaver 上では、XClearWindow() を呼んでしまうとエラーになることに気づかなくて結構ハマった。 Pixmap を対象にして中身をクリアしたかっただけなので、XFillRectangle() を使って塗り潰してしまえばOKだった。
_XScreenSaver
_XScreenSaver: Download
ソース(*.c)、マニュアル(*.man)。hacks/ 以下にコピーする。
_hellotilemap.c
_hellotilemap.man
設定画面定義ファイル(*.xml)。hacks/config/ 以下にコピーする。
_hellotilemap.xml
使用画像。hacks/images/ にコピーする。
_scifi_bg_chip.png
使用画像を .h に変換したファイル。hacks/images/gen/ 以下にコピーする。ただ、本来は、make時に *.png から自動生成されるはず。
_scifi_bg_chip_png.h
hacks/Makefile.in や driver/XScreenSaver.ad.in の変更点は以下。「hellotilemap」で検索すれば、どのあたりを修正してるか分かるかなと。
_makefile.in.patch
_xscreensaver.ad.in.patch
一応、xscreensaver に自作のスクリーンセーバを追加して、ビルドする手順もざっくりとメモ。公式リポジトリ版を上書きしちゃうけど…。
mkdir ~/pkg mkdir ~/pkg/xscreensaver cd ~/pkg/xscreensaver wget https://www.jwz.org/xscreensaver/xscreensaver-6.04.tar.gz tar zxvf xscreensaver-6.04.tar.gz cd xscreensaver-6.04 # file copy *.c : copy to hacks/ *.man : copy to hacks/ *.xml : copy to hacks/config/ *.png : copy to hacks/images/ *_png.h : copy to hacks/images/gen/ Makefile.in : copy to hacks/ XScreenSaver.ad.in : copy to driver/ # build ./configure --prefix=/usr --libexecdir=/usr/lib make sudo make install rm ~/.xscreensaver xscreensaver-settings &
少し解説。
基本的には、 _昨日、 書いた、 _09tilemap1.c をコピペしていっただけ。
ただし、xscreensaver 上では、XClearWindow() を呼んでしまうとエラーになることに気づかなくて結構ハマった。 Pixmap を対象にして中身をクリアしたかっただけなので、XFillRectangle() を使って塗り潰してしまえばOKだった。
[ ツッコむ ]
以上です。