diff --git "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/Properties/AssemblyInfo.cs" "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/Properties/AssemblyInfo.cs" index d66f8a19..f97b7323 100644 --- "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/Properties/AssemblyInfo.cs" +++ "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/Properties/AssemblyInfo.cs" @@ -11,7 +11,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("DTXManiaGR")] -[assembly: AssemblyCopyright( "原作:Copyright (C) 2000-2016 DTXMania Group" )] +[assembly: AssemblyCopyright( "原作:Copyright (C) 2000-2019 DTXMania Group" )] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -33,7 +33,7 @@ // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を // 既定値にすることができます: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "3.6.0.0" )] +[assembly: AssemblyVersion( "3.6.2.0" )] [assembly: AssemblyFileVersion( "0.0.0.0" )] [assembly: NeutralResourcesLanguageAttribute("ja-JP")] diff --git "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/02.\343\202\277\343\202\244\343\203\210\343\203\253/CStage\343\202\277\343\202\244\343\203\210\343\203\253.cs" "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/02.\343\202\277\343\202\244\343\203\210\343\203\253/CStage\343\202\277\343\202\244\343\203\210\343\203\253.cs" index 4353bbd9..93f8801d 100644 --- "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/02.\343\202\277\343\202\244\343\203\210\343\203\253/CStage\343\202\277\343\202\244\343\203\210\343\203\253.cs" +++ "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/02.\343\202\277\343\202\244\343\203\210\343\203\253/CStage\343\202\277\343\202\244\343\203\210\343\203\253.cs" @@ -184,7 +184,7 @@ public override int On進行描画() if( this.tx背景 != null ) this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 ); - CDTXMania.act文字コンソール.tPrint( 2, 2, C文字コンソール.Eフォント種別.白, "DTX:J:A:A:2016082000" ); + CDTXMania.act文字コンソール.tPrint( 2, 2, C文字コンソール.Eフォント種別.白, "DTX:J:A:A:2019042600" ); if( this.txメニュー != null ) { diff --git "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/06.\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277/CStage\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277.cs" "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/06.\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277/CStage\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277.cs" index aaf1ccb5..af6d05cf 100644 --- "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/06.\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277/CStage\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277.cs" +++ "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/06.\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277/CStage\346\233\262\350\252\255\343\201\277\350\276\274\343\201\277.cs" @@ -363,6 +363,7 @@ public override void OnManagedリソースの解放() CDTXMania.tテクスチャの解放( ref this.txアーティスト ); CDTXMania.tテクスチャの解放( ref this.tx難易度パネル ); CDTXMania.tテクスチャの解放( ref this.txパートパネル ); + CDTXMania.tテクスチャの解放( ref this.txLevel ); base.OnManagedリソースの解放(); } } @@ -428,17 +429,21 @@ public override int On進行描画() string path = cdtx.strフォルダ名 + cdtx.PREIMAGE; try { - if( !File.Exists( path ) ) + if( this.txジャケット == null ) // 2019.04.26 kairera0467 { - this.txジャケット = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_preimage default.png" ) ); - } - else - { - this.txジャケット = CDTXMania.tテクスチャの生成( path ); + if( !File.Exists( path ) ) + { + this.txジャケット = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_preimage default.png" ) ); + } + else + { + this.txジャケット = CDTXMania.tテクスチャの生成( path ); + } } } catch( Exception ex ) { + Trace.TraceError( ex.StackTrace ); } diff --git "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/07.\346\274\224\345\245\217/\343\203\211\343\203\251\343\203\240\347\224\273\351\235\242/CAct\346\274\224\345\245\217Drums\343\203\201\343\203\203\343\203\227\343\203\225\343\202\241\343\202\244\343\202\242D.cs" "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/07.\346\274\224\345\245\217/\343\203\211\343\203\251\343\203\240\347\224\273\351\235\242/CAct\346\274\224\345\245\217Drums\343\203\201\343\203\203\343\203\227\343\203\225\343\202\241\343\202\244\343\202\242D.cs" index a1725b3b..c3b1e272 100644 --- "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/07.\346\274\224\345\245\217/\343\203\211\343\203\251\343\203\240\347\224\273\351\235\242/CAct\346\274\224\345\245\217Drums\343\203\201\343\203\203\343\203\227\343\203\225\343\202\241\343\202\244\343\202\242D.cs" +++ "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/07.\346\274\224\345\245\217/\343\203\211\343\203\251\343\203\240\347\224\273\351\235\242/CAct\346\274\224\345\245\217Drums\343\203\201\343\203\203\343\203\227\343\203\225\343\202\241\343\202\244\343\202\242D.cs" @@ -514,7 +514,7 @@ public override void OnManagedリソースの解放() { if( !base.b活性化してない ) { - for (int tx1 = 0; tx1 < 9; tx1++) + for (int tx1 = 0; tx1 < 10; tx1++) { CDTXMania.tテクスチャの解放(ref this.tx火花[tx1]); CDTXMania.tテクスチャの解放(ref this.tx青い星[tx1]); diff --git "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/CActFIFOBlackStart.cs" "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/CActFIFOBlackStart.cs" index 3f839fb0..1bd1fa60 100644 --- "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/CActFIFOBlackStart.cs" +++ "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\343\202\271\343\203\206\343\203\274\343\202\270/CActFIFOBlackStart.cs" @@ -58,15 +58,19 @@ public override int On進行描画() this.tx黒幕.n透明度 = (this.mode == EFIFOモード.フェードイン) ? (((100 - this.counter.n現在の値) * 0xff) / 100) : ((this.counter.n現在の値 * 0xff) / 100); this.tx黒幕.t2D描画(CDTXMania.app.Device, 0, 0); string path = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.PREIMAGE; - if (!File.Exists(path)) + if( this.txジャケット == null ) // 2019.04.26 kairera0467 { - //Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path }); - this.txジャケット = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\\5_preimage default.png")); - } - else - { - this.txジャケット = CDTXMania.tテクスチャの生成(path); + if (!File.Exists(path)) + { + //Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path }); + this.txジャケット = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\\5_preimage default.png")); + } + else + { + this.txジャケット = CDTXMania.tテクスチャの生成(path); + } } + if( this.txジャケット != null ) { this.txジャケット.vc拡大縮小倍率.X = 0.96f; diff --git "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\345\205\250\344\275\223/CDTXMania.cs" "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\345\205\250\344\275\223/CDTXMania.cs" index b8c1505e..6e5bd5a1 100644 --- "a/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\345\205\250\344\275\223/CDTXMania.cs" +++ "b/DTXMania\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/\345\205\250\344\275\223/CDTXMania.cs" @@ -23,7 +23,7 @@ internal class CDTXMania : Game { // プロパティ - public static readonly string VERSION = "Ver3.61GD(160820)"; + public static readonly string VERSION = "Ver3.62GD(190426)"; public static readonly string SLIMDXDLL = "c_net20x86_Jun2010"; public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010 //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010 @@ -1458,7 +1458,7 @@ public static CTexture tテクスチャの生成( string fileName, bool b黒を } try { - Trace.WriteLine("CTextureをFileから生成 + Filename:" + fileName); + //Trace.WriteLine("CTextureをFileから生成 + Filename:" + fileName); return new CTexture( app.Device, fileName, TextureFormat, b黒を透過する ); } catch ( CTextureCreateFailedException ) @@ -1475,7 +1475,7 @@ public static CTexture tテクスチャの生成( string fileName, bool b黒を public static void tテクスチャの解放( ref CTexture tx ) { if (tx != null) { - Trace.WriteLine( "CTextureを解放 Size W:" + tx.sz画像サイズ.Width + " H:" + tx.sz画像サイズ.Height ); + //Trace.WriteLine( "CTextureを解放 Size W:" + tx.sz画像サイズ.Width + " H:" + tx.sz画像サイズ.Height ); CDTXMania.t安全にDisposeする( ref tx ); } } @@ -1516,7 +1516,7 @@ public static CTexture tテクスチャの生成( Bitmap bitmap, bool b黒を透 } try { - Trace.WriteLine( "CTextureをBitmapから生成" ); + //Trace.WriteLine( "CTextureをBitmapから生成" ); return new CTexture( app.Device, bitmap, TextureFormat, b黒を透過する ); } catch ( CTextureCreateFailedException ) diff --git "a/FDK17\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/04.\343\202\260\343\203\251\343\203\225\343\202\243\343\203\203\343\202\257/CTexture.cs" "b/FDK17\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/04.\343\202\260\343\203\251\343\203\225\343\202\243\343\203\203\343\202\257/CTexture.cs" index 27609561..d81d2b1b 100644 --- "a/FDK17\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/04.\343\202\260\343\203\251\343\203\225\343\202\243\343\203\203\343\202\257/CTexture.cs" +++ "b/FDK17\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210/\343\202\263\343\203\274\343\203\211/04.\343\202\260\343\203\251\343\203\225\343\202\243\343\203\203\343\202\257/CTexture.cs" @@ -66,6 +66,7 @@ public Format Format protected set; } public Vector3 vc拡大縮小倍率; + public string filename; // 画面が変わるたび以下のプロパティを設定し治すこと。 @@ -86,10 +87,12 @@ public CTexture() this.szテクスチャサイズ = new Size( 0, 0 ); this._透明度 = 0xff; this.texture = null; + this.bSlimDXTextureDispose完了済み = true; this.cvPositionColoredVertexies = null; this.b加算合成 = false; this.fZ軸中心回転 = 0f; this.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f ); + this.filename = ""; // DTXMania rev:693bf14b0d83efc770235c788117190d08a4e531 // this._txData = null; } @@ -120,6 +123,7 @@ public CTexture( Device device, Bitmap bitmap, Format format ) stream.Seek( 0L, SeekOrigin.Begin ); int colorKey = unchecked( (int) 0xFF000000 ); this.texture = Texture.FromStream( device, stream, this.szテクスチャサイズ.Width, this.szテクスチャサイズ.Height, 1, Usage.None, format, poolvar, Filter.Point, Filter.None, colorKey ); + this.bSlimDXTextureDispose完了済み = false; } } catch ( Exception e ) @@ -213,6 +217,7 @@ public CTexture( Device device, int n幅, int n高さ, Format format, Pool pool, #endif // 中で更にメモリ読み込みし直していて無駄なので、Streamを使うのは止めたいところ this.texture = Texture.FromStream( device, stream, n幅, n高さ, 1, usage, format, pool, Filter.Point, Filter.None, 0 ); + this.bSlimDXTextureDispose完了済み = false; } } } @@ -247,6 +252,7 @@ public void MakeTexture( Device device, string strファイル名, Format format throw new FileNotFoundException( string.Format( "ファイルが存在しません。\n[{0}]", strファイル名 ) ); Byte[] _txData = File.ReadAllBytes( strファイル名 ); + this.filename = Path.GetFileName( strファイル名 ); MakeTexture( device, _txData, format, b黒を透過する, pool ); } @@ -272,6 +278,7 @@ public void MakeTexture( Device device, byte[] txData, Format format, bool b黒 // { //Trace.TraceInformation( "CTexture() start: " ); this.texture = Texture.FromMemory( device, txData, this.sz画像サイズ.Width, this.sz画像サイズ.Height, 1, Usage.None, format, pool, Filter.Point, Filter.None, colorKey ); + this.bSlimDXTextureDispose完了済み = false; //Trace.TraceInformation( "CTexture() end: " ); // } } @@ -337,6 +344,7 @@ public void MakeTexture( Device device, Bitmap bitmap, Format format, bool b黒 #endif texture.UnlockRectangle( 0 ); bitmap.UnlockBits( srcBufData ); + this.bSlimDXTextureDispose完了済み = false; } //Trace.TraceInformation( "CTExture() End: " ); } @@ -738,17 +746,40 @@ public void t3D左上基準描画( Device device, Matrix mat, Rectangle rc画像 //----------------- public void Dispose() { - if( !this.bDispose完了済み ) + this.Dispose(true); + GC.SuppressFinalize(this); + } + protected void Dispose(bool disposeManagedObjects) + { + if (this.bDispose完了済み) + return; + + if (disposeManagedObjects) { - // テクスチャの破棄 - if( this.texture != null ) + // (A) Managed リソースの解放 + // テクスチャの破棄 (SharpDXのテクスチャは、SharpDX側で管理されるため、FDKからはmanagedリソースと見做す) + if (this.texture != null) { this.texture.Dispose(); this.texture = null; + this.bSlimDXTextureDispose完了済み = true; } + } - this.bDispose完了済み = true; + // (B) Unamanaged リソースの解放 + + + this.bDispose完了済み = true; + } + ~CTexture() + { + // ファイナライザの動作時にtextureのDisposeがされていない場合は、 + // CTextureのDispose漏れと見做して警告をログ出力する + if (!this.bSlimDXTextureDispose完了済み) + { + Trace.TraceWarning("CTexture: Dispose漏れを検出しました。(Size=({0}, {1}), filename={2})", sz画像サイズ.Width, sz画像サイズ.Height, filename ); } + this.Dispose(false); } //----------------- #endregion @@ -759,7 +790,7 @@ public void Dispose() #region [ private ] //----------------- private int _透明度; - private bool bDispose完了済み; + private bool bDispose完了済み, bSlimDXTextureDispose完了済み; private PositionColoredTexturedVertex[] cvPositionColoredVertexies; protected TransformedColoredTexturedVertex[] cvTransformedColoredVertexies = new TransformedColoredTexturedVertex[] { diff --git "a/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200(DTXCreator)/FDK.dll" "b/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200(DTXCreator)/FDK.dll" index d435f3b3..fdcc6a25 100644 Binary files "a/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200(DTXCreator)/FDK.dll" and "b/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200(DTXCreator)/FDK.dll" differ diff --git "a/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/DTXManiaGR.exe" "b/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/DTXManiaGR.exe" index 1868322b..8186542a 100644 Binary files "a/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/DTXManiaGR.exe" and "b/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/DTXManiaGR.exe" differ diff --git "a/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/FDK.dll" "b/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/FDK.dll" index d435f3b3..fdcc6a25 100644 Binary files "a/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/FDK.dll" and "b/\345\256\237\350\241\214\346\231\202\343\203\225\343\202\251\343\203\253\343\203\200/FDK.dll" differ