• R/O
  • SSH
  • HTTPS

dtxmaniaxg-verk: Commit


Commit MetaInfo

Revision573 (tree)
Zeit2019-04-26 00:14:41
Autorkairera0467

Log Message

#35379 テクスチャの致命的な解放漏れを修正
#xxxxx DTXMania rev:693bf14b0d83efc770235c788117190d08a4e531の変更(CTextureの解放漏れログ)を取り込み
#xxxxx アセンブリバージョンの更新

Ändern Zusammenfassung

Diff

--- branches/GITADORA風/DTXManiaプロジェクト/Properties/AssemblyInfo.cs (revision 572)
+++ branches/GITADORA風/DTXManiaプロジェクト/Properties/AssemblyInfo.cs (revision 573)
@@ -11,7 +11,7 @@
1111 [assembly: AssemblyConfiguration("")]
1212 [assembly: AssemblyCompany("")]
1313 [assembly: AssemblyProduct("DTXManiaGR")]
14-[assembly: AssemblyCopyright( "原作:Copyright (C) 2000-2016 DTXMania Group" )]
14+[assembly: AssemblyCopyright( "原作:Copyright (C) 2000-2019 DTXMania Group" )]
1515 [assembly: AssemblyTrademark("")]
1616 [assembly: AssemblyCulture("")]
1717
@@ -33,7 +33,7 @@
3333 // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
3434 // 既定値にすることができます:
3535 // [assembly: AssemblyVersion("1.0.*")]
36-[assembly: AssemblyVersion( "3.6.0.0" )]
36+[assembly: AssemblyVersion( "3.6.2.0" )]
3737 [assembly: AssemblyFileVersion( "0.0.0.0" )]
3838 [assembly: NeutralResourcesLanguageAttribute("ja-JP")]
3939
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/02.タイトル/CStageタイトル.cs (revision 572)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/02.タイトル/CStageタイトル.cs (revision 573)
@@ -184,7 +184,7 @@
184184 if( this.tx背景 != null )
185185 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
186186
187- CDTXMania.act文字コンソール.tPrint( 2, 2, C文字コンソール.Eフォント種別.白, "DTX:J:A:A:2016082000" );
187+ CDTXMania.act文字コンソール.tPrint( 2, 2, C文字コンソール.Eフォント種別.白, "DTX:J:A:A:2019042600" );
188188
189189 if( this.txメニュー != null )
190190 {
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 572)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 573)
@@ -363,6 +363,7 @@
363363 CDTXMania.tテクスチャの解放( ref this.txアーティスト );
364364 CDTXMania.tテクスチャの解放( ref this.tx難易度パネル );
365365 CDTXMania.tテクスチャの解放( ref this.txパートパネル );
366+ CDTXMania.tテクスチャの解放( ref this.txLevel );
366367 base.OnManagedリソースの解放();
367368 }
368369 }
@@ -428,17 +429,21 @@
428429 string path = cdtx.strフォルダ名 + cdtx.PREIMAGE;
429430 try
430431 {
431- if( !File.Exists( path ) )
432+ if( this.txジャケット == null ) // 2019.04.26 kairera0467
432433 {
433- this.txジャケット = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_preimage default.png" ) );
434+ if( !File.Exists( path ) )
435+ {
436+ this.txジャケット = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_preimage default.png" ) );
437+ }
438+ else
439+ {
440+ this.txジャケット = CDTXMania.tテクスチャの生成( path );
441+ }
434442 }
435- else
436- {
437- this.txジャケット = CDTXMania.tテクスチャの生成( path );
438- }
439443 }
440444 catch( Exception ex )
441445 {
446+ Trace.TraceError( ex.StackTrace );
442447 }
443448
444449
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CAct演奏DrumsチップファイアD.cs (revision 572)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CAct演奏DrumsチップファイアD.cs (revision 573)
@@ -514,7 +514,7 @@
514514 {
515515 if( !base.b活性化してない )
516516 {
517- for (int tx1 = 0; tx1 < 9; tx1++)
517+ for (int tx1 = 0; tx1 < 10; tx1++)
518518 {
519519 CDTXMania.tテクスチャの解放(ref this.tx火花[tx1]);
520520 CDTXMania.tテクスチャの解放(ref this.tx青い星[tx1]);
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/CActFIFOBlackStart.cs (revision 572)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/CActFIFOBlackStart.cs (revision 573)
@@ -58,15 +58,19 @@
5858 this.tx黒幕.n透明度 = (this.mode == EFIFOモード.フェードイン) ? (((100 - this.counter.n現在の値) * 0xff) / 100) : ((this.counter.n現在の値 * 0xff) / 100);
5959 this.tx黒幕.t2D描画(CDTXMania.app.Device, 0, 0);
6060 string path = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.PREIMAGE;
61- if (!File.Exists(path))
61+ if( this.txジャケット == null ) // 2019.04.26 kairera0467
6262 {
63- //Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });
64- this.txジャケット = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\\5_preimage default.png"));
63+ if (!File.Exists(path))
64+ {
65+ //Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });
66+ this.txジャケット = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\\5_preimage default.png"));
67+ }
68+ else
69+ {
70+ this.txジャケット = CDTXMania.tテクスチャの生成(path);
71+ }
6572 }
66- else
67- {
68- this.txジャケット = CDTXMania.tテクスチャの生成(path);
69- }
73+
7074 if( this.txジャケット != null )
7175 {
7276 this.txジャケット.vc拡大縮小倍率.X = 0.96f;
--- branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 572)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 573)
@@ -23,7 +23,7 @@
2323 {
2424 // プロパティ
2525
26- public static readonly string VERSION = "Ver3.61GD(160820)";
26+ public static readonly string VERSION = "Ver3.62GD(190426)";
2727 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";
2828 public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010
2929 //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010
@@ -1458,7 +1458,7 @@
14581458 }
14591459 try
14601460 {
1461- Trace.WriteLine("CTextureをFileから生成 + Filename:" + fileName);
1461+ //Trace.WriteLine("CTextureをFileから生成 + Filename:" + fileName);
14621462 return new CTexture( app.Device, fileName, TextureFormat, b黒を透過する );
14631463 }
14641464 catch ( CTextureCreateFailedException )
@@ -1475,7 +1475,7 @@
14751475 public static void tテクスチャの解放( ref CTexture tx )
14761476 {
14771477 if (tx != null) {
1478- Trace.WriteLine( "CTextureを解放 Size W:" + tx.sz画像サイズ.Width + " H:" + tx.sz画像サイズ.Height );
1478+ //Trace.WriteLine( "CTextureを解放 Size W:" + tx.sz画像サイズ.Width + " H:" + tx.sz画像サイズ.Height );
14791479 CDTXMania.t安全にDisposeする( ref tx );
14801480 }
14811481 }
@@ -1516,7 +1516,7 @@
15161516 }
15171517 try
15181518 {
1519- Trace.WriteLine( "CTextureをBitmapから生成" );
1519+ //Trace.WriteLine( "CTextureをBitmapから生成" );
15201520 return new CTexture( app.Device, bitmap, TextureFormat, b黒を透過する );
15211521 }
15221522 catch ( CTextureCreateFailedException )
--- branches/GITADORA風/FDK17プロジェクト/コード/04.グラフィック/CTexture.cs (revision 572)
+++ branches/GITADORA風/FDK17プロジェクト/コード/04.グラフィック/CTexture.cs (revision 573)
@@ -66,6 +66,7 @@
6666 protected set;
6767 }
6868 public Vector3 vc拡大縮小倍率;
69+ public string filename;
6970
7071 // 画面が変わるたび以下のプロパティを設定し治すこと。
7172
@@ -86,10 +87,12 @@
8687 this.szテクスチャサイズ = new Size( 0, 0 );
8788 this._透明度 = 0xff;
8889 this.texture = null;
90+ this.bSlimDXTextureDispose完了済み = true;
8991 this.cvPositionColoredVertexies = null;
9092 this.b加算合成 = false;
9193 this.fZ軸中心回転 = 0f;
9294 this.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
95+ this.filename = ""; // DTXMania rev:693bf14b0d83efc770235c788117190d08a4e531
9396 // this._txData = null;
9497 }
9598
@@ -120,6 +123,7 @@
120123 stream.Seek( 0L, SeekOrigin.Begin );
121124 int colorKey = unchecked( (int) 0xFF000000 );
122125 this.texture = Texture.FromStream( device, stream, this.szテクスチャサイズ.Width, this.szテクスチャサイズ.Height, 1, Usage.None, format, poolvar, Filter.Point, Filter.None, colorKey );
126+ this.bSlimDXTextureDispose完了済み = false;
123127 }
124128 }
125129 catch ( Exception e )
@@ -213,6 +217,7 @@
213217 #endif
214218 // 中で更にメモリ読み込みし直していて無駄なので、Streamを使うのは止めたいところ
215219 this.texture = Texture.FromStream( device, stream, n幅, n高さ, 1, usage, format, pool, Filter.Point, Filter.None, 0 );
220+ this.bSlimDXTextureDispose完了済み = false;
216221 }
217222 }
218223 }
@@ -247,6 +252,7 @@
247252 throw new FileNotFoundException( string.Format( "ファイルが存在しません。\n[{0}]", strファイル名 ) );
248253
249254 Byte[] _txData = File.ReadAllBytes( strファイル名 );
255+ this.filename = Path.GetFileName( strファイル名 );
250256 MakeTexture( device, _txData, format, b黒を透過する, pool );
251257 }
252258
@@ -272,6 +278,7 @@
272278 // {
273279 //Trace.TraceInformation( "CTexture() start: " );
274280 this.texture = Texture.FromMemory( device, txData, this.sz画像サイズ.Width, this.sz画像サイズ.Height, 1, Usage.None, format, pool, Filter.Point, Filter.None, colorKey );
281+ this.bSlimDXTextureDispose完了済み = false;
275282 //Trace.TraceInformation( "CTexture() end: " );
276283 // }
277284 }
@@ -337,6 +344,7 @@
337344 #endif
338345 texture.UnlockRectangle( 0 );
339346 bitmap.UnlockBits( srcBufData );
347+ this.bSlimDXTextureDispose完了済み = false;
340348 }
341349 //Trace.TraceInformation( "CTExture() End: " );
342350 }
@@ -738,17 +746,40 @@
738746 //-----------------
739747 public void Dispose()
740748 {
741- if( !this.bDispose完了済み )
749+ this.Dispose(true);
750+ GC.SuppressFinalize(this);
751+ }
752+ protected void Dispose(bool disposeManagedObjects)
753+ {
754+ if (this.bDispose完了済み)
755+ return;
756+
757+ if (disposeManagedObjects)
742758 {
743- // テクスチャの破棄
744- if( this.texture != null )
759+ // (A) Managed リソースの解放
760+ // テクスチャの破棄 (SharpDXのテクスチャは、SharpDX側で管理されるため、FDKからはmanagedリソースと見做す)
761+ if (this.texture != null)
745762 {
746763 this.texture.Dispose();
747764 this.texture = null;
765+ this.bSlimDXTextureDispose完了済み = true;
748766 }
767+ }
749768
750- this.bDispose完了済み = true;
769+ // (B) Unamanaged リソースの解放
770+
771+
772+ this.bDispose完了済み = true;
773+ }
774+ ~CTexture()
775+ {
776+ // ファイナライザの動作時にtextureのDisposeがされていない場合は、
777+ // CTextureのDispose漏れと見做して警告をログ出力する
778+ if (!this.bSlimDXTextureDispose完了済み)
779+ {
780+ Trace.TraceWarning("CTexture: Dispose漏れを検出しました。(Size=({0}, {1}), filename={2})", sz画像サイズ.Width, sz画像サイズ.Height, filename );
751781 }
782+ this.Dispose(false);
752783 }
753784 //-----------------
754785 #endregion
@@ -759,7 +790,7 @@
759790 #region [ private ]
760791 //-----------------
761792 private int _透明度;
762- private bool bDispose完了済み;
793+ private bool bDispose完了済み, bSlimDXTextureDispose完了済み;
763794 private PositionColoredTexturedVertex[] cvPositionColoredVertexies;
764795 protected TransformedColoredTexturedVertex[] cvTransformedColoredVertexies = new TransformedColoredTexturedVertex[]
765796 {
Show on old repository browser