Re: DirectX11の機能について ( No.1 ) |
- 名前:管理人 日時:2017/03/28 01:33
> それでDirectX11のデフォルトの機能にAlt+Enterでフルスクリーンと切り替えられたりデバイスロストがしにくくなった等の話を聞いていたのですが
> これらも自分で実装しなければならないのでしょうか?
デバイスロストについてはDXライブラリ内部で復帰処理を実装しているのでDXライブラリを使用される方が
デバイスロストを気にされる必要はありませんが、
Alt+Enterでフルスクリーンと切り替える機能はDXライブラリでは無効にしているので、こちらは
自前で実装していただく必要があります
|
Re: DirectX11の機能について ( No.2 ) |
- 名前:Tir 日時:2017/03/28 13:27
僕はCreateGraphFromMemを使用していてメモリ削減のためデバイスロストを手動で
復旧していたのでそれが必要なくなるのかなと…
フルスクリーンとウィンドウの切り替えに関してはdxfunc2.htmlに書いてあったSetUseASyncChangeWindowModeFunctionの関数を
使用すればいいと思うのですがいまいち使い方がわかりませんflagをtrueにするだけではダメなんですよね?
|
Re: DirectX11の機能について ( No.3 ) |
- 名前:管理人 日時:2017/03/29 02:16
> 僕はCreateGraphFromMemを使用していてメモリ削減のためデバイスロストを手動で
> 復旧していたのでそれが必要なくなるのかなと…
現在のバージョンではデフォルトの設定では CreateGraphFromMem で作成したグラフィックハンドルも
デバイスロスト時に自動で復旧されるはずですが、手動で復旧しないと画像情報が欠落してしまうのでしょうか?
> フルスクリーンとウィンドウの切り替えに関してはdxfunc2.htmlに書いてあったSetUseASyncChangeWindowModeFunctionの関数を
> 使用すればいいと思うのですがいまいち使い方がわかりませんflagをtrueにするだけではダメなんですよね?
SetUseASyncChangeWindowModeFunction( TRUE, NULL, NULL ) ;
こちら↑を実行するだけで Alt+Enter でフルスクリーンに切り替わるようになりますが、これだけでは
フルスクリーンに切り替わった際に SetGraphMode を実行したときと同じように全てのグラフィックハンドルが
削除されるなどのリセット処理が実行されてしまうので
SetUseASyncChangeWindowModeFunction( TRUE, NULL, NULL ) ;
SetChangeScreenModeGraphicsSystemResetFlag( FALSE ) ;
と、SetChangeScreenModeGraphicsSystemResetFlag( FALSE ) ; も併せて実行しておくと
Alt+Enter でフルスクリーンに切り替えた際も自動的にグラフィックハンドルの内容を
復旧してくれるようになります
よろしければお試しください m(_ _)m
|
Re: DirectX11の機能について ( No.4 ) |
- 名前:Tir 日時:2017/03/29 11:19
以前LoadGraph等の関数とCreateGraphFromMem等の関数ではデバイスロスト復旧にパスだけを保存するか画像データのコピーをとるかで
メモリの使用量が大きく変わると聞いていたのでSetUseGraphBaseDataBackup( FALSE ) ;を呼びコピーを取らずに自分で復旧させていました。
あと文字をMakeScreenで画像に起こした場合でもDirectX11ではデバイスロストしなくなるのかなと…
ということで今回色々試してみたのですがある条件でAlt+TabやAlt+Enterでフルスクリーンの切り替えを行うとエラーが発生するようになりました
SetUseGraphBaseDataBackup(true);にしSetRestoreGraphCallbackを呼ばないでAlt+Enterでフルスクリーンの切り替えを行うとProcessMessage()で
エラーが発生し、Alt+Tabから復帰するとGetHitKeyStateAllでエラーが発生しました。また画像の復帰はできませんが上記の状態でも
SetChangeScreenModeGraphicsSystemResetFlag(true)を呼ぶとエラーが発生しなくなります。
|
Re: DirectX11の機能について ( No.5 ) |
- 名前:Tir 日時:2017/03/29 17:07
#include "DxLib.h"
// ファイルの復元関数
void ReloadFunction(void){
}
char key[255];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
SetGraphMode( 640 , 480 , 32 ) ;
ChangeWindowMode(false);
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
//Alt+Enterフルスクリーン
SetUseASyncChangeWindowModeFunction(TRUE, NULL, NULL);
SetChangeScreenModeGraphicsSystemResetFlag(false);
SetUseGraphBaseDataBackup(true);
// 画像復元関数を登録
//SetRestoreGraphCallback(ReloadFunction);
int img;
//img=LoadGraph("Title.png");//適当な画像
int FileHandle = FileRead_fullyLoad("Title.png");//適当な画像
img = CreateGraphFromMem(FileRead_fullyLoad_getImage(FileHandle), FileRead_fullyLoad_getSize(FileHandle));
// ループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
GetHitKeyStateAll(key);
SetDrawScreen(DX_SCREEN_BACK);
ClearDrawScreen();
DrawGraph(0,0, img,false);
//画面に映す
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
上記のプログラムを組んでみたところ正常に動作したので原因は別にあるかもしれません。もう少し調べてみます。
 |
Re: DirectX11の機能について ( No.6 ) |
- 名前:Tir 日時:2017/03/31 12:49
まだウィンドウ切り替えの問題が解決していませんが別の問題があるので質問します。
DirectX9とDirectX11で表示の仕方が変わってしまう問題があるのですが
DirectX9
ttp://i.imgur.com/PhDroRF.jpg
DirectX11
ttp://i.imgur.com/cADQpim.jpg
DirectX11の方はポリゴンの一部(たぶん黒色)が透明になってしまっているように見えます
また加算合成ポリゴンをフォグで発光させないための通常合成の透明のダミーポリゴンも機能しなくなってしまいました。
DirectX11では何かパラメータを変えたり別の方法を試さないといけないのでしょうか?
|
Re: DirectX11の機能について ( No.7 ) |
- 名前:管理人 日時:2017/04/02 14:34
> 以前LoadGraph等の関数とCreateGraphFromMem等の関数ではデバイスロスト復旧にパスだけを保存するか画像データのコピーをとるかで
> メモリの使用量が大きく変わると聞いていたのでSetUseGraphBaseDataBackup( FALSE ) ;を呼びコピーを取らずに自分で復旧させていました。
> あと文字をMakeScreenで画像に起こした場合でもDirectX11ではデバイスロストしなくなるのかなと…
すみません、DXライブラリではフルスクリーン切り替えが発生すると DirectX9 を使用しているか DirectX11 を
使用しているかに関わらずグラフィック処理関連のリセットを行ってしまっていますので、
MakeScreen で画像に起こした場合は必ず復旧処理が必要になります…
> 上記のプログラムを組んでみたところ正常に動作したので原因は別にあるかもしれません。もう少し調べてみます。
私の環境でも載せていただいたプログラムではエラーは発生しませんでした
もし Tirさんが作成されているプロジェクトでは必ずエラーが発生するということでしたら、不都合が無ければ
そちらのプロジェクトをメールでこちらまで
BQE00322(あっとまーく)nifty.com
( (あっとまーく)を@に置き換えてください )
に送っていただけないでしょうか? m(_ _)m
( 容量制限が10MBなので、それ以上の容量になりますとアップローダにパスワード付きでアップしていただいて
アップ先のURLとパスワードをメールでお伝えいただく、といった方法になってしまいますが… )
手元でエラーを確認することができれば原因もすぐに分かると思いますので…
> DirectX11の方はポリゴンの一部(たぶん黒色)が透明になってしまっているように見えます
DirectX11 では黒色のポリゴンを透明にするといった処理は行っていませんが、
アップしていただいた二つの画像のどのあたりを拝見すれば確認できますでしょうか?
> また加算合成ポリゴンをフォグで発光させないための通常合成の透明のダミーポリゴンも機能しなくなってしまいました。
> DirectX11では何かパラメータを変えたり別の方法を試さないといけないのでしょうか?
アルファ値の低い( 透明度の高い )ピクセルを描画しないという処理( アルファテスト )の関連の挙動が若干 DirectX9 と
異なるのが原因かもしれません
ダミーポリゴンのポリゴン描画の前の箇所に
SetDrawAlphaTest( DX_CMP_ALWAYS, 0 ) ; を、描画後の箇所に SetDrawAlphaTest( -1, 0 ) ;
という記述を追加するとアルファテストが無効化されますので、症状が改善されるかもしれません
よろしければお試しください m(_ _)m
 |
Re: DirectX11の機能について ( No.8 ) |
- 名前:Tir 日時:2017/04/03 01:51
SetDrawAlphaTestを使用しても結果は変わりませんでした
プロジェクトについては準備が出来次第後日アップ致します
黒が透過されるのが分かりやすいのにしました
DX9
ttp://i.imgur.com/bvrr5UU.jpg
DX11
ttp://i.imgur.com/uj0o8F4.jpg
床のタイルの隙間が透けて下に敷いてある緑のテクスチャが見えてしまっています
|
Re: DirectX11の機能について ( No.9 ) |
- 名前:管理人 日時:2017/04/05 23:27
ご返信が遅くなり申し訳ありません
スクリーンショットをアップしていただきありがとうございます
> 床のタイルの隙間が透けて下に敷いてある緑のテクスチャが見えてしまっています
確かに…
可能性は低いかもしれませんが、もしかしたら関数 SetTransColor で指定されている色が
黒( R=0 G=0 B=0 )になっていると本件のような現象が発生するかもしれません…
ともあれ、恐らく直接手元で動かしてみないと原因が分からない可能性が高いので
お手数で申し訳ありませんがプロジェクトのアップをお待ちしております m(_ _;m
|
Re: DirectX11の機能について ( No.10 ) |
- 名前:Tir 日時:2017/04/12 11:09
大変時間がかかって申し訳ありません。今日明日にはアップできるとは思いますが
この度人様に見せるにあたって使いまわしのコピペだらけのスパゲッティコードの大幅な整理を行い
不要な関数やクラスや変数を削除したところエラー落ちすることなくフルスクリーンの切り替えができました
異常に時間がかかってフリーズかと思い実用性はありませんでしたが…
一応そのほかにも問題点はありますのでアップができ次第お知らせいたします
|
Re: DirectX11の機能について ( No.11 ) |
- 名前:Tir 日時:2017/04/13 23:55
遅くなって申し訳ありません
URLを貼ったメールをお送りました。
追記
書き忘れがありました。
シェーダーの件ですがBack.cppのBGBossAura::Draw()で処理を行っています
|
Re: DirectX11の機能について ( No.12 ) |
- 名前:管理人 日時:2017/04/16 19:02
メールありがとうございます、手元でも不具合を確認できました
フルスクリーンの復帰に異様に時間が掛かる問題と、テクスチャの黒が透過される問題を修正した
バージョンをアップしましたので、よろしければお試しください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用
https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用
https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
> 色々プログラムを整理していたらAlt+Enterでフルスクリーンの切り替えのエラーはなくなりましたが
> 尋常じゃなく切り替えに時間がかかるようになります。
すみません、フルスクリーン復帰時の再読み込みの処理にバグがありました m(_ _;m
> 1.テクスチャの黒が透過される。
> 2.フォグを掛けるための透明のダミーテクスチャが無視される。
修正しました
Direct3D 11 を使用した場合、DrawPolygon3D の引数 TransFlag を FALSE にしても透過色の処理が
行われてしまうというバグが原因でした( 送っていただいたプログラムでは SetTransColor を使用されて
いないので、デフォルトの R=0 G=0 B=0 が透過色となっていて、石畳テクスチャの黒い部分が
透過色となっているのですが、DrawPolygon3D の引数 TransFlag を FALSE にされていることで
本来は透過色部分が透過しないはずが、Direct3D 11 を使用した場合はバグで透過されてしまっていました )
> 3.ボスの背景の歪みシェーダーの表示がDirectX9と異なる。
CreateShaderConstantBuffer で作成する定数バッファの使用方法に誤りがあるのが原因です
CreateShaderConstantBuffer で作成する定数バッファは画像やシェーダーなどと同じように描画時に存在している
必要がありますので、SetShaderConstantBuffer の呼び出しに使用された後、DeleteShaderConstantBuffer で
ハンドルを削除してしまうと描画時には使用すべき定数バッファが無い状態でシェーダーが実行されてしまいます
なので、描画時に毎回 CreateShaderConstantBuffer を呼ぶのではなく、LoadPixelShader でシェーダーを
読み込んだ際に一緒に定数バッファも作成して、以降シェーダーを削除するまでずっと同じ定数バッファを
使い続けるようにしてください
BossAura のシェーダーでは定数バッファを3つ使用されていますので、シェーダー読み込み時に
3つの定数バッファを作成して、それをずっと使う感じです
<シェーダー読み込み時>
BossAuraPSCBHandle[ 0 ] = CreateShaderConstantBuffer(sizeof(float) * 4);
BossAuraPSCBHandle[ 1 ] = CreateShaderConstantBuffer(sizeof(float) * 4);
BossAuraPSCBHandle[ 2 ] = CreateShaderConstantBuffer(sizeof(float) * 4);
<描画時>
f4 = (FLOAT4 *)GetBufferShaderConstantBuffer(BossAuraPSCBHandle[ 0 ]);
f4->x = (値);
f4->y = (値);
f4->z = (値);
f4->w = (値);
UpdateShaderConstantBuffer(BossAuraPSCBHandle[ 0 ]);
SetShaderConstantBuffer(BossAuraPSCBHandle[ 0 ], DX_SHADERTYPE_PIXEL, 3);
f4 = (FLOAT4 *)GetBufferShaderConstantBuffer(BossAuraPSCBHandle[ 1 ]);
f4->x = (値);
f4->y = (値);
f4->z = (値);
f4->w = (値);
UpdateShaderConstantBuffer(BossAuraPSCBHandle[ 1 ]);
SetShaderConstantBuffer(BossAuraPSCBHandle[ 1 ], DX_SHADERTYPE_PIXEL, 4);
f4 = (FLOAT4 *)GetBufferShaderConstantBuffer(BossAuraPSCBHandle[ 2 ]);
f4->x = (値);
f4->y = (値);
f4->z = (値);
f4->w = (値);
UpdateShaderConstantBuffer(BossAuraPSCBHandle[ 2 ]);
SetShaderConstantBuffer(BossAuraPSCBHandle[ 2 ], DX_SHADERTYPE_PIXEL, 5);
<シェーダー削除時>
DeleteShaderConstantBuffer(BossAuraPSCBHandle[ 0 ]);
DeleteShaderConstantBuffer(BossAuraPSCBHandle[ 1 ]);
DeleteShaderConstantBuffer(BossAuraPSCBHandle[ 2 ]);
あと、定数バッファ一つのサイズは可変なので、ひとつの定数バッファでfloat4 3個分の
サイズにすることもできます
<シェーダー側の記述>
cbuffer AuraData1 : register( b3 )
{
float4 temp ;
float4 ConstF10 ;
float4 ConstF11 ;
}
<シェーダー読み込み時>
BossAuraPSCBHandle = CreateShaderConstantBuffer(sizeof(float) * 4 * 3);
<描画時>
f4 = (FLOAT4 *)GetBufferShaderConstantBuffer(BossAuraPSCBHandle);
// temp の値セット
f4[ 0 ].x = (値);
f4[ 0 ].y = (値);
f4[ 0 ].z = (値);
f4[ 0 ].w = (値);
// ConstF10 の値セット
f4[ 1 ].x = (値);
f4[ 1 ].y = (値);
f4[ 1 ].z = (値);
f4[ 1 ].w = (値);
// ConstF11 の値セット
f4[ 2 ].x = (値);
f4[ 2 ].y = (値);
f4[ 2 ].z = (値);
f4[ 2 ].w = (値);
UpdateShaderConstantBuffer(BossAuraPSCBHandle);
SetShaderConstantBuffer(BossAuraPSCBHandle, DX_SHADERTYPE_PIXEL, 3);
<シェーダー削除時>
DeleteShaderConstantBuffer(BossAuraPSCBHandle);
> 一応通信機能がついているのですがうまく相手と同期をとることができません。乱数もズレてしまいます。
> 毎フレームUDPでキー入力を送りあうだけなのですがなにが問題か見てもらえないでしょうか?
UDP は TCP と異なり、送信した順番通りに相手に情報が届くとは限りませんので、送信する情報に
送信した順番が判断できる情報を加えて、受信側も加えられた順番の情報を元に処理する必要があります
また、UDP は TCP と異なり送信した情報が相手に届かずにロストしてしまうこともありますので、仮に送信した
情報が相手に届かなくても動作に支障が発生しないような処理にしておく必要があります
また、NetWorkRecvUDP で受信した情報が取得できた場合も引数 Length で指定したサイズを受け取れるているとは
限らないので、最初は引数 Peek を TRUE にした状態で NetWorkRecvUDP を呼び出して、戻り値である受信データのサイズが
求める情報のサイズ以上かどうかを確認して、求める情報のサイズ以上だった場合は今度は引数 Peek を FALSE にして
再度 NetWorkRecvUDP を呼ぶ、といった処理にする必要があります
少しプログラムを拝見した限りでは上記のような問題を考慮されていないと思いますので、それが意図した通りに
動作しない原因だと思います
( 因みに TCP は UDP と異なり
『送信した順番通りに相手は受信できる( TCP の内部処理で、順番がバラバラで届く情報を整頓してくれている )』
『送信した情報がロストしない( TCP の内部処理で、情報がロストした場合は自動的に再送信してくれている )』
『送信したサイズ通りに相手は受信できる( TCP の内部処理で、送信された情報が全部届くまで待っている )』
ようになっています( ただ、その代わり UDP より遅いです ) )
 |
Re: DirectX11の機能について ( No.13 ) |
- 名前:Tir 日時:2017/04/17 00:09
無事長い切り替えとテクスチャーの黒とダミーポリゴンの透過が解決しました。
しかしシェーダーに関してですが記述通りにしたのですが変わらずでした
AuraEffect.fxの記述を
cbuffer AuraData1 : register( b3 )
{
float4 temp ;
float4 ConstF10 ;
float4 ConstF11 ;
}
に変更しLoadPixelShaderを読み込んだ直後ではありませんがBGBossAuraのコンストラクタに
if (Game->DirextXVersion_11) {
// ピクセルシェーダー用の定数バッファを作成
BossAuraPSCBHandle = CreateShaderConstantBuffer(sizeof(float) * 4*3);
}
デストラクタに
if (Game->DirextXVersion_11) {
// ピクセルシェーダー用定数バッファを削除
DeleteShaderConstantBuffer(BossAuraPSCBHandle);
}
を記述しました。このシェーダーはBGBossAuraでしか使用していないのでこれでいいと思うのですが…
通信に関しては一度TCPも試してみようかと思います。(速度は置いといて同期をとれるか確認してみたいので)
|
Re: DirectX11の機能について ( No.14 ) |
- 名前:管理人 日時:2017/04/17 00:30
Tirさんのご返信で言及されていないので確認なのですが、
GetBufferShaderConstantBuffer でアドレスを取得して、float4 3個分の値を更新して
UpdateShaderConstantBuffer を呼び、SetShaderConstantBuffer(BossAuraPSCBHandle, DX_SHADERTYPE_PIXEL, 3);
を実行する処理の部分も更新されましたでしょうか?
|
Re: DirectX11の機能について ( No.15 ) |
- 名前:Tir 日時:2017/04/17 00:37
BGBossAura::Draw()内には上記の描画時の通りに記述してあると思います
// ピクセルシェーダー用の定数バッファのアドレスを取得
f4 = (FLOAT4 *)GetBufferShaderConstantBuffer(BossAuraPSCBHandle);
// 情報を取得したアドレスに書き込み
f4[0].x = setx;
f4[0].y = sety;
f4[0].z = float(0.27 + sin(Time % 180 * R1 * 6)*0.08);
f4[0].w = float(0.05f + 0.02f*sin(Time % 140 * PI / 70)*0.2);
f4[1].x = 1.0f - R / 255;
f4[1].y = 1.0f - G / 255;
f4[1].z = 1.0f - B / 255;
f4[1].w = Size;
f4[2].x = float(20 + 10 * sin(Time % 240 * PI / 120) * 8);
f4[2].y = 0;
f4[2].z = 0;
f4[2].w = 0;
// ピクセルシェーダー用の定数バッファを更新して書き込んだ内容を反映する
UpdateShaderConstantBuffer(BossAuraPSCBHandle);
// ピクセルシェーダー用の定数バッファを定数バッファレジスタ3にセット
SetShaderConstantBuffer(BossAuraPSCBHandle, DX_SHADERTYPE_PIXEL, 3);
SetUsePixelShader(BossAuraPSHandle);
// 使用するテクスチャを0番にセット
SetUseTextureToShader(0, grhandle);
SetDrawMode(DX_DRAWMODE_BILINEAR);
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255);
DrawPolygon2DToShader(Vert, 2);
DeleteGraph(grhandle);
|
Re: DirectX11の機能について ( No.16 ) |
- 名前:管理人 日時:2017/04/17 01:00
ご返答ありがとうございます、承知しました
送っていただいたプログラムを拝見していてひとつ気になる箇所がありました、
Direct3D 9 を使用する場合の定数 temp 用の更新部分は
vec[0].x = setx;
vec[0].y = sety;
vec[0].w = float(0.27 + sin(Time % 180 * R1 * 6)*0.08);//魚眼レンズ
vec[0].z = float(0.05f + 0.02f*sin(Time % 140 * PI / 70)*0.2);//(20+10*sin(Time%240*PI/120)*PI);//(20+10*sin(Time%120*PI/60)*PI);
となっているのですが、Direct3D 11 を使用する場合の定数の temp用の更新部分は
f4->x = setx;
f4->y = sety;
f4->z = float(0.27 + sin(Time % 180 * R1 * 6)*0.08);
f4->w = float(0.05f + 0.02f*sin(Time % 140 * PI / 70)*0.2);
となっていました( z と w が逆です )
こちらが原因ということは無いでしょうか?
|
Re: DirectX11の機能について ( No.17 ) |
- 名前:Tir 日時:2017/04/17 01:24
zとwが逆になっていたので戻して確認したところこのような描画になってしまいました
ttp://i.imgur.com/Ey8JU65.jpg
また、これは僕のシェーダーの定数の渡し方に原因があるんだろうなと思い
正しい定数の渡し方を教われば直ると思って報告ていなかったのですが
一時停止時にDXライブラリのフィルターの方でボカシを入れているのですが
ttp://i.imgur.com/vALCbf0.jpg
これがボスが登場しているとき。恐らくこのシェーダーのせいですが
ttp://i.imgur.com/NgaMt5E.jpg
このように正常に描画されなくなってしまいます。
|
Re: DirectX11の機能について ( No.18 ) |
- 名前:Tir 日時:2017/04/17 11:11
一度管理人さんに送った状態に戻し
そこから再度ご指摘があった数値を修正して作り直したところ正常に描画されるようになりました
(切れ目ができてしまいますがそれも座標の補正をDirectX9は-0.5fDirectX11は-1.fと分けたら直りました)
しかしやはりボス登場時一時停止すると正常に描画されなくなります
|
Re: DirectX11の機能について ( No.19 ) |
- 名前:管理人 日時:2017/04/19 02:57
|
Re: DirectX11の機能について ( No.20 ) |
- 名前:Tir(解決) 日時:2017/04/19 09:37
無事に一時停止も正常に描画されるのを確認しました。
お忙しい中僕の説明不足や些細なミスなどにも毎回丁寧に対応して下さって本当にありがとうございます
正直DirectX9とDirectX11で違いが全くないようなゲームの為に長々とお付き合いしていて頂いて本当に感謝しています。
僕にできることは何もありませんが陰ながら応援しています本当にありがとうございました
|