//-------------------------------------------------------------------------------------- // File: DXUTSettingsDlg.cpp // // Dialog for selection of device settings // // Copyright (c) Microsoft Corporation. All rights reserved //-------------------------------------------------------------------------------------- #include "dxstdafx.h" //-------------------------------------------------------------------------------------- // Internal functions forward declarations //-------------------------------------------------------------------------------------- WCHAR* DXUTPresentIntervalToString( UINT pi ); WCHAR* DXUTMultisampleTypeToString(D3DMULTISAMPLE_TYPE MultiSampleType); WCHAR* DXUTD3DDeviceTypeToString(D3DDEVTYPE devType); WCHAR* DXUTVertexProcessingTypeToString(DWORD vpt); //-------------------------------------------------------------------------------------- // Global state //-------------------------------------------------------------------------------------- CD3DSettingsDlg* g_pD3DSettings = NULL; DXUTDeviceSettings g_DeviceSettings; CD3DSettingsDlg* DXUTGetSettingsDialog() { // Using an accessor function gives control of the construction order static CD3DSettingsDlg dlg; return &dlg; } //-------------------------------------------------------------------------------------- CD3DSettingsDlg::CD3DSettingsDlg() { g_pD3DSettings = this; m_dwWindowWidth = 640; m_dwWindowHeight = 480; CreateControls(); } //-------------------------------------------------------------------------------------- CD3DSettingsDlg::~CD3DSettingsDlg() { OnDestroyDevice(); } //-------------------------------------------------------------------------------------- void CD3DSettingsDlg::CreateControls() { m_Dialog.EnableKeyboardInput( true ); m_Dialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); m_Dialog.SetFont( 1, L"Arial", 28, FW_BOLD ); // Right-justify static controls CDXUTElement* pElement = m_Dialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); if( pElement ) { pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; // Title CDXUTStatic* pStatic = NULL; m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Direct3D Settings", 10, 5, 400, 50, false, &pStatic ); pElement = pStatic->GetElement( 0 ); pElement->iFont = 1; pElement->dwTextFormat = DT_TOP | DT_LEFT; } // DXUTSETTINGSDLG_ADAPTER m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Display Adapter", 10, 50, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER, 200, 50, 300, 23 ); // DXUTSETTINGSDLG_DEVICE_TYPE m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Render Device", 10, 75, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEVICE_TYPE, 200, 75, 300, 23 ); // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN m_Dialog.AddRadioButton( DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Windowed", 240, 105, 300, 16 ); m_Dialog.AddCheckBox( DXUTSETTINGSDLG_DEVICECLIP, L"Clip to device when window spans across multiple monitors", 250, 126, 400, 16 ); m_Dialog.AddRadioButton( DXUTSETTINGSDLG_FULLSCREEN, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Full Screen", 240, 147, 300, 16 ); // DXUTSETTINGSDLG_ADAPTER_FORMAT m_Dialog.AddStatic( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, L"Adapter Format", 10, 180, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT, 200, 180, 300, 23 ); // DXUTSETTINGSDLG_RESOLUTION m_Dialog.AddStatic( DXUTSETTINGSDLG_RESOLUTION_LABEL, L"Resolution", 10, 205, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_RESOLUTION, 200, 205, 300, 23 ); m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION )->SetDropHeight( 106 ); // DXUTSETTINGSDLG_REFRESH_RATE m_Dialog.AddStatic( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 230, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_REFRESH_RATE, 200, 230, 300, 23 ); // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Back Buffer Format", 10, 265, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT, 200, 265, 300, 23 ); // DXUTSETTINGSDLG_DEPTH_STENCIL m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Depth/Stencil Format", 10, 290, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL, 200, 290, 300, 23 ); // DXUTSETTINGSDLG_MULTISAMPLE_TYPE m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Multisample Type", 10, 315, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE, 200, 315, 300, 23 ); // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Multisample Quality", 10, 340, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY, 200, 340, 300, 23 ); // DXUTSETTINGSDLG_VERTEX_PROCESSING m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Vertex Processing", 10, 365, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING, 200, 365, 300, 23 ); // DXUTSETTINGSDLG_PRESENT_INTERVAL m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Present Interval", 10, 390, 180, 23 ); m_Dialog.AddComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL, 200, 390, 300, 23 ); // DXUTSETTINGSDLG_OK, DXUTSETTINGSDLG_CANCEL m_Dialog.AddButton( DXUTSETTINGSDLG_OK, L"OK", 230, 435, 73, 31 ); m_Dialog.AddButton( DXUTSETTINGSDLG_CANCEL, L"Cancel", 315, 435, 73, 31, 0, true ); } //-------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnCreateDevice( IDirect3DDevice9* pd3dDevice ) { if( pd3dDevice == NULL ) return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); // Create the fonts/textures m_Dialog.SetCallback( StaticOnEvent ); return S_OK; } //-------------------------------------------------------------------------------------- // Changes the UI defaults to the current device settings //-------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::Refresh() { HRESULT hr = S_OK; CD3DEnumeration* pD3DEnum = DXUTGetEnumeration(); g_DeviceSettings = DXUTGetDeviceSettings(); RECT rcClient = DXUTGetWindowClientRect(); m_dwWindowWidth = rcClient.right - rcClient.left; m_dwWindowHeight = rcClient.bottom - rcClient.top; // Fill the UI with the current settings AddDeviceType( g_DeviceSettings.DeviceType ); SetWindowed( FALSE != g_DeviceSettings.pp.Windowed ); SetDeviceClip( 0 != (g_DeviceSettings.pp.Flags & D3DPRESENTFLAG_DEVICECLIP) ); AddAdapterFormat( g_DeviceSettings.AdapterFormat ); AddResolution( g_DeviceSettings.pp.BackBufferWidth, g_DeviceSettings.pp.BackBufferHeight ); AddRefreshRate( g_DeviceSettings.pp.FullScreen_RefreshRateInHz ); AddBackBufferFormat( g_DeviceSettings.pp.BackBufferFormat ); AddDepthStencilBufferFormat( g_DeviceSettings.pp.AutoDepthStencilFormat ); AddMultisampleType( g_DeviceSettings.pp.MultiSampleType ); AddMultisampleQuality( g_DeviceSettings.pp.MultiSampleQuality ); if( g_DeviceSettings.BehaviorFlags & D3DCREATE_PUREDEVICE ) AddVertexProcessingType( D3DCREATE_PUREDEVICE ); else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); AddPresentInterval( g_DeviceSettings.pp.PresentationInterval ); CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.AdapterOrdinal, g_DeviceSettings.DeviceType, g_DeviceSettings.AdapterFormat, g_DeviceSettings.pp.BackBufferFormat, (g_DeviceSettings.pp.Windowed != 0) ); if( NULL == pBestDeviceSettingsCombo ) return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); // Get the adapters list from CD3DEnumeration object CGrowableArray* pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); if( pAdapterInfoList->GetSize() == 0 ) return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); pAdapterCombo->RemoveAllItems(); // Add adapters for( int iAdapter=0; iAdapterGetSize(); iAdapter++ ) { CD3DEnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt(iAdapter); AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); } pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.AdapterOrdinal ) ); hr = OnAdapterChanged(); if( FAILED(hr) ) return hr; //m_Dialog.Refresh(); CDXUTDialog::SetRefreshTime( (float) DXUTGetTime() ); return S_OK; } //-------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnResetDevice() { const D3DSURFACE_DESC* pDesc = DXUTGetBackBufferSurfaceDesc(); m_Dialog.SetLocation( 0, 0 ); m_Dialog.SetSize( pDesc->Width, pDesc->Height ); m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB(255, 98, 138, 206), D3DCOLOR_ARGB(255, 54, 105, 192), D3DCOLOR_ARGB(255, 54, 105, 192), D3DCOLOR_ARGB(255, 10, 73, 179) ); return S_OK; } //-------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnRender( float fElapsedTime ) { m_Dialog.OnRender( fElapsedTime ); return S_OK; } //-------------------------------------------------------------------------------------- LRESULT CD3DSettingsDlg::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { m_Dialog.MsgProc( hWnd, uMsg, wParam, lParam ); return 0; } //-------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnLostDevice() { return S_OK; } //-------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnDestroyDevice() { m_Dialog.ClearFocus(); return S_OK; } //-------------------------------------------------------------------------------------- void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl ) { if( g_pD3DSettings ) g_pD3DSettings->OnEvent( nEvent, nControlID, pControl ); } //-------------------------------------------------------------------------------------- void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl ) { switch( nControlID ) { case DXUTSETTINGSDLG_ADAPTER: OnAdapterChanged(); break; case DXUTSETTINGSDLG_DEVICE_TYPE: OnDeviceTypeChanged(); break; case DXUTSETTINGSDLG_WINDOWED: OnWindowedFullScreenChanged(); break; case DXUTSETTINGSDLG_FULLSCREEN: OnWindowedFullScreenChanged(); break; case DXUTSETTINGSDLG_ADAPTER_FORMAT: OnAdapterFormatChanged(); break; case DXUTSETTINGSDLG_RESOLUTION: OnResolutionChanged(); break; case DXUTSETTINGSDLG_REFRESH_RATE: OnRefreshRateChanged(); break; case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT: OnBackBufferFormatChanged(); break; case DXUTSETTINGSDLG_DEPTH_STENCIL: OnDepthStencilBufferFormatChanged(); break; case DXUTSETTINGSDLG_MULTISAMPLE_TYPE: OnMultisampleTypeChanged(); break; case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY: OnMultisampleQualityChanged(); break; case DXUTSETTINGSDLG_VERTEX_PROCESSING: OnVertexProcessingChanged(); break; case DXUTSETTINGSDLG_PRESENT_INTERVAL: OnPresentIntervalChanged(); break; case DXUTSETTINGSDLG_DEVICECLIP: OnDeviceClipChanged(); break; case DXUTSETTINGSDLG_OK: { if( g_DeviceSettings.pp.Windowed ) { g_DeviceSettings.pp.FullScreen_RefreshRateInHz = 0; g_DeviceSettings.pp.BackBufferWidth = m_dwWindowWidth; g_DeviceSettings.pp.BackBufferHeight = m_dwWindowHeight; } if( g_DeviceSettings.pp.MultiSampleType != D3DMULTISAMPLE_NONE ) { g_DeviceSettings.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; } DXUTCreateDeviceFromSettings( &g_DeviceSettings ); DXUTSetShowSettingsDialog( false ); break; } case DXUTSETTINGSDLG_CANCEL: { DXUTSetShowSettingsDialog( false ); break; } } } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI() { CDXUTComboBox* pComboBox; CDXUTRadioButton* pRadioButton; // DXUTSETTINGSDLG_DEVICE_TYPE pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); g_DeviceSettings.DeviceType = (D3DDEVTYPE) PtrToUlong( pComboBox->GetSelectedData() ); // DXUTSETTINGSDLG_WINDOWED pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); g_DeviceSettings.pp.Windowed = pRadioButton->GetChecked(); // DXUTSETTINGSDLG_ADAPTER_FORMAT pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); g_DeviceSettings.AdapterFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); if( g_DeviceSettings.pp.Windowed ) { g_DeviceSettings.pp.BackBufferFormat = D3DFMT_UNKNOWN; g_DeviceSettings.pp.FullScreen_RefreshRateInHz = 0; } else { // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); g_DeviceSettings.pp.BackBufferFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); // DXUTSETTINGSDLG_RESOLUTION pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); g_DeviceSettings.pp.BackBufferWidth = HIWORD( dwResolution ); g_DeviceSettings.pp.BackBufferHeight = LOWORD( dwResolution ); // DXUTSETTINGSDLG_REFRESH_RATE pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); g_DeviceSettings.pp.FullScreen_RefreshRateInHz = PtrToUlong( pComboBox->GetSelectedData() ); } // DXUTSETTINGSDLG_DEPTH_STENCIL pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); g_DeviceSettings.pp.AutoDepthStencilFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); return S_OK; } //------------------------------------------------------------------------------------- CD3DEnumAdapterInfo* CD3DSettingsDlg::GetCurrentAdapterInfo() { CD3DEnumeration* pD3DEnum = DXUTGetEnumeration(); return pD3DEnum->GetAdapterInfo( g_DeviceSettings.AdapterOrdinal ); } //------------------------------------------------------------------------------------- CD3DEnumDeviceInfo* CD3DSettingsDlg::GetCurrentDeviceInfo() { CD3DEnumeration* pD3DEnum = DXUTGetEnumeration(); return pD3DEnum->GetDeviceInfo( g_DeviceSettings.AdapterOrdinal, g_DeviceSettings.DeviceType ); } //------------------------------------------------------------------------------------- CD3DEnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentDeviceSettingsCombo() { CD3DEnumeration* pD3DEnum = DXUTGetEnumeration(); return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.AdapterOrdinal, g_DeviceSettings.DeviceType, g_DeviceSettings.AdapterFormat, g_DeviceSettings.pp.BackBufferFormat, (g_DeviceSettings.pp.Windowed == TRUE) ); } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnAdapterChanged() { HRESULT hr = S_OK; // Store the adapter index g_DeviceSettings.AdapterOrdinal = GetSelectedAdapter(); // DXUTSETTINGSDLG_DEVICE_TYPE CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); pDeviceTypeComboBox->RemoveAllItems(); CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); if( pAdapterInfo == NULL ) return E_FAIL; for( int iDeviceInfo=0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) { CD3DEnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt(iDeviceInfo); AddDeviceType( pDeviceInfo->DeviceType ); } pDeviceTypeComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.DeviceType) ); hr = OnDeviceTypeChanged(); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnDeviceTypeChanged() { HRESULT hr = S_OK; g_DeviceSettings.DeviceType = GetSelectedDeviceType(); // Update windowed/full screen radio buttons bool bHasWindowedDeviceCombo = false; bool bHasFullScreenDeviceCombo = false; CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); if( pDeviceInfo == NULL ) return E_FAIL; for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) { CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); if( pDeviceSettingsCombo->Windowed ) bHasWindowedDeviceCombo = true; else bHasFullScreenDeviceCombo = true; } // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, bHasWindowedDeviceCombo ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, bHasFullScreenDeviceCombo ); SetWindowed( g_DeviceSettings.pp.Windowed && bHasWindowedDeviceCombo ); hr = OnWindowedFullScreenChanged(); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnWindowedFullScreenChanged() { HRESULT hr = S_OK; bool bWindowed = IsWindowed(); g_DeviceSettings.pp.Windowed = bWindowed; m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, !bWindowed ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_LABEL, !bWindowed ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, !bWindowed ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT, !bWindowed ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION, !bWindowed ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE, !bWindowed ); m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_DEVICECLIP, bWindowed ); bool bDeviceClip = ( 0x0 != (g_DeviceSettings.pp.Flags & D3DPRESENTFLAG_DEVICECLIP) ); // If windowed, get the appropriate adapter format from Direct3D if( g_DeviceSettings.pp.Windowed ) { IDirect3D9* pD3D = DXUTGetD3DObject(); if( pD3D == NULL ) return DXTRACE_ERR( L"DXUTGetD3DObject", E_FAIL ); D3DDISPLAYMODE mode; hr = pD3D->GetAdapterDisplayMode( g_DeviceSettings.AdapterOrdinal, &mode ); if( FAILED(hr) ) return DXTRACE_ERR( L"GetAdapterDisplayMode", hr ); g_DeviceSettings.AdapterFormat = mode.Format; g_DeviceSettings.pp.BackBufferWidth = mode.Width; g_DeviceSettings.pp.BackBufferHeight = mode.Height; g_DeviceSettings.pp.FullScreen_RefreshRateInHz = mode.RefreshRate; } const D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat; const DWORD dwWidth = g_DeviceSettings.pp.BackBufferWidth; const DWORD dwHeight = g_DeviceSettings.pp.BackBufferHeight; const DWORD dwRefreshRate = g_DeviceSettings.pp.FullScreen_RefreshRateInHz; // DXUTSETTINGSDLG_DEVICECLIP SetDeviceClip( bDeviceClip ); // DXUTSETTINGSDLG_ADAPTER_FORMAT CDXUTComboBox* pAdapterFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); if( pAdapterFormatComboBox == NULL ) return E_FAIL; pAdapterFormatComboBox->RemoveAllItems(); CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); if( pDeviceInfo == NULL ) return E_FAIL; if( bWindowed ) { AddAdapterFormat( adapterFormat ); } else { for( int iSettingsCombo=0; iSettingsCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iSettingsCombo++ ) { CD3DEnumDeviceSettingsCombo* pSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(iSettingsCombo); AddAdapterFormat( pSettingsCombo->AdapterFormat ); } } pAdapterFormatComboBox->SetSelectedByData( ULongToPtr(adapterFormat) ); hr = OnAdapterFormatChanged(); if( FAILED(hr) ) return hr; // DXUTSETTINGSDLG_RESOLUTION CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); if( bWindowed ) { pResolutionComboBox->RemoveAllItems(); AddResolution( dwWidth, dwHeight ); } pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG(dwWidth, dwHeight) ) ); hr = OnResolutionChanged(); if( FAILED(hr) ) return hr; // DXUTSETTINGSDLG_REFRESH_RATE CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); if( bWindowed ) { pRefreshRateComboBox->RemoveAllItems(); AddRefreshRate( dwRefreshRate ); } pRefreshRateComboBox->SetSelectedByData( ULongToPtr(dwRefreshRate) ); hr = OnRefreshRateChanged(); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnAdapterFormatChanged() { HRESULT hr = S_OK; // DXUTSETTINGSDLG_ADAPTER_FORMAT D3DFORMAT adapterFormat = GetSelectedAdapterFormat(); g_DeviceSettings.AdapterFormat = adapterFormat; // DXUTSETTINGSDLG_RESOLUTION CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); pResolutionComboBox->RemoveAllItems(); CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); if( pAdapterInfo == NULL ) return E_FAIL; for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) { D3DDISPLAYMODE DisplayMode = pAdapterInfo->displayModeList.GetAt( idm ); if( DisplayMode.Format == adapterFormat ) AddResolution( DisplayMode.Width, DisplayMode.Height ); } const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.pp.BackBufferWidth, g_DeviceSettings.pp.BackBufferHeight ); pResolutionComboBox->SetSelectedByData( ULongToPtr(dwCurResolution) ); hr = OnResolutionChanged(); if( FAILED(hr) ) return hr; // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); pBackBufferFormatComboBox->RemoveAllItems(); CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); if( pDeviceInfo == NULL ) return E_FAIL; const BOOL bWindowed = IsWindowed(); bool bHasWindowedBackBuffer = false; for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) { CD3DEnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); if( pDeviceCombo->Windowed == bWindowed && pDeviceCombo->AdapterFormat == g_DeviceSettings.AdapterFormat ) { AddBackBufferFormat( pDeviceCombo->BackBufferFormat ); bHasWindowedBackBuffer = true; } } pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.BackBufferFormat) ); hr = OnBackBufferFormatChanged(); if( FAILED(hr) ) return hr; if( !bHasWindowedBackBuffer ) { m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false ); if( g_DeviceSettings.pp.Windowed ) { SetWindowed( false ); hr = OnWindowedFullScreenChanged(); if( FAILED(hr) ) return hr; } } return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnResolutionChanged() { HRESULT hr = S_OK; CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); if( pAdapterInfo == NULL ) return E_FAIL; // Set resolution DWORD dwWidth, dwHeight; GetSelectedResolution( &dwWidth, &dwHeight ); g_DeviceSettings.pp.BackBufferWidth = dwWidth; g_DeviceSettings.pp.BackBufferHeight = dwHeight; DWORD dwRefreshRate = g_DeviceSettings.pp.FullScreen_RefreshRateInHz; // Update the refresh rate list CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); pRefreshRateComboBox->RemoveAllItems(); D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat; for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) { D3DDISPLAYMODE displayMode = pAdapterInfo->displayModeList.GetAt( idm ); if( displayMode.Format == adapterFormat && displayMode.Width == dwWidth && displayMode.Height == dwHeight ) { AddRefreshRate( displayMode.RefreshRate ); } } pRefreshRateComboBox->SetSelectedByData( ULongToPtr(dwRefreshRate) ); hr = OnRefreshRateChanged(); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnRefreshRateChanged() { // Set refresh rate g_DeviceSettings.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate(); return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged() { HRESULT hr = S_OK; g_DeviceSettings.pp.BackBufferFormat = GetSelectedBackBufferFormat(); D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat; D3DFORMAT backBufferFormat = g_DeviceSettings.pp.BackBufferFormat; CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); if( pDeviceInfo == NULL ) return E_FAIL; bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP; DXUTGetEnumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP, &bAllowPureHardwareVP, &bAllowMixedVP ); for( int idc=0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) { CD3DEnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); if( pDeviceCombo->Windowed == (g_DeviceSettings.pp.Windowed == TRUE) && pDeviceCombo->AdapterFormat == adapterFormat && pDeviceCombo->BackBufferFormat == backBufferFormat ) { CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); pDepthStencilComboBox->RemoveAllItems(); pDepthStencilComboBox->SetEnabled( (g_DeviceSettings.pp.EnableAutoDepthStencil == TRUE) ); if( g_DeviceSettings.pp.EnableAutoDepthStencil ) { for( int ifmt=0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ ) { D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt ); AddDepthStencilBufferFormat( fmt ); } pDepthStencilComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.AutoDepthStencilFormat) ); } else { if( !pDepthStencilComboBox->ContainsItem( L"(not used)" ) ) pDepthStencilComboBox->AddItem( L"(not used)", NULL ); } hr = OnDepthStencilBufferFormatChanged(); if( FAILED(hr) ) return hr; CDXUTComboBox* pVertexProcessingComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); pVertexProcessingComboBox->RemoveAllItems(); // Add valid vertex processing types if( bAllowSoftwareVP ) AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); if( bAllowHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); if( bAllowPureHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_PUREDEVICE ) AddVertexProcessingType( D3DCREATE_PUREDEVICE ); if( bAllowMixedVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); if( g_DeviceSettings.BehaviorFlags & D3DCREATE_PUREDEVICE ) pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_PUREDEVICE) ); else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_SOFTWARE_VERTEXPROCESSING) ); else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_HARDWARE_VERTEXPROCESSING) ); else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_MIXED_VERTEXPROCESSING) ); hr = OnVertexProcessingChanged(); if( FAILED(hr) ) return hr; CDXUTComboBox* pPresentIntervalComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); pPresentIntervalComboBox->RemoveAllItems(); for( int ipi=0; ipi < pDeviceCombo->presentIntervalList.GetSize(); ipi++ ) { UINT presentInterval = pDeviceCombo->presentIntervalList.GetAt( ipi ); AddPresentInterval( presentInterval ); } pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.pp.PresentationInterval ) ); hr = OnPresentIntervalChanged(); if( FAILED(hr) ) return hr; } } return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged() { HRESULT hr = S_OK; D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat(); if( g_DeviceSettings.pp.EnableAutoDepthStencil ) g_DeviceSettings.pp.AutoDepthStencilFormat = depthStencilBufferFormat; CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); if( pDeviceSettingsCombo == NULL ) return E_FAIL; CDXUTComboBox* pMultisampleTypeCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); pMultisampleTypeCombo->RemoveAllItems(); for( int ims=0; ims < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); ims++ ) { D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( ims ); bool bConflictFound = false; for( int iConf = 0; iConf < pDeviceSettingsCombo->DSMSConflictList.GetSize(); iConf++ ) { CD3DEnumDSMSConflict DSMSConf = pDeviceSettingsCombo->DSMSConflictList.GetAt( iConf ); if( DSMSConf.DSFormat == depthStencilBufferFormat && DSMSConf.MSType == msType ) { bConflictFound = true; break; } } if( !bConflictFound ) AddMultisampleType( msType ); } CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); pMultisampleQualityCombo->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.MultiSampleType) ); hr = OnMultisampleTypeChanged(); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged() { HRESULT hr = S_OK; D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType(); g_DeviceSettings.pp.MultiSampleType = multisampleType; CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); if( pDeviceSettingsCombo == NULL ) return E_FAIL; DWORD dwMaxQuality = 0; for( int iType = 0; iType < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); iType++ ) { D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( iType ); if( msType == multisampleType ) { dwMaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iType ); break; } } // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); pMultisampleQualityCombo->RemoveAllItems(); for( UINT iQuality = 0; iQuality < dwMaxQuality; iQuality++ ) { AddMultisampleQuality( iQuality ); } pMultisampleQualityCombo->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.MultiSampleQuality) ); hr = OnMultisampleQualityChanged(); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged() { g_DeviceSettings.pp.MultiSampleQuality = GetSelectedMultisampleQuality(); return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnVertexProcessingChanged() { DWORD dwBehavior = g_DeviceSettings.BehaviorFlags; // Clear vertex processing flags dwBehavior &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING; dwBehavior &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING; dwBehavior &= ~D3DCREATE_MIXED_VERTEXPROCESSING; dwBehavior &= ~D3DCREATE_PUREDEVICE; // Determine new flags DWORD dwNewFlags = GetSelectedVertexProcessingType(); if( dwNewFlags & D3DCREATE_PUREDEVICE ) dwNewFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING; // Make changes g_DeviceSettings.BehaviorFlags = dwBehavior | dwNewFlags; return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnPresentIntervalChanged() { g_DeviceSettings.pp.PresentationInterval = GetSelectedPresentInterval(); return S_OK; } //------------------------------------------------------------------------------------- HRESULT CD3DSettingsDlg::OnDeviceClipChanged() { if( IsDeviceClip() ) g_DeviceSettings.pp.Flags |= D3DPRESENTFLAG_DEVICECLIP; else g_DeviceSettings.pp.Flags &= ~D3DPRESENTFLAG_DEVICECLIP; return S_OK; } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddAdapter( const WCHAR* strDescription, UINT iAdapter ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); if( !pComboBox->ContainsItem( strDescription ) ) pComboBox->AddItem( strDescription, ULongToPtr(iAdapter) ); } //------------------------------------------------------------------------------------- UINT CD3DSettingsDlg::GetSelectedAdapter() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); return PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddDeviceType( D3DDEVTYPE devType ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); if( !pComboBox->ContainsItem( DXUTD3DDeviceTypeToString(devType) ) ) pComboBox->AddItem( DXUTD3DDeviceTypeToString(devType), ULongToPtr(devType) ); } //------------------------------------------------------------------------------------- D3DDEVTYPE CD3DSettingsDlg::GetSelectedDeviceType() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); return (D3DDEVTYPE) PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::SetWindowed( bool bWindowed ) { CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); pRadioButton->SetChecked( bWindowed ); pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_FULLSCREEN ); pRadioButton->SetChecked( !bWindowed ); } //------------------------------------------------------------------------------------- bool CD3DSettingsDlg::IsWindowed() { CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); return pRadioButton->GetChecked(); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddAdapterFormat( D3DFORMAT format ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); if( !pComboBox->ContainsItem( DXUTD3DFormatToString(format, TRUE) ) ) pComboBox->AddItem( DXUTD3DFormatToString(format, TRUE), ULongToPtr( format ) ); } //------------------------------------------------------------------------------------- D3DFORMAT CD3DSettingsDlg::GetSelectedAdapterFormat() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); return (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddResolution( DWORD dwWidth, DWORD dwHeight ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); DWORD dwResolutionData; WCHAR strResolution[50]; dwResolutionData = MAKELONG( dwWidth, dwHeight ); StringCchPrintf( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); if( !pComboBox->ContainsItem( strResolution ) ) pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); *pdwWidth = LOWORD( dwResolution ); *pdwHeight = HIWORD( dwResolution ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddRefreshRate( DWORD dwRate ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); WCHAR strRefreshRate[50]; if( dwRate == 0 ) StringCchCopy( strRefreshRate, 50, L"Default Rate" ); else StringCchPrintf( strRefreshRate, 50, L"%d Hz", dwRate ); if( !pComboBox->ContainsItem( strRefreshRate ) ) pComboBox->AddItem( strRefreshRate, ULongToPtr(dwRate) ); } //------------------------------------------------------------------------------------- DWORD CD3DSettingsDlg::GetSelectedRefreshRate() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); return PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddBackBufferFormat( D3DFORMAT format ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); if( !pComboBox->ContainsItem( DXUTD3DFormatToString(format, TRUE) ) ) pComboBox->AddItem( DXUTD3DFormatToString(format, TRUE), ULongToPtr( format ) ); } //------------------------------------------------------------------------------------- D3DFORMAT CD3DSettingsDlg::GetSelectedBackBufferFormat() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); return (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddDepthStencilBufferFormat( D3DFORMAT format ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); if( !pComboBox->ContainsItem( DXUTD3DFormatToString(format, TRUE) ) ) pComboBox->AddItem( DXUTD3DFormatToString(format, TRUE), ULongToPtr(format) ); } //------------------------------------------------------------------------------------- D3DFORMAT CD3DSettingsDlg::GetSelectedDepthStencilBufferFormat() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); return (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddMultisampleType( D3DMULTISAMPLE_TYPE type ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); if( !pComboBox->ContainsItem( DXUTMultisampleTypeToString(type) ) ) pComboBox->AddItem( DXUTMultisampleTypeToString(type), ULongToPtr(type) ); } //------------------------------------------------------------------------------------- D3DMULTISAMPLE_TYPE CD3DSettingsDlg::GetSelectedMultisampleType() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); return (D3DMULTISAMPLE_TYPE) PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddMultisampleQuality( DWORD dwQuality ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); WCHAR strQuality[50]; StringCchPrintf( strQuality, 50, L"%d", dwQuality ); if( !pComboBox->ContainsItem( strQuality ) ) pComboBox->AddItem( strQuality, ULongToPtr(dwQuality) ); } //------------------------------------------------------------------------------------- DWORD CD3DSettingsDlg::GetSelectedMultisampleQuality() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); return PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddVertexProcessingType( DWORD dwType ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); if( !pComboBox->ContainsItem( DXUTVertexProcessingTypeToString(dwType) ) ) pComboBox->AddItem( DXUTVertexProcessingTypeToString(dwType), ULongToPtr(dwType) ); } //------------------------------------------------------------------------------------- DWORD CD3DSettingsDlg::GetSelectedVertexProcessingType() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); return PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::AddPresentInterval( DWORD dwInterval ) { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); if( !pComboBox->ContainsItem( DXUTPresentIntervalToString(dwInterval) ) ) pComboBox->AddItem( DXUTPresentIntervalToString(dwInterval), ULongToPtr(dwInterval) ); } //------------------------------------------------------------------------------------- DWORD CD3DSettingsDlg::GetSelectedPresentInterval() { CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); return PtrToUlong( pComboBox->GetSelectedData() ); } //------------------------------------------------------------------------------------- void CD3DSettingsDlg::SetDeviceClip( bool bDeviceClip ) { CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); pCheckBox->SetChecked( bDeviceClip ); } //------------------------------------------------------------------------------------- bool CD3DSettingsDlg::IsDeviceClip() { CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); return pCheckBox->GetChecked(); } //-------------------------------------------------------------------------------------- // Returns the string for the given D3DDEVTYPE. //-------------------------------------------------------------------------------------- WCHAR* DXUTD3DDeviceTypeToString(D3DDEVTYPE devType) { switch (devType) { case D3DDEVTYPE_HAL: return L"D3DDEVTYPE_HAL"; case D3DDEVTYPE_SW: return L"D3DDEVTYPE_SW"; case D3DDEVTYPE_REF: return L"D3DDEVTYPE_REF"; default: return L"Unknown devType"; } } //-------------------------------------------------------------------------------------- // Returns the string for the given D3DMULTISAMPLE_TYPE. //-------------------------------------------------------------------------------------- WCHAR* DXUTMultisampleTypeToString(D3DMULTISAMPLE_TYPE MultiSampleType) { switch (MultiSampleType) { case D3DMULTISAMPLE_NONE: return L"D3DMULTISAMPLE_NONE"; case D3DMULTISAMPLE_NONMASKABLE: return L"D3DMULTISAMPLE_NONMASKABLE"; case D3DMULTISAMPLE_2_SAMPLES: return L"D3DMULTISAMPLE_2_SAMPLES"; case D3DMULTISAMPLE_3_SAMPLES: return L"D3DMULTISAMPLE_3_SAMPLES"; case D3DMULTISAMPLE_4_SAMPLES: return L"D3DMULTISAMPLE_4_SAMPLES"; case D3DMULTISAMPLE_5_SAMPLES: return L"D3DMULTISAMPLE_5_SAMPLES"; case D3DMULTISAMPLE_6_SAMPLES: return L"D3DMULTISAMPLE_6_SAMPLES"; case D3DMULTISAMPLE_7_SAMPLES: return L"D3DMULTISAMPLE_7_SAMPLES"; case D3DMULTISAMPLE_8_SAMPLES: return L"D3DMULTISAMPLE_8_SAMPLES"; case D3DMULTISAMPLE_9_SAMPLES: return L"D3DMULTISAMPLE_9_SAMPLES"; case D3DMULTISAMPLE_10_SAMPLES: return L"D3DMULTISAMPLE_10_SAMPLES"; case D3DMULTISAMPLE_11_SAMPLES: return L"D3DMULTISAMPLE_11_SAMPLES"; case D3DMULTISAMPLE_12_SAMPLES: return L"D3DMULTISAMPLE_12_SAMPLES"; case D3DMULTISAMPLE_13_SAMPLES: return L"D3DMULTISAMPLE_13_SAMPLES"; case D3DMULTISAMPLE_14_SAMPLES: return L"D3DMULTISAMPLE_14_SAMPLES"; case D3DMULTISAMPLE_15_SAMPLES: return L"D3DMULTISAMPLE_15_SAMPLES"; case D3DMULTISAMPLE_16_SAMPLES: return L"D3DMULTISAMPLE_16_SAMPLES"; default: return L"Unknown Multisample Type"; } } //-------------------------------------------------------------------------------------- // Returns the string for the given vertex processing type //-------------------------------------------------------------------------------------- WCHAR* DXUTVertexProcessingTypeToString(DWORD vpt) { switch (vpt) { case D3DCREATE_SOFTWARE_VERTEXPROCESSING: return L"Software vertex processing"; case D3DCREATE_MIXED_VERTEXPROCESSING: return L"Mixed vertex processing"; case D3DCREATE_HARDWARE_VERTEXPROCESSING: return L"Hardware vertex processing"; case D3DCREATE_PUREDEVICE: return L"Pure hardware vertex processing"; default: return L"Unknown vertex processing type"; } } //-------------------------------------------------------------------------------------- // Returns the string for the given present interval. //-------------------------------------------------------------------------------------- WCHAR* DXUTPresentIntervalToString( UINT pi ) { switch( pi ) { case D3DPRESENT_INTERVAL_IMMEDIATE: return L"D3DPRESENT_INTERVAL_IMMEDIATE"; case D3DPRESENT_INTERVAL_DEFAULT: return L"D3DPRESENT_INTERVAL_DEFAULT"; case D3DPRESENT_INTERVAL_ONE: return L"D3DPRESENT_INTERVAL_ONE"; case D3DPRESENT_INTERVAL_TWO: return L"D3DPRESENT_INTERVAL_TWO"; case D3DPRESENT_INTERVAL_THREE: return L"D3DPRESENT_INTERVAL_THREE"; case D3DPRESENT_INTERVAL_FOUR: return L"D3DPRESENT_INTERVAL_FOUR"; default: return L"Unknown PresentInterval"; } }