Войти
ПрограммированиеФорумГрафика

[D3D9] Fullscreen Multisample [Vista]

Страницы: 1 2 Следующая »
#0
17:55, 18 сен. 2008

Обнаружил проблемы с полноэкранном режимом в своем движке на 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, после ресета повторно его требует. Борюсь с проблемой, может кто сталкивался - подскажите как лечить.


#1
18:14, 18 сен. 2008

Обратил внимание на следующее - на Висте есть такая штука, которой нет на XP:

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

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

#2
18:23, 18 сен. 2008

Osiris
Это походу отрубается интерфейс Aero или как он там называется, борется отключением его в настройках %)
Ну а нормальный метод ЕМНИП в MSDN должен быть

#3
18:30, 18 сен. 2008

outcast
>Это походу отрубается интерфейс Aero или как он там называется, борется отключением его в настройках %)

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

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

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

#4
18:33, 18 сен. 2008

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

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

#5
18:39, 18 сен. 2008

Elec3C
Стараюсь :)

#6
19:52, 18 сен. 2008

Короче это мультисемпл.

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

#7
20:27, 18 сен. 2008

Сплошные интересности с этой Вистой.

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

  // только для полного экрана
  // проверяем уровень сглаживания 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 все работало нормально.

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

#8
21:18, 18 сен. 2008

Osiris
Виста показала, какой ты кривой кодер =))

#9
10:15, 19 сен. 2008

Elec3C
То, что я кривой кодер даже не вопрос :))), но это не мой код - это F1 на функцию CheckDeviceMultiSampleType. Так что это все таки не совсем моя вина.

#10
16:11, 19 сен. 2008

Кстати смешно, но мой двиг сразу без проблем заработал на Висте х64 как только ее поставил.

#11
16:18, 19 сен. 2008

DemonLord
Вы все слишком стандартны :)))))))) Я не могу без трудностей, провалились бы они куда.

#12
17:21, 24 ноя. 2008

Поднимаю тему. Прошлый раз я обошелся ограничением мультисемпла на уровне 2, но сами понимаете - это не правильно. Код у меня тот же. Его отладка на моей карте удовлетворяет первой проверке, вторую валит, третью удовлетворяет, устанвливает сглаживание х4 и приложение хрен чего делает.

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

#13
16:06, 25 ноя. 2008

up

#14
10:49, 26 ноя. 2008

ну хоть бы кто сказал, что он проверяет похожим образом и у него нет проблем.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

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