トップページ > 記事閲覧
画像のロードで-1が帰る前にフリーズしてしまう
名前:たろう 日時: 2017/11/21 00:51

前回は失礼いたしました。 またまたすみません、たろうです。 ユーザー側が入れた画像を読み込む仕組みのあるソフトを作っているのですが 色々問題がありテストのために以下を書きました。 ※画像は(→ttp://fast-uploader.com/file/7066748425037/)を使いました。 ------------------------------------------------------------ #include "DxLib.h" int gHd=-1,sim=-1,w=0 ,h=0,alph=0,type=0,size=0; void loadimg(int size) { if (size==0){gHd = LoadGraph( _T("4100x4100.png") ); } else if(size==1){gHd = LoadGraph( _T("16896x960.png") ); } else if(size==2){gHd = LoadGraph( _T("16896x16896.png") ); } } void softimg(int size) { SetUsePremulAlphaConvertLoad(FALSE); if (size==0){sim = LoadSoftImage( _T("4100x4100.png")); } else if(size==1){sim = LoadSoftImage( _T("16896x960.png")); } else if(size==2){gHd = LoadGraph( _T("16896x16896.png") ); } gHd=CreateGraphFromSoftImage( sim ) ; DeleteSoftImage( sim ) ; if(alph){GraphFilter( gHd, DX_GRAPH_FILTER_PREMUL_ALPHA) ;SetUsePremulAlphaConvertLoad(TRUE);} } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { alph=0; //0:乗算済み不使用 1:乗算済み使用 type=0; //0:そのまま読む 1:一旦ソフトイメージにしてから読む size=2; //0:4100x4100pxの画像 1:16896x960pxピクセルの画像 if(alph)SetUsePremulAlphaConvertLoad(TRUE); SetGraphMode(700,700,16);ChangeWindowMode(TRUE);if(DxLib_Init()==-1){return -1;}ClearDrawScreen(); //GetImageSize_File( _T("4100x4100.png"),&w,&h ) ; if(type==0){loadimg(size);}else{softimg(size);} DrawGraph( 0, 0, gHd, FALSE ) ; ScreenFlip();WaitKey();DxLib_End();return 0; } ------------------------------------------------------------ 上記を最大テクスチャサイズが16384x16384のPCにおいて以下のように変数の数値を変えてテストしました ※ファイル名は画像のピクセル数になっています 1・alph(0) type(0)size(1)問題なし 2・alph(1) type(0)size(1)問題なし 3・alph(0) type(1)size(1)問題なし 4・alph(1) type(1)size(0)問題なし 5・alph(0) type(0)size(2)フリーズ(※動作を停止しました) 6・alph(1) type(1)size(1)フリーズ(※パソコンが完全にフリーズ) 7・alph(1) type(0)size(0)でGetImageSize_Fileのコメントを外すとフリーズ(※動作を停止しました) というわけで、 5は、画像が横縦ともデカすぎるとフリーズ 6は、GraphFilter( gHd, DX_GRAPH_FILTER_PREMUL_ALPHA) ;を消すと問題ないのでそのあたりの問題? 7はSetUsePremulAlphaConvertLoadとGetImageSize_Fileがそろうとフリーズするようです(※おまけ) という感じです。画像は使う側で何が来るかわからないので、非対応であればスキップするようにしたいのですが 読み込みで-1が帰るのではなくパソコンがフリーズしてしまうので困っています。 そもそもどういう条件で読み込みが出来ないのかがわからず、実は上記はもっと大きなプログラムから抜き出したもので チェックするたびにパソコンが固まるので確認も至難の業なのですが そちらでは6000x6000でもフリーズしていることもあり、最大テクスチャサイズが関係あるのかどうかもわかりません。 お忙しいところすみません、よろしければアドバイスを下さいm(_ _)m
メンテ

Page: 1 |

Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.1 )
名前:たろう 日時:2017/11/21 01:11

たろうです。上記の5で強制終了した時のLogを念のため貼ります。 よろしくお願いいたしますm(_ _)m 0:ChangeWindowMode実行 0:ウインドウモードフラグが立てられました 5:DXライブラリの初期化処理開始 12: システムの情報を出力します 12: DXライブラリ Ver3.18 13: 論理プロセッサの数 : 8 14: OS Windows10 ( Build 15063 ) 114: 現時点のCPU動作速度:大体3.54GHz 114: MMX命令を使用します 114: SSE命令が使用可能です 115: SSE2命令が使用可能です 115: CPUベンダ:GenuineIntel 117: CPU名:Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 117: COMの初期化... 成功 120: 非同期読み込み処理の初期化...成功 121: ファイルアクセス処理の初期化...成功 122: メモリ総量:8129.71MB 空きメモリ領域:4559.71MB 122: タイマーの精度を検査します 122: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 123: パフォーマンスカウンターを使用します タイマー精度 : 3507.499000 KHz 124: ソフトの二重起動検査... 二重起動はされていませんでした 125: ウインドウクラスを登録します... 登録に成功しました 126: ウインドウモード起動用のウインドウを作成します 126: ディスプレイ情報のセットアップ開始 126: モニターの数:2 ディスプレイデバイスの数:3 126: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 127: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 143: ディスプレイ情報のセットアップ完了 145: ウインドウの作成に成功しました 145: ウインドウを表示します 158: IMEを無効にしました 159: ウインドウスタイルをウインドウモード用に変更します... 完了 178: DirectInput関係初期化処理 178: XInput DLL の読み込み中... 成功 180: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 190: 引き続き初期化処理... 初期化成功 201: ジョイパッドの初期化... 208: 入力装置を見つけました 209: Device Instance Name : JC-U3613M - DirectInput Mode 209: Device Product Name : JC-U3613M - DirectInput Mode 210: 周期的エフェクトの作成に失敗しました。 213: ジョイパッドの追加は正常に終了しました 226: ジョイパッドの初期化は正常に終了しました 226: マウスデバイスの初期化... 初期化成功 227: キーボードデバイスの初期化... 初期化成功 228: DirectInput 関連の初期化は正常に終了しました 232: DirectSound の初期化を行います 232: DirectSound インターフェースの取得を行います.... 成功 235: 引き続きインターフェースの初期化処理... 成功 265: DirectSound デバイスを列挙します 266: Module Name : Description : プライマリ サウンド ドライバー 266: Module Name : {0.0.0.00000000}.{8f0696a6-b9a5-4166-b711-55c429b1f04d} Description : スピーカー (Realtek High Definition Audio) 267: Module Name : {0.0.0.00000000}.{9d2e19e3-b636-49e9-9ec0-bfbbcff2bb65} Description : Realtek Digital Output (Realtek High Definition Audio) 267: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 268: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 269: 利用可能サンプリング精度 269: Primary 16bit = OK 8bit = OK 270: Secondary 16bit = OK 8bit = OK 270: 利用可能チャンネル 271: Primary MONO = OK STEREO = OK 271: Secondary MONO = OK STEREO = OK 272: DirectSound の初期化は正常に終了しました 272: BEEP音用のサウンドバッファの作成に失敗しました 273: d3d11.dll の読み込み.... 成功 275: dxgi.dll の読み込み.... 成功 276: API CreateDXGIFactory1 のアドレスを取得します.... 成功 277: IDXGIFactory1 を作成します.... 成功 279: API D3D11CreateDevice のアドレスを取得します.... 成功 280: IDXGIAdapter を取得します.... 成功 281: Direct3D 11 FeatureLevel 11_0 以上を対象とします 281: ID3D11Device オブジェクトを取得します.... 成功 321: IDXGIDevice1 を取得します.... 成功 322: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 323: [ウインドウモード 700x700] 323: IDXGISwapChain を作成します.... 成功 370: IDXGIFactory->CreateSwapChain の戻り値:0x00000000 372: IDXGIOutput を取得します.... 成功 376: Graphics Device:NVIDIA GeForce GTX 750 378: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 381: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 383: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 384: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 386: カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 389: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 391: DXT2テクスチャフォーマットは使えません 393: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 395: DXT4テクスチャフォーマットは使えません 397: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 399: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 401: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 403: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 405: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 407: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 409: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 411: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 413: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 415: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 417: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 419: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 421: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 423: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 425: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 427: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 429: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 431: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 433: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 435: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 437: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 439: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 441: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 443: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 446: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 448: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 450: 使用する機能レベル:D3D_FEATURE_LEVEL_11_0 452: 同時にレンダリングできるバッファの数:8 454: 最大テクスチャサイズ 幅:16384 高さ:16384 456: 標準描画用の頂点バッファの作成.... 成功 460: 深度バッファを作成します.... 成功 468: シェーダーコード関係の初期化.... 成功 481: 各種シェーダー用定数バッファの作成.... 成功 485: 各種 ID3D11InputLayout の作成.... 成功 530: 画像の単純転送処理の初期化... 成功 536: フォントの初期化を行います 544: フォントの初期化は正常に終了しました 547: 文字コードバッファの初期化を行います... 完了しました 553:DXライブラリの初期化処理終了 5462:ヒープ用メモリの確保に失敗しました 5464:ヒープ用メモリの確保に失敗しました 5467:ヒープ用メモリの確保に失敗しました 5468:ヒープ用メモリの確保に失敗しました 5470:ヒープ用メモリの確保に失敗しました 5473:ヒープ用メモリの確保に失敗しました 5475: 5477:Alloc memory dump 5479: size: 32880( 32.109kb) user size: 32768( 32.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:1 addr:09ee00b0 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5481: size: 1136( 1.109kb) user size: 1024( 1.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:3 addr:09ee8120 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5483: size: 32880( 32.109kb) user size: 32768( 32.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:5 addr:09ee8590 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5485: size: 512( 0.500kb) user size: 400( 0.391kb) time:09686 file:Main\DxHandle.cpp line:86 ID:7 addr:09ef0600 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5487: size: 16496( 16.109kb) user size: 16384( 16.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:9 addr:09ef0800 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5490: size: 32880( 32.109kb) user size: 32768( 32.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:11 addr:09ef4870 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5492: size: 65648( 64.109kb) user size: 65536( 64.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:13 addr:09efc8e0 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5494: size: 65648( 64.109kb) user size: 65536( 64.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:15 addr:09f0c950 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5496: size: 32880( 32.109kb) user size: 32768( 32.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:17 addr:09f1c9c0 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5498: size: 912( 0.891kb) user size: 792( 0.773kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:19 addr:09f24a30 data:[00 03 00 00 b0 78 f2 00 48 4a f2 09 01 00 00 00] 5500: size: 400( 0.391kb) user size: 280( 0.273kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:21 addr:09f24dc0 data:[00 01 00 00 f0 7a f2 00 d8 4d f2 09 01 00 00 00] 5502: size: 432( 0.422kb) user size: 312( 0.305kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:23 addr:09f24f50 data:[20 01 00 00 30 7f f2 00 68 4f f2 09 01 00 00 00] 5505: size: 2736( 2.672kb) user size: 2616( 2.555kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:25 addr:09f25100 data:[20 0a 00 00 30 7d f2 00 18 51 f2 09 00 00 00 00] 5507: size: 192( 0.187kb) user size: 72( 0.070kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:27 addr:09f25bb0 data:[30 00 00 00 b0 85 f2 00 c8 5b f2 09 00 00 00 00] 5509: size: 240( 0.234kb) user size: 120( 0.117kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:29 addr:09f25c70 data:[60 00 00 00 30 ec d0 0f 88 5c f2 09 00 00 00 00] 5511: size: 400( 0.391kb) user size: 280( 0.273kb) time:09686 file:GraphicsD3D11.cpp line:9707 ID:31 addr:09f25d60 data:[00 01 00 00 f0 f6 d0 0f 78 5d f2 09 00 00 00 00] 5513: size: 256( 0.250kb) user size: 136( 0.133kb) time:09686 file:in\DxGraphics.cpp line:30679 ID:33 addr:09f25ef0 data:[00 00 00 00 00 00 00 2c 03 00 00 00 00 00 80 3f] 5515: size: 272( 0.266kb) user size: 160( 0.156kb) time:09686 file:Main\DxHandle.cpp line:86 ID:35 addr:09f25ff0 data:[f0 c9 2a 04 00 00 00 00 00 00 00 00 00 00 00 00] 5518: size: 17584( 17.172kb) user size: 17460( 17.051kb) time:09686 file:ows\DxFontWin.cpp line:342 ID:37 addr:09f26100 data:[34 44 00 00 00 00 00 00 90 3d 00 00 09 11 00 00] 5520: size: 736( 0.719kb) user size: 620( 0.605kb) time:09686 file:Main\DxHandle.cpp line:196 ID:39 addr:09f2a5b0 data:[01 00 00 00 00 00 01 04 6c 02 00 00 00 00 00 00] 5522: size: 240( 0.234kb) user size: 120( 0.117kb) time:09686 file:in\DxGraphics.cpp line:24143 ID:41 addr:09f2a890 data:[01 00 00 00 0a 00 00 00 01 00 00 00 00 00 01 00] 5524: size: 2048( 2.000kb) user size: 1936( 1.891kb) time:09686 file:y\Main\DxFont.cpp line:5332 ID:43 addr:09f2a980 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5526: size: 2160( 2.109kb) user size: 2048( 2.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:45 addr:09f2b180 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5528: size: 736( 0.719kb) user size: 620( 0.605kb) time:09686 file:Main\DxHandle.cpp line:196 ID:47 addr:09f2b9f0 data:[02 00 00 00 01 00 02 04 6c 02 00 00 00 00 00 00] 5531: size: 192( 0.187kb) user size: 80( 0.078kb) time:09686 file:in\DxArchive_.cpp line:4210 ID:49 addr:09f2bcd0 data:[00 00 00 00 90 bd f2 09 00 00 00 00 00 00 00 00] 5533: size: 3328( 3.250kb) user size: 3208( 3.133kb) time:09686 file:y\Main\DxFile.cpp line:6489 ID:59 addr:09f2bd90 data:[00 00 00 00 00 00 00 00 2c 14 1f 01 00 00 00 00] 5535: size: 131184( 128.109kb) user size: 131072( 128.000kb) time:00000 file:Main\DxHandle.cpp line:86 ID:1 addr:041200b0 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5537: size: 131184( 128.109kb) user size: 131072( 128.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:3 addr:04140120 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5540: size: 131184( 128.109kb) user size: 131072( 128.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:5 addr:04160190 data:[b0 a5 f2 09 f0 b9 f2 09 00 00 00 00 00 00 00 00] 5542: size: 563344( 550.141kb) user size: 563228( 550.027kb) time:09686 file:GraphicsD3D11.cpp line:1468 ID:7 addr:04180200 data:[44 06 94 06 c0 06 80 07 7c 09 60 0a b8 0a 6c 04] 5545: size: 469888( 458.875kb) user size: 469768( 458.758kb) time:09686 file:GraphicsD3D11.cpp line:1512 ID:9 addr:04209a90 data:[08 03 dc 03 14 03 f4 03 14 03 04 04 08 03 dc 03] 5547: size: 197600( 192.969kb) user size: 197480( 192.852kb) time:09686 file:GraphicsD3D11.cpp line:1536 ID:11 addr:0427c610 data:[11 f2 26 55 55 29 55 aa 65 d5 7c 66 55 aa 20 55] 5549: size: 603328( 589.187kb) user size: 603208( 589.070kb) time:09686 file:Main\DxHandle.cpp line:196 ID:15 addr:042ac9f0 data:[01 00 00 00 00 00 01 20 48 34 09 00 3c 56 ed 01] 5552: size: 1048688( 1024.109kb) user size: 1048576( 1024.000kb) time:09686 file:y\Main\DxFont.cpp line:5233 ID:17 addr:0433feb0 data:[ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f] 5554: size: 131184( 128.109kb) user size: 131072( 128.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:19 addr:0443ff20 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5556: size: 131184( 128.109kb) user size: 131072( 128.000kb) time:09686 file:Main\DxHandle.cpp line:86 ID:21 addr:0445ff90 data:[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] 5558: size: 67696( 66.109kb) user size: 67584( 66.000kb) time:09686 file:ain\DxUseCLib.cpp line:496 ID:23 addr:04480000 data:[40 c0 2d 10 40 86 2e 10 40 4c 2f 10 40 12 30 10] 5560: Total size:3916016(3824.234kb) Alloc num:37 5562:
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.2 )
名前:管理人 日時:2017/11/23 02:26

> 5・alph(0) type(0)size(2)フリーズ(※動作を停止しました) ログを貼り付けていただきありがとうございます ログを拝見する限りでは、空きメモリが足りない為にエラーになっています 32bitアプリの場合は1アプリが使用できるメモリが2GBに制限されるのですが、 16896x16896 の画像は 32bitカラーの場合単純計算で 1.06GB 使用されます ( 16896 * 16896 * 4 = 1141899264 Byte 1141899264 Byte / 1024 = 1115136 KByte 1115136 KByte / 1024 = 1089 MByte 1089 MByte / 1024 = 1.0634765625... GByte ) そして png画像の読み込み処理には外部ライブラリの libpng を使用しているのですが、 libpng を使用してデコードした画像データを一時的に格納する『libpng に都合の良い形のバッファ』と、 『DXライブラリに都合が良い形のバッファ』の二つを使用しているので、この時点で 1.06GB * 2 = 2.12GB のメモリを 必要とするので、32bitアプリが使用できる 2GB の限界を超えてしまいエラーになります ただ、それ以外に png画像の読み込み処理でメモリが足りなくなった場合の処理が 書かれていなかったため、メモリが足りなくなるとメモリの不正なアクセスが発生して 強制終了してしまう状態になっていました orz そのバグを修正したバージョンをアップしましたので、お手数で申し訳ありませんが よろしければこちらの修正版をダウンロードしてください 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 // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい ) ただ、前述の通り 32bitアプリの場合はメモリが足りないので、強制終了はしなくなりますが 正常に動作はしません 尚、64bitアプリとしてビルドすると搭載メモリの量だけメモリを使用できるので搭載メモリが十分にあれば動作します ( Visual Studio 2017 をお使いでしたら、Visual Studio のウインドウの上の方にある『x86』と書かれている箇所をクリックして  『x64』に変更してビルドするだけで 64bitアプリとしてビルドできます( ただし、この場合今度は 32bit OS の  環境では動かなくなってしまいますが… ) ) > 6・alph(1) type(1)size(1)フリーズ(※パソコンが完全にフリーズ) こちらは GraphFilter の内部で作成している作業用画像を常に正方形で作成するようにしていたため、 16896x960 の画像を使って GraphFilter を実行すると、内部では 16896x16896 の作業用画像が作成されてしまい、 5と同じくメモリ不足に陥っていました こちらは長方形の作業用画像も作成するように処理を変更したことで正常に動作するようになりました ( 前述の修正版にこの変更も含まれています ) > 7・alph(1) type(0)size(0)でGetImageSize_Fileのコメントを外すとフリーズ(※動作を停止しました) SetUsePremulAlphaConvertLoad(TRUE); を実行した状態で GetImageSize_File を使用すると メモリの不正なアクセスをしてしまうバグがあり、それが原因でした m(_ _;m こちらも今回修正しましたので、前述の修正版では問題なく動作すると思います
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.3 )
名前:たろう 日時:2017/11/23 11:51

たろうです。5,6,7につきまして、修正して頂きありがとうございます 巨大な画像につきましても-1が返って来るので望みどおりの動作になりました もう一つすみません・・・ SetUsePremulAlphaConvertLoad(TRUE);にした上でMakeScreen(16381,8200,TRUE); とするとフリーズしてしまいます。最大テクスチャサイズ以下なので、 そうなると使用するメモリのサイズの問題でしょうか? どの程度大きい画像を作ろうとするとフリーズするのか分からず、if文で回避するのも難しいので よろしければ直していただいた5の画像ロードのように、失敗したら-1が返るような感じに して頂くことは可能でしょうか? パソコンがビビ〜となって止まり結構怖いです。 何度もすみません。よろしくお願いいたしますm(_ _)m
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.4 )
名前:たろう 日時:2017/11/23 12:41

すみません。さらにチェックして、16381x8200.pngの画像で試したところ また異常が発生しました。ただ、今回は 1、フリーズする 2、フリーズせず画像ハンドルが返ってtest01で-1以外が表示されるのに画像が表示されない の二つのケースがありました。確認した回数では1が2回と2が3回ほどで-1が返ったケースはありませんでした。 ※1でフリーズして3分後くらいにxボタンが押せたので終了できた際のlog(※長すぎてここに貼れませんでした)と、 16381x8200.pngの画像は(ttp://fast-uploader.com/file/7066963522264/)に上げました その時のプログラムは以下です ------------------------------------------------------------ #include "DxLib.h" int gHd=-1,sim=-1,w=0 ,h=0,alph=0,type=0,size=0; void test01() { int clr=GetColor(90,90,90),fnt=CreateFontToHandle(_T("Meiryo"),29,7,DX_FONTTYPE_ANTIALIASING_8X8,0 ); DrawFormatStringToHandle( 10, 10 , clr,fnt,_T("w:%d h:%d gHd:%d"),w,h,gHd); } void softimg(int size) { SetUsePremulAlphaConvertLoad(FALSE); if (size==0){sim = LoadSoftImage( _T("4100x4100.png"));} else if(size==1){sim = LoadSoftImage( _T("16381x8200.png"));} else if(size==2){sim = LoadSoftImage( _T("16896x960.png"));} else if(size==3){sim = LoadSoftImage( _T("16896x16896.png"));} gHd=CreateGraphFromSoftImage( sim ) ; DeleteSoftImage( sim ) ; if(alph) { GraphFilter( gHd, DX_GRAPH_FILTER_PREMUL_ALPHA) ;SetUsePremulAlphaConvertLoad(TRUE); GraphFilter( gHd, DX_GRAPH_FILTER_PMA_HSB, 0, 0, 1, 0 ) ;//彩度アップ GraphFilter( gHd, DX_GRAPH_FILTER_PMA_LEVEL, 0, 255, 100, 0, 255 ) ; } } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { alph=1; size=1; if(alph)SetUsePremulAlphaConvertLoad(TRUE); SetGraphMode(700,700,16);ChangeWindowMode(TRUE);if(DxLib_Init()==-1){return -1;}ClearDrawScreen(); if (size==0){GetImageSize_File( _T("4100x4100.png"),&w,&h ) ; } else if(size==1){GetImageSize_File( _T("16381x8200.png"),&w,&h ) ; } else if(size==2){GetImageSize_File( _T("16896x960.png"),&w,&h ) ; } else if(size==3){GetImageSize_File( _T("16896x16896.png"),&w,&h ) ; } //MakeScreen(w,h,TRUE); softimg(size); DrawGraph( 0, 0, gHd, FALSE ) ; test01(); ScreenFlip();WaitKey();DxLib_End();return 0; }
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.5 )
名前:管理人 日時:2017/11/24 00:52

> SetUsePremulAlphaConvertLoad(TRUE);にした上でMakeScreen(16381,8200,TRUE); > とするとフリーズしてしまいます。最大テクスチャサイズ以下なので、 > そうなると使用するメモリのサイズの問題でしょうか? 手元の環境では正常に動作しました… こちらの場合の Log.txt はどのようになっていましたでしょうか? > すみません。さらにチェックして、16381x8200.pngの画像で試したところ > また異常が発生しました。ただ、今回は > 1、フリーズする > 2、フリーズせず画像ハンドルが返ってtest01で-1以外が表示されるのに画像が表示されない > の二つのケースがありました。確認した回数では1が2回と2が3回ほどで-1が返ったケースはありませんでした。 何回実行しても、手元の環境では何回実行しても 2 となりました 2で画像ハンドルの値が有効なのに画像が表示されないのは、alph が 1 の場合に行われる GraphFilter の処理の 最中でエラーが発生してしまい、元の画像の情報が失われてしまっているのが原因です アップしていただいたログを拝見する限りでは、時間は掛かってしまっていますがソフトとしては正常に終了しているようです ただ、メモリ不足エラーは Direct3D の API を呼んだ際に発生しているので、搭載されているグラフィックスデバイスの ドライバによっては動作が不安定になる可能性はあります あと、基本的にPCのソフトはメモリ不足のエラーが発生しないようにするものなので、今回のように 『メモリの確保を試してみて駄目だったらエラーとして扱う』処理は動作が不安定になる原因となります 32bitアプリでは 16384x16384 では理論値でも2枚( 2枚で 2GB なので )、解像度縦横半分の 8192x8192 でも8枚で メモリ不足に陥りますので、32bitアプリとしてリリースされる場合はアプリのプログラムの側で 4096x4096 を超える 面積の画像が指定されたらエラーとして扱い、読み込まないようにした方が良いと思います ( アプリの側で読み込む枚数が2枚程度と制限されている場合は 8192x8192 のサイズまで許容しても良いかもしれません ) 例: 1.ユーザー指定の画像を読み込む前に GetImageSize_File でサイズをチェック 2.サイズが 4096x4096 を超える場合は『4096x4096 を超えるサイズの画像は非対応です』などの表示を出して終了 3.サイズが 4096x4096 以下のサイズの場合は読み込み処理を行う
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.6 )
名前:たろう 日時:2017/11/24 07:24

いつもありがとうございます、たろうです。 ( No.3 )のMakeScreen(16381,8200,TRUE);の件につきましては ( No.4 )の1が原因で発生していた物を勘違いしていたようです ( No.4 )で言うところの2の結果が出てフリーズしなかった状態のプログラムに MakeScreen(16381,8200,TRUE);を加えただけでPCがフリーズしたので それが原因で間違いないと思ってしまったようです。 フリーズを恐れて確認が不十分でした。すみませんm(_ _)m 画像は4096x4096以下という事で問題ないので、それでいこうと思いますm(_ _)m そうなると・・・ 読み込んだ時のエラーで分岐できないとなると、画像サイズだけでなく パソコンの搭載メモリが1ギガ以下など極端に小さい場合にも 「非対応です」とする仕組みが必要だったりするんでしょうか? (自動でハードディスクが使われて問題なかったり?) 甘えついでにすみません。教えていただけると助かります。 よろしくお願いいたしますm(_ _)m 追記 一応64ビットにする方法も試してみようと 、visual studio 2015のソリューションプラットフォームの x86をx64に変えたのですが、 識別子 "_T" が定義されていません 識別子 "TRUE" が定義されていません 識別子 "SetUsePremulAlphaConvertLoad" が定義されていません 識別子 "LoadSoftImage" が定義されていません ・ ・ ・ という感じで、エラーが大量に出ます。 やり方の説明など、どこかありますでしょうか? 教えていただけると助かります 重ね重ねすみませんm(_ _)m
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.7 )
名前:管理人 日時:2017/11/25 23:27

> そうなると・・・ > 読み込んだ時のエラーで分岐できないとなると、画像サイズだけでなく > パソコンの搭載メモリが1ギガ以下など極端に小さい場合にも > 「非対応です」とする仕組みが必要だったりするんでしょうか? > (自動でハードディスクが使われて問題なかったり?) その場合はお察しの通り恐らくディスクスワップなどで2GBまでは仮想的にメモリが確保され、 一応動作するかもしれません ただ、実用的な速度で動作するかどうかは怪しいので GetPcInfo で取得できる搭載メモリ量が 1GBだったりした場合は『動作が重くなる可能性があります』などの表示をした方が良いかもしれません // PCの情報を取得する // OSString : PCのOS名を代入するバッファの先頭アドレス( NULL を指定すると何も代入されません ) // DirectXString : 使用するDirectX名を代入するバッファの先頭アドレス( NULL を指定すると何も代入されません ) // CPUString : PCのCPU名を代入するバッファの先頭アドレス( NULL を指定すると何も代入されません ) // CPUSpeed : CPUスピードを代入する int型変数のアドレス( 単位は MHz )( NULL を指定すると何も代入されません ) // FreeMemorySize : この関数が呼ばれた時点での空きメモリサイズを代入する double型変数のアドレス( 実行中のアプリが使用できるメモリの容量ではなくPC全体での空きメモリの容量 )( 単位は MByte )( NULL を指定すると何も代入されません ) // TotalMemorySize : PCに搭載されている総メモリサイズを代入する double型変数のアドレス( 単位は MByte )( NULL を指定すると何も代入されません ) // VideoDriverFileName : PCに搭載されているグラフィックスデバイスのドライバ名を代入するバッファの先頭アドレス( NULL を指定すると何も代入されません ) // VideoDriverString : PCに搭載されているグラフィックスデバイスの説明を代入するバッファの先頭アドレス( NULL を指定すると何も代入されません ) // FreeVideoMemorySize : この関数が呼ばれた時点での空きVRAMサイズを代入する double型変数のアドレス( 単位は MByte )( NULL を指定すると何も代入されません ) // TotalVideoMemorySize : PCに搭載されている総VRAMサイズを代入する double型変数のアドレス( 単位は MByte )( NULL を指定すると何も代入されません ) int GetPcInfo( char *OSString, char *DirectXString, char *CPUString, int *CPUSpeed, double *FreeMemorySize, double *TotalMemorySize, char *VideoDriverFileName, char *VideoDriverString, double *FreeVideoMemorySize, double *TotalVideoMemorySize ) ; PCの搭載メモリ容量だけを取得する場合はそれ以外を全て NULL にすれば大丈夫です double TotalMemorySize ; GetPcInfo( NULL, NULL, NULL, NULL, NULL, &TotalMemorySize, NULL, NULL, NULL, NULL ) ; if( TotalMemorySize < 1024.0 ) { // 搭載メモリ容量 1GB 以下 } > 一応64ビットにする方法も試してみようと > 、visual studio 2015のソリューションプラットフォームの > x86をx64に変えたのですが、 > という感じで、エラーが大量に出ます。 > やり方の説明など、どこかありますでしょうか? すみません、プロジェクトの設定は各プラットフォーム毎に行えるため こちらの使い方ページの『4.DXライブラリを使用するためのプロジェクト設定を行う』 https://dxlib.xsrv.jp/use/dxuse_vscom2015.html#R4 の手順を x64用にも一通り行う必要があるのでした m(_ _;m プロジェクトのプロパティのダイアログの上部に表示されている『プラットフォーム(P):』の 項目を『x86』から『x64』に変更して、手順の@〜Mを再度行ってください、そうしていただければ ビルドが成功するようになります
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.8 )
名前:たろう 日時:2017/11/26 21:39

ご返信いただきありがとうございます。たろうです GetPcInfoの件、ありがとうございます。使わせていただきます。 64ビットの件ですが手順通りでビルド出来ました。ありがとうございます。 それで早速色々試したのですが、、、 64bitに変えて ( No.4 )のプログラムをalph=1,size=3(画像も同じもの)で実行した所 32bitの時とほぼ同じようなフリーズ状態になり、しばらくして「動作を停止しました」になりました。 最大テクスチャサイズを超えた画像についてはその倍のサイズが内部で作られてしまうため PCの搭載メモリは8ギガでも、空きメモリが4ギガ程度しかなければ、 実質32bitでビルドした時と大差ない結果が出るという感じでしょうか? 知識が足りず、またメモリの計算なども自信がないため。教えていただけると助かります よろしくお願いいたします。m(_ _)m 以下はエラー終了した時のログです --------------------------------------- 0:ChangeWindowMode実行 1:ウインドウモードフラグが立てられました 3:DXライブラリの初期化処理開始 4: システムの情報を出力します 4: DXライブラリ Ver3.19a 5: 論理プロセッサの数 : 8 5: OS Windows10 ( Build 15063 ) 106: 現時点のCPU動作速度:大体3.60GHz 106: MMX命令を使用します 106: SSE命令が使用可能です 107: SSE2命令が使用可能です 108: CPUベンダ:GenuineIntel 109: CPU名:Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 109: COMの初期化... 成功 112: 非同期読み込み処理の初期化...成功 129: ファイルアクセス処理の初期化...成功 130: メモリ総量:8129.71MB 空きメモリ領域:4165.29MB 130: タイマーの精度を検査します 130: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 131: パフォーマンスカウンターを使用します タイマー精度 : 3507.502000 KHz 132: ソフトの二重起動検査... 二重起動はされていませんでした 134: ウインドウクラスを登録します... 登録に成功しました 134: ウインドウモード起動用のウインドウを作成します 135: ディスプレイ情報のセットアップ開始 135: モニターの数:2 ディスプレイデバイスの数:3 136: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 136: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 160: ディスプレイ情報のセットアップ完了 164: ウインドウの作成に成功しました 166: ウインドウを表示します 198: IMEを無効にしました 202: ウインドウスタイルをウインドウモード用に変更します... 完了 224: DirectInput関係初期化処理 225: XInput DLL の読み込み中... 成功 228: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 241: 引き続き初期化処理... 初期化成功 255: ジョイパッドの初期化... 262: 入力装置を見つけました 263: Device Instance Name : JC-U3613M - DirectInput Mode 263: Device Product Name : JC-U3613M - DirectInput Mode 264: 周期的エフェクトの作成に失敗しました。 266: ジョイパッドの追加は正常に終了しました 280: ジョイパッドの初期化は正常に終了しました 281: マウスデバイスの初期化... 初期化成功 282: キーボードデバイスの初期化... 初期化成功 283: DirectInput 関連の初期化は正常に終了しました 286: DirectSound の初期化を行います 286: DirectSound インターフェースの取得を行います.... 成功 288: 引き続きインターフェースの初期化処理... 成功 322: DirectSound デバイスを列挙します 323: Module Name : Description : プライマリ サウンド ドライバー 323: Module Name : {0.0.0.00000000}.{8f0696a6-b9a5-4166-b711-55c429b1f04d} Description : スピーカー (Realtek High Definition Audio) 324: Module Name : {0.0.0.00000000}.{9d2e19e3-b636-49e9-9ec0-bfbbcff2bb65} Description : Realtek Digital Output (Realtek High Definition Audio) 324: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 325: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 325: 利用可能サンプリング精度 327: Primary 16bit = OK 8bit = OK 329: Secondary 16bit = OK 8bit = OK 330: 利用可能チャンネル 332: Primary MONO = OK STEREO = OK 334: Secondary MONO = OK STEREO = OK 336: DirectSound の初期化は正常に終了しました 340: d3d11.dll の読み込み.... 成功 345: dxgi.dll の読み込み.... 成功 349: API CreateDXGIFactory1 のアドレスを取得します.... 成功 352: IDXGIFactory1 を作成します.... 成功 359: API D3D11CreateDevice のアドレスを取得します.... 成功 362: IDXGIAdapter を取得します.... 成功 366: Direct3D 11 FeatureLevel 11_0 以上を対象とします 367: ID3D11Device オブジェクトを取得します.... 成功 433: IDXGIDevice1 を取得します.... 成功 435: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 435: [ウインドウモード 700x700] 435: IDXGISwapChain を作成します.... 成功 476: IDXGIFactory->CreateSwapChain の戻り値:0x00000000 478: IDXGIOutput を取得します.... 成功 482: Graphics Device:NVIDIA GeForce GTX 750 485: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 487: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 488: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 490: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 492: カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 494: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 496: DXT2テクスチャフォーマットは使えません 498: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 500: DXT4テクスチャフォーマットは使えません 502: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 504: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 506: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 508: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 510: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 512: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 514: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 516: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 518: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 520: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 522: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 524: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 526: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 528: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 530: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 532: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 534: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 536: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 538: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 540: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 542: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 545: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 547: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 549: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 551: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 553: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 555: 使用する機能レベル:D3D_FEATURE_LEVEL_11_0 557: 同時にレンダリングできるバッファの数:8 559: 最大テクスチャサイズ 幅:16384 高さ:16384 561: 標準描画用の頂点バッファの作成.... 成功 566: 深度バッファを作成します.... 成功 571: シェーダーコード関係の初期化.... 成功 584: 各種シェーダー用定数バッファの作成.... 成功 589: 各種 ID3D11InputLayout の作成.... 成功 616: 画像の単純転送処理の初期化... 成功 622: フォントの初期化を行います 626: フォントの初期化は正常に終了しました 628: 文字コードバッファの初期化を行います... 完了しました 634:DXライブラリの初期化処理終了 62271:テクスチャ用シェーダーリソースビューの作成に失敗しました Format:28 SizeX:16384 SizeY:16384 63083:作業用描画可能テクスチャの作成に失敗しました Size:32768x32768 63903:テクスチャの作成に失敗しました 64142:作業用描画可能テクスチャの作成に失敗しました Size:32768x32768 64146:テクスチャの作成に失敗しました 64617:作業用描画可能テクスチャの作成に失敗しました Size:32768x32768 68387:テクスチャの作成に失敗しました 68391:テクスチャ文字キャッシュの作成に失敗しました
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.9 )
名前:管理人 日時:2017/11/26 23:47

> 最大テクスチャサイズを超えた画像についてはその倍のサイズが内部で作られてしまうため > PCの搭載メモリは8ギガでも、空きメモリが4ギガ程度しかなければ、 > 実質32bitでビルドした時と大差ない結果が出るという感じでしょうか? 64bit になればシステムメモリについてはディスクスワップなどの OS の機能もあって搭載メモリ容量以上の 仮想のメモリを使用できるので、32bitビルドとは異なり『システムメモリの不足』の現象は 発生し難くなると思います ただ、搭載メモリ容量以上のメモリについては HDD や SSD や USBメモリなどの補助記憶装置を使った 非常に低速な『仮想メモリ』を使用することになるので、たろうさんが『フリーズ』と感じる程の 状態になると思います( というか、実際なっていますよね… ) 『動作を停止しました』となるのは、DXライブラリの ・グラフィックスデバイスが対応していないサイズの『描画対象にできる画像』が作成できてしまう というバグがあり、これが原因でした DXライブラリはグラフィックスデバイスが対応していないサイズの画像が読み込まれた場合は複数のテクスチャを 使用して1枚の画像を表現しようとするのですが( ただし、MakeScreen で作成するような『描画対象にできる画像』は グラフィックスデバイスが対応しているサイズが最大サイズとなります )、GraphFilter はそのような 複数のテクスチャで構成されたグラフィックハンドルには対応していないので そのようなグラフィックハンドルが渡された場合はエラーとして -1 を返すべきなのですが、 -1 を返すのではなくメモリの不正なアクセスをして強制終了しまっていました orz このバグを修正したバージョンをアップしましたのでよろしければお試しください 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/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい ) 実行した際の『フリーズ状態』は解消されないかもしれませんが、『しばらくして「動作を停止しました」』は 発生しなくなると思います
メンテ
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.10 )
名前:たろう(解決) 日時:2017/11/29 00:09

いつもありがとうございます、たろうです。 修正版を先程確認して、フリーズ(っぽい固まり)も 動作の停止もなくなりました。 お忙しい中かお手数をおかけいたしました ありがとうございましたm(_ _)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存