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
|
Re: 画像のロードで-1が帰る前にフリーズしてしまう ( No.10 ) |
- 名前:たろう(解決) 日時:2017/11/29 00:09
いつもありがとうございます、たろうです。
修正版を先程確認して、フリーズ(っぽい固まり)も
動作の停止もなくなりました。
お忙しい中かお手数をおかけいたしました
ありがとうございましたm(_ _)m
|
|