HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1110
SADOUS描画処理について、メモリやCPUを食う感覚がわからない3未解決


SADOUS

リンク

2014/11/10(Mon) 14:20:35|NO.65973

タイトルじゃ分かりにくいですよね
最近HSPDXを使うようになって(スプライト昨日は未使用)
ふと友人に指摘されて確かめてみたらメモリを大量に食っていました。
コンピュータには詳しくないのでどういう処理でどのくらいメモリを消費しているのか
まるで分からず怖いと思います。

(process explorerを利用)
組んでみた描画プログラムの内容は
buf1,2に200^2程の画像素材、buf3,4に内部処理用に480*360のオフスクで
メインウィンドウ640*480に拡大コピー(es_zoom)をしています。(フルスクや各サイズウィンドウに対応させるため)
GPUの[専用メモリ/システムメモリ/コミットメモリ]の違いが分かりませんが
それぞれ[5MB/10MB/20MB]でグラフから見て90%以上を使用している様子。
プライベートバイトは44MB。GPUメモリで処理しきれないにしても漏れ過ぎでは!?
GPUは18%、CPUは30%使用。

もっとも、pentium p6200で4GBメモリな自分のパソコンで思い通りに動いているので
大して問題視していませんが今後のゲーム制作の問題になりそうで。
メモリを食う感覚、どの位のサイズの画像をどうするかでどのくらい食うのか・・・等
そこそこ詳しく理解しておきたいなと思います。
これらについての説明お願いできますか?



この記事に返信する


nepisat

リンク

2014/11/10(Mon) 17:22:36|NO.65975

感覚的には
元ファイルと同じぐらいのサイズかな(倍の場合、x2)で、
CPUは凝った演出等をするときによく食う。



SADOUS

リンク

2014/11/10(Mon) 20:34:29|NO.65979

BMPを扱っているイメージですね・・・

試しに多色の砂嵐を書き込んでみたVGAサイズBMPファイルを二通り作ってみました。
いずれも900KB・・・
640*480=900KBなら単純計算で480*360=755KB、実測で505KB
まあ480*360を大きく見積もって1000KBと考えてみても
プライベートで40MBもGPUメモリで10MBも消費しているのが理解できない。

480*360px=1MB、640*480px=10MBととんでもないサイズに置換して考えても
640*480(メイン)一枚と480*360(オフスク)四枚でせいぜい14MB程度。

とすると、スクリーン(オフスク含)以外での内部処理などに使われているのか。
それとも単純にオフスクリーンの初期化で馬鹿でかいサイズで初期化してしまっているのか。



SADOUS

リンク

2014/11/10(Mon) 20:57:01|NO.65980

描画処理でそれっぽい部分を描いてみます。

//オフスクリーンバッファ初期化 #const bufx 480 #const bufy 360 #define TRANSCOLOR $000000 #define TEXTUREFlag 1 buffer 1,640,480;画像 picload "img.bmp" gsel 1 es_buffer 1,0,TRANSCOLOR,,TEXTUREFlag buffer 2,bufx,bufy;拡大用/非テクスチャ gsel 2 es_buffer 2,0,TRANSCOLOR,,0 buffer 3,bufx,bufy;font gsel 3:color 0,0,0:boxf picload "img_fnt.bmp" es_buffer 3,0,TRANSCOLOR,,0 TEXTBUF_R=3 buffer 4,bufx,bufy;font write gsel 4:color 0,0,0:boxf es_buffer 4,0,TRANSCOLOR,,0 TEXTBUF_W=4
es_bufferの引数にサイズを指定するものがなかったので、
bufferで指定したサイズに依存すると思い、bufferに使いたいサイズを指定。

//画面クリア es_cls 0,0,0 //キャラ描写 gmode 2 foreach chax pos chax(cnt),chay(cnt) es_excopy 1,32,32,32,32,32,32,,,1000,ESB_ALPHA,100,$FFFF77 loop //自機描写 pos mex-mesize/2,mey-mesize/2 es_excopy 1,n,0,32,32,64,64,,,0,ESB_ALPHA,50,$FFFFFF pos mex,mey if mesx=0:n=0:else:if mesx<0:n=32:else:n=64 es_excopy 1,n,0,32,32,32,32,,,0,,255,$FFFFFF //図形 es_exboxf winx-10,0,winx,winy,$0000ff,,,,ESB_ALPHA,100,,, es_exboxf 0,0,100,winy,$ffffff,,,,ESB_ALPHA,100,,, color rnd(255),rnd(255),rnd(255) es_exboxf 80,winy,90,rnd(winy),$00ff00,,,,ESB_ALPHA,100,,, //テキスト pos 0,20:gmode 2 es_copy 4,0,0,bufx,bufy //FPSカウント oldsec=sec:sec=gettime(6) if oldsec=sec:fpscnt++:else:fps=fpscnt:fpscnt=0 pos 0,0:es_mes "FPS"+str(fps),-2
描写テストの為に1000体のキャラ(配列変数chax,chay)で32*32サイズの画像を
es_excopyを用いて半透明合成・Z軸回転・色成分調整で貼付け。
半透明boxfやフォントや色を指定できないやや高速な方のes_mesを少し利用。



ONION software Copyright 1997-2021(c) All rights reserved.