mieki256's diary



2024/05/21(火) [n年前の日記]

#1 [prog] Intel GMA 950で利用できるテクスチャの最大サイズを知りたい

ネットブック Lenovo IdeaPad S10-2 の電源を久々に入れたので、せっかくの機会だからと、以前作った OpenGL のプログラムが動くかどうか調べてみた。

_mieki256/ssp3droadgl

環境は以下。

ビルド手順 :

ビルドに必要なパッケージは以下だろうか。足りてないパッケージもありそうだけど…。
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 で実行できるけれど、木や車のテクスチャが全然表示されない状態で動いた。背景(遠景)のテクスチャだけは表示されてるけれど…。

使用しているテクスチャ画像のサイズは以下。
  • 木や車のテクスチャは、4096x4096ドット。
  • 背景テクスチャは、2048x1024ドット x 4枚。

もしかして、VRAMが足りなくて、テクスチャをVRAM上に置けなかったのだろうか?

利用できる最大テクスチャサイズについて :

Intel GMA 950が OpenGL で利用できるテクスチャの最大サイズってどのくらいなんだろう。ググってみたら、OpenGL の場合、GL_MAX_TEXTURE_SIZE という値を渡して取得することができるらしい。

_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

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 に書き換えるだけで、簡単なサンプルならそのまま動いてしまうらしい。もっとも、互換性は重視していないとのことなので…。

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になる前の、最後のバージョンはいくつだったんだろう…。

> 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

#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 を実行すると起動する。

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\ にインストールしてみた。

デスクトップにショートカットファイルを作成するようにチェックを入れたので、ショートカットファイルをクリックすれば起動する。

#4 [pc] バッテリーの劣化はどうにかならないものか

思考メモ。いや、妄想メモかも。

昨日、Gateway M-2408j の電源を入れてバッテリーを充電しておいたので、せっかくだから Lenovo IdeaPad S10-2 のバッテリーも充電しておくことにした。

頻繁に使うわけではないので、それぞれ100%の充電状態にはせず、50%前後ぐらいの充電状態にしておく。そのぐらいの充電状態で放置するのがバッテリーにとっては優しい、という話をどこかで見かけた記憶があるので…。スマホもそうだけど、100%まで充電しちゃうのはリチウムイオンバッテリーにとって厳しいらしいので、腹八分目を意識するといいとかなんとか。

それにしても、この手の機器のバッテリー劣化はどうにかならないものか…。いや、劣化するのは仕方ないのだけど、交換用バッテリーを入手できないという状況が非常に痛い。各メーカーが製品毎に、好き勝手にバッテリーのスペックや形状を設計してしまうので、別製品のバッテリーを流用することが全くできないわけで…。膨大な種類のバッテリーを製造してきているから、メーカーだって在庫を抱えておくわけにもいかないだろうし。結果、バッテリーがダメになっても、代わりのバッテリーが入手できない…。

最近発表されたAppleの新製品も、今までより薄くなりました! とかなんとか宣伝してるけど。個人的には、どいつもこいつも馬鹿馬鹿しいことをしてやがるなあ、という印象で…。弁当箱ぐらい厚くても構わないから、ユーザがバッテリーを交換できる設計にしてほしいし、どの機器も共通のバッテリーを使えるようにしてバッテリーの入手性を改善してほしい。機器のガワをベリベリと剥がさないとバッテリー交換ができないなんて、つくづくゲンナリする…。バッテリーがダメになったら機器ごと捨てるしかないじゃん…。

もっとも、デジタル機器はどんどん性能が向上していくし、ソフトウェアは富豪的な作りが横行して鈍重になっているしで、バッテリーが劣化したタイミングが買い替え時、ということにメーカ側はしていきたいのだろうけど。地球に厳しい話だよなと…。

リチウムイオンバッテリーの規格が存在しないのが問題なのだろうな…。乾電池のように、ある程度統一規格を作れたら、ユーザが助かる場面も多くなるのでは。

どこかの国が、リチウムイオンバッテリーの規格を打ち出して、この規格に従っておけば製品のセールスポイントになるぞ、みたいな風潮にならないものかと…。

思考メモです。いや、これは妄想メモに近いかも。

以上、1 日分です。

過去ログ表示

Prev - 2024/05 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project