|
|
2020/2/9(Sun) 17:13:07|NO.89447
こちら http://toropippi.web.fc2.com/ のプラグインHSPCL32.DLLを利用しているのですが、
HGLgcopy命令でメイン窓に描画後、メイン窓からサブ窓やバッファにコピーすることができません。
コードは以下の通りです。
実行すると、screen 0にコピーされたtest1.pngがscreen 1にもコピーされるはずがコピーされません。
screen 0をboxfで塗りつぶすと1もその色になるので、0にコピーされているpngは別レイヤーのような扱いなのでしょうか?
どうかお知恵をお貸し頂ければ幸いです。
#include "hspcl32.as"
dim tmptxid,2
tmptxid = 1,2
screen 0, 320, 240
gmode 0,100,100
pos 0,0
HCLini
view2D
glEnable GL_TEXTURE_2D; テクスチャ使う宣言
HGLCreateTexture1_texload tmptxid.0, dirinfo(0) + "\\test1.png",0; 読み込み
HGLgcopy tmptxid(0),0,0,100,100; コピー
glFinish; 描画実行
screen 1, 100, 100
pos 0,0
gcopy 0,0,0
stop
|
|
2020/2/9(Sun) 18:57:16|NO.89450
HSPCL32がエラーで実行確認できない為、
気になる所だけ指摘させていただきます。
「test1.png」の左上の縦横32ドットが白、
もしくは透過になっていませんか?
screen 1, 100, 100
pos 0,0
gcopy 0,0,0
ウィンドウ1のgcopyのサイズが省略されているので、
おそらく左上32ドットだけコピーする形になっています。
失敗例:
// 赤で塗りつぶし
screen 0, 320, 240, 0;
gmode 0,100,100
color 255, 0, 0: boxf;
// コピー実行
screen 1, 200, 200, 0;
pos 0, 0;
gcopy 0, 0, 0
成功例:
// 赤で塗りつぶし
screen 0, 320, 240, 0;
gmode 0,100,100
color 255, 0, 0: boxf;
// コピー実行
screen 1, 200, 200, 0;
pos 0, 0;
gcopy 0, 0, 0, 200, 200;
このようにgmodeで指定したサイズはウィンドウ毎に決まるので
ウィンドウ0で指定したサイズはウィンドウ1には反映されません。
一度ご確認をお願いいたします。
|
|
2020/2/9(Sun) 19:23:29|NO.89451
>あらや様
回答ありがとうございます。
私も直したのがだいぶ前で失念していましたが、hspcl32.asの関数varsize が
重複を起こしているようです。私の環境ではvarsize@hspclに一括置換して動かしています。
補足が足りず申し訳ございませんでした。
ご指摘いただいて確認致しましたが、画像の左上32*32が白や透過という事はありませんでした。
(gmodeの指定がウィンドウ毎というのは知りませんでした。ありがとうございます。)
screen 1, 100, 100
pos 0,0
gcopy 0,0,0
を
screen 1, 100, 100
pos 0,0
gcopy 0,0,0,100,100
にしてみましたが、結果は変わらずです。
|
|
2020/2/9(Sun) 21:57:34|NO.89452
>私の環境ではvarsize@hspclに一括置換して動かしています。
おかげさまで確認できました。
mrefでVRAMを確認しましたが、VRAM自体には何も描画していないようですね。
HSPのVRAMを使っていないという事はgcopyは使えません。
HGLReadTextureなどを使えば
コピー等が可能かもしれませんがこちらは未確認です。
|
|
2020/2/9(Sun) 22:37:24|NO.89455
>あらや様
ご回答ありがとうございます。
なるほど……そうやって確認できるのですね。参考になります。
VRAM操作をする関数も相当数あるようなので、そちらを当たってみます。
別件かもしれませんが、もう1つだけ伺いたいです。
今度はhgimg3を使い、逆にHSP画面を読み取ろうとしたのですが
picload -> settexで画面内容を取得したところ、こんな風に表示が乱れてしまいました。
https://imgur.com/s6FybcG
これは何故でしょうか?
コードは以下の通りです。
#include "hgimg3.as"
; ダイレクト描画サンプル
; ウインドゥサイズの設定
screen 0,100,100,0
title "0"
; 初期設定
hgini
; テクスチャの準備
bgscr 1,100,100,0
title "1"
gmode 0,100,100
picload dirinfo(0) + "\\test1.png", 1
settex 100, 100, 0, -1
mest = stat
; 描画処理
hgdraw
gsel 0
gmode 0,100,100 ; 元画像のサイズ指定
pos 50,50 ; 中心座標
hgrotate mest,0,0,0,100,100
hgsync 10 ; 時間待ち
stop
end
|
|
2020/2/9(Sun) 23:33:48|NO.89456
hgimg3のテクスチャサイズ(バッファサイズ?)は
2の乗数で無いと正確に処理できません。
hgimg3.as内のtexloadの処理を見てもらえばわかると思いますが
読み込む際にウィンドウサイズを2の乗数に修正してから
settex(こちらは元のサイズのまま)が行なわれます。
なので
>bgscr 1,100,100,0
ここを
bgscr 1,128,128,0; 2の乗数にする
このように変更すると正確にコピーできるようになるはずです。
|
|
2020/2/10(Mon) 00:01:05|NO.89457
>あらや様
度々ありがとうございます。よく理解出来ました。
そんな仕様があったとは……。
ともかく、教えて頂いたやり方で無事正常に取得できました。
解決印を付けさせて頂きます。重ね重ね助かりました。
|
|
2020/5/8(Fri) 22:25:27|NO.90320
前は標準命令でも横幅が二の乗数でないと画像が乱れる仕様でした。
補正してくれるのは楽だけどコンピューターの動作を深く知りたい人にはかえって邪魔ですよね。
0除算もしかり
|
|