2024/05/21(火) [n年前の日記]
#1 [prog] Intel GMA 950で利用できるテクスチャの最大サイズを知りたい
ネットブック Lenovo IdeaPad S10-2 の電源を久々に入れたので、せっかくの機会だからと、以前作った OpenGL のプログラムが動くかどうか調べてみた。
_mieki256/ssp3droadgl
環境は以下。
_mieki256/ssp3droadgl
環境は以下。
- OS : Debian Linux 11 bullseye
- CPU : Intel Atom N270
- GPU : Intel Mobile 945GSE Express、と出てるけど Intel GMA 950 だと思う
- RAM : 2GB
◎ ビルド手順 :
ビルドに必要なパッケージは以下だろうか。足りてないパッケージもありそうだけど…。
git で clone してビルドする。
sudo apt install build-essential git sudo apt install libglfw3-dev freeglut3-dev libegl1-mesa-dev libgl1-mesa-dri libgles2-mesa-dev libglu1-mesa-dev libglw1-mesa-dev mesa-common-dev mesa-utils mesa-utils-extra
git で clone してビルドする。
git clone https://github.com/mieki256/ssp3droadgl.git cd ssp3droadgl cd src make -f Makefile.glfw clean make -f Makefile.glfw ./ssp3droadglfw
◎ 動作結果 :
./ssp3droadglfw で実行できるけれど、木や車のテクスチャが全然表示されない状態で動いた。背景(遠景)のテクスチャだけは表示されてるけれど…。
使用しているテクスチャ画像のサイズは以下。
もしかして、VRAMが足りなくて、テクスチャをVRAM上に置けなかったのだろうか?
使用しているテクスチャ画像のサイズは以下。
- 木や車のテクスチャは、4096x4096ドット。
- 背景テクスチャは、2048x1024ドット x 4枚。
もしかして、VRAMが足りなくて、テクスチャをVRAM上に置けなかったのだろうか?
◎ 利用できる最大テクスチャサイズについて :
Intel GMA 950が OpenGL で利用できるテクスチャの最大サイズってどのくらいなんだろう。ググってみたら、OpenGL の場合、GL_MAX_TEXTURE_SIZE という値を渡して取得することができるらしい。
_macOSでOpenGLプログラミング(1-10. OpenGLの環境を確認する) #macOS - Qiita
確認用のプログラムを書くのが面倒だなと思ったけれど、各社のGPUが返してくる値を一覧にしているページを見かけた。これは助かる…。
_OpenGL capabilities database - index
_OpenGL capabilities report: GL_MAX_TEXTURE_SIZE
_OpenGL capabilities report: Intel GMA 950
Intel GMA 950 の場合、GL_MAX_TEXTURE_SIZE は 2048 を返す模様。ということは、最大で 2048x2048ドットのテクスチャが使えるということだろうか。
前述のデモプログラムは、4096x4096のテクスチャを読み込んでVRAMに置こうとしていたので、2048x2048のテクスチャまでしか使えない Intel GMA 950 ではテクスチャが表示されなかった、ということになるのだろうか…。
逆に考えると、2048x2048のサイズにテクスチャを収めておけば、Intel GMA 950 という、かなり古くて性能が低いGPUでも、OpenGLを使ったプログラムが正常に表示される可能性が高い、ということになるのかな…。
_macOSでOpenGLプログラミング(1-10. OpenGLの環境を確認する) #macOS - Qiita
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
確認用のプログラムを書くのが面倒だなと思ったけれど、各社のGPUが返してくる値を一覧にしているページを見かけた。これは助かる…。
_OpenGL capabilities database - index
_OpenGL capabilities report: GL_MAX_TEXTURE_SIZE
_OpenGL capabilities report: Intel GMA 950
Intel GMA 950 の場合、GL_MAX_TEXTURE_SIZE は 2048 を返す模様。ということは、最大で 2048x2048ドットのテクスチャが使えるということだろうか。
前述のデモプログラムは、4096x4096のテクスチャを読み込んでVRAMに置こうとしていたので、2048x2048のテクスチャまでしか使えない Intel GMA 950 ではテクスチャが表示されなかった、ということになるのだろうか…。
逆に考えると、2048x2048のサイズにテクスチャを収めておけば、Intel GMA 950 という、かなり古くて性能が低いGPUでも、OpenGLを使ったプログラムが正常に表示される可能性が高い、ということになるのかな…。
◎ 別のプログラムを試した :
別の OpenGLプログラムも試してみた。これはテクスチャを一切使っていない。
_mieki256/ssisoroadgl
こちらは動いてくれた。ただ、道路の白線がやたらとチラチラしている。z depth?が足りないのだろうか? 道路だけでもテクスチャを使うべきだったかな…。
でもまあ、今時ネットブックで OpenGL を使ったプログラムを動かしてどうこうしたいという事例はほとんどないだろうから、このままでもいいかな…。
もっとも、もし対応させるなら、2048x2048のサイズのテクスチャを作成しておいて…。GL_MAX_TEXTURE_SIZE で値を取得して、4096x4096のテクスチャが使えないと分かったら、画質は悪くなるけれど1/4サイズの2048x2048のテクスチャを利用して対応させる感じになるだろうか。テクスチャのUV値等を調整する必要も出てくるかな…と思ったが、OpenGLの場合 0.0 - 1.0 でUV値を指定してるはずだから、そこは変えなくても良さそう。たぶん。
_mieki256/ssisoroadgl
git clone https://github.com/mieki256/ssisoroadgl.git cd ssisoroadgl cd src make -f Makefile.glfw clean make -f Makefile.glfw ./ssisoroadglfw
こちらは動いてくれた。ただ、道路の白線がやたらとチラチラしている。z depth?が足りないのだろうか? 道路だけでもテクスチャを使うべきだったかな…。
でもまあ、今時ネットブックで OpenGL を使ったプログラムを動かしてどうこうしたいという事例はほとんどないだろうから、このままでもいいかな…。
もっとも、もし対応させるなら、2048x2048のサイズのテクスチャを作成しておいて…。GL_MAX_TEXTURE_SIZE で値を取得して、4096x4096のテクスチャが使えないと分かったら、画質は悪くなるけれど1/4サイズの2048x2048のテクスチャを利用して対応させる感じになるだろうか。テクスチャのUV値等を調整する必要も出てくるかな…と思ったが、OpenGLの場合 0.0 - 1.0 でUV値を指定してるはずだから、そこは変えなくても良さそう。たぶん。
[ ツッコむ ]
#2 [python] PySimpleGUIの代替ライブラリTkEasyGUIを試用
Python でGUIアプリを作りやすくする、PySimpleGUI というライブラリがある。Tcl/Tk のGUI関係を担当してる Tk を、Pythonから使えるようにした tkinter というライブラリがPythonには標準で添付されているのだけど、ちょっと使い勝手がよろしくないので、tkinter にラッパーを被せて使いやすくするのが PySimpleGUI。
ただ、この PySimpleGUI、バージョン5から有償、かつ、公式サイトにユーザ登録しないと使えない状態になってしまった…。
そこで作られた代替ライブラリが TkEasyGUI。
_tkeasygui-python/README-ja.md at main ・ kujirahand/tkeasygui-python
_TkEasyGUI - Pythonで最も素早くデスクトップアプリを創るライブラリ|kujirahand
_ゼロからはじめるPython(115) 簡単GUIライブラリ「PySimpleGUI 5」の有償化と互換ライブラリについて | TECH+(テックプラス)
_TkEasyGUI
_TkEasyGUI(Python)で簡単GUI(PySimpleGUI有料化に伴い移行します!) - daisukeの技術ブログ
import PySimpleGUI as sg を、import TkEasyGUI as sg に書き換えるだけで、簡単なサンプルならそのまま動いてしまうらしい。もっとも、互換性は重視していないとのことなので…。
気になったので試用してみた。環境は Windows10 x64 22H2 + Python 3.10.10 64bit。
pipでインストール。
手元にあったサンプルを修正して試してみたけど、ラベル、ボタン、テキスト入力ボックス等、簡単なサンプルで使われてるウィジェットのレイアウトについては問題無さそうに見えた。
ただ、ウインドウの閉じるボタンを押したときの処理は、少し手直しが必要っぽい。PySimpleGUI は、event に None が入ってきたときにメインループを抜けるように(breakするように)書くけれど、TkEasyGUI の場合は、WIN_CLOSED もしくは WINDOW_CLOSED が飛んできたときに抜けるように書かないといけないようだなと…。また、メインループは無限ループにせず、window.is_alive() を見てループするようにしたほうが良さそう。
また、Listbox() を使ったサンプルはエラーが出てしまった。TkEasyGUI には change_submits というパラメータが無いらしい。代わりに、enable_events というパラメータが用意されているっぽい。
例えば、PySimpleGUI の以下のサンプルは、そのあたりを修正すれば TkEasyGUI でも動いてくれる。
_PySimpleGUI/DemoPrograms/Demo_Img_Viewer.py at master - PySimpleGUI/PySimpleGUI
ただ、Image() のサイズを、画像サイズで自動調整してくれるわけではないようで、Image() に size=(1280,720) 等を固定で指定してやらないといけないっぽい。
ただ、この PySimpleGUI、バージョン5から有償、かつ、公式サイトにユーザ登録しないと使えない状態になってしまった…。
そこで作られた代替ライブラリが TkEasyGUI。
_tkeasygui-python/README-ja.md at main ・ kujirahand/tkeasygui-python
_TkEasyGUI - Pythonで最も素早くデスクトップアプリを創るライブラリ|kujirahand
_ゼロからはじめるPython(115) 簡単GUIライブラリ「PySimpleGUI 5」の有償化と互換ライブラリについて | TECH+(テックプラス)
_TkEasyGUI
_TkEasyGUI(Python)で簡単GUI(PySimpleGUI有料化に伴い移行します!) - daisukeの技術ブログ
import PySimpleGUI as sg を、import TkEasyGUI as sg に書き換えるだけで、簡単なサンプルならそのまま動いてしまうらしい。もっとも、互換性は重視していないとのことなので…。
PySimpleGUIと完全な互換性は考えていませんTkEasyGUI より
気になったので試用してみた。環境は Windows10 x64 22H2 + Python 3.10.10 64bit。
pipでインストール。
python -m pip install TkEasyGUI
手元にあったサンプルを修正して試してみたけど、ラベル、ボタン、テキスト入力ボックス等、簡単なサンプルで使われてるウィジェットのレイアウトについては問題無さそうに見えた。
ただ、ウインドウの閉じるボタンを押したときの処理は、少し手直しが必要っぽい。PySimpleGUI は、event に None が入ってきたときにメインループを抜けるように(breakするように)書くけれど、TkEasyGUI の場合は、WIN_CLOSED もしくは WINDOW_CLOSED が飛んできたときに抜けるように書かないといけないようだなと…。また、メインループは無限ループにせず、window.is_alive() を見てループするようにしたほうが良さそう。
# PySImpleGUI event loop while True: event, values = window.read() if event is None: print('exit') break window.close()
# TkEasyGUI event loop while window.is_alive(): event, values = window.read() if event == eg.WIN_CLOSED or event == eg.WINDOW_CLOSED: print('event == eg.WIN_CLOSED. Exit') break window.close()
また、Listbox() を使ったサンプルはエラーが出てしまった。TkEasyGUI には change_submits というパラメータが無いらしい。代わりに、enable_events というパラメータが用意されているっぽい。
# PySimpleGUI col_files = [[sg.Listbox(values=fnames, change_submits=True, size=(60, 30), key='listbox')], [sg.Button('Next', size=(8, 2)), sg.Button('Prev', size=(8, 2)), file_num_display_elem]]
# TkEasyGUI col_files = [[eg.Listbox(values=fnames, size=(60, 30), key="listbox", enable_events=True)], [ eg.Button("Next", size=(8, 2)), eg.Button("Prev", size=(8, 2)), file_num_display_elem]]
例えば、PySimpleGUI の以下のサンプルは、そのあたりを修正すれば TkEasyGUI でも動いてくれる。
_PySimpleGUI/DemoPrograms/Demo_Img_Viewer.py at master - PySimpleGUI/PySimpleGUI
ただ、Image() のサイズを、画像サイズで自動調整してくれるわけではないようで、Image() に size=(1280,720) 等を固定で指定してやらないといけないっぽい。
◎ PySimpleGUIの以前のバージョン :
PySimpleGUI がバージョン5になる前の、最後のバージョンはいくつだったんだろう…。
手元の環境には、4.60.5 が入っていた。これが以前のライセンスで使える最後のバージョンと言うことになるのかな?
以下のやり取りによると、ライセンス変更前のソースを fork して残してくれた方が居るらしい。
_PySimpleGUI 4 will be sunsetted in Q2 2024 | Hacker News
_andor-pierdelacabeza/PySimpleGUI-4-foss: Mirror of the last GPL version of PySimpleGUI repository
_gabrielsroka/PySimpleGUI
ちなみに、元々の PySimpleGUI は、PySimpleGUI.py という1ファイルだけを配布してる状態だったので、該当ファイルだけ手元に残しておけば以前の版を使い続けることができそうな気もする。
もっとも、PySimpleGUI は tkinter のラッパーだから、直接 tkinter を使って自分でチマチマ書いていけば同じ処理ができるような気もするなと…。
> pip list | grep PySimpleGUI PySimpleGUI 4.60.5 PySimpleGUIQt 0.35.0 PySimpleGUIWx 0.17.2
手元の環境には、4.60.5 が入っていた。これが以前のライセンスで使える最後のバージョンと言うことになるのかな?
以下のやり取りによると、ライセンス変更前のソースを fork して残してくれた方が居るらしい。
_PySimpleGUI 4 will be sunsetted in Q2 2024 | Hacker News
_andor-pierdelacabeza/PySimpleGUI-4-foss: Mirror of the last GPL version of PySimpleGUI repository
_gabrielsroka/PySimpleGUI
ちなみに、元々の PySimpleGUI は、PySimpleGUI.py という1ファイルだけを配布してる状態だったので、該当ファイルだけ手元に残しておけば以前の版を使い続けることができそうな気もする。
もっとも、PySimpleGUI は tkinter のラッパーだから、直接 tkinter を使って自分でチマチマ書いていけば同じ処理ができるような気もするなと…。
◎ guizeroという選択肢もある :
tkinterを使いやすくするラッパーとしては、guizero というライブラリ(モジュール)もあるので一応メモしておく。
_guizero
_PythonとguizeroでGUIアプリケーションを手軽に作ってみる - あっきぃ日誌
ラベルやボタンを配置して動かすだけなら、これでもいいのかもしれない。以下を眺めれば、圧倒的に簡単に使えることが分かるかと。
_Getting started - guizero
_guizero
_PythonとguizeroでGUIアプリケーションを手軽に作ってみる - あっきぃ日誌
ラベルやボタンを配置して動かすだけなら、これでもいいのかもしれない。以下を眺めれば、圧倒的に簡単に使えることが分かるかと。
_Getting started - guizero
[ ツッコむ ]
#3 [cg_tools] Synfig Studioとenveをインストール
アニメーション制作ソフト Synfig Studio 1.4.5 が公開されたらしいので、Windows10 x64 22H2上でインストールしてみた。
_Synfig - Free and open-source animation software
_Releases - synfig/synfig
_Synfig 1.4.5 Release Notes - Synfig User Manual 1.5.1 documentation
今回は Portable版を選んでみた。SynfigStudio-1.4.5-2024.05.19-win64-f4b8d.zip を入手して解凍。D:\Prog\SynfigStudio-1.4.5-2024.05.19-win64-f4b8d_portable\ にコピー。
中に入っている synfigstudio.bat を実行すると起動する。
_Synfig - Free and open-source animation software
_Releases - synfig/synfig
_Synfig 1.4.5 Release Notes - Synfig User Manual 1.5.1 documentation
今回は Portable版を選んでみた。SynfigStudio-1.4.5-2024.05.19-win64-f4b8d.zip を入手して解凍。D:\Prog\SynfigStudio-1.4.5-2024.05.19-win64-f4b8d_portable\ にコピー。
中に入っている synfigstudio.bat を実行すると起動する。
◎ enveをインストール :
せっかくだから、アニメ制作ソフト enve もインストールしておいた。
_enve | Open-source 2D animation software
_Release Continuous build (windows) - MaurycyLiebner/enve
enve_setup_9_25_22.exe を入手して実行。このユーザのみ利用、を選んで、D:\Prog\enve_9_25_22\ にインストールしてみた。
デスクトップにショートカットファイルを作成するようにチェックを入れたので、ショートカットファイルをクリックすれば起動する。
_enve | Open-source 2D animation software
_Release Continuous build (windows) - MaurycyLiebner/enve
enve_setup_9_25_22.exe を入手して実行。このユーザのみ利用、を選んで、D:\Prog\enve_9_25_22\ にインストールしてみた。
デスクトップにショートカットファイルを作成するようにチェックを入れたので、ショートカットファイルをクリックすれば起動する。
[ ツッコむ ]
#4 [pc] バッテリーの劣化はどうにかならないものか
思考メモ。いや、妄想メモかも。
昨日、Gateway M-2408j の電源を入れてバッテリーを充電しておいたので、せっかくだから Lenovo IdeaPad S10-2 のバッテリーも充電しておくことにした。
頻繁に使うわけではないので、それぞれ100%の充電状態にはせず、50%前後ぐらいの充電状態にしておく。そのぐらいの充電状態で放置するのがバッテリーにとっては優しい、という話をどこかで見かけた記憶があるので…。スマホもそうだけど、100%まで充電しちゃうのはリチウムイオンバッテリーにとって厳しいらしいので、腹八分目を意識するといいとかなんとか。
それにしても、この手の機器のバッテリー劣化はどうにかならないものか…。いや、劣化するのは仕方ないのだけど、交換用バッテリーを入手できないという状況が非常に痛い。各メーカーが製品毎に、好き勝手にバッテリーのスペックや形状を設計してしまうので、別製品のバッテリーを流用することが全くできないわけで…。膨大な種類のバッテリーを製造してきているから、メーカーだって在庫を抱えておくわけにもいかないだろうし。結果、バッテリーがダメになっても、代わりのバッテリーが入手できない…。
最近発表されたAppleの新製品も、今までより薄くなりました! とかなんとか宣伝してるけど。個人的には、どいつもこいつも馬鹿馬鹿しいことをしてやがるなあ、という印象で…。弁当箱ぐらい厚くても構わないから、ユーザがバッテリーを交換できる設計にしてほしいし、どの機器も共通のバッテリーを使えるようにしてバッテリーの入手性を改善してほしい。機器のガワをベリベリと剥がさないとバッテリー交換ができないなんて、つくづくゲンナリする…。バッテリーがダメになったら機器ごと捨てるしかないじゃん…。
もっとも、デジタル機器はどんどん性能が向上していくし、ソフトウェアは富豪的な作りが横行して鈍重になっているしで、バッテリーが劣化したタイミングが買い替え時、ということにメーカ側はしていきたいのだろうけど。地球に厳しい話だよなと…。
リチウムイオンバッテリーの規格が存在しないのが問題なのだろうな…。乾電池のように、ある程度統一規格を作れたら、ユーザが助かる場面も多くなるのでは。
どこかの国が、リチウムイオンバッテリーの規格を打ち出して、この規格に従っておけば製品のセールスポイントになるぞ、みたいな風潮にならないものかと…。
思考メモです。いや、これは妄想メモに近いかも。
昨日、Gateway M-2408j の電源を入れてバッテリーを充電しておいたので、せっかくだから Lenovo IdeaPad S10-2 のバッテリーも充電しておくことにした。
頻繁に使うわけではないので、それぞれ100%の充電状態にはせず、50%前後ぐらいの充電状態にしておく。そのぐらいの充電状態で放置するのがバッテリーにとっては優しい、という話をどこかで見かけた記憶があるので…。スマホもそうだけど、100%まで充電しちゃうのはリチウムイオンバッテリーにとって厳しいらしいので、腹八分目を意識するといいとかなんとか。
それにしても、この手の機器のバッテリー劣化はどうにかならないものか…。いや、劣化するのは仕方ないのだけど、交換用バッテリーを入手できないという状況が非常に痛い。各メーカーが製品毎に、好き勝手にバッテリーのスペックや形状を設計してしまうので、別製品のバッテリーを流用することが全くできないわけで…。膨大な種類のバッテリーを製造してきているから、メーカーだって在庫を抱えておくわけにもいかないだろうし。結果、バッテリーがダメになっても、代わりのバッテリーが入手できない…。
最近発表されたAppleの新製品も、今までより薄くなりました! とかなんとか宣伝してるけど。個人的には、どいつもこいつも馬鹿馬鹿しいことをしてやがるなあ、という印象で…。弁当箱ぐらい厚くても構わないから、ユーザがバッテリーを交換できる設計にしてほしいし、どの機器も共通のバッテリーを使えるようにしてバッテリーの入手性を改善してほしい。機器のガワをベリベリと剥がさないとバッテリー交換ができないなんて、つくづくゲンナリする…。バッテリーがダメになったら機器ごと捨てるしかないじゃん…。
もっとも、デジタル機器はどんどん性能が向上していくし、ソフトウェアは富豪的な作りが横行して鈍重になっているしで、バッテリーが劣化したタイミングが買い替え時、ということにメーカ側はしていきたいのだろうけど。地球に厳しい話だよなと…。
リチウムイオンバッテリーの規格が存在しないのが問題なのだろうな…。乾電池のように、ある程度統一規格を作れたら、ユーザが助かる場面も多くなるのでは。
どこかの国が、リチウムイオンバッテリーの規格を打ち出して、この規格に従っておけば製品のセールスポイントになるぞ、みたいな風潮にならないものかと…。
思考メモです。いや、これは妄想メモに近いかも。
[ ツッコむ ]
以上、1 日分です。