Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [D3D9] Fullscreen Multisample [Vista]

[D3D9] Fullscreen Multisample [Vista]

Поделиться

Страницы: 1 2 Следующая

OsirisПостоялецwww18 сен. 200817:55#0
Обнаружил проблемы с полноэкранном режимом в своем движке на Windows Vista.

Оконный режим работает без проблем, а полноэкранный после инициализации требует reset

при таком коде:

  if( GetFocus() != D3DPP.hDeviceWindow )
  {
    CDX9E3Dlogfile::Get().Report(CDX9E3Dlogfile::OK_, "D3Device window not have focus\n");
    return;
  }

    HRESULT hr;
    hr = m_pD3DDevice->TestCooperativeLevel();
    if( hr==D3DERR_DEVICELOST )
  {
    CDX9E3Dlogfile::Get().Report(CDX9E3Dlogfile::OK_, "D3DDevice lost\n");

    SetLost( true );
    return;
  }
  if( hr==D3DERR_DEVICENOTRESET ) 
  {
    CDX9E3Dlogfile::Get().Report(CDX9E3Dlogfile::OK_, "Need reset D3DDevice\n");
    // дать команду восстановиться остальным интерфейсам
    SetReset( true );
  }

Возвращаемое значение D3DERR_DEVICENOTRESET пропуская D3DERR_DEVICELOST, после ресета повторно его требует. Борюсь с проблемой, может кто сталкивался - подскажите как лечить.

OsirisПостоялецwww18 сен. 200818:14#1
Обратил внимание на следующее - на Висте есть такая штука, которой нет на XP:

1. Программа запускается.
2. Потом снова появляется рабочий стол, как буд-то она сворачивается.
3. Потом снова запускается.

Мой двиг такое не переваривает, а вот другие почему да.

outcastПостоялецwww18 сен. 200818:23#2
Osiris
Это походу отрубается интерфейс Aero или как он там называется, борется отключением его в настройках %)
Ну а нормальный метод ЕМНИП в MSDN должен быть
OsirisПостоялецwww18 сен. 200818:30#3
outcast
>Это походу отрубается интерфейс Aero или как он там называется, борется отключением его в настройках %)

Не ... так не пойдет, другие игры ведь запускаются! Я не для себя делаю - надо чтобы работало.

>Ну а нормальный метод ЕМНИП в MSDN должен быть

Это круто, но что это? :)))

GurichПостоялецwww18 сен. 200818:33#4
>> Мой двиг такое не переваривает, а вот другие почему да.

Мой переваривает, хоть и писался сначала на xp =) Фикси свой двиг.

OsirisПостоялецwww18 сен. 200818:39#5
Elec3C
Стараюсь :)
OsirisПостоялецwww18 сен. 200819:52#6
Короче это мультисемпл.

Я правда не знаю как прошел он мимо проверки, буду смотреть.

OsirisПостоялецwww18 сен. 200820:27#7
Сплошные интересности с этой Вистой.

В общем у меня стоит такая проверка:

  // только для полного экрана
  // проверяем уровень сглаживания 2
  if( SUCCEEDED(m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL , D3DPP.BackBufferFormat, 
                          FALSE, D3DMULTISAMPLE_2_SAMPLES, NULL ) ) &&
    SUCCEEDED(m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DPP.AutoDepthStencilFormat, 
                          FALSE, D3DMULTISAMPLE_2_SAMPLES, NULL ) ) )
  {
    D3DPP.MultiSampleType    = D3DMULTISAMPLE_2_SAMPLES; // сглаженная картинка
  }


  // проверяем уровень сглаживания 3
  if( SUCCEEDED(m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL , D3DPP.BackBufferFormat, 
                          FALSE, D3DMULTISAMPLE_3_SAMPLES, NULL ) ) &&
    SUCCEEDED(m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DPP.AutoDepthStencilFormat, 
                          FALSE, D3DMULTISAMPLE_3_SAMPLES, NULL ) ) )
  {
    D3DPP.MultiSampleType    = D3DMULTISAMPLE_3_SAMPLES; // сглаженная картинка
  }

  // проверяем уровень сглаживания 4
  if( SUCCEEDED(m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL , D3DPP.BackBufferFormat, 
                          FALSE, D3DMULTISAMPLE_4_SAMPLES, NULL ) ) &&
    SUCCEEDED(m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DPP.AutoDepthStencilFormat, 
                          FALSE, D3DMULTISAMPLE_4_SAMPLES, NULL ) ) )
  {
    D3DPP.MultiSampleType    = D3DMULTISAMPLE_4_SAMPLES; // сглаженная картинка
  }

Для запуска в полноэкранном режиме пришлось закомментировать последние две проверки, потмоу что проверка проходит, а работать нифига не рабоатет. На XP все работало нормально.

С уменьшением мультисемпла почему-то появились белые пиксели на краях моделей - мерцание. Тоже прикольно :)

GurichПостоялецwww18 сен. 200821:18#8
Osiris
Виста показала, какой ты кривой кодер =))
OsirisПостоялецwww19 сен. 200810:15#9
Elec3C
То, что я кривой кодер даже не вопрос :))), но это не мой код - это F1 на функцию CheckDeviceMultiSampleType. Так что это все таки не совсем моя вина.
DemonLordНовичокwww19 сен. 200816:11#10
Кстати смешно, но мой двиг сразу без проблем заработал на Висте х64 как только ее поставил.
OsirisПостоялецwww19 сен. 200816:18#11
DemonLord
Вы все слишком стандартны :)))))))) Я не могу без трудностей, провалились бы они куда.
OsirisПостоялецwww24 ноя. 200817:21#12
Поднимаю тему. Прошлый раз я обошелся ограничением мультисемпла на уровне 2, но сами понимаете - это не правильно. Код у меня тот же. Его отладка на моей карте удовлетворяет первой проверке, вторую валит, третью удовлетворяет, устанвливает сглаживание х4 и приложение хрен чего делает.

Хотелось бы, чтобы народ, который опробывал уже Vista + Multisample в своих Direc3D9 приложениях поделились кодом проверки MultiSampleType.

OsirisПостоялецwww25 ноя. 200816:06#13
up
OsirisПостоялецwww26 ноя. 200810:49#14
ну хоть бы кто сказал, что он проверяет похожим образом и у него нет проблем.

Страницы: 1 2 Следующая

/ Форум / Программирование игр / Графика

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр