2023/10/31(火) [n年前の日記]
#1 [hsp] HGIMG3でフルスクリーン表示ができるのか試してみた
Windows10 x64 22H2 + HSP 3.7 beta7 で、HGIMG3 について勉強中。
HGIMG3 でフルスクリーンっぽい表示が出来そうかどうか試してみた。今までと同じやり方が ―― bgscr を使って、枠無し、かつ、デスクトップサイズのウインドウを作って、画面の左上に表示位置を設定すればフルスクリーン表示に見える、というやり方が通用するのかどうかを確認する。
DirectXに「フルスクリーン表示にせよ」と指定する処理は、今回はやらない。ソレをするとデスクトップ上のアイコン配置がグチャグチャになってしまった記憶があるので…。あくまで、「ウインドウ表示なんだけどフルスクリーン表示っぽく見えてる状態」にできるかどうかを試す。
もし、DircetXにフルスクリーン表示を指定したいなら、HSP同梱のサンプル、sample\hgimg3\fullscr.hsp が参考になるかと。
_OHDL - fullscr.hsp
HGIMG3 でフルスクリーンっぽい表示が出来そうかどうか試してみた。今までと同じやり方が ―― bgscr を使って、枠無し、かつ、デスクトップサイズのウインドウを作って、画面の左上に表示位置を設定すればフルスクリーン表示に見える、というやり方が通用するのかどうかを確認する。
DirectXに「フルスクリーン表示にせよ」と指定する処理は、今回はやらない。ソレをするとデスクトップ上のアイコン配置がグチャグチャになってしまった記憶があるので…。あくまで、「ウインドウ表示なんだけどフルスクリーン表示っぽく見えてる状態」にできるかどうかを試す。
もし、DircetXにフルスクリーン表示を指定したいなら、HSP同梱のサンプル、sample\hgimg3\fullscr.hsp が参考になるかと。
_OHDL - fullscr.hsp
◎ ソース :
_04_fullscreen_hgimg3.hsp
使用画像は以下。
_font.png
_tex.png
表示結果は、hsp3dish のソレと大体同じなので省略。
; hgimg3 fullscreen sample. #include "hgimg3.as" #include "d3m.hsp" #packopt name "04_fullscreen_hgimg3" ; file name #packopt type 0 ; generate ".exe" #define TEXFILE "tex.png" #define FONTFILE "font.png" #pack TEXFILE #pack FONTFILE #define KB_ESC $00080 #define FRAMERATE 60 ; get desktop size dispx = ginfo_dispx dispy = ginfo_dispy ; initialize window without frame bgscr 0, dispx, dispy, 0, 0, 0 hgini ; initialize hgimg3 ; init bimap font, load font texture setfont 20, 20, 18, 1 ; 20x20 font texload FONTFILE ; load texture texload2 TEXFILE texid = stat ; get texture ID texw = 512 texh = 512 ; Set the buffer to draw from. Windows ID 0 gsel 0, 1 clscolor $4080c0 ; set clear color angle = 0.0 time_start = d3timer() *mainloop ; get FPS tm = d3timer() - time_start fps = d3getfps() ; ESC key to exit stick k, 0 if k & KB_ESC : goto *job_end angle += 0.5 ; ---------------------------------------- ; draw start hgdraw objmax = 64 repeat objmax r = double(dispy) * 0.5 a = angle + (270.0 / double(objmax)) * double(cnt) x = int(r * cos(deg2rad(a))) + (dispx / 2) y = int(r * sin(deg2rad(a))) + (dispy / 2) d = double(cnt) / double(objmax) ; draw image by crlput gmode gmode_rgb0, texw, texh pos x, y src_x = (idx \ 2) * texw src_y = ((idx / 2) \2) * texh idx = (cnt \ 4) rot = deg2rad(angle * 2.0 + 360.0 * d) scale = 8.0 - (7.5 * d) dst_w = int(double(texw) * scale) dst_h = int(double(texh) * scale) ; draw texture hgrotate texid, src_x, src_y, rot, dst_w, dst_h loop ; draw text gmode gmode_rgb0 fprt strf("[%dx%d] %d/%dFPS", dispx, dispy, fps, FRAMERATE), 10, 10 hgsync (1000 / FRAMERATE) - 1 ; draw end and wait goto *mainloop *job_end hgbye ; release HGIMG3 plugin end
使用画像は以下。
_font.png
_tex.png
表示結果は、hsp3dish のソレと大体同じなので省略。
◎ 動作結果 :
以下の環境で動作確認。
メインPC上では60FPS前後のFPSが出た。これは予想通り。hgsync に与えているwait値が正確な1/60秒になってないので誤差が大きく出ていた気もするけれど、大体似たようなFPSになってれば、まあいいかと。
問題はサブPC。12 - 17FPS しか出ない。hsp3dish を使った時と似たようなFPSになった。
サブPCの Radeon R3 で OpenGL を使うと遅いのではないか、DircetX を使えばもう少し速く処理してくれるのではないかと、淡い期待を持ちつつ実験してみたのだけど、そんなことはなかった。おそらく、OpenGL も DirectX も、どちらも遅い。単にスペックがショボいGPUでした、というオチだなと…。
- メインPC : CPU AMD Ryzen 5 5600X + GPU NVIDIA GeForce GTX 1060 6GB + RAM 16GB, 画面解像度 1920x1080
- サブPC : CPU AMD Athlon 5350 + オンボードGPU Radeon R3 + RAM 4GB, 画面解像度 1920x1080
メインPC上では60FPS前後のFPSが出た。これは予想通り。hgsync に与えているwait値が正確な1/60秒になってないので誤差が大きく出ていた気もするけれど、大体似たようなFPSになってれば、まあいいかと。
問題はサブPC。12 - 17FPS しか出ない。hsp3dish を使った時と似たようなFPSになった。
サブPCの Radeon R3 で OpenGL を使うと遅いのではないか、DircetX を使えばもう少し速く処理してくれるのではないかと、淡い期待を持ちつつ実験してみたのだけど、そんなことはなかった。おそらく、OpenGL も DirectX も、どちらも遅い。単にスペックがショボいGPUでした、というオチだなと…。
◎ 今後の方針 :
でもまあ、どうにかして DircetX を使わないと描画が速くならないという状態ではなさそうなので、今後は安心して(?) hsp3dish を選択できそう。OpenGL と DircetX のどちらが使われているかなんて一切気にしなくていい。どうせサブPC上で動かしたらどちらも遅いから…。トホホ。
しかし、困った。この状態で高速化するにはどうすればいいのだろう。
描画面積を減らしていけば目に見えてFPSが改善するのだろうか。だとしたら、やはり小さな仮想画面を作っておいて、そこに全部描画してから最後にデスクトップサイズに拡大描画、というやり方が有効だろうけど…。hsp3dish でそんなことはできるのだろうか。必ず、最初に生成したウインドウに描画しないといけない、仮想画面に描画なんて無理、みたいな制限があったりしないか…?
その前に、hsp3dish でスクリーンセーバが作れるのかどうか実験してみないと…。
スクリーンセーバにできるかどうかは、今回重要。最終的にスクリーンセーバにしてみたいから、あえてわざわざ HSP というアレなソレを選んでいるわけで…。
スクリーンセーバにしなくていいなら、言語仕様が至極真っ当な、Love2D (Lua)、DXRuby (Ruby)、PyGame (Python)、Processing 等を使ってデモプログラムを書いたほうが、はるかに楽だし分かりやすいよなと…。
しかし、困った。この状態で高速化するにはどうすればいいのだろう。
描画面積を減らしていけば目に見えてFPSが改善するのだろうか。だとしたら、やはり小さな仮想画面を作っておいて、そこに全部描画してから最後にデスクトップサイズに拡大描画、というやり方が有効だろうけど…。hsp3dish でそんなことはできるのだろうか。必ず、最初に生成したウインドウに描画しないといけない、仮想画面に描画なんて無理、みたいな制限があったりしないか…?
その前に、hsp3dish でスクリーンセーバが作れるのかどうか実験してみないと…。
スクリーンセーバにできるかどうかは、今回重要。最終的にスクリーンセーバにしてみたいから、あえてわざわざ HSP というアレなソレを選んでいるわけで…。
スクリーンセーバにしなくていいなら、言語仕様が至極真っ当な、Love2D (Lua)、DXRuby (Ruby)、PyGame (Python)、Processing 等を使ってデモプログラムを書いたほうが、はるかに楽だし分かりやすいよなと…。
◎ Radeon R3の性能について調べた :
AMD Radeon R3 ってどの程度の性能のGPUなんだろう。ベンチマークの類を調べてみた。
何か比較対象があったほうが分かりやすいだろう…。今も売ってる増設ビデオカードの中で比較的低価格なものとなると…。NVIDIA GT 710、GT 1030 あたりと比べてみればいいのかな。
_UserBenchmark: AMD Radeon R3 Graphics vs Nvidia GeForce GT 710
_Radeon R3 Graphics IGP (APU A6-6200) vs GeForce GT 710
_UserBenchmark: AMD Radeon R3 Graphics vs Nvidia GT 1030
_GeForce GT 1030 vs Radeon R3 Graphics IGP (APU A6-6200)
絶句。Radeon R3 ってこんなに性能低いのか…。GT 710 の 1/2 - 1/3、GT 1030 の 1/6 の性能だろうか。増設ビデオカードって、このランクでも結構凄いんだな…。
でも、Intel の内蔵GPUと比べたらどうだろう。例えば Core i5-2500 に入ってる Intel HD 2000 あたりと比べたら…。
_UserBenchmark: AMD Radeon R3 Graphics vs Intel HD 2000 (Desktop 1.1 GHz)
_HD Graphics 2000 (Sandy Bridge GT1) vs Radeon R3 Graphics IGP (APU A6-6200)
さらに絶句。昔の Intel製オンボードビデオと比べたら、まだ Radeon R3 のほうがマシだったとは…。と言っても 1.5 - 2.0倍ぐらいだけど。
ちなみに、Intel Skylake世代(6xxx番台) に内蔵されてる Intel HD 510 あたりと比べたら、さすがに Intel HD 510 のほうが Radeon R3 より 1.5倍ぐらい性能が良かった。Intel製の内蔵GPUは、世代が変わるたびにグングン性能を上げていたんだなと。
_UserBenchmark: AMD Radeon R3 Graphics vs Intel HD 510 (Desktop Skylake)
_HD Graphics 510 (Skylake GT1) vs Radeon R3 Graphics IGP (APU A6-6200)
何にせよ、オンボードビデオのPC上でも動かすことを考えたら、描画に関して贅沢な作りは一切できない気がする。1920x1080なら10FPS前後で動くだけでも「スゴイね!」という話なのかも…。
何か比較対象があったほうが分かりやすいだろう…。今も売ってる増設ビデオカードの中で比較的低価格なものとなると…。NVIDIA GT 710、GT 1030 あたりと比べてみればいいのかな。
_UserBenchmark: AMD Radeon R3 Graphics vs Nvidia GeForce GT 710
_Radeon R3 Graphics IGP (APU A6-6200) vs GeForce GT 710
_UserBenchmark: AMD Radeon R3 Graphics vs Nvidia GT 1030
_GeForce GT 1030 vs Radeon R3 Graphics IGP (APU A6-6200)
絶句。Radeon R3 ってこんなに性能低いのか…。GT 710 の 1/2 - 1/3、GT 1030 の 1/6 の性能だろうか。増設ビデオカードって、このランクでも結構凄いんだな…。
でも、Intel の内蔵GPUと比べたらどうだろう。例えば Core i5-2500 に入ってる Intel HD 2000 あたりと比べたら…。
_UserBenchmark: AMD Radeon R3 Graphics vs Intel HD 2000 (Desktop 1.1 GHz)
_HD Graphics 2000 (Sandy Bridge GT1) vs Radeon R3 Graphics IGP (APU A6-6200)
さらに絶句。昔の Intel製オンボードビデオと比べたら、まだ Radeon R3 のほうがマシだったとは…。と言っても 1.5 - 2.0倍ぐらいだけど。
ちなみに、Intel Skylake世代(6xxx番台) に内蔵されてる Intel HD 510 あたりと比べたら、さすがに Intel HD 510 のほうが Radeon R3 より 1.5倍ぐらい性能が良かった。Intel製の内蔵GPUは、世代が変わるたびにグングン性能を上げていたんだなと。
_UserBenchmark: AMD Radeon R3 Graphics vs Intel HD 510 (Desktop Skylake)
_HD Graphics 510 (Skylake GT1) vs Radeon R3 Graphics IGP (APU A6-6200)
何にせよ、オンボードビデオのPC上でも動かすことを考えたら、描画に関して贅沢な作りは一切できない気がする。1920x1080なら10FPS前後で動くだけでも「スゴイね!」という話なのかも…。
◎ Windows11になったら状況が変わるかどうか :
Radeon R3 の遅さにガックリきているけれど、Windows10のサポートが終了して、Windows11だけになったら、動かせるCPUの最低ランクが Intel の第8世代以上になるはずで、内蔵GPUもそのランクが最低ランクになるだろうから、状況がガラリと変わるのではないかと思えてきた。
Windows11が動かせる最低ランクのCPU、最低ランクのGPUって、どのあたりになるんだろうか…? そこが分かれば、どの程度の描画をしてもいいのか大体把握できるのでは。
ググっても分らなかったので、試しにAIさん(Bing Chat)に尋ねてみたら「Celeron J4005はどうでしょう」と言ってきた。調べたところ、たしかに Windows11 の対応CPUに入ってる。内蔵GPUは Intel UHD 600。ベンチマーク結果を確認したところ…。
_UserBenchmark: AMD Radeon R3 Graphics vs Intel UHD 600
どんぐりの背比べではあるけれど、Radeon R3 のほうが、まだマシだった…。Windows11 になったからと言ってGPUの最低スペックまで劇的に上がるわけではない、ということだな…。やっぱり贅沢な描画は無理っぽい。
Windows11が動かせる最低ランクのCPU、最低ランクのGPUって、どのあたりになるんだろうか…? そこが分かれば、どの程度の描画をしてもいいのか大体把握できるのでは。
ググっても分らなかったので、試しにAIさん(Bing Chat)に尋ねてみたら「Celeron J4005はどうでしょう」と言ってきた。調べたところ、たしかに Windows11 の対応CPUに入ってる。内蔵GPUは Intel UHD 600。ベンチマーク結果を確認したところ…。
_UserBenchmark: AMD Radeon R3 Graphics vs Intel UHD 600
どんぐりの背比べではあるけれど、Radeon R3 のほうが、まだマシだった…。Windows11 になったからと言ってGPUの最低スペックまで劇的に上がるわけではない、ということだな…。やっぱり贅沢な描画は無理っぽい。
[ ツッコむ ]
以上です。