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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0209
ふにくらHSPCL32でコピーした内容をgcopyできない7解決


ふにくら

リンク

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

>あらや様

度々ありがとうございます。よく理解出来ました。
そんな仕様があったとは……。

ともかく、教えて頂いたやり方で無事正常に取得できました。
解決印を付けさせて頂きます。重ね重ね助かりました。



H

リンク

2020/5/8(Fri) 22:25:27|NO.90320

前は標準命令でも横幅が二の乗数でないと画像が乱れる仕様でした。
補正してくれるのは楽だけどコンピューターの動作を深く知りたい人にはかえって邪魔ですよね。
0除算もしかり



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