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

[D3D9] Fullscreen Multisample [Vista]

Страницы: 1 2 Следующая »
#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, после ресета повторно его требует. Борюсь с проблемой, может кто сталкивался - подскажите как лечить.

18 сен. 2008


#1

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

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

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

18 сен. 2008

#2

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

18 сен. 2008

#3

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

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

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

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

18 сен. 2008

#4

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

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

18 сен. 2008

#5

Elec3C
Стараюсь :)

18 сен. 2008

#6

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

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

18 сен. 2008

#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 все работало нормально.

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

18 сен. 2008

#8

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

18 сен. 2008

#9

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

19 сен. 2008

#10

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

19 сен. 2008

#11

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

19 сен. 2008

#12

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

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

24 ноя. 2008

#13

up

25 ноя. 2008

#14

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

26 ноя. 2008

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

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