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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1206
SADOUShspdxを使っています。es_clsやes_boxf等の違い/レイヤー合成7解決


SADOUS

リンク

2014/12/6(Sat) 01:09:58|NO.66306

hsp言語にしか触れたことがなく、C,C#,JAVA等の知識は皆無。APIとかもよくわからない。

■1
http://hsp.tv/play/pforum.php?mode=all&num=66231
を見ていてかなり心配になるのですが、中でもNO.66260が気になりまいた。

clsは画面内のオブジェクトを含む全てを初期化するという認識で覚えていますが
es_clsやes_boxfはどんな処理を行っているのでしょうか?
自分は暇人さんに以前指摘されたことがあって(全てes_ex~direct3Dを使えとのこと)
記憶にあたらしいです。


■2
また、hspdxではレイヤー合成が
(複数のバッファに分けて描写し任意の順にメインにコピー、前面背面の概念を簡単に作る)
できないように思えます。
es_xferが手がかりではないかと思っていますが、Direct3DなのかDrawなのか(ヘルプの説明も微妙)。
es_xferが問題なく使えたとしても
直接各オフスクリーンバッファに描写(es_ex~)できませんから、
一度メインに描写(es_ex~)してそれをバッファに保存するぐらいしか思いつきません。
絶対チラつきの原因になると思うのです。

以上2点・・・
前者の質問の答えと、後者の題についてご協力お願いします。



この記事に返信する


774

リンク

2014/12/6(Sat) 21:55:17|NO.66324

私も詳しくはないですので参考程度に。

□1
es_boxf は標準命令の boxf 同様に単色で矩形範囲の塗り潰しのようです。
es_cls も範囲が画面全体固定というだけでほぼ同じものように思ってます。
HSPのオブジェクトまで初期化してしまう挙動の方が、どちらかと言えば特異な気がします。

□2
元々 DirectDraw の描画速度が優れているのは、
メイン(画面表示用)バッファに対してのみだったように記憶してます。
ですので es_xfer がどちらに属していたとしても問題は無いのではないでしょうか。

レイヤー合成は私も以前同じような事をして見たのですが、
途中で es_sync を挟まない限り、特にチラつきは無かったように思います。

hspdxで画像合成をするには本当に他に手は無さそうなのですが、
メインへの転送時間 <<<<<<<< レイヤ合成時間 といった感じで
毎回1から描画してしまった方が速いケースも有り得ますのでご留意下さい。



ZAP

リンク

2014/12/6(Sat) 22:35:28|NO.66325

HSPDXで組むのであれば、毎フレーム毎に全部書き直すというのが
基本的なスタイルではないでしょうか。

そうしても十分なパフォーマンスが得られる、というのがDirectXを使うメリットだと思うので。

重ね合わせがどういうものをイメージしているのかは判りませんが、
ウインドウやらのでっかい画像も、スプライトにしちゃえば重ね合わせも簡単だし
前後関係を変えることもそう難しくないと思いますので。

es_clsについては、そもそもDirectXで描画している場合、
ボタンなどのWindowsオブジェクトは使わないと思うので、
es_boxfと挙動においてはあまり違いはないかもしれないですね。
(実行速度は検証したことはないですけど)



ZAP

リンク

2014/12/6(Sat) 22:37:48|NO.66326

HSPDXは当初、DirectDrawでの描画の実装から始まって、
バージョンアップの過程でex系の命令を実装したと記憶していますので、
拡張されたex系の命令以外はDirectDrawベースではないかと思います。



SADOUS

リンク

2014/12/7(Sun) 12:11:49|NO.66331

>774さん
バッファへの書き込みは遅いのですか!
どうしよう、画面拡大とかはもろxfer→excopy(拡縮指定)使っているのに・・・

>ZAPさん
まんまレイヤ合成を行おうとするとDXを使う利点が損なわれてしまう。
とすると擬似的にレイヤを作るかーとも思ったのですが、

1.オブジェクト(自機や敵や地形)の移動処理を行うと同時にレイヤー情報を与える
2.描写ルーチンでレイヤー1を要素数分ループで検出して描写
3.描写ルーチンでレイヤー2を要素数分ループで検出して描写

くらいしか思いつかず、要素数やレイヤー数が増えれば増えるほど重くなると思います。
(レイヤーは5枚程度。2DSTGでのキャラやマップやエフェクトの上下関係を表したい。)
現在これで組み込もうとしているのですが、自分の力不足で、
エラー多発で検証にまでは至っていません。



レイヤー合成について他に方法があればいいのですが・・・
このまま進展がなければ解決にします。



SADOUS

リンク

2014/12/7(Sun) 12:20:51|NO.66332

追記
>バッファへの書き込みは遅いのですか!
>どうしよう、画面拡大とかはもろxfer→excopy(拡縮指定)使っているのに・・・
なにを勘違いしたのか。
774さんのコメントからするに画面拡大には問題なさそうですね。
xferがどちらのものかわからないのが辛いのですが・・・



774

リンク

2014/12/7(Sun) 19:48:42|NO.66339

私の場合はバッファへの書き込みというより、
合成の為にHSP側でごちゃごちゃやってたのが原因な気もします^^;

xferについて補足しますと
元々DirectXの恩恵が無い部分らしいので、仮にソフトウェアエミュレートされても変わらないのでは?
という意見です。



SADOUS

リンク

2014/12/7(Sun) 21:05:31|NO.66340

xferは現状そこまで気にするものではなさそう?

レイヤー合成については
>1.オブジェクト(自機や敵や地形)の移動処理を行うと同時にレイヤー情報を与える
>2.描写ルーチンでレイヤー1を要素数分ループで検出して描写
>3.描写ルーチンでレイヤー2を要素数分ループで検出して描写
を使うことにします。
xferが使えたところで、これを組み込もうとしているプログラムの描写部分の都合上
意味がありませんでした。

共同作業ェ



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