Re: SetGraphMode()による設定 ( No.10 ) |
- 名前:Sura 日時:2014/10/20 03:18
Log.txtの一部を貼り付けます。
//------------------------------
1112: プログラマブルシェーダーを使用します
1179: きた5
1182: きた6
1185: きた7
1188: きた8
1191: きた9
1195: フォントの初期化を行います
1200: フォントの初期化は正常に終了しました
1218: 文字コードバッファの初期化を行います... 完了しました
1225: きた5
1229: きた1
1233: きた3
1236: きた5
1239: きた4
1243: きた10
1247: きた11
1251: きた12
1254: きた14
1259: きた16
1262: きた19
1266: きた21
1269: きた23
1273: きた24
1277: きた25
1281: パラメータ StretchType( 2 ) SrcRect( 0, 0, 320, 240 ), DestRect( 0, 0, 1280, 960 )
1285: きた29
1290: きた30
1294: きた31
1297: きた34 0x001108d4 0x001108d4
1301: きた35 エラーコード 0x08760877
1309: きた5
1314: きた1
1318: きた3
1321: きた5
1326: きた4
1331: きた10
1334: きた11
1338: きた12
1342: きた14
1345: きた16
1349: きた19
1352: きた21
1356: きた23
1361: きた24
1365: きた25
1369: パラメータ StretchType( 2 ) SrcRect( 0, 0, 320, 240 ), DestRect( 0, 0, 1280, 960 )
//以下ループする
|
Re: SetGraphMode()による設定 ( No.11 ) |
- 名前:管理人 日時:2014/10/20 11:56
お試し頂きありがとうございます
ログを拝見する限りは・・・Present API から S_PRESENT_MODE_CHANGED( 画面モードが変更されたので
デバイスをリセットしてください )という戻り値が返ってきているようです・・・
画面モード変更直後にそのような戻り値が返ってくるのは変なので、もしかしたら
GeForce GT 240 のドライバの不具合かもしれません
もし最新のドライバをお使いではありませんでしたら、よろしければこちらのnVidiaの
ドライバダウンロードページから最新のドライバをダウンロード+インストールをしてみてください m(_ _)m
http://www.nvidia.co.jp/Download/index.aspx?lang=jp
もしそれでも駄目でしたら、すみません、もう少し情報を集めさせてください
まず S_PRESENT_MODE_CHANGED という戻り値は Direct3D9Ex を使用した場合にのみ
戻ってくる値ということなので、DxLib_Init を実行する前に SetUseDirect3D9Ex( FALSE ) ;
という記述を増やして、Direct3D9Ex ではなく Direct3D9 を使用するようにして実行した
場合にはどのようになるか、よろしければお試しになってみてください m(_ _)m
あと、現在のバージョンでは SetGraphMode( 320, 240 ) ; などのデバイスが対応していない
解像度が指定された場合、デスクトップと同じ解像度のフルスクリーンモードに変更しようとします、
Suraさんの環境ではそれが正常に動作しないのですが、それ以外の解像度( 起動時のデスクトップの
解像度以外の解像度 )では問題なく動作するのかを知りたいので、お手数で申し訳ありませんが、
以下のプログラムの
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int x, add ;
SetGraphMode( 640,480,32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
x = 0 ;
add = 8 ;
while( ProcessMessage() == 0 )
{
// 移動
x += add ;
if( x < 0 || x > 320 ) add = -add ;
// 画面のクリア
ClearDrawScreen() ;
DrawBox( x, 0, x + 32, 32, GetColor( 255,255,0 ), TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
冒頭の SetGraphMode( 640, 480, 32 ) ; の部分を
SetGraphMode( 640, 480, 32 ) ;
SetGraphMode( 800, 600, 32 ) ;
SetGraphMode( 1024, 768, 32 ) ;
SetGraphMode( 1280, 960, 32 ) ;
に書き換えたときに、それぞれ正常な結果( 画面左上に黄色い四角が表示される )が得られるかを教えてください m(_ _;m
 |
Re: SetGraphMode()による設定 ( No.12 ) |
- 名前:Sura 日時:2014/10/20 21:23
残念ながらダメでした。
ドライバのインストール前も後も
"きた35 エラーコード 0x08760877"
でした。
なお、別の解像度の結果ですが
SetGraphMode( 640, 480, 32 ) ; ○
SetGraphMode( 800, 600, 32 ) ; ○
SetGraphMode( 1024, 768, 32 ) ; ○
SetGraphMode( 1280, 960, 32 ) ; ×(エラーコード 0x08760877)
でした。
念のため申し上げておきますが、モニタは 三菱RDF173H です。
何度も申し訳ありませんが、
以上、報告させて頂きます。
|
Re: SetGraphMode()による設定 ( No.13 ) |
- 名前:管理人 日時:2014/10/21 00:52
お試し頂きありがとうございます
ドライバの更新では解決しませんでしたか・・・
ただ、1280x960 以外の解像度( 恐らく起動時のデスクトップの解像度以外? )では正常に動作する
ということで、少し希望が見えてきた気がします
次の手としては画面モード変更直後のエラーが不可思議だとしても真面目にそのエラーに対処する
というものなのですが、その変更には若干手間が掛かるのでテスト版を作成できるのは週末になりそうです・・・すみません
CRTモニタであるということは、もしかしたら私の環境では現象が再現しないことに何か関係している
かもしれませんが、手元にCRTモニタが無いので試せません・・・
ところで根本的な解決にはなりませんが、SetUseDirect3D9Ex( FALSE ) ; を DxLib_Init の
呼び出し前に実行する、という方法の結果はどうだったでしょうか?
|
Re: SetGraphMode()による設定 ( No.14 ) |
- 名前:Sura 日時:2014/10/21 01:12
>作成できるのは週末になりそうです・・・すみません
とんでもない、大変ありがたいです。
>ところで根本的な解決にはなりませんが、SetUseDirect3D9Ex( FALSE ) ; を DxLib_Init の
呼び出し前に実行する、という方法の結果はどうだったでしょうか?
はい、正常に動作します。
ちなみに実行速度が遅いのはデバッグ情報出力の負荷によるものですよね(元のVer3.13では処理が速かったため)?
|
Re: SetGraphMode()による設定 ( No.15 ) |
- 名前:管理人 日時:2014/10/21 01:27
ご返答ありがとうございます
おお、Direct3D9 の場合は問題なく動作するのですね・・・
> ちなみに実行速度が遅いのはデバッグ情報出力の負荷によるものですよね(元のVer3.13では処理が速かったため)?
はい、ログ出力はその都度 Log.txtファイルを「オープン」→「書き込み」→「クローズ」をしているので、
かなり重いです( オープンしっぱなしでクローズする前にソフトがエラー終了すると Log.txtファイルが
消えてしまうので、都度クローズする必要があります・・・ )
あと、本当に何度も申し訳ないのですが、画面モード変更直後の何も処理をしていない時点でも
Present でエラーが発生するのかを確認したいので、よろしければこちらの画面モード変更直後の
裏画面の初期化で行っている Present でのエラーログ出力を追加したバージョンを実行してみて
いただけないでしょうか? m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
もしエラーが発生する場合は、
1070:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
1860:きた38 エラーコード 0x08760877
1880:きた39 エラーコード 0x08760877
1910:きた40 エラーコード 0x08760877
1933:成功
このような出力がされると思います
エラーが発生しなかった場合は
1070:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
1933:成功
このようになります
 |
Re: SetGraphMode()による設定 ( No.16 ) |
- 名前:Sura 日時:2014/10/21 01:38
確認しました。
エラーが発生し、ご指摘のようなエラーメッセージが出力されました。
|
Re: SetGraphMode()による設定 ( No.17 ) |
- 名前:管理人 日時:2014/10/21 22:54
お試し頂きありがとうございます
本当に作成直後からエラーが発生するようですね・・・
ちゃんとした対処をしようとするとやはり週末になってしまいそうですが、
少し気になることを思いつきました
もしかしたら本件のエラーは私の勘違いが原因で、手のかかる対処をしなくても
良いかもしれませんので、よろしければ以下のテストをしてみて頂けないでしょうか?
1.
DxLib_Init の前に SetGraphMode( 640, 480, 32 ) ; を、
DxLib_Init の後に SetGraphMode( 1280, 960, 32 ) ; を記述して実行したら
画面の表示は行われますでしょうか?
2.
『起動時のデスクトップの解像度と同じ解像度のフルスクリーンモードにしようとすると
今回のエラーが発生する』と考えていたのですが、もしかしたら
『1280x960 以上の解像度ではフルスクリーンモードで起動すると必ず今回のエラーが発生する』
のではないか?という考えが過ぎりました。
なので、申し訳ありませんがモニタの最大解像度である 1600x1200 や 1280x1024 など、
1280x960 以上の解像度を DxLib_Init の前で指定した場合も、1280x960 以外であれば
正常に表示が行われるかお試し頂けないでしょうか?
3.
デスクトップの解像度を 800x600 にした状態で、DxLib_Init の前に SetGraphMode( 800, 600 ) ;
を記述して実行した場合、エラーは発生しますでしょうか?
もしこれで正常に画面が表示された場合は、私が予想した
『起動時のデスクトップの解像度と同じ解像度のフルスクリーンモードにしようとすると
今回のエラーが発生する』という考えは誤っていたことになります・・・
|
Re: SetGraphMode()による設定 ( No.18 ) |
- 名前:Sura 日時:2014/10/22 01:44
1.
一旦、フルスクリーンモードになり(640x480と思われる)、
1から2秒後にウインドウ表示の残骸の上に左上に黒べたの長方形(1280x960になり、640x480の長方形と思われる)が表示され、
黄色のボックスは表示されません。
Log.txtの一部
1685: IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
2248: 成功
ののち
2971: IDirect3D9Ex オブジェクトを取得します.... 成功
3067: 画面解像度を 1280 x 960 に変更します
3070: Desktop Window Manager を無効にしました
3073: IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
3127: きた38 エラーコード 0x08760877
3129: きた39 エラーコード 0x08760877
3132: きた40 エラーコード 0x08760877
3278: 成功
となります。
2.
ソースコードの要望通り成功します。
ただし、Log.txtでは、最初に
0:設定されている画面設定 1600x1200 32bit color
とリクエストを得ていますが、IDirect3D9Exを取得後は
809: IDirect3D9Ex オブジェクトを取得します.... 成功
816: 画面解像度を 1024 x 768 に変更します
となります。ひょっとしたら縮小表示をしているに過ぎないかもしれません。
CRTゆえ、目測で確認するのが困難で、これ以上はわかりません。
1280x1024も同様です。
3.
正常に動作します。
Log.txtでも設定されている画面設定とIDirect3D9Ex取得後の解像度も一致していました。
以上、結果報告です。
よろしくお願いします。
|
Re: SetGraphMode()による設定 ( No.19 ) |
- 名前:管理人 日時:2014/10/23 01:38
お試し頂きありがとうございます
お試しいただいた結果から『デスクトップの解像度かどうか』はエラーと関係がないことが分かりました
新たな原因の推測としては 1600x1200 を指定した際に 1024x768 の画面モードになっている点などから、
恐らくリフレッシュレートが関係している可能性が高いと思います
SetGraphMode の第四引数のリフレッシュレートは特に指定しないと 60 が渡されるのですが、
1280x960 の画面解像度が 60Hz のリフレッシュレートに対応していない、などが考えられます
というわけで、リフレッシュレートの扱いに注意しながら画面解像度の選出を行うプログラムを見直してみた所、
SetGraphMode で指定したリフレッシュレートにモニタが対応していない場合に不具合が発生しそうな箇所がありました
その部分を修正してみましたので、よろしければお試しになってみてください m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
また、こちらのテスト版では最初にモニタとグラフィックスデバイスが対応している
画面モードの一覧を起動時に Log.txt に出力するようにしています
もしこちらのバージョンでも正常に動作しませんでしたら、お手数で申し訳ありませんが
Log.txt に出力された画面モード一覧を掲示板に貼り付けてください m(_ _;m
 |
Re: SetGraphMode()による設定 ( No.20 ) |
- 名前:Sura 日時:2014/10/23 02:24
確認したところ、対応リストにある解像度及びリフレッシュレートを
SetGraphMode()で指定すると成功します。
以下、検証結果です。
※ソースコード通り実行された:○,されない:×
※IDirect3D9Ex取得後のログも併記
//-------------------------------
320x240,16bit × フルスクリーンに切り替わらない
画面解像度を 1280 x 960 リフレッシュレートを 60Hz に変更します
320x240,32bit × フルスクリーンに切り替わらない
画面解像度を 1280 x 960 リフレッシュレートを 60Hz に変更します
640x480,16bit ○
画面解像度を 640 x 480 リフレッシュレートを 60Hz に変更します
640x480,32bit ○
画面解像度を 640 x 480 リフレッシュレートを 60Hz に変更します
1280x960,16bit × フルスクリーンに切り替わらない
画面解像度を 1280 x 960 リフレッシュレートを 60Hz に変更します
1280x960,32bit × フルスクリーンに切り替わらない
画面解像度を 1280 x 960 リフレッシュレートを 60Hz に変更します
1600x1200,16bit × フルスクリーンに切り替わらない
画面解像度を 1600 x 1200 リフレッシュレートを 60Hz に変更します
1600x1200,32bit × フルスクリーンに切り替わらない
画面解像度を 1600 x 1200 リフレッシュレートを 60Hz に変更します
1600x1200,32bit,75Hz ○
画面解像度を 1600 x 1200 リフレッシュレートを 75Hz に変更します
対応画面モード
16:画面モード 0 640x480 32bit 85Hz
16:画面モード 1 640x480 32bit 60Hz
31:画面モード 2 640x480 32bit 72Hz
31:画面モード 3 640x480 32bit 75Hz
31:画面モード 4 720x480 32bit 85Hz
31:画面モード 5 720x480 32bit 85Hz
31:画面モード 6 720x480 32bit 85Hz
31:画面モード 7 720x480 32bit 56Hz
47:画面モード 8 720x480 32bit 56Hz
47:画面モード 9 720x480 32bit 56Hz
47:画面モード 10 720x480 32bit 60Hz
47:画面モード 11 720x480 32bit 60Hz
47:画面モード 12 720x480 32bit 60Hz
47:画面モード 13 720x480 32bit 72Hz
63:画面モード 14 720x480 32bit 72Hz
63:画面モード 15 720x480 32bit 72Hz
63:画面モード 16 720x480 32bit 75Hz
63:画面モード 17 720x480 32bit 75Hz
63:画面モード 18 720x480 32bit 75Hz
78:画面モード 19 720x576 32bit 85Hz
78:画面モード 20 720x576 32bit 85Hz
78:画面モード 21 720x576 32bit 85Hz
78:画面モード 22 720x576 32bit 56Hz
78:画面モード 23 720x576 32bit 56Hz
94:画面モード 24 720x576 32bit 56Hz
94:画面モード 25 720x576 32bit 60Hz
94:画面モード 26 720x576 32bit 60Hz
94:画面モード 27 720x576 32bit 60Hz
94:画面モード 28 720x576 32bit 72Hz
109:画面モード 29 720x576 32bit 72Hz
109:画面モード 30 720x576 32bit 72Hz
109:画面モード 31 720x576 32bit 75Hz
109:画面モード 32 720x576 32bit 75Hz
109:画面モード 33 720x576 32bit 75Hz
125:画面モード 34 800x600 32bit 85Hz
125:画面モード 35 800x600 32bit 56Hz
125:画面モード 36 800x600 32bit 60Hz
125:画面モード 37 800x600 32bit 72Hz
125:画面モード 38 800x600 32bit 75Hz
141:画面モード 39 1024x768 32bit 85Hz
141:画面モード 40 1024x768 32bit 60Hz
141:画面モード 41 1024x768 32bit 70Hz
141:画面モード 42 1024x768 32bit 75Hz
141:画面モード 43 1152x864 32bit 75Hz
156:画面モード 44 1280x720 32bit 85Hz
156:画面モード 45 1280x720 32bit 85Hz
156:画面モード 46 1280x720 32bit 85Hz
156:画面モード 47 1280x768 32bit 85Hz
156:画面モード 48 1280x768 32bit 85Hz
172:画面モード 49 1280x768 32bit 85Hz
172:画面モード 50 1280x800 32bit 85Hz
172:画面モード 51 1280x800 32bit 85Hz
172:画面モード 52 1280x800 32bit 85Hz
172:画面モード 53 1280x960 32bit 85Hz
172:画面モード 54 1280x1024 32bit 85Hz
187:画面モード 55 1280x1024 32bit 75Hz
187:画面モード 56 1360x768 32bit 75Hz
187:画面モード 57 1360x768 32bit 75Hz
187:画面モード 58 1360x768 32bit 75Hz
187:画面モード 59 1366x768 32bit 75Hz
187:画面モード 60 1366x768 32bit 75Hz
219:画面モード 61 1366x768 32bit 75Hz
234:画面モード 62 1600x900 32bit 75Hz
234:画面モード 63 1600x900 32bit 75Hz
250:画面モード 64 1600x900 32bit 75Hz
250:画面モード 65 1600x1024 32bit 75Hz
250:画面モード 66 1600x1024 32bit 75Hz
265:画面モード 67 1600x1024 32bit 75Hz
265:画面モード 68 1600x1200 32bit 75Hz
265:画面モード 69 640x480 16bit 85Hz
281:画面モード 70 640x480 16bit 60Hz
281:画面モード 71 640x480 16bit 72Hz
297:画面モード 72 640x480 16bit 75Hz
297:画面モード 73 720x480 16bit 85Hz
297:画面モード 74 720x480 16bit 85Hz
312:画面モード 75 720x480 16bit 85Hz
312:画面モード 76 720x480 16bit 56Hz
312:画面モード 77 720x480 16bit 56Hz
328:画面モード 78 720x480 16bit 56Hz
328:画面モード 79 720x480 16bit 60Hz
328:画面モード 80 720x480 16bit 60Hz
343:画面モード 81 720x480 16bit 60Hz
343:画面モード 82 720x480 16bit 72Hz
343:画面モード 83 720x480 16bit 72Hz
359:画面モード 84 720x480 16bit 72Hz
359:画面モード 85 720x480 16bit 75Hz
375:画面モード 86 720x480 16bit 75Hz
375:画面モード 87 720x480 16bit 75Hz
375:画面モード 88 720x576 16bit 85Hz
390:画面モード 89 720x576 16bit 85Hz
390:画面モード 90 720x576 16bit 85Hz
390:画面モード 91 720x576 16bit 56Hz
406:画面モード 92 720x576 16bit 56Hz
406:画面モード 93 720x576 16bit 56Hz
406:画面モード 94 720x576 16bit 60Hz
406:画面モード 95 720x576 16bit 60Hz
421:画面モード 96 720x576 16bit 60Hz
421:画面モード 97 720x576 16bit 72Hz
421:画面モード 98 720x576 16bit 72Hz
421:画面モード 99 720x576 16bit 72Hz
437:画面モード 100 720x576 16bit 75Hz
437:画面モード 101 720x576 16bit 75Hz
437:画面モード 102 720x576 16bit 75Hz
437:画面モード 103 800x600 16bit 85Hz
437:画面モード 104 800x600 16bit 56Hz
453:画面モード 105 800x600 16bit 60Hz
453:画面モード 106 800x600 16bit 72Hz
453:画面モード 107 800x600 16bit 75Hz
453:画面モード 108 1024x768 16bit 85Hz
468:画面モード 109 1024x768 16bit 60Hz
468:画面モード 110 1024x768 16bit 70Hz
468:画面モード 111 1024x768 16bit 75Hz
468:画面モード 112 1152x864 16bit 75Hz
484:画面モード 113 1280x720 16bit 85Hz
484:画面モード 114 1280x720 16bit 85Hz
484:画面モード 115 1280x720 16bit 85Hz
484:画面モード 116 1280x768 16bit 85Hz
499:画面モード 117 1280x768 16bit 85Hz
499:画面モード 118 1280x768 16bit 85Hz
499:画面モード 119 1280x800 16bit 85Hz
499:画面モード 120 1280x800 16bit 85Hz
515:画面モード 121 1280x800 16bit 85Hz
515:画面モード 122 1280x960 16bit 85Hz
515:画面モード 123 1280x1024 16bit 85Hz
515:画面モード 124 1280x1024 16bit 75Hz
531:画面モード 125 1360x768 16bit 75Hz
531:画面モード 126 1360x768 16bit 75Hz
531:画面モード 127 1360x768 16bit 75Hz
531:画面モード 128 1366x768 16bit 75Hz
546:画面モード 129 1366x768 16bit 75Hz
546:画面モード 130 1366x768 16bit 75Hz
546:画面モード 131 1600x900 16bit 75Hz
546:画面モード 132 1600x900 16bit 75Hz
562:画面モード 133 1600x900 16bit 75Hz
562:画面モード 134 1600x1024 16bit 75Hz
562:画面モード 135 1600x1024 16bit 75Hz
562:画面モード 136 1600x1024 16bit 75Hz
577:画面モード 137 1600x1200 16bit 75Hz
以上です。
 |
Re: SetGraphMode()による設定 ( No.21 ) |
- 名前:管理人 日時:2014/10/23 23:20
お試し頂きありがとうございます
すみません、画面モード選出処理で選んだ画面モードのリフレッシュレートを使用していない
という致命的なバグがありました orz
修正したバージョンをアップしましたので、よろしければお試しください m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
明日と明後日は用事がありご返信ができないので、もしこれでも駄目でしたら、
申し訳ありませんが日曜日までお待ちください m(_ _;m
|
Re: SetGraphMode()による設定 ( No.22 ) |
- 名前:Sura 日時:2014/10/24 01:33
ありがとうございます。
描画されるようになりました。
ここまで手を煩わせて大変恐縮ですが、
ちょっと気になることを申せば、
320x240で設定すると、暗黙及び第4引数に明示的に60(Hz)にしても、
Direct3D9Ex取得後1280x960,85Hzとしてエミュレートしているらしく、
要するに、ver3.08に比べると早く動いてしまうという問題に突き当たりました。
エミュレートするなら640x480,60Hzで拡大するほうが理に適っているような気がします。
本当に急いでもらっているのに恐縮なのですが、
対応していない設定を受けたときのエミュレートの優先順位として
1. リフレッシュレート
2. 画面解像度の最小の整数倍を選定(例:320x240→640x480, 400x300→800x600, etc.)
とした方が良いのではと思います。
|
Re: SetGraphMode()による設定 ( No.23 ) |
- 名前:管理人 日時:2014/10/26 17:06
成功した様でなによりです
何度もテストにお付き合い頂きありがとうございました m(_ _)m
そして、Suraさんのご意見を参考に、画面モードの選定処理を以下のように変更しました
1.指定の解像度・カラービット深度・リフレッシュレートに一致した画面モードがあった場合はその画面モードを使用する
なかった場合は 2 以降の処理を行う
2.指定のカラービット深度・解像度が一致する画面モードはあった場合は、その画面モードを使用する
なかった場合は 3 以降の処理を行う
3.指定の解像度に一致する画面モードがあった場合は、その画面モードを使用する
なかった場合は 4 以降の処理を行う
4.解像度が指定の解像度の整数倍で、且つ指定のカラービット深度・リフレッシュレートに一致した画面モードが見つかった場合は
見つかった整数倍の解像度の中で最も低い解像度の画面モードを使用する
見つからなかった場合は 5 以降の処理を行う
5.解像度が指定の解像度の整数倍で、且つ指定のカラービット深度に一致した画面モードが見つかった場合は
見つかった整数倍の解像度の中で最も低い解像度の画面モードを使用する
見つからなかった場合は 6 以降の処理を行う
6.解像度が指定の解像度の整数倍の画面モードが見つかった場合は、
見つかった整数倍の解像度の中で最も低い解像度の画面モードを使用する
見つからなかった場合は 7 以降の処理を行う
7.デスクトップの解像度が指定の解像度と同じか高い場合は、デスクトップの画面モードを使用する
デスクトップの解像度が指定の解像度よりも低い場合は、8 の処理を行う
8.選択可能な最大解像度の画面モードを使用する( こちらも解像度・カラービット深度などの優先度がありますが長くなるので割愛します )
こちらの変更を行ったバージョンをこちらにアップしましたので、よろしければお試しください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
因みに、リフレッシュレートを最優先にしてしまうと、仮に指定と一致する解像度の画面モードがあっても、
指定のリフレッシュレートの画面モードが無いという状況もあり得るため、リフレッシュレートを最優先にはしていません
画面解像度の一致よりもリフレッシュレートの一致を優先されたい場合は、申し訳ありませんが
GetDisplayModeNum と GetDisplayMode を使用してご希望の画面モードを選定する処理を独自に組んでください
 |
Re: SetGraphMode()による設定 ( No.24 ) |
- 名前:Sura(解決) 日時:2014/10/26 23:08
動作確認しました。
320x240 及び 400x300 において、最小の整数倍の解像度が選択がされていることを、Log.txtにて確認いたしました。
>画面解像度の一致よりもリフレッシュレートの一致を優先されたい場合は、…
に関しては了解いたしました。
大変お手数をおかけしました。
解決とさせていただきます。
ありがとうございました。
|
Re: SetGraphMode()による設定 ( No.25 ) |
- 名前:Sura 日時:2014/11/01 15:44
すみません。
その後よく精査した結果ですが、SetFullScreenScalingMode()にてDX_FSSCALINGMODE_NEARESTを指定し、
小さな解像度(320x240, 400x300 etc.)にすると中心で半ドット(640x480, 800x600 換算で1ドット)ズレていることが確認できました。
恐らくは、スケーリングの際、左上ではなく中心が(0,0)になっていて、小数点以下を斬り捨てる処理によって起っていると思われます
(0.5〜1.5も-0.5〜0.5も差は1、しかし斬り捨てると前者は1だが後者は0となる)。
折角、整数倍の解像度を指定するルーチンを構築したところで、
以上のような現象を抱えるとほとんど意味が無いように思われます。
もし、DirectXやGPUなどによる仕様であれば、どう回避するのか教えていただければ有り難いです。
|
Re: SetGraphMode()による設定 ( No.26 ) |
- 名前:管理人 日時:2014/11/01 23:11
サブバッファからメインバッファへの拡大転送は DrawExtendGraph などで使用している
機能とは異なって、整数値で座標を指定する Direct3D9 の拡大機能を使用しているのですが
ご指摘の通り綺麗に拡大されませんね・・・ DirectDraw の時代から DirectX の2D拡大機能は
使いものにならないと言われていましたが、Direct3D9 でも使えないとは・・・
DrawExtendGraph と同じ拡大処理を行うにはサブバッファをテクスチャにする必要があり、
動作環境が若干狭まるので悩みましたが、サブバッファをテクスチャにできない場合は
今まで通りの1ドットずれる拡大機能を使用することでサブバッファをテクスチャに
できない環境でも「画面に何も表示されない」という事態は避けられると気付いたので、
とりあえず DrawExtendGraph と同じ拡大処理を使用して1ドットのずれが無くなるようにしました
要は自前で MakeScreen( 320, 240 ) で描画可能グラフィックハンドルを作成してそこに描画したものを
SetDrawScreen( DX_SCREEN_BACK ) と DrawExtendGraph( 0, 0, 640, 480, handle, FALSE ) で
裏画面に拡大描画した場合と同じ処理を内部で行うようにした感じです
よろしければお試しください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
 |
Re: SetGraphMode()による設定 ( No.27 ) |
- 名前:Sura(解決) 日時:2014/11/02 00:59
正常に動作することを確認しました。
何度もお手を煩わせてすみませんでした。
ありがとうございます。
|
Re: SetGraphMode()による設定 ( No.28 ) |
- 名前:管理人(解決) 日時:2014/11/02 01:44
正常に動作したようでなによりです
1ドット単位のずれはソフト開発時にはかなり気になるのですが、ライブラリの機能を
整備しているときは見落としがちなのでご報告いただけると助かります
また何かありましたらご連絡ください m(_ _)m
|
Re: SetGraphMode()による設定 ( No.29 ) |
- 名前:Sura(解決) 日時:2014/11/02 14:17
>1ドット単位のずれはソフト開発時にはかなり気になるのですが、ライブラリの機能を
整備しているときは見落としがちなのでご報告いただけると助かります
そう言って戴けるとは勿体ない。
ただ、結果としてデバッグに貢献したことであって、
こちらとしては、単に助けてもらっただけで。
今後も、もし気づいたことが有れば、気兼ねなく報告させて頂きます。
|