Проблема при выход из обработчика нажатия Ctrl Alt Del

У меня есть рендер directshow фильтр, который работает на Direct 3D.

Что делать при выходе из обработчика Windows нажатия кнопок Control Alternative Delete?

// Test the cooperative level to see if it's okay to render if( FAILED( hr = m_pd3dDevice->TestCooperativeLevel() ) ) { // If the device was lost, do not render until we get it back if( D3DERR_DEVICELOST == hr )

return S_OK;

// Check if the device needs to be resized. if( D3DERR_DEVICENOTRESET == hr ) { // If we are windowed, read the desktop mode and use the same format for // the back buffer if( m_bWindowed ) { D3DAdapterInfo* pAdapterInfo = &m_Adapters[m_dwAdapter]; m_pD3D->GetAdapterDisplayMode( m_dwAdapter, &pAdapterInfo->d3ddmDesktop ); m_d3dpp.BackBufferFormat = pAdapterInfo->d3ddmDesktop.Format;

}

if( FAILED( hr = Resize3DEnvironment() ) ) { return hr; } } return hr; }TestCooperativeLevel() failed (D3DERR_DEVICENOTRESET).В Resize3DEnvironment ошибка 0x8876086С в строке// Reset the deviceif( FAILED( hr = m_pd3dDevice->Reset( &m_d3dpp ) ) )

Последняя правка: пн, 29/08/2011 - 22:06
Submitted by Kozlov_Sergey on

Комментарии

Заменил /*/ // Reset the device if( FAILED( hr = m_pd3dDevice->Reset( &m_d3dpp ) ) ) { return hr; }

/*/

на

Cleanup3DEnvironment();

Create(NULL);

Работает.

Перед тем, как ресетить устройство, вы обязаны освободить все ресурсы (грубо говоря обрелизить все интерфейсы), которые были созданны в пуле D3DPOOL_DEFAULT! Обязательно! А после ресета устройства восстановить их заново.
Для ошибок типа 0x8876086С существует утила DX Error Lookup (это что бы на форуме не оперировать голыми, мало кому понятными цифрами).

И вообще, функции (а вернее только их названия) Resize3DEnvironment(), Cleanup3DEnvironment() и Create(NULL) мне ничего , например, не сказало абсолютно. Я же не телепат Smile

Submitted by MaxImuS on

GameDev.by