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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0624
あまらすかパレットモードについて7解決


あまらすか

リンク

2008/6/24(Tue) 00:12:19|NO.16948

質問なのですが、パレットモードの処理速度が画像サイズに比例しないのには何か訳があるのでしょうか?
試してみたら32*32サイズをパレットモードでGcopyすると明らかにフルカラーより遅くなります。

何か原因があるのでしょか?



この記事に返信する


あり

リンク

2008/6/24(Tue) 09:56:32|NO.16955

>質問なのですが、パレットモードの処理速度が画像サイズに比例しないのには何か訳があるのでしょうか?
>試してみたら32*32サイズをパレットモードでGcopyすると明らかにフルカラーより遅くなります。

#include "d3m.hsp" ;FPS取得に使用 cm=0 ; 0はフルカラー、1はパレット screen 0,640,480,cm buffer 1,640,480,cm sx=32 ;コピーサイズX sy=32 ;コピーサイズY nx=sx/4 :ny=sy/4 color 100,100,100 :boxf 0,0,sx,sy color 0,0,0 :boxf nx,ny,sx-nx,sy-ny gsel 0 randomize onkey goto *owari ;何かキーを押すと終了 *main redraw 0 color 255,255,255 :boxf repeat 100 ;この数だけコピー x=rnd(640-sx) :y=rnd(480-sy) gmode 2,sx,sy pos x,y :gcopy 1,0,0,sx,sy loop fps=d3getfps() ;FPS表示 数値が多いほど速い f++ :f=f\10 :if f=0 :title ""+fps redraw 1 :await goto *main *owari end
上のスクリプトでもフルカラーモードの方が速いでしょうか?
そうならば環境依存での問題かもしれません。
(私の環境ではパレットモードの方が速く動作しています。)

パレットモードの方が速く動いたのなら
症状のおこるスクリプトに問題があるのかもしれないので
そのスクリプトを提示してもらえますでしょうか?
問題点が見つかるかもしれません。



あまらすか

リンク

2008/6/24(Tue) 17:07:37|NO.16959

ありさんのスクリプト。
#include "d3m.hsp"
がエラー起こしてしまったので、手持ちの#include "timer.as"でためさせていただきました。

これでFPSを計測したら

0番(フルカラー)で最大283 最低で247
1番(パレット)で最大657 最低で632
になりました。

やっぱり私の環境では遅くなってしまうようです...。
ありさんのPCではパレットの方が速く動きますか?



あまらすか

リンク

2008/6/24(Tue) 17:13:22|NO.16961

すみません。勘違いです。
パレットの方が早いですね。(泣

FPSは多いほうが早いのを忘れてました。


となると、私のスクリプトに原因があったんですね..。
私のスクリプトは単純にGcopyを8000回繰り返しやった時の処理負担を見てました。

screen 0,640,480,0

ここでTimer.asの初期化とタイマーの計測開始。

repeat 800
Gcopy 0,0,0,32,32
loop

ここで計測。


という感じです。

コレを、Screen 0,640,480,0 と screen 0,640,480,1
との両方を計測したらパレットの方が1.5から2倍近く時間が掛かったので...。

もしかして同じ場所に連続でやったのがまずかったんでしょうか?



あり

リンク

2008/6/24(Tue) 22:43:56|NO.16975

遅くなってすみません(汗)

あまらすかさんの提示した情報だけでは何とも言えないのですが
私のスクリプトでメインループ中のredraw 0とredraw 1を外したら
両モードの速度差が殆ど無くなって場合によってはフルカラーモードの方が
数値が上回る時がありましたが、あからさまな差にはならなかったので
これは原因とは違う気がしますね・・・。

気がついた事といえば
Gcopyが同じウィンドウからコピーしているように見えますが
違うウィンドウやバッファからのコピーでも同じ動作になるのでしょうか?

一部分だけでは正直判断材料に欠けていますので
出来れば簡単なスクリプトで同じ症状がおこる物を
見せてもらえませんでしょうか?

あとOSは何を使っていますか?
もしかしたらOSの違いによる問題なのかもしれないので念の為に・・・。



あまらすか

リンク

2008/6/25(Wed) 01:17:21|NO.16980

OSはウィンドウズです。



#include "timer.as" t1 = "" repeat 2 cm=cnt ; 0はフルカラー、1はパレット screen 0,640,480,cm buffer 1,640,480,cm gsel 0 ;タイマー計測開始 t_reset 1,0 t_switch 1,0 repeat 8000 gcopy 1,0,0,32,32 loop ;タイマー計測終了 t_timer 1 t1 = t1 + "" +cnt+ "=" +stat+ "ms\n" loop mes t1

スクリプト自体はこんな簡単なものです。
このまま動かすと、
0=172ms
1=203ms

となり、パレットの方が遅いんですよ。
それなのでパレットモードは遅いのかなぁ...と思ったわけです。

しかし、ありさんが言われていたredrawを入れてみたら、パレットの方が早くなりました。
ただ入れる位置で変わってくるみたいです。

redraw 2
repeat 8000
gcopy
loop
redraw 1

とすると結果は
0=31ms
1=31ms
とまったく同じになり

repeat 8000
redraw 2
gcopy
redraw 1
loop

とすると
0=8890ms
1=5750ms

となってパレットの方が早くなりました。
ということなので、やはり私のスクリプト側に問題があったようです。
ご指摘ありがとうございました。



でもredrawのある無し・位置関係でこんなに差があるのは、結局どういうことなんでしょうか...。
いまいち納得がいきません...。



あり

リンク

2008/6/25(Wed) 09:40:18|NO.16989

わかり易くするために
redraw無しをパターン1、ループ外にredrawがあるのをパターン2
ループ内にredrawがあるのをパターン3としておきます。

あまらすかさんのスクリプトを私の環境で動かしてみた所
パターン1ではややフルカラーの方が速くなり
パターン2ではややパレットのほうが速くなるかほぼ同じ
パターン3ではなぜかフルカラーの方が速くなるという結果になりました。

ちなみにパターン2でredraw 2をredraw 0に変えると確実にパレットのほうが速くなりました。
この事から通常ではredraw 0を使っておくのが良いと思われます。
パターン3での結果の違いは多分環境の違いによるredrawの速度誤差ではないかと思われます。

>でもredrawのある無し・位置関係でこんなに差があるのは、結局どういうことなんでしょうか...。
>いまいち納得がいきません...。
疑問の解釈が間違っているかもしれませんが
パターン1では毎回画像をコピーしているだけ
パターン2では画像をまとめてコピーしてから転送
パターン3では毎回画像をコピーと転送
の違いで、転送(redraw)の処理がかなり重いので
極端に数値が増えるのだと思われます。

パターン1でパレットモードの方が遅くなるのは
画像をそのままコピーするだけとパレットモードからフルカラーへの
変換みたいな事が行われている事の差?なのかもしれませんね(この辺はよくわかりません)

納得できる答えになっているのかはわかりませんが
ソフト(ゲーム?)を作るときredrawを使わずに
画像を大量にコピーする事はまず無いと思われるので
redrawはループの外に置いてredraw 0とredraw 1の組合わせで使ってけば
パレット、フルカラーに関わらず期待する速度が出せるのではないでしょうか?

かなりゴチャゴチャした文章になってしまいました
読みづらかったら申し訳ありません。



あまらすか

リンク

2008/6/25(Wed) 12:09:17|NO.16991

細かい説明ありがとうございます。

なるほど...。
命令が同じなら、どんなやり方でも同じと思っていましたが、
やはり実際に動かすスクリプトという形で組み込んで計測しなければならないんですね。

でもやっぱりパレットは少し特殊な働きをしているみたいですね。

ご教授ありがとうございました。



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