mieki256's diary



2023/11/12() [n年前の日記]

#1 [hsp] HGIMG3のhgcaptureについて調べてる。その2

Windows10 x64 22H2 + HSP 3.7 beta7 で、仮想画面相当に HGIMG3 で描画して、その結果をメイン表示ウインドウに持ってこれないか実験中。

たぶんできたような気がする。ただ、ちと問題はあるけれど、それについては後述。

要するに以下のような仕組みにすれば、それらしくなるのかなと。

07_hgcapture_02_ss.png

ソース :

_07_hgcapture_02.hsp
    ; hgcapture使用サンプルその2
    ; 表示ウインドウを2つ新規作成して、片方を仮想画面相当、片方をメイン表示にする
    
    #include "hgimg3.as"
    #include "d3m.hsp"
    
    ; 以下の行をコメントアウトするとウインドウ表示になる
    ;#define FULLSCR
    
    #packopt name   "07_hgcapture_02"   ; file name
    #packopt type   0                   ; generate ".exe"

    #define TEXFILE     "chara.png"
    #pack   TEXFILE
    
    #define KB_ESC  128
    #define KB_LEFT     $00001
    #define KB_UP       $00002
    #define KB_RIGHT    $00004
    #define KB_DOWN     $00008
    #define KB_CURSOR   (KB_LEFT | KB_UP | KB_RIGHT | KB_DOWN)
    
    framerate = 60
    
    title "Screen 0"
    
    ; メイン表示ウインドウを確保。HSPの標準描画機能で描画していく
    dispid = 2
    
#ifdef FULLSCR
    ; get desktop size
    dispw = ginfo_dispx
    disph = ginfo_dispy
    bgscr dispid, dispw, disph, 0, 0, 0, dispw, disph
#else
    dispw = 1280
    disph = 720
    screen dispid, dispw, disph, 0
    title "Screen " + dispid
#endif
    
    ; hgcapture用バッファを確保
    tbufid = 6
    vscrw = 512
    vscrh = 288
    buffer tbufid, vscrw, vscrh
    
    ; 仮想画面相当の表示ウインドウを確保。HGIMG3で描画していく
    vscrid = 5
    ; modevalue = screen_hide
    modevalue = 0
    screen vscrid, vscrw, vscrh, modevalue
    title "Screen " + vscrid
    
    hgini
    
    ; load texture
    texload2 TEXFILE
    texid = stat            ; get texture ID
    texw = 16
    texh = 16
    
    clscolor $4080c0        ; set clear color
    
    count = 0
    x = (vscrw / 2)
    y = (vscrh / 2)
    
    time_start = d3timer()
    
*mainloop
    repeat
        ; get FPS
        tm = d3timer() - time_start
        fps = d3getfps()
        
        ; ESC key to exit
        stick k, KB_CURSOR
        if k & KB_ESC : break
        
        ; move character
        spd = 3
        if k & KB_LEFT : x -= spd
        if k & KB_RIGHT : x += spd
        if k & KB_UP : y -= spd
        if k & KB_DOWN : y += spd
        
        hgdraw
        
        ; draw images (HGIMG3)
        gmode gmode_rgb0, texw, texh
        pos x, y
        src_x = ((count / 16) \ 2) * texw
        src_y = 0
        rot = 0.0
        scale = 3
        dst_w = texw * scale
        dst_h = texh * scale
        hgrotate texid, src_x, src_y, rot, dst_w, dst_h

        ; HGIMG3 の描画結果をキャプチャしてbuffer(ID=tbufid)にコピー
        ; 右端と下端に数ドット黒部分が出るのはバグらしい
        gsel tbufid
        hgcapture
        
        ; メイン表示ウインドウにHGIMG3の描画結果を描画していく
        gsel dispid
        redraw 0
        
        ; zoom copy tbufid -> dispid (HSP標準描画機能)
        if 1 {
            gmode gmode_gdi
            pos 0, 0
            gzoom dispw, disph, tbufid, 0, 0, vscrw, vscrh, 1
        } else {
            gmode gmode_gdi, vscrw, vscrh
            pos (dispw / 2), (disph / 2)
            grotate tbufid, 0, 0, 0.0, dispw, disph
        }
        
        ; draw text (HSP標準描画機能)
        if 1 {
            font "Tahoma", 20, 1, 2
            objcolor 255, 255, 255
            color 16, 16, 16
            pos 16, 16
            mes strf("[%dx%d] %d FPS", vscrw, vscrh, fps), 4
        }
        
        redraw 1
        
        t = (1000 / framerate) - 1
        if t <= 0 : t = 1
        hgsync t
        
        count++
    loop
    
*mainloop_end
    end

使用画像は以下。

_chara.png

問題点 :

問題点としては…。処理が遅い…。そのせいか、動きもガクガクしてしまう…。

前述のソースでは違いが分からないかもしれないけれど、以下に示すような描画面積がそれなりに大きい処理の場合、明らかに遅くなる。

_07_hgcapture.hsp
_tex.png


仮想画面相当を経由させずに直接描画すれば60FPSが出る処理内容でも、仮想画面を経由させると60FPSが出なくなったりする。一旦仮想画面を経由することで、描画面積はかなり少なくなって、処理時間が短くなるのではないかと予想していたのだけど、実際には真逆の結果に ―― 速くなるどころか、むしろ遅くなる状態になってしまった。

実際に測定したわけではないから、たしかなことは言えないけれど、どうも hgcapture が遅いのではないかという気がしている。関連情報を眺めると、VRAM からメインメモリに内容をコピーしてくる関係でどうしても遅くなる、と言及されているようだし…。

#2 [nitijyou] 選挙に行ってきた

福島県議会議員一般選挙とやらで、近所の下宿公会堂まで行って投票してきた。電動自転車で10:30頃に行ったような気がする。今回のこの地域の立候補者は4人。

傘を新調 :

帰りに、ホームセンターサンデーに寄って、新しい傘を購入。70cmと書いてある。色は深緑。税抜970円。

今まで持っていた自分用の傘は、いつのまにか骨組みがボキボキに折れていて。親父さんがたまに使ってたらしいのだけど、その際壊れてしまったらしい。そんなわけで、新しく購入。

今まで使っていた傘はかなり鮮やかな緑だったけど、今回購入したのは黒に近い緑で…。ダサい。もっと原色に近い色の傘が欲しいけど、ホームセンターではそんなの売ってないわけで…。ホーマックにも寄って探したけれど、長さが70cmぐらいの商品は置いてなかったわけで…。ひょっとして、ファッションセンターしまむらとかそういうところを回って探したほうが良かったのだろうか。失敗したかも。

以上、1 日分です。

過去ログ表示

Prev - 2023/11 - 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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project