Skip to content

Commit

Permalink
#35379 テクスチャの致命的な解放漏れを修正
Browse files Browse the repository at this point in the history
#xxxxx DTXMania rev:693bf14b0d83efc770235c788117190d08a4e531の変更(CTextureの解放漏れログ)を取り込み
#xxxxx アセンブリバージョンの更新
  • Loading branch information
kairera0467 committed Apr 25, 2019
1 parent 0ed3d0b commit e2114c6
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 26 deletions.
4 changes: 2 additions & 2 deletions DTXManiaプロジェクト/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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("")]

Expand All @@ -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")]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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リソースの解放();
}
}
Expand Down Expand Up @@ -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 );
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions DTXManiaプロジェクト/コード/全体/CDTXMania.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 )
Expand All @@ -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 );
}
}
Expand Down Expand Up @@ -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 )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public Format Format
protected set;
}
public Vector3 vc拡大縮小倍率;
public string filename;

// 画面が変わるたび以下のプロパティを設定し治すこと。

Expand All @@ -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;
}

Expand Down Expand Up @@ -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 )
Expand Down Expand Up @@ -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;
}
}
}
Expand Down Expand Up @@ -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 );
}

Expand All @@ -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: " );
// }
}
Expand Down Expand Up @@ -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: " );
}
Expand Down Expand Up @@ -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
Expand All @@ -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[]
{
Expand Down
Binary file modified 実行時フォルダ(DTXCreator)/FDK.dll
Binary file not shown.
Binary file modified 実行時フォルダ/DTXManiaGR.exe
Binary file not shown.
Binary file modified 実行時フォルダ/FDK.dll
Binary file not shown.

0 comments on commit e2114c6

Please sign in to comment.