• R/O
  • HTTP
  • SSH
  • HTTPS

提交

Frequently used words (click to add to your profile)

javac++androidlinuxc#objective-cqtwindows誰得cocoapythonphprubygameguibathyscaphec翻訳omegat計画中(planning stage)frameworktwittertestdomvb.netdirectxbtronarduinopreviewerゲームエンジン

Violet Vreath is Shooter Game for Windows XP+(個人制作シューティングゲーム)


Commit MetaInfo

修订版5c5c0b10ac4593cadf6ac3f2ec674b44bf59b259 (tree)
时间2022-07-06 23:20:25
作者gecchi <gecchi@192....>
Commitergecchi

Log Message

フルスクリーン中に画面回転を行っても、最低限落ちないように修正

更改概述

差异

--- a/GgafCore/src/jp/ggaf/core/util/Xpm.cpp
+++ b/GgafCore/src/jp/ggaf/core/util/Xpm.cpp
@@ -23,7 +23,7 @@ Xpm::Xpm(const char** prm_xpm) : Object() {
2323 throwCriticalException("Xpm::Xpm() 不正なヘッダデータです line0=["<<line0.str()<<"]");
2424 }
2525 if (_char_on_pixel != 1) {
26- throwCriticalException("Xpm::Xpm() _char_on_pixel は1文字しか対応していません。 line0=["<<line0.str()<<"]");
26+ throwCriticalException("Xpm::Xpm() _char_on_pixel は1文字しか対応していません。色数を少なくしてください。line0=["<<line0.str()<<"]");
2727 }
2828 //"X c #E08000"
2929 for (int i = 0; i < _colors; i++) {
--- a/GgafDx/include/jp/ggaf/dx/God.h
+++ b/GgafDx/include/jp/ggaf/dx/God.h
@@ -227,6 +227,10 @@ public:
227227 */
228228 God();
229229
230+
231+ void setAppropriateDisplaySize();
232+
233+
230234 /**
231235 * フルスクリーン時、最も妥当な解像度を探す。
232236 * @param prm_paRezos 解像度情報配列
@@ -236,7 +240,7 @@ public:
236240 * @return 最も妥当な要素インデックス
237241 */
238242 static int checkAppropriateDisplaySize(God::RezoInfo* prm_paRezos, int prm_rezo_num,
239- UINT prm_width, UINT prm_height);
243+ UINT prm_width, UINT prm_height);
240244 /**
241245 * ウィンドウ生成処理 .
242246 * @param prm_wndclass1 1画面目のWNDCLASSEXパラメータ
--- a/GgafDx/src/jp/ggaf/dx/God.cpp
+++ b/GgafDx/src/jp/ggaf/dx/God.cpp
@@ -181,695 +181,773 @@ void God::chengeViewAspect(bool prm_b) {
181181 God::_pHWnd_adjustScreen = God::_pHWndPrimary;
182182 }
183183 }
184-int God::checkAppropriateDisplaySize(God::RezoInfo* prm_paRezos, int prm_rezo_num,
185- UINT prm_width, UINT prm_height) {
186- _TRACE_("checkAppropriateDisplaySize() 所望解像度、"<<prm_width<<"x"<<prm_height);
187-
188- for (int n = 0; n < prm_rezo_num; n++) {
189- if (prm_width == prm_paRezos[n].width && prm_height == prm_paRezos[n].height) {
190- _TRACE_("["<<n<<"] でBINGO!");
191- return n; //ぴったし
192- }
193- }
194- _TRACE_("BINGOなし、近い解像度を探します。");
195- int cfg_width = (int)(prm_width * 1.1); //解像度の高い方をやや選択しやすくするため
196- int cfg_height = (int)(prm_height * 1.1); //10%水増し
197- double cfg_aspect = 1.0 * cfg_width / cfg_height;
198-
199- int eval_top = INT_MAX; //評価(小さいほど良い)
200- int resut_index = 0;
201- for (int n = 0; n < prm_rezo_num; n++) {
202- int disp_width = (int)(prm_paRezos[n].width);
203- int disp_height = (int)(prm_paRezos[n].height);
204- int eval_level = ABS(disp_width-cfg_width) + (int)(ABS(disp_height-cfg_height) * cfg_aspect * 1.5); //アスペクト比をやや重視のため1.5倍
205- _TRACE_("["<<n<<"] "<<disp_width<<"x"<<disp_height<<" ・・・ 評価:"<<eval_level);
206- if (eval_level < eval_top) {
207- eval_top = eval_level;
208- resut_index = n;
209- }
210- }
211- _TRACE_("checkAppropriateDisplaySize() 結論、["<<resut_index<<"] の "<<
212- prm_paRezos[resut_index].width<<"x"<<prm_paRezos[resut_index].height<<" が良さげじゃなかしら!");
213- return resut_index;
214-}
215-
216-void God::createWindow(WNDCLASSEX& prm_wndclass1, WNDCLASSEX& prm_wndclass2,
217- const char* prm_title1 , const char* prm_title2,
218- DWORD prm_dwStyle1 , DWORD prm_dwStyle2,
219- HWND& out_hWnd1 , HWND& out_hWnd2) {
220184
221- //2011/09/18 WDDM が使用できるなら使用するように変更。
222- // マルチモニタフルスクリーン時のデバイスロスト時の復旧が、
223- // XPではうまくいくのにVistaではうまくいかない時があることが発覚。
224- // IDirect3D9Ex の存在が気になり、試す事に至った。
225- // WDDMつまり IDirect3D9Ex or IDirect3D9 の選択を行う。
226- // IDirect3D9Ex を取得する Direct3DCreate9Ex() を使用し、
227- // 戻り値の結果で判定すれば良いと安易に考えていたが、
228- // IDirect3D9Ex の実態が、Vista 以降 の d3d9.dll にのみ存在するらしく、
229- // Direct3DCreate9Ex() 関数のコードを書いた時点で、XPの場合 d3d9.dll ロード時に
230- // 「エントリポイントがありません」とかいうエラーになってしまい実行すらできない。
231- // コードを両対応させるには、Direct3DCreate9Ex() は使えないと思う。
232- // そこで以下のように d3d9.dll から、Direct3DCreate9Ex を直接探して、ポインタを
233- // 取得する方法がMSDNにあったので、参考にして実装。
234- // __uuid 演算子が GCC には無いので、IDD_IDirect3D9 に変更。
235- // TODO::これで正解なのだろうか…。
185+void God::setAppropriateDisplaySize() {
186+ //フルスクリーン要求時、指定解像度に出来るか調べ、
187+ //出来ない場合は、近い解像度を探し、
188+ //_paPresetPrm[] と、_paDisplayMode[] を上書きする。
189+ EnumDisplayMonitors(nullptr, nullptr, God::updateMoniterPixcoordCallback, (LPARAM)this);
236190
237- HRESULT hr;
238- typedef HRESULT (WINAPI *DIRECT3DCREATE9EXFUNCTION)(UINT SDKVersion, IDirect3D9Ex**);
239- IDirect3D9* pID3D9 = nullptr;
240- IDirect3D9Ex* pID3D9Ex = nullptr;
241- HMODULE hD3D = LoadLibrary(TEXT("d3d9.dll"));
191+ if (CONFIG::FULL_SCREEN) {
192+ for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
193+ _TRACE_("--- " << adapter_no+1 << "画面目 の解像度設定 --->");
194+ int rezo_num = _paAdapterRezos[adapter_no].rezo_num;
195+ RezoInfo* paRezos = _paAdapterRezos[adapter_no].paRezoInfo;
242196
243- DIRECT3DCREATE9EXFUNCTION pFunc_Direct3DCreate9Ex = (DIRECT3DCREATE9EXFUNCTION)GetProcAddress(hD3D, "Direct3DCreate9Ex");
244- if (pFunc_Direct3DCreate9Ex) {
245- _TRACE_("d3d9.dllに、Direct3DCreate9Exは存在しました。");
246- //d3d9.dll に Direct3DCreate9Ex は存在する。
247- hr = ((*pFunc_Direct3DCreate9Ex)(D3D_SDK_VERSION, &pID3D9Ex)); //Direct3DCreate9Ex 実行
248- if (FAILED(hr)) {
249- FreeLibrary(hD3D);
250- throwCriticalException("IDirect3D9Ex コンポーネント取得に失敗しました。(1)"); //失敗
251- }
252-// hr = pID3D9Ex->QueryInterface(IID_IDirect3D9, reinterpret_cast<void **>(&pID3D9)); //COMとして使用
253-// if (FAILED(hr)) {
254-// MessageBox(God::_pHWndPrimary, TEXT("IDirect3D9Ex コンポーネント取得に失敗しました。(2)"), TEXT("ERROR"), MB_OK | MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST);
255-// FreeLibrary(hD3D);
256-// return E_FAIL; //失敗
257-// }
258- God::_pID3D9 = (IDirect3D9*)pID3D9Ex;
259- _can_wddm = true;
260- _TRACE_("WDDM モード");
261- } else {
262- _TRACE_("d3d9.dllに、Direct3DCreate9Exは存在しませんでした。");
263- //d3d9.dll に Direct3DCreate9Ex は存在しない。
264- pID3D9 = Direct3DCreate9(D3D_SDK_VERSION);
265- if (!pID3D9) {
266- FreeLibrary(hD3D);
267- throwCriticalException("IDirect3D9 コンポーネント取得に失敗しました。");
268- }
269- God::_pID3D9 = pID3D9;
270- _can_wddm = false;
271- _TRACE_("XPDM モード");
272- }
273- FreeLibrary(hD3D);
197+ if (CONFIG::DUAL_VIEW) {
198+ //2画面フルスクリーン時
199+ if (adapter_no == _primary_adapter_no) {
200+ //ゲーム画面1画面目
201+ int n = checkAppropriateDisplaySize(
202+ paRezos, rezo_num,
203+ (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH,
204+ (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT
205+ );
206+ CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH = (pixcoord)(paRezos[n].width);
207+ CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT = (pixcoord)(paRezos[n].height);
208+ _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
209+ _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
210+ _TRACE_("ゲーム画面1画面目(adapter_no="<<adapter_no<<")は、"<<paRezos[n].width<<"x"<<paRezos[n].height<<" に設定");
211+ } else if (adapter_no == _secondary_adapter_no) {
212+ //ゲーム画面2画面目
213+ int n = checkAppropriateDisplaySize(
214+ paRezos, rezo_num,
215+ (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH,
216+ (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT
217+ );
218+ CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH = (pixcoord)(paRezos[n].width);
219+ CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT = (pixcoord)(paRezos[n].height);
220+ _paPresetPrm[_secondary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
221+ _paPresetPrm[_secondary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
222+ _TRACE_("ゲーム画面2画面目(adapter_no="<<adapter_no<<")は、"<<paRezos[n].width<<"x"<<paRezos[n].height<<" に設定");
223+ } else {
224+ //メモ:ゲーム画面3画面目以降1画面目・2画面目の解像度は、現状の解像度をそのまま設定。
225+ pixcoord width = _paAvailableAdapter[adapter_no].rcMonitor.right - _paAvailableAdapter[adapter_no].rcMonitor.left;
226+ pixcoord height = _paAvailableAdapter[adapter_no].rcMonitor.bottom - _paAvailableAdapter[adapter_no].rcMonitor.top;
227+ _paPresetPrm[adapter_no].BackBufferWidth = width;
228+ _paPresetPrm[adapter_no].BackBufferHeight = height;
229+ _TRACE_("adapter_no="<<adapter_no << "の画面は、現状の "<<width<<"x"<<height<<" に設定");
230+ }
274231
275- //デバイスパラメータ作成
276- D3DCAPS9 caps;
277- God::_pID3D9->GetDeviceCaps(D3DADAPTER_DEFAULT, // [in] ディスプレイ アダプタを示す序数。
278- D3DDEVTYPE_HAL, // [in] デバイスの種類。 D3DDEVTYPE列挙型のメンバ
279- &caps); // [out] デバイスの能力が格納される
232+ } else {
233+ //1画面フルスクリーン時
234+ if (adapter_no == _primary_adapter_no) {
235+ int n = checkAppropriateDisplaySize(
236+ paRezos, rezo_num,
237+ (UINT)CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH,
238+ (UINT)CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT
239+ );
240+ CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH = (pixcoord)(paRezos[n].width);
241+ CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT = (pixcoord)(paRezos[n].height);
242+ _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
243+ _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
244+ } else {
245+ _paPresetPrm[adapter_no].BackBufferWidth = 0;
246+ _paPresetPrm[adapter_no].BackBufferHeight = 0;
247+ }
280248
281- _num_adapter = caps.NumberOfAdaptersInGroup; //使えるアダプタの数取得
282- _TRACE_("_num_adapter = "<< _num_adapter);
283- if (CONFIG::FULL_SCREEN && CONFIG::DUAL_VIEW) {
284- if (_num_adapter < 2) {
285- _TRACE_("【警告】2画面フルスクリーン設定ですが、マルチモニタを検出できません。強制的に1画面フルスクリーンで起動します");
286- MessageBox(God::_pHWndPrimary,
287- "【警告】2画面フルスクリーン設定ですが、マルチモニタを検出できません。\n強制的に1画面フルスクリーンで起動します",
288- "WARNING", MB_OK | MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST);
289- _primary_adapter_no = 0;
290- _secondary_adapter_no = 1;
291- CONFIG::DUAL_VIEW = false;
292- CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH_BK = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
293- CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT_BK = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
294- CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
295- CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
296- } else {
297- if (_num_adapter < CONFIG::PRIMARY_ADAPTER_NO+1 || _num_adapter < CONFIG::SECONDARY_ADAPTER_NO+1) {
298- throwCriticalException("範囲外のディスプレイアダプタ番号を指定しています。アダプタ番号は 0〜"<<_num_adapter-1<<" が有効です。\n"
299- "PRIMARY_ADAPTER_NO="<<CONFIG::PRIMARY_ADAPTER_NO<<", "
300- "SECONDARY_ADAPTER_NO="<<CONFIG::SECONDARY_ADAPTER_NO );
301249 }
250+ //上書き更新
251+ _paDisplayMode[adapter_no].Width = _paPresetPrm[adapter_no].BackBufferWidth;
252+ _paDisplayMode[adapter_no].Height = _paPresetPrm[adapter_no].BackBufferHeight;
253+ _TRACE_("<---" << adapter_no+1 << "画面目の解像度は、"<<_paDisplayMode[adapter_no].Width<<"x"<<_paDisplayMode[adapter_no].Height<<"に確定しました。");
302254 }
303255 }
304256
305- _paPresetPrm = NEW D3DPRESENT_PARAMETERS[_num_adapter > 2 ? _num_adapter : 2];
306- ZeroMemory(&_paPresetPrm[_primary_adapter_no], sizeof(D3DPRESENT_PARAMETERS));
257+ //[メモ:RECT構造体]
258+ //引数に使用するRECT構造体のメンバ right, bottom は「右下座標」となっているが表現が正確ではない。
259+ //実際の定義は
260+ //rect.right = rect.left + 矩形幅;
261+ //rect.bottom = rect.top + 矩形高さ;
262+ //つまり (10,10)-(17,17) 領域は、RECT(10,10,18,18) と指定するのが意図した使用方法らしい。
263+ //ややこしい、しかし、辺の長さを求める場合は便利である。
264+ //(※本当の右下座標は、right, bottom の -1 の値になる)
265+ _rectGameBuffer.left = 0;
266+ _rectGameBuffer.top = 0;
267+ _rectGameBuffer.right = _rectGameBuffer.left + CONFIG::GAME_BUFFER_WIDTH;
268+ _rectGameBuffer.bottom = _rectGameBuffer.top + CONFIG::GAME_BUFFER_HEIGHT;
307269
308- //ウィンドウ時・フルスクリーン時共通
309- _paPresetPrm[_primary_adapter_no].BackBufferCount = 1; //バックバッファの数
310- _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = TRUE; //バックバッファの Zバッファの自動作成
311- _paPresetPrm[_primary_adapter_no].AutoDepthStencilFormat = D3DFMT_D24S8; //深度ステンシルバッファ //D3DFMT_D16;
312- _paPresetPrm[_primary_adapter_no].Flags = 0; //0にしておく
270+ _rectRenderTargetBuffer.left = (CONFIG::RENDER_TARGET_BUFFER_WIDTH / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_WIDTH / 2.0);
271+ _rectRenderTargetBuffer.top = (CONFIG::RENDER_TARGET_BUFFER_HEIGHT / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_HEIGHT / 2.0);
272+ _rectRenderTargetBuffer.right = _rectRenderTargetBuffer.left + CONFIG::VIEW_SOURCE_BUFFER_WIDTH;
273+ _rectRenderTargetBuffer.bottom = _rectRenderTargetBuffer.top + CONFIG::VIEW_SOURCE_BUFFER_HEIGHT;
313274
314- if (CONFIG::FULL_SCREEN) {
275+ _aRect_HarfGameBuffer[PRIMARY_VIEW].left = 0;
276+ _aRect_HarfGameBuffer[PRIMARY_VIEW].top = 0;
277+ _aRect_HarfGameBuffer[PRIMARY_VIEW].right = _aRect_HarfGameBuffer[PRIMARY_VIEW].left + CONFIG::GAME_BUFFER_WIDTH/2;
278+ _aRect_HarfGameBuffer[PRIMARY_VIEW].bottom = _aRect_HarfGameBuffer[PRIMARY_VIEW].top + CONFIG::GAME_BUFFER_HEIGHT;
315279
316- //フルスクリーン時
317- _paPresetPrm[_primary_adapter_no].BackBufferFormat = D3DFMT_X8R8G8B8; //D3DFMT_A8R8G8B8; //D3DFMT_X8R8G8B8; //D3DFMT_R5G6B5;
318- _paPresetPrm[_primary_adapter_no].Windowed = false; //フルスクリーンモード時
319- _paPresetPrm[_primary_adapter_no].FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //リフレッシュレート
320- _paPresetPrm[_primary_adapter_no].PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; //スワップのタイミング
321- _paPresetPrm[_primary_adapter_no].SwapEffect = D3DSWAPEFFECT_DISCARD;
280+ _aRect_HarfGameBuffer[SECONDARY_VIEW].left = CONFIG::GAME_BUFFER_WIDTH/2;
281+ _aRect_HarfGameBuffer[SECONDARY_VIEW].top = 0;
282+ _aRect_HarfGameBuffer[SECONDARY_VIEW].right = _aRect_HarfGameBuffer[SECONDARY_VIEW].left + CONFIG::GAME_BUFFER_WIDTH/2;
283+ _aRect_HarfGameBuffer[SECONDARY_VIEW].bottom = _aRect_HarfGameBuffer[SECONDARY_VIEW].top + CONFIG::GAME_BUFFER_HEIGHT;
322284
323- if(CONFIG::DUAL_VIEW) {
324- _paPresetPrm[_secondary_adapter_no] = _paPresetPrm[_primary_adapter_no]; //ココまでを複製
285+ _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left = (CONFIG::RENDER_TARGET_BUFFER_WIDTH - CONFIG::VIEW_SOURCE_BUFFER_WIDTH) / 2;
286+ _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top = (CONFIG::RENDER_TARGET_BUFFER_HEIGHT / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_HEIGHT / 2.0);
287+ _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].right = _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left + CONFIG::VIEW_SOURCE_BUFFER_WIDTH/2;
288+ _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].bottom = _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top + CONFIG::VIEW_SOURCE_BUFFER_HEIGHT;
325289
326- _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = FALSE; //Zバッファの自動作成無効
327- _paPresetPrm[_secondary_adapter_no].EnableAutoDepthStencil = FALSE;
328- //【メモ】
329- //EnableAutoDepthStencil = FALSE;
330- //とすると、レンダリングステートの D3DRS_ZENABLE が FALSE になるだけのように見える。
331- //従って「無効」にしただけであり、「使用不可」ではないのだろう・・・。
332- } else {
333- _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = FALSE; //Z バッファの自動作成有効
334- }
335- } else {
336- //ウィンドウ時
337- _paPresetPrm[_primary_adapter_no].BackBufferFormat = D3DFMT_UNKNOWN; //現在の表示モードフォーマット
338- _paPresetPrm[_primary_adapter_no].Windowed = true; //ウィンドウモード時
339- _paPresetPrm[_primary_adapter_no].FullScreen_RefreshRateInHz = 0; //リフレッシュレート
340- _paPresetPrm[_primary_adapter_no].PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //即座
341- _paPresetPrm[_primary_adapter_no].SwapEffect = D3DSWAPEFFECT_COPY; //TODO:Windowモードはこれ一択なのか?、D3DPRESENT_INTERVAL_ONE とかためす?
290+ _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left = CONFIG::RENDER_TARGET_BUFFER_WIDTH/2;
291+ _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top = (CONFIG::RENDER_TARGET_BUFFER_HEIGHT / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_HEIGHT / 2.0);
292+ _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].right = _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left + CONFIG::VIEW_SOURCE_BUFFER_WIDTH/2;
293+ _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].bottom = _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top + CONFIG::VIEW_SOURCE_BUFFER_HEIGHT;
342294
343- if(CONFIG::DUAL_VIEW) {
344- _paPresetPrm[_secondary_adapter_no] = _paPresetPrm[_primary_adapter_no]; //ココまでを複製
345- _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = TRUE; //Z バッファの自動作成
346- _paPresetPrm[_secondary_adapter_no].EnableAutoDepthStencil = TRUE;
347- } else {
295+ //表示領域設定
296+ if (CONFIG::FULL_SCREEN) {
297+ //フルスクリーンモード
298+ if (CONFIG::DUAL_VIEW) {
299+ _aRect_ViewScreen[PRIMARY_VIEW].top = 0;
300+ _aRect_ViewScreen[PRIMARY_VIEW].left = 0;
301+ _aRect_ViewScreen[PRIMARY_VIEW].right = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
302+ _aRect_ViewScreen[PRIMARY_VIEW].bottom = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
303+ _aRect_ViewScreen[SECONDARY_VIEW].top = 0;
304+ _aRect_ViewScreen[SECONDARY_VIEW].left = 0;
305+ _aRect_ViewScreen[SECONDARY_VIEW].right = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
306+ _aRect_ViewScreen[SECONDARY_VIEW].bottom = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
348307
349- _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = TRUE; //Z バッファの自動作成
350- }
351-
352-// //デスプレイモードの取得
353-// D3DDISPLAYMODE structD3DDisplayMode0; //結果が格納される構造体
354-// hr = God::_pID3D9->GetAdapterDisplayMode(0, &structD3DDisplayMode0);
355-// returnWhenFailed(hr, D3D_OK, "GetAdapterDisplayMode に失敗しました。");
356-// if(CONFIG::DUAL_VIEW) {
357-// D3DDISPLAYMODE structD3DDisplayMode1;
358-// hr = God::_pID3D9->GetAdapterDisplayMode(1, &structD3DDisplayMode1);
359-// returnWhenFailed(hr, D3D_OK, "2画面目 GetAdapterDisplayMode に失敗しました");
360-// _paPresetPrm[_primary_adapter_no].BackBufferFormat = structD3DDisplayMode0.Format; //現在の画面モードを利用
361-// _paPresetPrm[_secondary_adapter_no].BackBufferFormat = structD3DDisplayMode1.Format; //現在の画面モードを利用
362-// } else {
363-// _paPresetPrm[_primary_adapter_no].BackBufferFormat = structD3DDisplayMode0.Format; //現在の画面モードを利用
364-// _paPresetPrm[_secondary_adapter_no].BackBufferFormat = D3DFMT_UNKNOWN; //現在の画面モードを利用
365-// }
366- }
367-
368- //アンチアイリアスにできるかチェック
369- DWORD qualityLevels = D3DMULTISAMPLE_NONE;
370- D3DMULTISAMPLE_TYPE multiSampleType = D3DMULTISAMPLE_NONE;
371-// if( SUCCEEDED(God::_pID3D9->CheckDeviceMultiSampleType(
372-// D3DADAPTER_DEFAULT,
373-// D3DDEVTYPE_HAL,
374-// _paPresetPrm[_primary_adapter_no].BackBufferFormat, //TODO:ウィンドウモード時は
375-// CONFIG::FULL_SCREEN ? FALSE : TRUE,
376-// D3DMULTISAMPLE_2_SAMPLES,
377-// &qualityLevels) ) )
378-// {
379-// if( SUCCEEDED(God::_pID3D9->CheckDeviceMultiSampleType(
380-// D3DADAPTER_DEFAULT,
381-// D3DDEVTYPE_HAL,
382-// _paPresetPrm[_primary_adapter_no].AutoDepthStencilFormat,
383-// CONFIG::FULL_SCREEN ? FALSE : TRUE,
384-// D3DMULTISAMPLE_2_SAMPLES,
385-// nullptr) ) )
386-// {
387-// multiSampleType = D3DMULTISAMPLE_2_SAMPLES;
388-// _TRACE_("ハードウェア MultiSampleType = D3DMULTISAMPLE_2_SAMPLES 有効!!");
389-// } else {
390-// multiSampleType = D3DMULTISAMPLE_NONE;
391-// qualityLevels = D3DMULTISAMPLE_NONE;
392-// }
393-// } else {
394-// multiSampleType = D3DMULTISAMPLE_NONE;
395-// qualityLevels = D3DMULTISAMPLE_NONE;
396-// }
308+ //「フルスクリーンモード・2画面使用・RENDER_TARGET_BUFFERサイズ無視
309+ if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
310+ //「フルスクリーンモード・2画面使用・縦横比FIX」の1画面目フロントバッファ描画領域
311+ LONG fix_width = CONFIG::GAME_BUFFER_WIDTH*CONFIG::VIEW1_WIDTH_RATIO/2;
312+ LONG fix_height = CONFIG::GAME_BUFFER_HEIGHT*CONFIG::VIEW1_HEIGHT_RATIO;
313+ if (1.0f * CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH / CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT > 1.0f * fix_width / fix_height) {
314+ //より横長になってしまっている
315+ double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT / fix_height; //縮小率=縦幅の比率
316+ _aRect_Present[PRIMARY_VIEW].left = (CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH / 2.0) - (fix_width * rate / 2.0);
317+ _aRect_Present[PRIMARY_VIEW].top = 0;
318+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
319+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
320+ } else {
321+ //より縦長になってしまっている
322+ double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH / fix_width; //縮小率=横幅の比率
323+ _aRect_Present[PRIMARY_VIEW].left = 0;
324+ _aRect_Present[PRIMARY_VIEW].top = (CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT / 2.0) - (fix_height * rate / 2.0);
325+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
326+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
327+ }
328+ //「フルスクリーンモード・2画面使用・縦横比FIX」の2画面目フロントバッファ描画領域
329+ fix_width = CONFIG::GAME_BUFFER_WIDTH*CONFIG::VIEW2_WIDTH_RATIO/2;
330+ fix_height = CONFIG::GAME_BUFFER_HEIGHT*CONFIG::VIEW2_HEIGHT_RATIO;
331+ if (1.0f * CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH / CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT > 1.0f * fix_width / fix_height) {
332+ //より横長になってしまっている
333+ double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT / fix_height; //縮小率=縦幅の比率
334+ _aRect_Present[SECONDARY_VIEW].left = (CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH / 2.0) - (fix_width * rate / 2.0);
335+ _aRect_Present[SECONDARY_VIEW].top = 0;
336+ _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
337+ _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
338+ } else {
339+ //より縦長になってしまっている
340+ double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH / fix_width; //縮小率=横幅の比率
341+ _aRect_Present[SECONDARY_VIEW].left = 0;
342+ _aRect_Present[SECONDARY_VIEW].top = (CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT / 2.0) - (fix_height * rate / 2.0);
343+ _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
344+ _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
345+ }
346+ setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION1, _aRect_Present[PRIMARY_VIEW],
347+ CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH, CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT);
348+ setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION2, _aRect_Present[SECONDARY_VIEW],
349+ CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH, CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT);
350+ } else {
351+ //「フルスクリーンモード・2画面使用・縦横比ストレッチ」の1画面目フロントバッファ描画領域
352+ _aRect_Present[PRIMARY_VIEW].left = 0;
353+ _aRect_Present[PRIMARY_VIEW].top = 0;
354+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
355+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
356+ //「フルスクリーンモード・2画面使用・縦横比ストレッチ」の2画面目フロントバッファ描画領域
357+ _aRect_Present[SECONDARY_VIEW].left = 0;
358+ _aRect_Present[SECONDARY_VIEW].top = 0;
359+ _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
360+ _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
361+ }
362+ } else {
363+ //フルスクリーンモード・1画面使用
364+ _aRect_ViewScreen[PRIMARY_VIEW].top = 0;
365+ _aRect_ViewScreen[PRIMARY_VIEW].left = 0;
366+ _aRect_ViewScreen[PRIMARY_VIEW].right = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
367+ _aRect_ViewScreen[PRIMARY_VIEW].bottom = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
368+ _aRect_ViewScreen[SECONDARY_VIEW] = _aRect_ViewScreen[PRIMARY_VIEW];
397369
370+ //「フルスクリーンモード・1画面使用・RENDER_TARGET_BUFFERサイズ無視」
371+ if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
372+ //「フルスクリーンモード・1画面使用・縦横比FIX」のフロントバッファ描画領域
373+ LONG fix_width = CONFIG::GAME_BUFFER_WIDTH*CONFIG::VIEW1_WIDTH_RATIO;
374+ LONG fix_height = CONFIG::GAME_BUFFER_HEIGHT*CONFIG::VIEW1_HEIGHT_RATIO;
375+ if (1.0f * CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH / CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT > 1.0f * fix_width / fix_height) {
376+ //より横長になってしまっている
377+ double rate = 1.0 * CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT / fix_height; //縮小率=縦幅の比率
378+ _aRect_Present[PRIMARY_VIEW].left = (CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH / 2.0) - (fix_width * rate / 2.0);
379+ _aRect_Present[PRIMARY_VIEW].top = 0;
380+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
381+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
382+ } else {
383+ //より縦長になってしまっている
384+ double rate = 1.0 * CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH / fix_width; //縮小率=横幅の比率
385+ _aRect_Present[PRIMARY_VIEW].left = 0;
386+ _aRect_Present[PRIMARY_VIEW].top = (CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT / 2.0) - (fix_height * rate / 2.0);
387+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
388+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
389+ }
390+ _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
391+ setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[PRIMARY_VIEW],
392+ CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH, CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT);
393+ setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[SECONDARY_VIEW],
394+ CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH, CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT);
395+ } else {
396+ //「フルスクリーンモード・1画面使用・縦横比ストレッチ」のフロントバッファ描画領域
397+ _aRect_Present[PRIMARY_VIEW].left = 0;
398+ _aRect_Present[PRIMARY_VIEW].top = 0;
399+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
400+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
401+ _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
402+ }
398403
399- if(CONFIG::DUAL_VIEW) {
400- //マルチサンプルの数
401- _paPresetPrm[_primary_adapter_no].MultiSampleType = multiSampleType;//D3DMULTISAMPLE_NONE;
402- //マルチサンプルの品質レベル
403- _paPresetPrm[_primary_adapter_no].MultiSampleQuality = qualityLevels - (qualityLevels > 0 ? 1 : 0);
404- //マルチサンプルの数
405- _paPresetPrm[_secondary_adapter_no].MultiSampleType = multiSampleType;//D3DMULTISAMPLE_NONE;
406- //マルチサンプルの品質レベル
407- _paPresetPrm[_secondary_adapter_no].MultiSampleQuality = qualityLevels - (qualityLevels > 0 ? 1 : 0);
404+ }
408405 } else {
409- //マルチサンプルの数
410- _paPresetPrm[_primary_adapter_no].MultiSampleType = multiSampleType;//D3DMULTISAMPLE_NONE;
411- //マルチサンプルの品質レベル
412- _paPresetPrm[_primary_adapter_no].MultiSampleQuality = qualityLevels - (qualityLevels > 0 ? 1 : 0);
413- }
414-
415- //マルチサンプルの数
416- //_paPresetPrm[_primary_adapter_no].MultiSampleType = D3DMULTISAMPLE_NONMASKABLE;//D3DMULTISAMPLE_NONE;
417- //マルチサンプルの品質レベル
418- //_paPresetPrm[_primary_adapter_no].MultiSampleQuality = 0;//qualityLevels - (qualityLevels > 0 ? 1 : 0);
406+ //ウィンドウモード
407+ if (CONFIG::DUAL_VIEW) {
408+ //ウィンドウモード・2窓使用
409+ if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
410+ LONG fix_width = CONFIG::VIEW_SOURCE_BUFFER_WIDTH*CONFIG::VIEW1_WIDTH_RATIO/2;
411+ LONG fix_height = CONFIG::VIEW_SOURCE_BUFFER_HEIGHT*CONFIG::VIEW1_HEIGHT_RATIO;
412+ //「ウィンドウモード・2窓使用・縦横比FIX・ピクセルストレッチ」の1窓目フロントバッファ描画領域
413+ if (1.0f * CONFIG::DUAL_VIEW_WINDOW1_WIDTH / CONFIG::DUAL_VIEW_WINDOW1_HEIGHT > 1.0f * fix_width / fix_height) {
414+ //より横長になってしまっている
415+ double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW1_HEIGHT / fix_height; //縮小率=縦幅の比率
416+ _aRect_Present[PRIMARY_VIEW].left = (CONFIG::DUAL_VIEW_WINDOW1_WIDTH / 2.0) - (fix_width * rate / 2.0);
417+ _aRect_Present[PRIMARY_VIEW].top = 0;
418+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
419+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
420+ } else {
421+ //より縦長になってしまっている
422+ double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW1_WIDTH / fix_width; //縮小率=横幅の比率
423+ _aRect_Present[PRIMARY_VIEW].left = 0;
424+ _aRect_Present[PRIMARY_VIEW].top = (CONFIG::DUAL_VIEW_WINDOW1_HEIGHT / 2.0) - (fix_height * rate / 2.0);
425+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
426+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
427+ }
419428
429+ fix_width = CONFIG::VIEW_SOURCE_BUFFER_WIDTH*CONFIG::VIEW2_WIDTH_RATIO/2;
430+ fix_height = CONFIG::VIEW_SOURCE_BUFFER_HEIGHT*CONFIG::VIEW2_HEIGHT_RATIO;
431+ //「ウィンドウモード・2窓使用・縦横比FIX」の2窓目フロントバッファ描画領域
432+ if (1.0f * CONFIG::DUAL_VIEW_WINDOW2_WIDTH / CONFIG::DUAL_VIEW_WINDOW2_HEIGHT > 1.0f * fix_width / fix_height) {
433+ //より横長になってしまっている
434+ double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW2_HEIGHT / fix_height; //縮小率=縦幅の比率
435+ _aRect_Present[SECONDARY_VIEW].left = (CONFIG::DUAL_VIEW_WINDOW2_WIDTH / 2.0) - (fix_width * rate / 2.0);
436+ _aRect_Present[SECONDARY_VIEW].top = 0;
437+ _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
438+ _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
439+ } else {
440+ //より縦長になってしまっている
441+ double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW2_WIDTH / fix_width; //縮小率=横幅の比率
442+ _aRect_Present[SECONDARY_VIEW].left = 0;
443+ _aRect_Present[SECONDARY_VIEW].top = (CONFIG::DUAL_VIEW_WINDOW2_HEIGHT / 2.0) - (fix_height * rate / 2.0);
444+ _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
445+ _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
446+ }
420447
421- //バックバッファサイズ
422- if (CONFIG::FULL_SCREEN) {
423- if(CONFIG::DUAL_VIEW) {
424- //フルスクリーンモード・2画面使用 (フルスクリーンチェックで上書きされるかもしれない)
425- _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
426- _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
427- _paPresetPrm[_secondary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
428- _paPresetPrm[_secondary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
429- } else {
430- //フルスクリーンモード・1画面使用 (フルスクリーンチェックで上書きされるかもしれない)
431- _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
432- _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
433- _paPresetPrm[_secondary_adapter_no].BackBufferWidth = 0;
434- _paPresetPrm[_secondary_adapter_no].BackBufferHeight = 0;
435- }
436- } else {
437- if(CONFIG::DUAL_VIEW) {
438- //ウィンドウモード・2画面使用
439- _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::RENDER_TARGET_BUFFER_WIDTH;
440- _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::RENDER_TARGET_BUFFER_HEIGHT;
441- _paPresetPrm[_secondary_adapter_no].BackBufferWidth = 0;
442- _paPresetPrm[_secondary_adapter_no].BackBufferHeight = 0;
448+ setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION1, _aRect_Present[PRIMARY_VIEW],
449+ CONFIG::DUAL_VIEW_WINDOW1_WIDTH, CONFIG::DUAL_VIEW_WINDOW1_HEIGHT);
450+ setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION2, _aRect_Present[SECONDARY_VIEW],
451+ CONFIG::DUAL_VIEW_WINDOW2_WIDTH, CONFIG::DUAL_VIEW_WINDOW2_HEIGHT);
452+ } else {
453+ //「ウィンドウモード・2窓使用・縦横比ストレッチ」の1窓目フロントバッファ描画領域
454+ _aRect_Present[PRIMARY_VIEW].left = 0;
455+ _aRect_Present[PRIMARY_VIEW].top = 0;
456+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::DUAL_VIEW_WINDOW1_WIDTH;
457+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::DUAL_VIEW_WINDOW1_HEIGHT;
458+ //「ウィンドウモード・2窓使用・縦横比ストレッチ」の2窓目フロントバッファ描画領域
459+ _aRect_Present[SECONDARY_VIEW].left = 0;
460+ _aRect_Present[SECONDARY_VIEW].top = 0;
461+ _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + CONFIG::DUAL_VIEW_WINDOW2_WIDTH;
462+ _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + CONFIG::DUAL_VIEW_WINDOW2_HEIGHT;
463+ }
443464 } else {
444- //ウィンドウモード・1画面使用
445- _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::RENDER_TARGET_BUFFER_WIDTH;
446- _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::RENDER_TARGET_BUFFER_HEIGHT;
447- _paPresetPrm[_secondary_adapter_no].BackBufferWidth = 0;
448- _paPresetPrm[_secondary_adapter_no].BackBufferHeight = 0;
465+ //ウィンドウモード・1窓使用
466+ if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
467+ LONG fix_width = CONFIG::VIEW_SOURCE_BUFFER_WIDTH*CONFIG::VIEW2_WIDTH_RATIO;
468+ LONG fix_height = CONFIG::VIEW_SOURCE_BUFFER_HEIGHT*CONFIG::VIEW2_HEIGHT_RATIO;
469+ //「ウィンドウモード・1窓使用・縦横比FIX」のフロントバッファ描画領域
470+ if (1.0f * CONFIG::SINGLE_VIEW_WINDOW_WIDTH / CONFIG::SINGLE_VIEW_WINDOW_HEIGHT > 1.0f * fix_width / fix_height) {
471+ //より横長になってしまっている
472+ double rate = 1.0 * CONFIG::SINGLE_VIEW_WINDOW_HEIGHT / fix_height; //縮小率=縦幅の比率
473+ _aRect_Present[PRIMARY_VIEW].left = (CONFIG::SINGLE_VIEW_WINDOW_WIDTH / 2.0) - (fix_width * rate / 2.0);
474+ _aRect_Present[PRIMARY_VIEW].top = 0;
475+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
476+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
477+ } else {
478+ //より縦長になってしまっている
479+ double rate = 1.0 * CONFIG::SINGLE_VIEW_WINDOW_WIDTH / fix_width; //縮小率=横幅の比率
480+ _aRect_Present[PRIMARY_VIEW].left = 0;
481+ _aRect_Present[PRIMARY_VIEW].top = (CONFIG::SINGLE_VIEW_WINDOW_HEIGHT / 2.0) - (fix_height * rate / 2.0);
482+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
483+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
484+ }
485+ _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
486+ setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[PRIMARY_VIEW],
487+ CONFIG::SINGLE_VIEW_WINDOW_WIDTH, CONFIG::SINGLE_VIEW_WINDOW_HEIGHT);
488+ setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[SECONDARY_VIEW],
489+ CONFIG::SINGLE_VIEW_WINDOW_WIDTH, CONFIG::SINGLE_VIEW_WINDOW_HEIGHT);
490+ } else {
491+ //「ウィンドウモード・1窓使用・縦横比ストレッチ」のフロントバッファ描画領域
492+ _aRect_Present[PRIMARY_VIEW].left = 0;
493+ _aRect_Present[PRIMARY_VIEW].top = 0;
494+ _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::SINGLE_VIEW_WINDOW_WIDTH;
495+ _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::SINGLE_VIEW_WINDOW_HEIGHT;
496+ _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
497+ }
449498 }
450499 }
451500
452- _paDisplayMode = NEW D3DDISPLAYMODEEX[_num_adapter > 2 ? _num_adapter : 2];
453- _paDisplayMode[_primary_adapter_no].Size = sizeof(_paDisplayMode[_primary_adapter_no]);
454- _paDisplayMode[_primary_adapter_no].Width = _paPresetPrm[_primary_adapter_no].BackBufferWidth;
455- _paDisplayMode[_primary_adapter_no].Height = _paPresetPrm[_primary_adapter_no].BackBufferHeight;
456- _paDisplayMode[_primary_adapter_no].Format = _paPresetPrm[_primary_adapter_no].BackBufferFormat;
457- _paDisplayMode[_primary_adapter_no].RefreshRate = _paPresetPrm[_primary_adapter_no].FullScreen_RefreshRateInHz;
458- _paDisplayMode[_primary_adapter_no].ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
459-
460- _paDisplayMode[_secondary_adapter_no].Size = sizeof(_paDisplayMode[_secondary_adapter_no]);
461- _paDisplayMode[_secondary_adapter_no].Width = _paPresetPrm[_secondary_adapter_no].BackBufferWidth;
462- _paDisplayMode[_secondary_adapter_no].Height = _paPresetPrm[_secondary_adapter_no].BackBufferHeight;
463- _paDisplayMode[_secondary_adapter_no].Format = _paPresetPrm[_secondary_adapter_no].BackBufferFormat;
464- _paDisplayMode[_secondary_adapter_no].RefreshRate = _paPresetPrm[_secondary_adapter_no].FullScreen_RefreshRateInHz;
465- _paDisplayMode[_secondary_adapter_no].ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
466-
467- //フルスクリーン時3画面目以降のパラメータを1画面のパラメータのコピーで作成
468- for (int i = 0; i < _num_adapter; i++) {
469- if (i != _primary_adapter_no && i != _secondary_adapter_no) {
470- _paPresetPrm[i] = _paPresetPrm[_primary_adapter_no];
471- _paDisplayMode[i] = _paDisplayMode[_primary_adapter_no];
472- }
501+#ifdef MY_DEBUG
502+ _TRACE_("初期設定");
503+ if (CONFIG::DUAL_VIEW) {
504+ _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left );
505+ _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top );
506+ _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].right = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].right );
507+ _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].bottom = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].bottom);
508+ _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left );
509+ _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top );
510+ _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].right = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].right );
511+ _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].bottom = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].bottom);
512+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].left = "<<_aRect_Present[PRIMARY_VIEW].left );
513+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].top = "<<_aRect_Present[PRIMARY_VIEW].top );
514+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].right = "<<_aRect_Present[PRIMARY_VIEW].right );
515+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].bottom = "<<_aRect_Present[PRIMARY_VIEW].bottom);
516+ _TRACE_(" _aRect_Present[SECONDARY_VIEW].left = "<<_aRect_Present[SECONDARY_VIEW].left );
517+ _TRACE_(" _aRect_Present[SECONDARY_VIEW].top = "<<_aRect_Present[SECONDARY_VIEW].top );
518+ _TRACE_(" _aRect_Present[SECONDARY_VIEW].right = "<<_aRect_Present[SECONDARY_VIEW].right );
519+ _TRACE_(" _aRect_Present[SECONDARY_VIEW].bottom = "<<_aRect_Present[SECONDARY_VIEW].bottom);
520+ } else {
521+ _TRACE_(" _rectRenderTargetBuffer.left = "<<_rectRenderTargetBuffer.left );
522+ _TRACE_(" _rectRenderTargetBuffer.top = "<<_rectRenderTargetBuffer.top );
523+ _TRACE_(" _rectRenderTargetBuffer.right = "<<_rectRenderTargetBuffer.right );
524+ _TRACE_(" _rectRenderTargetBuffer.bottom = "<<_rectRenderTargetBuffer.bottom);
525+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].left = "<<_aRect_Present[PRIMARY_VIEW].left );
526+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].top = "<<_aRect_Present[PRIMARY_VIEW].top );
527+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].right = "<<_aRect_Present[PRIMARY_VIEW].right );
528+ _TRACE_(" _aRect_Present[PRIMARY_VIEW].bottom = "<<_aRect_Present[PRIMARY_VIEW].bottom);
473529 }
530+#endif
531+}
474532
475- //アダプタ情報格納
476- _paAvailableAdapter = NEW Adapter[_num_adapter];
477- for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
478- _paAvailableAdapter[adapter_no].hMonitor = God::_pID3D9->GetAdapterMonitor(adapter_no);
479- int mode_num = God::_pID3D9->GetAdapterModeCount(adapter_no, D3DFMT_X8R8G8B8);
480- _paAvailableAdapter[adapter_no].setModeNum(mode_num);
481- D3DDISPLAYMODE* paMode = _paAvailableAdapter[adapter_no].paModes;
482- for (int n = 0; n < mode_num; n++) {
483- God::_pID3D9->EnumAdapterModes(adapter_no, D3DFMT_X8R8G8B8, n, &(paMode[n]));
484- }
485- }
486533
487- //解像度情報格納
488- _paAdapterRezos = NEW AdapterRezos[_num_adapter];
489- for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
490- std::vector<UINT> vecWidth;
491- std::vector<UINT> vecHeight;
492- std::vector<std::string> vecRezo;
493- int mode_num = _paAvailableAdapter[adapter_no].mode_num;
494- D3DDISPLAYMODE* paMode = pGOD->_paAvailableAdapter[adapter_no].paModes;
495- _TRACE_("画面["<<adapter_no<<"] mode_num="<<mode_num);
496- for (int n = 0; n < mode_num; n++) {
497- UINT width = paMode[n].Width;
498- UINT height = paMode[n].Height;
499- D3DFORMAT format = paMode[n].Format;
500- std::ostringstream oss;
501- oss << width << "X" << height;
502- std::string rezo = oss.str();
503- if (std::find(vecRezo.begin(), vecRezo.end(), rezo) == vecRezo.end()) {
504- vecRezo.push_back(rezo);
505- vecWidth.push_back(width);
506- vecHeight.push_back(height);
507- }
508- }
509- _paAdapterRezos[adapter_no].init(vecRezo.size());
510- for (int n = 0; n < vecRezo.size(); n++) {
511- //存在していない
512- _paAdapterRezos[adapter_no].paRezoInfo[n].width = vecWidth[n];
513- _paAdapterRezos[adapter_no].paRezoInfo[n].height = vecHeight[n];
514- _paAdapterRezos[adapter_no].paRezoInfo[n].item_str = vecRezo[n];
534+int God::checkAppropriateDisplaySize(God::RezoInfo* prm_paRezos, int prm_rezo_num,
535+ UINT prm_width, UINT prm_height) {
536+ _TRACE_("checkAppropriateDisplaySize() 所望解像度、"<<prm_width<<"x"<<prm_height);
537+
538+ for (int n = 0; n < prm_rezo_num; n++) {
539+ if (prm_width == prm_paRezos[n].width && prm_height == prm_paRezos[n].height) {
540+ _TRACE_("["<<n<<"] でBINGO!");
541+ return n; //ぴったし
515542 }
516543 }
544+ _TRACE_("BINGOなし、近い解像度を探します。");
545+ int cfg_width = (int)(prm_width * 1.1); //解像度の高い方をやや選択しやすくするため
546+ int cfg_height = (int)(prm_height * 1.1); //10%水増し
547+ double cfg_aspect = 1.0 * cfg_width / cfg_height;
517548
518- _TRACE_("利用可能画面解像度一覧");
519-
520- for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
521- for (int n = 0; n < _paAdapterRezos[adapter_no].rezo_num; n++) {
522- RezoInfo* pMode = _paAdapterRezos[adapter_no].paRezoInfo;
523- _TRACE_("["<<adapter_no<<"]["<<n<<"]="<<(pMode[n].width)<<","<<(pMode[n].height)<<" = "<<(pMode[n].item_str));
549+ int eval_top = INT_MAX; //評価(小さいほど良い)
550+ int resut_index = 0;
551+ for (int n = 0; n < prm_rezo_num; n++) {
552+ int disp_width = (int)(prm_paRezos[n].width);
553+ int disp_height = (int)(prm_paRezos[n].height);
554+ int eval_level = ABS(disp_width-cfg_width) + (int)(ABS(disp_height-cfg_height) * cfg_aspect * 1.5); //アスペクト比をやや重視のため1.5倍
555+ _TRACE_("["<<n<<"] "<<disp_width<<"x"<<disp_height<<" ・・・ 評価:"<<eval_level);
556+ if (eval_level < eval_top) {
557+ eval_top = eval_level;
558+ resut_index = n;
524559 }
525560 }
526- _TRACE_("------------------------------------------------");
561+ _TRACE_("checkAppropriateDisplaySize() 結論、["<<resut_index<<"] の "<<
562+ prm_paRezos[resut_index].width<<"x"<<prm_paRezos[resut_index].height<<" が良さげじゃなかしら!");
563+ return resut_index;
564+}
527565
528- //フルスクリーン要求時、指定解像度に出来るか調べ、
529- //出来ない場合は、近い解像度を探し、
530- //_paPresetPrm[] と、_paDisplayMode[] を上書きする。
531- EnumDisplayMonitors(nullptr, nullptr, God::updateMoniterPixcoordCallback, (LPARAM)this);
566+void God::createWindow(WNDCLASSEX& prm_wndclass1, WNDCLASSEX& prm_wndclass2,
567+ const char* prm_title1 , const char* prm_title2,
568+ DWORD prm_dwStyle1 , DWORD prm_dwStyle2,
569+ HWND& out_hWnd1 , HWND& out_hWnd2) {
532570
533- if (CONFIG::FULL_SCREEN) {
534- for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
535- _TRACE_("--- " << adapter_no+1 << "画面目 の解像度設定 --->");
536- int rezo_num = _paAdapterRezos[adapter_no].rezo_num;
537- RezoInfo* paRezos = _paAdapterRezos[adapter_no].paRezoInfo;
571+ //2011/09/18 WDDM が使用できるなら使用するように変更。
572+ // マルチモニタフルスクリーン時のデバイスロスト時の復旧が、
573+ // XPではうまくいくのにVistaではうまくいかない時があることが発覚。
574+ // IDirect3D9Ex の存在が気になり、試す事に至った。
575+ // WDDMつまり IDirect3D9Ex or IDirect3D9 の選択を行う。
576+ // IDirect3D9Ex を取得する Direct3DCreate9Ex() を使用し、
577+ // 戻り値の結果で判定すれば良いと安易に考えていたが、
578+ // IDirect3D9Ex の実態が、Vista 以降 の d3d9.dll にのみ存在するらしく、
579+ // Direct3DCreate9Ex() 関数のコードを書いた時点で、XPの場合 d3d9.dll ロード時に
580+ // 「エントリポイントがありません」とかいうエラーになってしまい実行すらできない。
581+ // コードを両対応させるには、Direct3DCreate9Ex() は使えないと思う。
582+ // そこで以下のように d3d9.dll から、Direct3DCreate9Ex を直接探して、ポインタを
583+ // 取得する方法がMSDNにあったので、参考にして実装。
584+ // __uuid 演算子が GCC には無いので、IDD_IDirect3D9 に変更。
585+ // TODO::これで正解なのだろうか…。
538586
539- if (CONFIG::DUAL_VIEW) {
540- //2画面フルスクリーン時
541- if (adapter_no == _primary_adapter_no) {
542- //ゲーム画面1画面目
543- int n = checkAppropriateDisplaySize(
544- paRezos, rezo_num,
545- (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH,
546- (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT
547- );
548- CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH = (pixcoord)(paRezos[n].width);
549- CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT = (pixcoord)(paRezos[n].height);
550- _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
551- _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
552- _TRACE_("ゲーム画面1画面目(adapter_no="<<adapter_no<<")は、"<<paRezos[n].width<<"x"<<paRezos[n].height<<" に設定");
553- } else if (adapter_no == _secondary_adapter_no) {
554- //ゲーム画面2画面目
555- int n = checkAppropriateDisplaySize(
556- paRezos, rezo_num,
557- (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH,
558- (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT
559- );
560- CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH = (pixcoord)(paRezos[n].width);
561- CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT = (pixcoord)(paRezos[n].height);
562- _paPresetPrm[_secondary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
563- _paPresetPrm[_secondary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
564- _TRACE_("ゲーム画面2画面目(adapter_no="<<adapter_no<<")は、"<<paRezos[n].width<<"x"<<paRezos[n].height<<" に設定");
565- } else {
566- //メモ:ゲーム画面3画面目以降1画面目・2画面目の解像度は、現状の解像度をそのまま設定。
567- pixcoord width = _paAvailableAdapter[adapter_no].rcMonitor.right - _paAvailableAdapter[adapter_no].rcMonitor.left;
568- pixcoord height = _paAvailableAdapter[adapter_no].rcMonitor.bottom - _paAvailableAdapter[adapter_no].rcMonitor.top;
569- _paPresetPrm[adapter_no].BackBufferWidth = width;
570- _paPresetPrm[adapter_no].BackBufferHeight = height;
571- _TRACE_("adapter_no="<<adapter_no << "の画面は、現状の "<<width<<"x"<<height<<" に設定");
572- }
587+ HRESULT hr;
588+ typedef HRESULT (WINAPI *DIRECT3DCREATE9EXFUNCTION)(UINT SDKVersion, IDirect3D9Ex**);
589+ IDirect3D9* pID3D9 = nullptr;
590+ IDirect3D9Ex* pID3D9Ex = nullptr;
591+ HMODULE hD3D = LoadLibrary(TEXT("d3d9.dll"));
573592
574- } else {
575- //1画面フルスクリーン時
576- if (adapter_no == _primary_adapter_no) {
577- int n = checkAppropriateDisplaySize(
578- paRezos, rezo_num,
579- (UINT)CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH,
580- (UINT)CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT
581- );
582- CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH = (pixcoord)(paRezos[n].width);
583- CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT = (pixcoord)(paRezos[n].height);
584- _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
585- _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
586- } else {
587- _paPresetPrm[adapter_no].BackBufferWidth = 0;
588- _paPresetPrm[adapter_no].BackBufferHeight = 0;
589- }
593+ DIRECT3DCREATE9EXFUNCTION pFunc_Direct3DCreate9Ex = (DIRECT3DCREATE9EXFUNCTION)GetProcAddress(hD3D, "Direct3DCreate9Ex");
594+ if (pFunc_Direct3DCreate9Ex) {
595+ _TRACE_("d3d9.dllに、Direct3DCreate9Exは存在しました。");
596+ //d3d9.dll に Direct3DCreate9Ex は存在する。
597+ hr = ((*pFunc_Direct3DCreate9Ex)(D3D_SDK_VERSION, &pID3D9Ex)); //Direct3DCreate9Ex 実行
598+ if (FAILED(hr)) {
599+ FreeLibrary(hD3D);
600+ throwCriticalException("IDirect3D9Ex コンポーネント取得に失敗しました。(1)"); //失敗
601+ }
602+// hr = pID3D9Ex->QueryInterface(IID_IDirect3D9, reinterpret_cast<void **>(&pID3D9)); //COMとして使用
603+// if (FAILED(hr)) {
604+// MessageBox(God::_pHWndPrimary, TEXT("IDirect3D9Ex コンポーネント取得に失敗しました。(2)"), TEXT("ERROR"), MB_OK | MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST);
605+// FreeLibrary(hD3D);
606+// return E_FAIL; //失敗
607+// }
608+ God::_pID3D9 = (IDirect3D9*)pID3D9Ex;
609+ _can_wddm = true;
610+ _TRACE_("WDDM モード");
611+ } else {
612+ _TRACE_("d3d9.dllに、Direct3DCreate9Exは存在しませんでした。");
613+ //d3d9.dll に Direct3DCreate9Ex は存在しない。
614+ pID3D9 = Direct3DCreate9(D3D_SDK_VERSION);
615+ if (!pID3D9) {
616+ FreeLibrary(hD3D);
617+ throwCriticalException("IDirect3D9 コンポーネント取得に失敗しました。");
618+ }
619+ God::_pID3D9 = pID3D9;
620+ _can_wddm = false;
621+ _TRACE_("XPDM モード");
622+ }
623+ FreeLibrary(hD3D);
624+
625+ //デバイスパラメータ作成
626+ D3DCAPS9 caps;
627+ God::_pID3D9->GetDeviceCaps(D3DADAPTER_DEFAULT, // [in] ディスプレイ アダプタを示す序数。
628+ D3DDEVTYPE_HAL, // [in] デバイスの種類。 D3DDEVTYPE列挙型のメンバ
629+ &caps); // [out] デバイスの能力が格納される
590630
631+ _num_adapter = caps.NumberOfAdaptersInGroup; //使えるアダプタの数取得
632+ _TRACE_("_num_adapter = "<< _num_adapter);
633+ if (CONFIG::FULL_SCREEN && CONFIG::DUAL_VIEW) {
634+ if (_num_adapter < 2) {
635+ _TRACE_("【警告】2画面フルスクリーン設定ですが、マルチモニタを検出できません。強制的に1画面フルスクリーンで起動します");
636+ MessageBox(God::_pHWndPrimary,
637+ "【警告】2画面フルスクリーン設定ですが、マルチモニタを検出できません。\n強制的に1画面フルスクリーンで起動します",
638+ "WARNING", MB_OK | MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST);
639+ _primary_adapter_no = 0;
640+ _secondary_adapter_no = 1;
641+ CONFIG::DUAL_VIEW = false;
642+ CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH_BK = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
643+ CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT_BK = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
644+ CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
645+ CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
646+ } else {
647+ if (_num_adapter < CONFIG::PRIMARY_ADAPTER_NO+1 || _num_adapter < CONFIG::SECONDARY_ADAPTER_NO+1) {
648+ throwCriticalException("範囲外のディスプレイアダプタ番号を指定しています。アダプタ番号は 0〜"<<_num_adapter-1<<" が有効です。\n"
649+ "PRIMARY_ADAPTER_NO="<<CONFIG::PRIMARY_ADAPTER_NO<<", "
650+ "SECONDARY_ADAPTER_NO="<<CONFIG::SECONDARY_ADAPTER_NO );
591651 }
592- //上書き更新
593- _paDisplayMode[adapter_no].Width = _paPresetPrm[adapter_no].BackBufferWidth;
594- _paDisplayMode[adapter_no].Height = _paPresetPrm[adapter_no].BackBufferHeight;
595- _TRACE_("<---" << adapter_no+1 << "画面目の解像度は、"<<_paDisplayMode[adapter_no].Width<<"x"<<_paDisplayMode[adapter_no].Height<<"に確定しました。");
596652 }
597653 }
598654
599- //[メモ:RECT構造体]
600- //引数に使用するRECT構造体のメンバ right, bottom は「右下座標」となっているが表現が正確ではない。
601- //実際の定義は
602- //rect.right = rect.left + 矩形幅;
603- //rect.bottom = rect.top + 矩形高さ;
604- //つまり (10,10)-(17,17) 領域は、RECT(10,10,18,18) と指定するのが意図した使用方法らしい。
605- //ややこしい、しかし、辺の長さを求める場合は便利である。
606- //(※本当の右下座標は、right, bottom の -1 の値になる)
607- _rectGameBuffer.left = 0;
608- _rectGameBuffer.top = 0;
609- _rectGameBuffer.right = _rectGameBuffer.left + CONFIG::GAME_BUFFER_WIDTH;
610- _rectGameBuffer.bottom = _rectGameBuffer.top + CONFIG::GAME_BUFFER_HEIGHT;
655+ _paPresetPrm = NEW D3DPRESENT_PARAMETERS[_num_adapter > 2 ? _num_adapter : 2];
656+ ZeroMemory(&_paPresetPrm[_primary_adapter_no], sizeof(D3DPRESENT_PARAMETERS));
611657
612- _rectRenderTargetBuffer.left = (CONFIG::RENDER_TARGET_BUFFER_WIDTH / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_WIDTH / 2.0);
613- _rectRenderTargetBuffer.top = (CONFIG::RENDER_TARGET_BUFFER_HEIGHT / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_HEIGHT / 2.0);
614- _rectRenderTargetBuffer.right = _rectRenderTargetBuffer.left + CONFIG::VIEW_SOURCE_BUFFER_WIDTH;
615- _rectRenderTargetBuffer.bottom = _rectRenderTargetBuffer.top + CONFIG::VIEW_SOURCE_BUFFER_HEIGHT;
658+ //ウィンドウ時・フルスクリーン時共通
659+ _paPresetPrm[_primary_adapter_no].BackBufferCount = 1; //バックバッファの数
660+ _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = TRUE; //バックバッファの Zバッファの自動作成
661+ _paPresetPrm[_primary_adapter_no].AutoDepthStencilFormat = D3DFMT_D24S8; //深度ステンシルバッファ //D3DFMT_D16;
662+ _paPresetPrm[_primary_adapter_no].Flags = 0; //0にしておく
616663
617- _aRect_HarfGameBuffer[PRIMARY_VIEW].left = 0;
618- _aRect_HarfGameBuffer[PRIMARY_VIEW].top = 0;
619- _aRect_HarfGameBuffer[PRIMARY_VIEW].right = _aRect_HarfGameBuffer[PRIMARY_VIEW].left + CONFIG::GAME_BUFFER_WIDTH/2;
620- _aRect_HarfGameBuffer[PRIMARY_VIEW].bottom = _aRect_HarfGameBuffer[PRIMARY_VIEW].top + CONFIG::GAME_BUFFER_HEIGHT;
664+ if (CONFIG::FULL_SCREEN) {
621665
622- _aRect_HarfGameBuffer[SECONDARY_VIEW].left = CONFIG::GAME_BUFFER_WIDTH/2;
623- _aRect_HarfGameBuffer[SECONDARY_VIEW].top = 0;
624- _aRect_HarfGameBuffer[SECONDARY_VIEW].right = _aRect_HarfGameBuffer[SECONDARY_VIEW].left + CONFIG::GAME_BUFFER_WIDTH/2;
625- _aRect_HarfGameBuffer[SECONDARY_VIEW].bottom = _aRect_HarfGameBuffer[SECONDARY_VIEW].top + CONFIG::GAME_BUFFER_HEIGHT;
666+ //フルスクリーン時
667+ _paPresetPrm[_primary_adapter_no].BackBufferFormat = D3DFMT_X8R8G8B8; //D3DFMT_A8R8G8B8; //D3DFMT_X8R8G8B8; //D3DFMT_R5G6B5;
668+ _paPresetPrm[_primary_adapter_no].Windowed = false; //フルスクリーンモード時
669+ _paPresetPrm[_primary_adapter_no].FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //リフレッシュレート
670+ _paPresetPrm[_primary_adapter_no].PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; //スワップのタイミング
671+ _paPresetPrm[_primary_adapter_no].SwapEffect = D3DSWAPEFFECT_DISCARD;
626672
627- _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left = (CONFIG::RENDER_TARGET_BUFFER_WIDTH - CONFIG::VIEW_SOURCE_BUFFER_WIDTH) / 2;
628- _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top = (CONFIG::RENDER_TARGET_BUFFER_HEIGHT / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_HEIGHT / 2.0);
629- _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].right = _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left + CONFIG::VIEW_SOURCE_BUFFER_WIDTH/2;
630- _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].bottom = _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top + CONFIG::VIEW_SOURCE_BUFFER_HEIGHT;
673+ if(CONFIG::DUAL_VIEW) {
674+ _paPresetPrm[_secondary_adapter_no] = _paPresetPrm[_primary_adapter_no]; //ココまでを複製
631675
632- _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left = CONFIG::RENDER_TARGET_BUFFER_WIDTH/2;
633- _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top = (CONFIG::RENDER_TARGET_BUFFER_HEIGHT / 2.0) - (CONFIG::VIEW_SOURCE_BUFFER_HEIGHT / 2.0);
634- _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].right = _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left + CONFIG::VIEW_SOURCE_BUFFER_WIDTH/2;
635- _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].bottom = _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top + CONFIG::VIEW_SOURCE_BUFFER_HEIGHT;
676+ _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = FALSE; //Zバッファの自動作成無効
677+ _paPresetPrm[_secondary_adapter_no].EnableAutoDepthStencil = FALSE;
678+ //【メモ】
679+ //EnableAutoDepthStencil = FALSE;
680+ //とすると、レンダリングステートの D3DRS_ZENABLE が FALSE になるだけのように見える。
681+ //従って「無効」にしただけであり、「使用不可」ではないのだろう・・・。
682+ } else {
683+ _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = FALSE; //Z バッファの自動作成有効
684+ }
685+ } else {
686+ //ウィンドウ時
687+ _paPresetPrm[_primary_adapter_no].BackBufferFormat = D3DFMT_UNKNOWN; //現在の表示モードフォーマット
688+ _paPresetPrm[_primary_adapter_no].Windowed = true; //ウィンドウモード時
689+ _paPresetPrm[_primary_adapter_no].FullScreen_RefreshRateInHz = 0; //リフレッシュレート
690+ _paPresetPrm[_primary_adapter_no].PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //即座
691+ _paPresetPrm[_primary_adapter_no].SwapEffect = D3DSWAPEFFECT_COPY; //TODO:Windowモードはこれ一択なのか?、D3DPRESENT_INTERVAL_ONE とかためす?
636692
637- //表示領域設定
638- if (CONFIG::FULL_SCREEN) {
639- //フルスクリーンモード
640- if (CONFIG::DUAL_VIEW) {
641- _aRect_ViewScreen[PRIMARY_VIEW].top = 0;
642- _aRect_ViewScreen[PRIMARY_VIEW].left = 0;
643- _aRect_ViewScreen[PRIMARY_VIEW].right = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
644- _aRect_ViewScreen[PRIMARY_VIEW].bottom = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
645- _aRect_ViewScreen[SECONDARY_VIEW].top = 0;
646- _aRect_ViewScreen[SECONDARY_VIEW].left = 0;
647- _aRect_ViewScreen[SECONDARY_VIEW].right = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
648- _aRect_ViewScreen[SECONDARY_VIEW].bottom = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
693+ if(CONFIG::DUAL_VIEW) {
694+ _paPresetPrm[_secondary_adapter_no] = _paPresetPrm[_primary_adapter_no]; //ココまでを複製
695+ _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = TRUE; //Z バッファの自動作成
696+ _paPresetPrm[_secondary_adapter_no].EnableAutoDepthStencil = TRUE;
697+ } else {
649698
650- //「フルスクリーンモード・2画面使用・RENDER_TARGET_BUFFERサイズ無視
651- if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
652- //「フルスクリーンモード・2画面使用・縦横比FIX」の1画面目フロントバッファ描画領域
653- LONG fix_width = CONFIG::GAME_BUFFER_WIDTH*CONFIG::VIEW1_WIDTH_RATIO/2;
654- LONG fix_height = CONFIG::GAME_BUFFER_HEIGHT*CONFIG::VIEW1_HEIGHT_RATIO;
655- if (1.0f * CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH / CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT > 1.0f * fix_width / fix_height) {
656- //より横長になってしまっている
657- double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT / fix_height; //縮小率=縦幅の比率
658- _aRect_Present[PRIMARY_VIEW].left = (CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH / 2.0) - (fix_width * rate / 2.0);
659- _aRect_Present[PRIMARY_VIEW].top = 0;
660- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
661- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
662- } else {
663- //より縦長になってしまっている
664- double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH / fix_width; //縮小率=横幅の比率
665- _aRect_Present[PRIMARY_VIEW].left = 0;
666- _aRect_Present[PRIMARY_VIEW].top = (CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT / 2.0) - (fix_height * rate / 2.0);
667- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
668- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
669- }
670- //「フルスクリーンモード・2画面使用・縦横比FIX」の2画面目フロントバッファ描画領域
671- fix_width = CONFIG::GAME_BUFFER_WIDTH*CONFIG::VIEW2_WIDTH_RATIO/2;
672- fix_height = CONFIG::GAME_BUFFER_HEIGHT*CONFIG::VIEW2_HEIGHT_RATIO;
673- if (1.0f * CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH / CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT > 1.0f * fix_width / fix_height) {
674- //より横長になってしまっている
675- double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT / fix_height; //縮小率=縦幅の比率
676- _aRect_Present[SECONDARY_VIEW].left = (CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH / 2.0) - (fix_width * rate / 2.0);
677- _aRect_Present[SECONDARY_VIEW].top = 0;
678- _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
679- _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
680- } else {
681- //より縦長になってしまっている
682- double rate = 1.0 * CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH / fix_width; //縮小率=横幅の比率
683- _aRect_Present[SECONDARY_VIEW].left = 0;
684- _aRect_Present[SECONDARY_VIEW].top = (CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT / 2.0) - (fix_height * rate / 2.0);
685- _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
686- _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
687- }
688- setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION1, _aRect_Present[PRIMARY_VIEW],
689- CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH, CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT);
690- setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION2, _aRect_Present[SECONDARY_VIEW],
691- CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH, CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT);
692- } else {
693- //「フルスクリーンモード・2画面使用・縦横比ストレッチ」の1画面目フロントバッファ描画領域
694- _aRect_Present[PRIMARY_VIEW].left = 0;
695- _aRect_Present[PRIMARY_VIEW].top = 0;
696- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
697- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
698- //「フルスクリーンモード・2画面使用・縦横比ストレッチ」の2画面目フロントバッファ描画領域
699- _aRect_Present[SECONDARY_VIEW].left = 0;
700- _aRect_Present[SECONDARY_VIEW].top = 0;
701- _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
702- _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
703- }
699+ _paPresetPrm[_primary_adapter_no].EnableAutoDepthStencil = TRUE; //Z バッファの自動作成
700+ }
701+
702+// //デスプレイモードの取得
703+// D3DDISPLAYMODE structD3DDisplayMode0; //結果が格納される構造体
704+// hr = God::_pID3D9->GetAdapterDisplayMode(0, &structD3DDisplayMode0);
705+// returnWhenFailed(hr, D3D_OK, "GetAdapterDisplayMode に失敗しました。");
706+// if(CONFIG::DUAL_VIEW) {
707+// D3DDISPLAYMODE structD3DDisplayMode1;
708+// hr = God::_pID3D9->GetAdapterDisplayMode(1, &structD3DDisplayMode1);
709+// returnWhenFailed(hr, D3D_OK, "2画面目 GetAdapterDisplayMode に失敗しました");
710+// _paPresetPrm[_primary_adapter_no].BackBufferFormat = structD3DDisplayMode0.Format; //現在の画面モードを利用
711+// _paPresetPrm[_secondary_adapter_no].BackBufferFormat = structD3DDisplayMode1.Format; //現在の画面モードを利用
712+// } else {
713+// _paPresetPrm[_primary_adapter_no].BackBufferFormat = structD3DDisplayMode0.Format; //現在の画面モードを利用
714+// _paPresetPrm[_secondary_adapter_no].BackBufferFormat = D3DFMT_UNKNOWN; //現在の画面モードを利用
715+// }
716+ }
717+
718+ //アンチアイリアスにできるかチェック
719+ DWORD qualityLevels = D3DMULTISAMPLE_NONE;
720+ D3DMULTISAMPLE_TYPE multiSampleType = D3DMULTISAMPLE_NONE;
721+// if( SUCCEEDED(God::_pID3D9->CheckDeviceMultiSampleType(
722+// D3DADAPTER_DEFAULT,
723+// D3DDEVTYPE_HAL,
724+// _paPresetPrm[_primary_adapter_no].BackBufferFormat, //TODO:ウィンドウモード時は
725+// CONFIG::FULL_SCREEN ? FALSE : TRUE,
726+// D3DMULTISAMPLE_2_SAMPLES,
727+// &qualityLevels) ) )
728+// {
729+// if( SUCCEEDED(God::_pID3D9->CheckDeviceMultiSampleType(
730+// D3DADAPTER_DEFAULT,
731+// D3DDEVTYPE_HAL,
732+// _paPresetPrm[_primary_adapter_no].AutoDepthStencilFormat,
733+// CONFIG::FULL_SCREEN ? FALSE : TRUE,
734+// D3DMULTISAMPLE_2_SAMPLES,
735+// nullptr) ) )
736+// {
737+// multiSampleType = D3DMULTISAMPLE_2_SAMPLES;
738+// _TRACE_("ハードウェア MultiSampleType = D3DMULTISAMPLE_2_SAMPLES 有効!!");
739+// } else {
740+// multiSampleType = D3DMULTISAMPLE_NONE;
741+// qualityLevels = D3DMULTISAMPLE_NONE;
742+// }
743+// } else {
744+// multiSampleType = D3DMULTISAMPLE_NONE;
745+// qualityLevels = D3DMULTISAMPLE_NONE;
746+// }
747+
748+
749+ if(CONFIG::DUAL_VIEW) {
750+ //マルチサンプルの数
751+ _paPresetPrm[_primary_adapter_no].MultiSampleType = multiSampleType;//D3DMULTISAMPLE_NONE;
752+ //マルチサンプルの品質レベル
753+ _paPresetPrm[_primary_adapter_no].MultiSampleQuality = qualityLevels - (qualityLevels > 0 ? 1 : 0);
754+ //マルチサンプルの数
755+ _paPresetPrm[_secondary_adapter_no].MultiSampleType = multiSampleType;//D3DMULTISAMPLE_NONE;
756+ //マルチサンプルの品質レベル
757+ _paPresetPrm[_secondary_adapter_no].MultiSampleQuality = qualityLevels - (qualityLevels > 0 ? 1 : 0);
758+ } else {
759+ //マルチサンプルの数
760+ _paPresetPrm[_primary_adapter_no].MultiSampleType = multiSampleType;//D3DMULTISAMPLE_NONE;
761+ //マルチサンプルの品質レベル
762+ _paPresetPrm[_primary_adapter_no].MultiSampleQuality = qualityLevels - (qualityLevels > 0 ? 1 : 0);
763+ }
764+
765+ //マルチサンプルの数
766+ //_paPresetPrm[_primary_adapter_no].MultiSampleType = D3DMULTISAMPLE_NONMASKABLE;//D3DMULTISAMPLE_NONE;
767+ //マルチサンプルの品質レベル
768+ //_paPresetPrm[_primary_adapter_no].MultiSampleQuality = 0;//qualityLevels - (qualityLevels > 0 ? 1 : 0);
769+
770+
771+ //バックバッファサイズ
772+ if (CONFIG::FULL_SCREEN) {
773+ if(CONFIG::DUAL_VIEW) {
774+ //フルスクリーンモード・2画面使用 (フルスクリーンチェックで上書きされるかもしれない)
775+ _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
776+ _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
777+ _paPresetPrm[_secondary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
778+ _paPresetPrm[_secondary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
779+ } else {
780+ //フルスクリーンモード・1画面使用 (フルスクリーンチェックで上書きされるかもしれない)
781+ _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
782+ _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
783+ _paPresetPrm[_secondary_adapter_no].BackBufferWidth = 0;
784+ _paPresetPrm[_secondary_adapter_no].BackBufferHeight = 0;
785+ }
786+ } else {
787+ if(CONFIG::DUAL_VIEW) {
788+ //ウィンドウモード・2画面使用
789+ _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::RENDER_TARGET_BUFFER_WIDTH;
790+ _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::RENDER_TARGET_BUFFER_HEIGHT;
791+ _paPresetPrm[_secondary_adapter_no].BackBufferWidth = 0;
792+ _paPresetPrm[_secondary_adapter_no].BackBufferHeight = 0;
704793 } else {
705- //フルスクリーンモード・1画面使用
706- _aRect_ViewScreen[PRIMARY_VIEW].top = 0;
707- _aRect_ViewScreen[PRIMARY_VIEW].left = 0;
708- _aRect_ViewScreen[PRIMARY_VIEW].right = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
709- _aRect_ViewScreen[PRIMARY_VIEW].bottom = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
710- _aRect_ViewScreen[SECONDARY_VIEW] = _aRect_ViewScreen[PRIMARY_VIEW];
794+ //ウィンドウモード・1画面使用
795+ _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::RENDER_TARGET_BUFFER_WIDTH;
796+ _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::RENDER_TARGET_BUFFER_HEIGHT;
797+ _paPresetPrm[_secondary_adapter_no].BackBufferWidth = 0;
798+ _paPresetPrm[_secondary_adapter_no].BackBufferHeight = 0;
799+ }
800+ }
711801
712- //「フルスクリーンモード・1画面使用・RENDER_TARGET_BUFFERサイズ無視」
713- if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
714- //「フルスクリーンモード・1画面使用・縦横比FIX」のフロントバッファ描画領域
715- LONG fix_width = CONFIG::GAME_BUFFER_WIDTH*CONFIG::VIEW1_WIDTH_RATIO;
716- LONG fix_height = CONFIG::GAME_BUFFER_HEIGHT*CONFIG::VIEW1_HEIGHT_RATIO;
717- if (1.0f * CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH / CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT > 1.0f * fix_width / fix_height) {
718- //より横長になってしまっている
719- double rate = 1.0 * CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT / fix_height; //縮小率=縦幅の比率
720- _aRect_Present[PRIMARY_VIEW].left = (CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH / 2.0) - (fix_width * rate / 2.0);
721- _aRect_Present[PRIMARY_VIEW].top = 0;
722- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
723- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
724- } else {
725- //より縦長になってしまっている
726- double rate = 1.0 * CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH / fix_width; //縮小率=横幅の比率
727- _aRect_Present[PRIMARY_VIEW].left = 0;
728- _aRect_Present[PRIMARY_VIEW].top = (CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT / 2.0) - (fix_height * rate / 2.0);
729- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
730- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
731- }
732- _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
733- setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[PRIMARY_VIEW],
734- CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH, CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT);
735- setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[SECONDARY_VIEW],
736- CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH, CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT);
737- } else {
738- //「フルスクリーンモード・1画面使用・縦横比ストレッチ」のフロントバッファ描画領域
739- _aRect_Present[PRIMARY_VIEW].left = 0;
740- _aRect_Present[PRIMARY_VIEW].top = 0;
741- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
742- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
743- _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
744- }
802+ _paDisplayMode = NEW D3DDISPLAYMODEEX[_num_adapter > 2 ? _num_adapter : 2];
803+ _paDisplayMode[_primary_adapter_no].Size = sizeof(_paDisplayMode[_primary_adapter_no]);
804+ _paDisplayMode[_primary_adapter_no].Width = _paPresetPrm[_primary_adapter_no].BackBufferWidth;
805+ _paDisplayMode[_primary_adapter_no].Height = _paPresetPrm[_primary_adapter_no].BackBufferHeight;
806+ _paDisplayMode[_primary_adapter_no].Format = _paPresetPrm[_primary_adapter_no].BackBufferFormat;
807+ _paDisplayMode[_primary_adapter_no].RefreshRate = _paPresetPrm[_primary_adapter_no].FullScreen_RefreshRateInHz;
808+ _paDisplayMode[_primary_adapter_no].ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
809+
810+ _paDisplayMode[_secondary_adapter_no].Size = sizeof(_paDisplayMode[_secondary_adapter_no]);
811+ _paDisplayMode[_secondary_adapter_no].Width = _paPresetPrm[_secondary_adapter_no].BackBufferWidth;
812+ _paDisplayMode[_secondary_adapter_no].Height = _paPresetPrm[_secondary_adapter_no].BackBufferHeight;
813+ _paDisplayMode[_secondary_adapter_no].Format = _paPresetPrm[_secondary_adapter_no].BackBufferFormat;
814+ _paDisplayMode[_secondary_adapter_no].RefreshRate = _paPresetPrm[_secondary_adapter_no].FullScreen_RefreshRateInHz;
815+ _paDisplayMode[_secondary_adapter_no].ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
745816
817+ //フルスクリーン時3画面目以降のパラメータを1画面のパラメータのコピーで作成
818+ for (int i = 0; i < _num_adapter; i++) {
819+ if (i != _primary_adapter_no && i != _secondary_adapter_no) {
820+ _paPresetPrm[i] = _paPresetPrm[_primary_adapter_no];
821+ _paDisplayMode[i] = _paDisplayMode[_primary_adapter_no];
746822 }
747- } else {
748- //ウィンドウモード
749- if (CONFIG::DUAL_VIEW) {
750- //ウィンドウモード・2窓使用
751- if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
752- LONG fix_width = CONFIG::VIEW_SOURCE_BUFFER_WIDTH*CONFIG::VIEW1_WIDTH_RATIO/2;
753- LONG fix_height = CONFIG::VIEW_SOURCE_BUFFER_HEIGHT*CONFIG::VIEW1_HEIGHT_RATIO;
754- //「ウィンドウモード・2窓使用・縦横比FIX・ピクセルストレッチ」の1窓目フロントバッファ描画領域
755- if (1.0f * CONFIG::DUAL_VIEW_WINDOW1_WIDTH / CONFIG::DUAL_VIEW_WINDOW1_HEIGHT > 1.0f * fix_width / fix_height) {
756- //より横長になってしまっている
757- double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW1_HEIGHT / fix_height; //縮小率=縦幅の比率
758- _aRect_Present[PRIMARY_VIEW].left = (CONFIG::DUAL_VIEW_WINDOW1_WIDTH / 2.0) - (fix_width * rate / 2.0);
759- _aRect_Present[PRIMARY_VIEW].top = 0;
760- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
761- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
762- } else {
763- //より縦長になってしまっている
764- double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW1_WIDTH / fix_width; //縮小率=横幅の比率
765- _aRect_Present[PRIMARY_VIEW].left = 0;
766- _aRect_Present[PRIMARY_VIEW].top = (CONFIG::DUAL_VIEW_WINDOW1_HEIGHT / 2.0) - (fix_height * rate / 2.0);
767- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
768- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
769- }
823+ }
770824
771- fix_width = CONFIG::VIEW_SOURCE_BUFFER_WIDTH*CONFIG::VIEW2_WIDTH_RATIO/2;
772- fix_height = CONFIG::VIEW_SOURCE_BUFFER_HEIGHT*CONFIG::VIEW2_HEIGHT_RATIO;
773- //「ウィンドウモード・2窓使用・縦横比FIX」の2窓目フロントバッファ描画領域
774- if (1.0f * CONFIG::DUAL_VIEW_WINDOW2_WIDTH / CONFIG::DUAL_VIEW_WINDOW2_HEIGHT > 1.0f * fix_width / fix_height) {
775- //より横長になってしまっている
776- double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW2_HEIGHT / fix_height; //縮小率=縦幅の比率
777- _aRect_Present[SECONDARY_VIEW].left = (CONFIG::DUAL_VIEW_WINDOW2_WIDTH / 2.0) - (fix_width * rate / 2.0);
778- _aRect_Present[SECONDARY_VIEW].top = 0;
779- _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
780- _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
781- } else {
782- //より縦長になってしまっている
783- double rate = 1.0 * CONFIG::DUAL_VIEW_WINDOW2_WIDTH / fix_width; //縮小率=横幅の比率
784- _aRect_Present[SECONDARY_VIEW].left = 0;
785- _aRect_Present[SECONDARY_VIEW].top = (CONFIG::DUAL_VIEW_WINDOW2_HEIGHT / 2.0) - (fix_height * rate / 2.0);
786- _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + (fix_width * rate);
787- _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + (fix_height * rate);
788- }
825+ //アダプタ情報格納
826+ _paAvailableAdapter = NEW Adapter[_num_adapter];
827+ for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
828+ _paAvailableAdapter[adapter_no].hMonitor = God::_pID3D9->GetAdapterMonitor(adapter_no);
829+ int mode_num = God::_pID3D9->GetAdapterModeCount(adapter_no, D3DFMT_X8R8G8B8);
830+ _paAvailableAdapter[adapter_no].setModeNum(mode_num);
831+ D3DDISPLAYMODE* paMode = _paAvailableAdapter[adapter_no].paModes;
832+ for (int n = 0; n < mode_num; n++) {
833+ God::_pID3D9->EnumAdapterModes(adapter_no, D3DFMT_X8R8G8B8, n, &(paMode[n]));
834+ }
835+ }
789836
790- setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION1, _aRect_Present[PRIMARY_VIEW],
791- CONFIG::DUAL_VIEW_WINDOW1_WIDTH, CONFIG::DUAL_VIEW_WINDOW1_HEIGHT);
792- setPositionPresentRect(CONFIG::DUAL_VIEW_DRAW_POSITION2, _aRect_Present[SECONDARY_VIEW],
793- CONFIG::DUAL_VIEW_WINDOW2_WIDTH, CONFIG::DUAL_VIEW_WINDOW2_HEIGHT);
794- } else {
795- //「ウィンドウモード・2窓使用・縦横比ストレッチ」の1窓目フロントバッファ描画領域
796- _aRect_Present[PRIMARY_VIEW].left = 0;
797- _aRect_Present[PRIMARY_VIEW].top = 0;
798- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::DUAL_VIEW_WINDOW1_WIDTH;
799- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::DUAL_VIEW_WINDOW1_HEIGHT;
800- //「ウィンドウモード・2窓使用・縦横比ストレッチ」の2窓目フロントバッファ描画領域
801- _aRect_Present[SECONDARY_VIEW].left = 0;
802- _aRect_Present[SECONDARY_VIEW].top = 0;
803- _aRect_Present[SECONDARY_VIEW].right = _aRect_Present[SECONDARY_VIEW].left + CONFIG::DUAL_VIEW_WINDOW2_WIDTH;
804- _aRect_Present[SECONDARY_VIEW].bottom = _aRect_Present[SECONDARY_VIEW].top + CONFIG::DUAL_VIEW_WINDOW2_HEIGHT;
805- }
806- } else {
807- //ウィンドウモード・1窓使用
808- if (CONFIG::FIXED_GAME_VIEW_ASPECT) {
809- LONG fix_width = CONFIG::VIEW_SOURCE_BUFFER_WIDTH*CONFIG::VIEW2_WIDTH_RATIO;
810- LONG fix_height = CONFIG::VIEW_SOURCE_BUFFER_HEIGHT*CONFIG::VIEW2_HEIGHT_RATIO;
811- //「ウィンドウモード・1窓使用・縦横比FIX」のフロントバッファ描画領域
812- if (1.0f * CONFIG::SINGLE_VIEW_WINDOW_WIDTH / CONFIG::SINGLE_VIEW_WINDOW_HEIGHT > 1.0f * fix_width / fix_height) {
813- //より横長になってしまっている
814- double rate = 1.0 * CONFIG::SINGLE_VIEW_WINDOW_HEIGHT / fix_height; //縮小率=縦幅の比率
815- _aRect_Present[PRIMARY_VIEW].left = (CONFIG::SINGLE_VIEW_WINDOW_WIDTH / 2.0) - (fix_width * rate / 2.0);
816- _aRect_Present[PRIMARY_VIEW].top = 0;
817- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
818- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
819- } else {
820- //より縦長になってしまっている
821- double rate = 1.0 * CONFIG::SINGLE_VIEW_WINDOW_WIDTH / fix_width; //縮小率=横幅の比率
822- _aRect_Present[PRIMARY_VIEW].left = 0;
823- _aRect_Present[PRIMARY_VIEW].top = (CONFIG::SINGLE_VIEW_WINDOW_HEIGHT / 2.0) - (fix_height * rate / 2.0);
824- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + (fix_width * rate);
825- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + (fix_height * rate);
826- }
827- _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
828- setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[PRIMARY_VIEW],
829- CONFIG::SINGLE_VIEW_WINDOW_WIDTH, CONFIG::SINGLE_VIEW_WINDOW_HEIGHT);
830- setPositionPresentRect(CONFIG::SINGLE_VIEW_DRAW_POSITION, _aRect_Present[SECONDARY_VIEW],
831- CONFIG::SINGLE_VIEW_WINDOW_WIDTH, CONFIG::SINGLE_VIEW_WINDOW_HEIGHT);
832- } else {
833- //「ウィンドウモード・1窓使用・縦横比ストレッチ」のフロントバッファ描画領域
834- _aRect_Present[PRIMARY_VIEW].left = 0;
835- _aRect_Present[PRIMARY_VIEW].top = 0;
836- _aRect_Present[PRIMARY_VIEW].right = _aRect_Present[PRIMARY_VIEW].left + CONFIG::SINGLE_VIEW_WINDOW_WIDTH;
837- _aRect_Present[PRIMARY_VIEW].bottom = _aRect_Present[PRIMARY_VIEW].top + CONFIG::SINGLE_VIEW_WINDOW_HEIGHT;
838- _aRect_Present[SECONDARY_VIEW] = _aRect_Present[PRIMARY_VIEW];
837+ //解像度情報格納
838+ _paAdapterRezos = NEW AdapterRezos[_num_adapter];
839+ for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
840+ std::vector<UINT> vecWidth;
841+ std::vector<UINT> vecHeight;
842+ std::vector<std::string> vecRezo;
843+ int mode_num = _paAvailableAdapter[adapter_no].mode_num;
844+ D3DDISPLAYMODE* paMode = pGOD->_paAvailableAdapter[adapter_no].paModes;
845+ _TRACE_("画面["<<adapter_no<<"] mode_num="<<mode_num);
846+ for (int n = 0; n < mode_num; n++) {
847+ UINT width = paMode[n].Width;
848+ UINT height = paMode[n].Height;
849+ D3DFORMAT format = paMode[n].Format;
850+ std::ostringstream oss;
851+ oss << width << "X" << height;
852+ std::string rezo = oss.str();
853+ if (std::find(vecRezo.begin(), vecRezo.end(), rezo) == vecRezo.end()) {
854+ vecRezo.push_back(rezo);
855+ vecWidth.push_back(width);
856+ vecHeight.push_back(height);
839857 }
840858 }
859+ _paAdapterRezos[adapter_no].init(vecRezo.size());
860+ for (int n = 0; n < vecRezo.size(); n++) {
861+ //存在していない
862+ _paAdapterRezos[adapter_no].paRezoInfo[n].width = vecWidth[n];
863+ _paAdapterRezos[adapter_no].paRezoInfo[n].height = vecHeight[n];
864+ _paAdapterRezos[adapter_no].paRezoInfo[n].item_str = vecRezo[n];
865+ }
841866 }
842867
843-#ifdef MY_DEBUG
844- _TRACE_("初期設定");
845- if (CONFIG::DUAL_VIEW) {
846- _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].left );
847- _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].top );
848- _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].right = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].right );
849- _TRACE_(" _aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].bottom = "<<_aRect_HarfRenderTargetBuffer[PRIMARY_VIEW].bottom);
850- _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].left );
851- _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].top );
852- _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].right = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].right );
853- _TRACE_(" _aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].bottom = "<<_aRect_HarfRenderTargetBuffer[SECONDARY_VIEW].bottom);
854- _TRACE_(" _aRect_Present[PRIMARY_VIEW].left = "<<_aRect_Present[PRIMARY_VIEW].left );
855- _TRACE_(" _aRect_Present[PRIMARY_VIEW].top = "<<_aRect_Present[PRIMARY_VIEW].top );
856- _TRACE_(" _aRect_Present[PRIMARY_VIEW].right = "<<_aRect_Present[PRIMARY_VIEW].right );
857- _TRACE_(" _aRect_Present[PRIMARY_VIEW].bottom = "<<_aRect_Present[PRIMARY_VIEW].bottom);
858- _TRACE_(" _aRect_Present[SECONDARY_VIEW].left = "<<_aRect_Present[SECONDARY_VIEW].left );
859- _TRACE_(" _aRect_Present[SECONDARY_VIEW].top = "<<_aRect_Present[SECONDARY_VIEW].top );
860- _TRACE_(" _aRect_Present[SECONDARY_VIEW].right = "<<_aRect_Present[SECONDARY_VIEW].right );
861- _TRACE_(" _aRect_Present[SECONDARY_VIEW].bottom = "<<_aRect_Present[SECONDARY_VIEW].bottom);
862- } else {
863- _TRACE_(" _rectRenderTargetBuffer.left = "<<_rectRenderTargetBuffer.left );
864- _TRACE_(" _rectRenderTargetBuffer.top = "<<_rectRenderTargetBuffer.top );
865- _TRACE_(" _rectRenderTargetBuffer.right = "<<_rectRenderTargetBuffer.right );
866- _TRACE_(" _rectRenderTargetBuffer.bottom = "<<_rectRenderTargetBuffer.bottom);
867- _TRACE_(" _aRect_Present[PRIMARY_VIEW].left = "<<_aRect_Present[PRIMARY_VIEW].left );
868- _TRACE_(" _aRect_Present[PRIMARY_VIEW].top = "<<_aRect_Present[PRIMARY_VIEW].top );
869- _TRACE_(" _aRect_Present[PRIMARY_VIEW].right = "<<_aRect_Present[PRIMARY_VIEW].right );
870- _TRACE_(" _aRect_Present[PRIMARY_VIEW].bottom = "<<_aRect_Present[PRIMARY_VIEW].bottom);
868+ _TRACE_("利用可能画面解像度一覧");
869+
870+ for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
871+ for (int n = 0; n < _paAdapterRezos[adapter_no].rezo_num; n++) {
872+ RezoInfo* pMode = _paAdapterRezos[adapter_no].paRezoInfo;
873+ _TRACE_("["<<adapter_no<<"]["<<n<<"]="<<(pMode[n].width)<<","<<(pMode[n].height)<<" = "<<(pMode[n].item_str));
874+ }
871875 }
872-#endif
876+ _TRACE_("------------------------------------------------");
877+
878+// //フルスクリーン要求時、指定解像度に出来るか調べ、
879+// //出来ない場合は、近い解像度を探し、
880+// //_paPresetPrm[] と、_paDisplayMode[] を上書きする。
881+// EnumDisplayMonitors(nullptr, nullptr, God::updateMoniterPixcoordCallback, (LPARAM)this);
882+//
883+// if (CONFIG::FULL_SCREEN) {
884+// for (int adapter_no = 0; adapter_no < _num_adapter; adapter_no++) {
885+// _TRACE_("--- " << adapter_no+1 << "画面目 の解像度設定 --->");
886+// int rezo_num = _paAdapterRezos[adapter_no].rezo_num;
887+// RezoInfo* paRezos = _paAdapterRezos[adapter_no].paRezoInfo;
888+//
889+// if (CONFIG::DUAL_VIEW) {
890+// //2画面フルスクリーン時
891+// if (adapter_no == _primary_adapter_no) {
892+// //ゲーム画面1画面目
893+// int n = checkAppropriateDisplaySize(
894+// paRezos, rezo_num,
895+// (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH,
896+// (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT
897+// );
898+// CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH = (pixcoord)(paRezos[n].width);
899+// CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT = (pixcoord)(paRezos[n].height);
900+// _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH;
901+// _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT;
902+// _TRACE_("ゲーム画面1画面目(adapter_no="<<adapter_no<<")は、"<<paRezos[n].width<<"x"<<paRezos[n].height<<" に設定");
903+// } else if (adapter_no == _secondary_adapter_no) {
904+// //ゲーム画面2画面目
905+// int n = checkAppropriateDisplaySize(
906+// paRezos, rezo_num,
907+// (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH,
908+// (UINT)CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT
909+// );
910+// CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH = (pixcoord)(paRezos[n].width);
911+// CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT = (pixcoord)(paRezos[n].height);
912+// _paPresetPrm[_secondary_adapter_no].BackBufferWidth = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH;
913+// _paPresetPrm[_secondary_adapter_no].BackBufferHeight = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT;
914+// _TRACE_("ゲーム画面2画面目(adapter_no="<<adapter_no<<")は、"<<paRezos[n].width<<"x"<<paRezos[n].height<<" に設定");
915+// } else {
916+// //メモ:ゲーム画面3画面目以降1画面目・2画面目の解像度は、現状の解像度をそのまま設定。
917+// pixcoord width = _paAvailableAdapter[adapter_no].rcMonitor.right - _paAvailableAdapter[adapter_no].rcMonitor.left;
918+// pixcoord height = _paAvailableAdapter[adapter_no].rcMonitor.bottom - _paAvailableAdapter[adapter_no].rcMonitor.top;
919+// _paPresetPrm[adapter_no].BackBufferWidth = width;
920+// _paPresetPrm[adapter_no].BackBufferHeight = height;
921+// _TRACE_("adapter_no="<<adapter_no << "の画面は、現状の "<<width<<"x"<<height<<" に設定");
922+// }
923+//
924+// } else {
925+// //1画面フルスクリーン時
926+// if (adapter_no == _primary_adapter_no) {
927+// int n = checkAppropriateDisplaySize(
928+// paRezos, rezo_num,
929+// (UINT)CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH,
930+// (UINT)CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT
931+// );
932+// CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH = (pixcoord)(paRezos[n].width);
933+// CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT = (pixcoord)(paRezos[n].height);
934+// _paPresetPrm[_primary_adapter_no].BackBufferWidth = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH;
935+// _paPresetPrm[_primary_adapter_no].BackBufferHeight = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT;
936+// } else {
937+// _paPresetPrm[adapter_no].BackBufferWidth = 0;
938+// _paPresetPrm[adapter_no].BackBufferHeight = 0;
939+// }
940+//
941+// }
942+// //上書き更新
943+// _paDisplayMode[adapter_no].Width = _paPresetPrm[adapter_no].BackBufferWidth;
944+// _paDisplayMode[adapter_no].Height = _paPresetPrm[adapter_no].BackBufferHeight;
945+// _TRACE_("<---" << adapter_no+1 << "画面目の解像度は、"<<_paDisplayMode[adapter_no].Width<<"x"<<_paDisplayMode[adapter_no].Height<<"に確定しました。");
946+// }
947+// }
948+
949+ pGOD->setAppropriateDisplaySize();
950+
873951
874952 _paHWnd = NEW HWND[_num_adapter > 2 ? _num_adapter : 2];
875953 for (int i = 0; i < (_num_adapter > 2 ? _num_adapter : 2); i++) {
@@ -1984,7 +2062,31 @@ void God::presentSpacetimeVisualize() {
19842062 }
19852063 _TRACE_("【デバイスロスト処理】デバイスリセット <-------- END");
19862064
1987-
2065+ //解像度変更を考慮
2066+ CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH = CONFIG::DUAL_VIEW_FULL_SCREEN1_WIDTH_BK;
2067+ CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT = CONFIG::DUAL_VIEW_FULL_SCREEN1_HEIGHT_BK;
2068+ CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH = CONFIG::DUAL_VIEW_FULL_SCREEN2_WIDTH_BK;
2069+ CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT = CONFIG::DUAL_VIEW_FULL_SCREEN2_HEIGHT_BK;
2070+ CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH = CONFIG::SINGLE_VIEW_FULL_SCREEN_WIDTH_BK;
2071+ CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT = CONFIG::SINGLE_VIEW_FULL_SCREEN_HEIGHT_BK;
2072+ pGOD->setAppropriateDisplaySize();
2073+ if (CONFIG::FULL_SCREEN) {
2074+ if (CONFIG::DUAL_VIEW) {
2075+ SetWindowPos(_paHWnd[_primary_adapter_no], NULL, 0, 0,
2076+ _paPresetPrm[_primary_adapter_no].BackBufferWidth,
2077+ _paPresetPrm[_primary_adapter_no].BackBufferHeight,
2078+ SWP_NOMOVE | SWP_NOZORDER);
2079+ SetWindowPos(_paHWnd[_secondary_adapter_no], NULL, 0, 0,
2080+ _paPresetPrm[_secondary_adapter_no].BackBufferWidth,
2081+ _paPresetPrm[_secondary_adapter_no].BackBufferHeight,
2082+ SWP_NOMOVE | SWP_NOZORDER);
2083+ } else {
2084+ SetWindowPos(_paHWnd[_primary_adapter_no], NULL, 0, 0,
2085+ _paPresetPrm[_primary_adapter_no].BackBufferWidth,
2086+ _paPresetPrm[_primary_adapter_no].BackBufferHeight,
2087+ SWP_NOMOVE | SWP_NOZORDER);
2088+ }
2089+ }
19882090 //デバイス再設定
19892091 _TRACE_("【デバイスロスト処理】デバイス再構築 BEGIN ------>");
19902092 initDx9Device();
--- a/GgafLib/src/jp/ggaf/lib/util/CollisionChecker3D.cpp
+++ b/GgafLib/src/jp/ggaf/lib/util/CollisionChecker3D.cpp
@@ -79,17 +79,70 @@ bool CollisionChecker3D::isHit(const GgafDx::Checker* const prm_pOppChecker) {
7979 }
8080
8181 CNT:
82+
83+
84+//StgUtil::isHit3D(const GgafDx::GeometricActor* const pActor01, const ColliAAPyramid* const pAAPyramid01,
85+// const GgafDx::GeometricActor* const pActor02, const ColliSphere* const pSphere02
86+
87+//bool (*pFunc_isHit3D)(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*) = &(StgUtil::isHit3D);
88+
89+
90+//bool (*pFunc_isHit3D_2)(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
91+//
92+//
93+//bool (*pFunc_isHit3D)(const GgafDx::GeometricActor*, const ColliAAPyramid* ,const GgafDx::GeometricActor* , const ColliSphere* ) = &(StgUtil::isHit3D);
94+
95+//bool (*pFunc_isHit3D_2)(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*) = &(StgUtil::isHit3D);
96+//pFunc_isHit3D = &(StgUtil::isHit3D)(GgafDx::GeometricActor*, ColliAAPyramid* ,GgafDx::GeometricActor* , ColliSphere* );
97+
98+//void (*prm_pFuncFeature)(GgafCore::Object*, void*, void*, void*) = &(CommonScene::scrollX);
99+
100+
101+//bool StgUtil::isHit3D_Box_Box(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
102+//bool StgUtil::isHit3D_Box_Sphere(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
103+//bool StgUtil::isHit3D_Box_Prism(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
104+//bool StgUtil::isHit3D_Sphere_Sphere(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
105+//bool StgUtil::isHit3D_Sphere_Prism(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
106+//bool StgUtil::isHit3D_Prism_Prism(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
107+
108+//bool StgUtil::isHit3D_Box_Box(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
109+//bool StgUtil::isHit3D_Box_Sphere(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
110+//bool StgUtil::isHit3D_Box_Prism(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
111+//bool StgUtil::isHit3D_Sphere_Box(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
112+//bool StgUtil::isHit3D_Sphere_Sphere(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
113+//bool StgUtil::isHit3D_Sphere_Prism(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
114+//bool StgUtil::isHit3D_Pris_Box(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
115+//bool StgUtil::isHit3D_Pris_Sphere(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
116+//bool StgUtil::isHit3D_Pris_Prism(const GgafDx::GeometricActor*, const GgafDx::CollisionPart*, const GgafDx::GeometricActor*, const GgafDx::CollisionPart*);
117+
118+//bool (*pFunc_isHit3D[])(const GgafDx::GeometricActor*, const ColliAAPyramid* ,const GgafDx::GeometricActor* , const ColliSphere* ) = {
119+// &(StgUtil::isHit3D_Box_Box),
120+// &(StgUtil::isHit3D_Box_Sphere),
121+// ...
122+//
123+//};
124+
125+
126+
127+
82128 for (int i = 0; i < colli_part_num; i++) {
83129 const GgafDx::CollisionPart* const pColliPart = pCollisionArea->_papColliPart[i];
84130 if (!pColliPart->_is_valid_flg) { continue; }
85131 const int shape_kind = pColliPart->_shape_kind;
86132
133+
87134 if (shape_kind == COLLI_AABOX) {
88135
89136 for (int j = 0; j < opp_colli_part_num; j++) {
90137 const GgafDx::CollisionPart* const pOppColliPart = pOppCollisionArea->_papColliPart[j];
91138 if (!pOppColliPart->_is_valid_flg) { continue; }
92139 const int opp_shape_kind = pOppColliPart->_shape_kind;
140+
141+
142+// int shape_kind_bit = (shape_kind << 4) | opp_shape_kind;
143+// pFunc_isHit3D[shape_kind_bit](.....);
144+
145+
93146 #ifdef MY_DEBUG
94147 CollisionChecker::_num_check++;
95148 #endif
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Oebius/FormationOebius002.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Oebius/FormationOebius002.cpp
@@ -26,8 +26,8 @@ FormationOebius002::FormationOebius002(const char* prm_name, EnemyOebiusControll
2626 FormationOebius(prm_name, prm_pController) {
2727 _class_name = "FormationOebius002";
2828
29- pXpmConnection_ = connectToXpmManager("FormationOebius002_Xpm");
30- GgafCore::Xpm* pXpM = pXpmConnection_->peek();
29+ pXpmCon_ = connectToXpmManager("FormationOebius002_Xpm");
30+ GgafCore::Xpm* pXpM = pXpmCon_->peek();
3131 formation_col_num_ = pXpM->getWidth();
3232 formation_row_num_ = pXpM->getHeight();
3333 num_Oebius_ = pXpM->getPixelNum();
@@ -46,7 +46,7 @@ FormationOebius002::FormationOebius002(const char* prm_name, EnemyOebiusControll
4646
4747 //スプライン座標はは、メビウスなんで、2週分ある
4848 //でも、列が偶数本(8列)なんで、2週しない。
49- //感覚は半分にしたほうがいいんじゃないか?
49+ //編隊の長さを半分にする。(=出現間隔半分)
5050 // frame spent_frames = Manuf->getSpentFrames();
5151 double spent_frames = Manuf->getSpentFrames() / 2.0;
5252
@@ -77,7 +77,7 @@ void FormationOebius002::processBehavior() {
7777 if (pPhase->getFrame() == pa_frame_of_called_up_[called_up_row_idx_]) {
7878 for (int col = 0; col < formation_col_num_; col++) {
7979 //xpm編隊
80- if (!pXpmConnection_->peek()->isNonColor(called_up_row_idx_, col)) {
80+ if (!pXpmCon_->peek()->isNonColor(called_up_row_idx_, col)) {
8181 EnemyOebius* pOebius = (EnemyOebius*)calledUpMember();
8282 if (pOebius) {
8383 onCalledUp(pOebius, called_up_row_idx_, col);
@@ -134,7 +134,7 @@ void FormationOebius002::onCalledUp(GgafDx::FigureActor* prm_pActor, int prm_row
134134 pOebius->getVecVehicle()->setMvAcce(80);
135135
136136 //色を設定
137- GgafCore::Xpm* pXpM = pXpmConnection_->peek();
137+ GgafCore::Xpm* pXpM = pXpmCon_->peek();
138138 pOebius->setMaterialColor(pXpM->getColor(prm_row, prm_col));
139139 }
140140
@@ -143,8 +143,8 @@ void FormationOebius002::onFinshLeading(GgafDx::FigureActor* prm_pActor) {
143143 }
144144
145145 FormationOebius002::~FormationOebius002() {
146- if (pXpmConnection_) {
147- pXpmConnection_->close();
146+ if (pXpmCon_) {
147+ pXpmCon_->close();
148148 }
149149 for (int col = 0; col < formation_col_num_; col++) {
150150 papCurveManufConn_[col]->close();
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Oebius/FormationOebius002.h
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Oebius/FormationOebius002.h
@@ -20,7 +20,7 @@ class FormationOebius002 : public FormationOebius {
2020 int formation_row_num_;
2121 int called_up_row_idx_;
2222 frame* pa_frame_of_called_up_;
23- XpmConnection* pXpmConnection_;
23+ XpmConnection* pXpmCon_;
2424 public:
2525 GgafDx::CurveManufactureConnection** papCurveManufConn_;
2626
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Thagoras/FormationThagoras.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Thagoras/FormationThagoras.cpp
@@ -21,7 +21,7 @@ FormationThagoras::FormationThagoras(const char* prm_name,
2121 TreeFormation(prm_name) {
2222 _class_name = "FormationThagoras";
2323
24- pXpmConnection_ = connectToXpmManager(prm_xpm_id);
24+ pXpmCon_ = connectToXpmManager(prm_xpm_id);
2525 for (int i = 0; i < getXpm()->getPixelNum(); i++) {
2626 std::string name = "Thagoras("+XTOS(i)+")";
2727 appendFormationMember(NEW EnemyThagoras(name.c_str()));
@@ -64,11 +64,11 @@ void FormationThagoras::onDestroyAll(GgafCore::Actor* prm_pActor_last_destroyed)
6464 }
6565
6666 GgafCore::Xpm* FormationThagoras::getXpm() {
67- return pXpmConnection_->peek();
67+ return pXpmCon_->peek();
6868 }
6969
7070 FormationThagoras::~FormationThagoras() {
71- pXpmConnection_->close();
71+ pXpmCon_->close();
7272 GGAF_DELETE(pScaler4Sc_);
7373 GGAF_DELETE(pActor4Sc_);
7474 }
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Thagoras/FormationThagoras.h
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Thagoras/FormationThagoras.h
@@ -25,7 +25,7 @@ public:
2525 GgafDx::Scaler* pScaler4Sc_;
2626 GgafLib::DefaultGeometricActor* pActor4Sc_;
2727
28- XpmConnection* pXpmConnection_;
28+ XpmConnection* pXpmCon_;
2929
3030 public:
3131 FormationThagoras(const char* prm_name, const char* prm_xpm_id);
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Urydike/FormationUrydike.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Urydike/FormationUrydike.cpp
@@ -27,7 +27,7 @@ enum {
2727 FormationUrydike::FormationUrydike(const char* prm_name, int prm_formation_col_num, int prm_formation_row_num, frame prm_called_up_interval) :
2828 TreeFormation(prm_name) {
2929 _class_name = "FormationUrydike";
30- pXpmConnection_ = nullptr;
30+ pXpmCon_ = nullptr;
3131 formation_col_num_ = prm_formation_col_num;
3232 formation_row_num_ = prm_formation_row_num;
3333 num_Urydike_ = prm_formation_col_num * prm_formation_row_num;
@@ -38,8 +38,8 @@ FormationUrydike::FormationUrydike(const char* prm_name, int prm_formation_col_n
3838 FormationUrydike::FormationUrydike(const char* prm_name, const char* prm_xpm_id, frame prm_called_up_interval) :
3939 TreeFormation(prm_name) {
4040 _class_name = "FormationUrydike";
41- pXpmConnection_ = connectToXpmManager(prm_xpm_id);
42- GgafCore::Xpm* pXpM = pXpmConnection_->peek();
41+ pXpmCon_ = connectToXpmManager(prm_xpm_id);
42+ GgafCore::Xpm* pXpM = pXpmCon_->peek();
4343 formation_col_num_ = pXpM->getWidth();
4444 formation_row_num_ = pXpM->getHeight();
4545 num_Urydike_ = pXpM->getPixelNum();
@@ -83,9 +83,9 @@ void FormationUrydike::processBehavior() {
8383 if (canCalledUp() && called_up_row_idx_ < formation_row_num_) {
8484 if (getActiveFrame() % called_up_interval_ == 0) {
8585 for (int col = 0; col < formation_col_num_; col++) {
86- if (pXpmConnection_) {
86+ if (pXpmCon_) {
8787 //xpm編隊
88- if (!pXpmConnection_->peek()->isNonColor(called_up_row_idx_, col)) {
88+ if (!pXpmCon_->peek()->isNonColor(called_up_row_idx_, col)) {
8989 EnemyUrydike* pUrydike = (EnemyUrydike*)calledUpMember();
9090 if (pUrydike) {
9191 onCalledUp(pUrydike, called_up_row_idx_, col);
@@ -135,7 +135,7 @@ void FormationUrydike::onSayonaraAll() {
135135 }
136136
137137 FormationUrydike::~FormationUrydike() {
138- if (pXpmConnection_) {
139- pXpmConnection_->close();
138+ if (pXpmCon_) {
139+ pXpmCon_->close();
140140 }
141141 }
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Urydike/FormationUrydike.h
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Urydike/FormationUrydike.h
@@ -26,7 +26,7 @@ public:
2626 /** [r]出現座標(シーンが設定) */
2727 GgafDx::GeoElem entry_pos_;
2828
29- XpmConnection* pXpmConnection_;
29+ XpmConnection* pXpmCon_;
3030
3131 public:
3232 FormationUrydike(const char* prm_name, int prm_formation_col_num, int prm_formation_row_num, frame prm_called_up_interval);
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Urydike/FormationUrydike002.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Urydike/FormationUrydike002.cpp
@@ -69,7 +69,7 @@ void FormationUrydike002::onCalledUp(GgafDx::FigureActor* prm_pActor, int prm_ro
6969 pUrydike->getVecVehicle()->setMvAcce(80);
7070
7171 //色を設定
72- GgafCore::Xpm* pXpM = pXpmConnection_->peek();
72+ GgafCore::Xpm* pXpM = pXpmCon_->peek();
7373 pUrydike->setMaterialColor(pXpM->getColor(prm_row, prm_col));
7474 }
7575
--- a/VioletVreath/src/jp/gecchi/VioletVreath/scene/Spacetime/World/GameScene/GameMainScene/StageWorld/StageController/Stage01/part/Stage01PartWall.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/scene/Spacetime/World/GameScene/GameMainScene/StageWorld/StageController/Stage01/part/Stage01PartWall.cpp
@@ -72,11 +72,11 @@ Stage01PartWall::Stage01PartWall(const char* prm_name) :
7272 // 以下の gen01 start 〜 end はExcelマクロにより自動生成されたコードです。
7373 // コードの変更は「シーンCreater.xls」から行う事とする(整合性確保のため)。
7474 // gen01 start
75- frame f[] = {1,100,1400,2000,5400,6000};
76- _paFrame_NextEvent = new frame[6];
77- memcpy(_paFrame_NextEvent, f, sizeof(f));
78- _event_num = 6;
79- requestActor(50000002, EnemyHisbe, "EnemyHisbe-50000002");
75+ frame f[] = {1,100,1400,2000,5400,6000};
76+ _paFrame_NextEvent = new frame[6];
77+ memcpy(_paFrame_NextEvent, f, sizeof(f));
78+ _event_num = 6;
79+ requestActor(50000002, EnemyHisbe, "EnemyHisbe-50000002");
8080 // gen01 end
8181 }
8282
@@ -98,41 +98,41 @@ void Stage01PartWall::processBehavior() {
9898 // 以下の gen02 start 〜 end はExcelマクロにより自動生成されたコードです。
9999 // コードの変更は「シーンCreater.xls」から行う事とする(整合性確保のため)。
100100 // gen02 start
101- if (getBehaveingFrame() == _paFrame_NextEvent[_cnt_event]) {
102- switch (getBehaveingFrame()) {
103- case 1: {
104- break;
105- }
106- case 100: {
107- EnemyHisbe* p = (EnemyHisbe*)receiveActor(50000002);
108- bringSceneMediator()->appendGroupChild(p);
109- p->_x = PX_C(2000);
110- p->_y = 0;
111- p->_z = 1000000;
112- //a
113- break;
114- }
115- case 1400: {
116- requestActor(50000000, FormationUnomia001a, "FormationUnomia001a-50000000");
117- break;
118- }
119- case 2000: {
120- bringSceneMediator()->appendGroupChild(receiveActor(50000000));
121- break;
122- }
123- case 5400: {
124- requestActor(50000001, FormationUnomia001b, "FormationUnomia001b-50000001");
125- break;
126- }
127- case 6000: {
128- bringSceneMediator()->appendGroupChild(receiveActor(50000001));
129- break;
130- }
131- default :
132- break;
133- }
134- _cnt_event = (_cnt_event < 6-1 ? _cnt_event+1 : _cnt_event);
135- }
101+ if (getBehaveingFrame() == _paFrame_NextEvent[_cnt_event]) {
102+ switch (getBehaveingFrame()) {
103+ case 1: {
104+ break;
105+ }
106+ case 100: {
107+ EnemyHisbe* p = (EnemyHisbe*)receiveActor(50000002);
108+ bringSceneMediator()->appendGroupChild(p);
109+ p->_x = PX_C(2000);
110+ p->_y = 0;
111+ p->_z = 1000000;
112+ //a
113+ break;
114+ }
115+ case 1400: {
116+ requestActor(50000000, FormationUnomia001a, "FormationUnomia001a-50000000");
117+ break;
118+ }
119+ case 2000: {
120+ bringSceneMediator()->appendGroupChild(receiveActor(50000000));
121+ break;
122+ }
123+ case 5400: {
124+ requestActor(50000001, FormationUnomia001b, "FormationUnomia001b-50000001");
125+ break;
126+ }
127+ case 6000: {
128+ bringSceneMediator()->appendGroupChild(receiveActor(50000001));
129+ break;
130+ }
131+ default :
132+ break;
133+ }
134+ _cnt_event = (_cnt_event < 6-1 ? _cnt_event+1 : _cnt_event);
135+ }
136136 // gen02 end
137137
138138 ///////////////デバッグ///////////////////////////////
--- a/VioletVreath_launcher/config.properties
+++ b/VioletVreath_launcher/config.properties
@@ -37,7 +37,7 @@ DUAL_VIEW_WINDOW2_WIDTH=80
3737 FIXED_GAME_VIEW_ASPECT=true
3838 FPS=60.606060
3939 FPS_TO_CLEAN_GARBAGE_BOX=30.0
40-FULL_SCREEN=false
40+FULL_SCREEN=true
4141 GAME_BUFFER_HEIGHT=450
4242 GAME_BUFFER_WIDTH=1600
4343 GAME_SPACE_DEPTH=20.0
--- a/VioletVreath_launcher/src/VioletVreath_launcher.cpp
+++ b/VioletVreath_launcher/src/VioletVreath_launcher.cpp
@@ -512,6 +512,3 @@ INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
512512 //}
513513
514514
515-
516-
517-