本文整理汇总了C++中IDXGIOutput::GetDesc方法的典型用法代码示例。如果您正苦于以下问题:C++ IDXGIOutput::GetDesc方法的具体用法?C++ IDXGIOutput::GetDesc怎么用?C++ IDXGIOutput::GetDesc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDXGIOutput
的用法示例。
在下文中一共展示了IDXGIOutput::GetDesc方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetDisplayDevices
void GetDisplayDevices(DeviceOutputs &deviceList)
{
HRESULT err;
deviceList.ClearData();
#ifdef USE_DXGI1_2
REFIID iidVal = OSGetVersion() >= 8 ? __uuidof(IDXGIFactory2) : __uuidof(IDXGIFactory1);
#else
REFIIF iidVal = __uuidof(IDXGIFactory1);
#endif
IDXGIFactory1 *factory;
if(SUCCEEDED(err = CreateDXGIFactory1(iidVal, (void**)&factory)))
{
UINT i=0;
IDXGIAdapter1 *giAdapter;
while(factory->EnumAdapters1(i++, &giAdapter) == S_OK)
{
Log(TEXT("------------------------------------------"));
DXGI_ADAPTER_DESC adapterDesc;
if(SUCCEEDED(err = giAdapter->GetDesc(&adapterDesc)))
{
if (adapterDesc.DedicatedVideoMemory != 0) {
DeviceOutputData &deviceData = *deviceList.devices.CreateNew();
deviceData.strDevice = adapterDesc.Description;
UINT j=0;
IDXGIOutput *giOutput;
while(giAdapter->EnumOutputs(j++, &giOutput) == S_OK)
{
DXGI_OUTPUT_DESC outputDesc;
if(SUCCEEDED(giOutput->GetDesc(&outputDesc)))
{
if(outputDesc.AttachedToDesktop)
{
deviceData.monitorNameList << outputDesc.DeviceName;
MonitorInfo &monitorInfo = *deviceData.monitors.CreateNew();
monitorInfo.hMonitor = outputDesc.Monitor;
mcpy(&monitorInfo.rect, &outputDesc.DesktopCoordinates, sizeof(RECT));
}
}
giOutput->Release();
}
}
}
else
AppWarning(TEXT("Could not query adapter %u"), i);
giAdapter->Release();
}
factory->Release();
}
}
示例2: LogVideoCardStats
void LogVideoCardStats()
{
HRESULT err;
#ifdef USE_DXGI1_2
REFIID iidVal = OSGetVersion() >= 8 ? __uuidof(IDXGIFactory2) : __uuidof(IDXGIFactory1);
#else
REFIIF iidVal = __uuidof(IDXGIFactory1);
#endif
IDXGIFactory1 *factory;
if(SUCCEEDED(err = CreateDXGIFactory1(iidVal, (void**)&factory)))
{
UINT i=0;
IDXGIAdapter1 *giAdapter;
while(factory->EnumAdapters1(i++, &giAdapter) == S_OK)
{
DXGI_ADAPTER_DESC adapterDesc;
if(SUCCEEDED(err = giAdapter->GetDesc(&adapterDesc)))
{
if (!(adapterDesc.VendorId == 0x1414 && adapterDesc.DeviceId == 0x8c)) { // Ignore Microsoft Basic Render Driver
Log(TEXT("------------------------------------------"));
Log(TEXT("Adapter %u"), i);
Log(TEXT(" Video Adapter: %s"), adapterDesc.Description);
Log(TEXT(" Video Adapter Dedicated Video Memory: %u"), adapterDesc.DedicatedVideoMemory);
Log(TEXT(" Video Adapter Shared System Memory: %u"), adapterDesc.SharedSystemMemory);
UINT j = 0;
IDXGIOutput *output;
while(SUCCEEDED(giAdapter->EnumOutputs(j++, &output)))
{
DXGI_OUTPUT_DESC desc;
if(SUCCEEDED(output->GetDesc(&desc)))
Log(TEXT(" Video Adapter Output %u: pos={%d, %d}, size={%d, %d}, attached=%s"), j,
desc.DesktopCoordinates.left, desc.DesktopCoordinates.top,
desc.DesktopCoordinates.right-desc.DesktopCoordinates.left, desc.DesktopCoordinates.bottom-desc.DesktopCoordinates.top,
desc.AttachedToDesktop ? L"true" : L"false");
output->Release();
}
}
}
else
AppWarning(TEXT("Could not query adapter %u"), i);
giAdapter->Release();
}
factory->Release();
}
}
示例3: toString
DXGI_OUTPUT_DESC D3D11Driver::getOutputDesc(UINT32 adapterOutputIdx) const
{
DXGI_OUTPUT_DESC desc;
IDXGIOutput* output = nullptr;
if(mDXGIAdapter->EnumOutputs(adapterOutputIdx, &output) == DXGI_ERROR_NOT_FOUND)
{
BS_EXCEPT(InvalidParametersException, "Cannot find output with the specified index: " + toString(adapterOutputIdx));
}
output->GetDesc(&desc);
SAFE_RELEASE(output);
return desc;
}
示例4: getMonitorSequentialNumberFromHMonitor
unsigned short Ogre::MonitorInfo::getMonitorSequentialNumberFromSwapChain(IDXGISwapChain* swapChain, bool allowRefresh /*= false*/)
{
IDXGIOutput* output;
int monitorSequencialNumber = -1;
if(swapChain != NULL)
{
HRESULT hr = swapChain->GetContainingOutput(&output);
if(hr == S_OK)
{
DXGI_OUTPUT_DESC desc;
output->GetDesc(&desc);
monitorSequencialNumber = getMonitorSequentialNumberFromHMonitor(desc.Monitor, allowRefresh);
}
}
return monitorSequencialNumber;
}
示例5: if
//--------------------------------------------------------------------------------------
HRESULT CD3D11Enumeration::EnumerateOutputs( CD3D11EnumAdapterInfo* pAdapterInfo )
{
HRESULT hr;
IDXGIOutput* pOutput;
for( int iOutput = 0; ; ++iOutput )
{
pOutput = NULL;
hr = pAdapterInfo->m_pAdapter->EnumOutputs( iOutput, &pOutput );
if( DXGI_ERROR_NOT_FOUND == hr )
{
return S_OK;
}
else if( FAILED( hr ) )
{
return hr; //Something bad happened.
}
else //Success!
{
CD3D11EnumOutputInfo* pOutputInfo = new CD3D11EnumOutputInfo;
if( !pOutputInfo )
{
SAFE_RELEASE( pOutput );
return E_OUTOFMEMORY;
}
ZeroMemory( pOutputInfo, sizeof( CD3D11EnumOutputInfo ) );
pOutput->GetDesc( &pOutputInfo->Desc );
pOutputInfo->Output = iOutput;
pOutputInfo->m_pOutput = pOutput;
EnumerateDisplayModes( pOutputInfo );
if( pOutputInfo->displayModeList.GetSize() <= 0 )
{
// If this output has no valid display mode, do not save it.
delete pOutputInfo;
continue;
}
hr = pAdapterInfo->outputInfoList.Add( pOutputInfo );
if( FAILED( hr ) )
{
delete pOutputInfo;
return hr;
}
}
}
}
示例6: EnumerateUsingDXGI
//-----------------------------------------------------------------------------
void EnumerateUsingDXGI( IDXGIFactory* pDXGIFactory )
{
assert( pDXGIFactory != 0 );
for( UINT index = 0; ; ++index )
{
IDXGIAdapter* pAdapter = nullptr;
HRESULT hr = pDXGIFactory->EnumAdapters( index, &pAdapter );
if( FAILED( hr ) ) // DXGIERR_NOT_FOUND is expected when the end of the list is hit
break;
DXGI_ADAPTER_DESC desc;
memset( &desc, 0, sizeof( DXGI_ADAPTER_DESC ) );
if( SUCCEEDED( pAdapter->GetDesc( &desc ) ) )
{
wprintf( L"\nDXGI Adapter: %u\nDescription: %s\n", index, desc.Description );
for( UINT iOutput = 0; ; ++iOutput )
{
IDXGIOutput* pOutput = nullptr;
hr = pAdapter->EnumOutputs( iOutput, &pOutput );
if( FAILED( hr ) ) // DXGIERR_NOT_FOUND is expected when the end of the list is hit
break;
DXGI_OUTPUT_DESC outputDesc;
memset( &outputDesc, 0, sizeof( DXGI_OUTPUT_DESC ) );
if( SUCCEEDED( pOutput->GetDesc( &outputDesc ) ) )
{
wprintf( L"hMonitor: 0x%0.8Ix\n", ( DWORD_PTR )outputDesc.Monitor );
wprintf( L"hMonitor Device Name: %s\n", outputDesc.DeviceName );
}
SAFE_RELEASE( pOutput );
}
wprintf(
L"\tGetVideoMemoryViaDXGI\n\t\tDedicatedVideoMemory: %Iu MB (%Iu)\n\t\tDedicatedSystemMemory: %Iu MB (%Iu)\n\t\tSharedSystemMemory: %Iu MB (%Iu)\n",
desc.DedicatedVideoMemory / 1024 / 1024, desc.DedicatedVideoMemory,
desc.DedicatedSystemMemory / 1024 / 1024, desc.DedicatedSystemMemory,
desc.SharedSystemMemory / 1024 / 1024, desc.SharedSystemMemory );
}
SAFE_RELEASE( pAdapter );
}
}
示例7: LogAdapterOutputs
void Application::LogAdapterOutputs(IDXGIAdapter* adapter)
{
UINT i = 0;
IDXGIOutput* output = nullptr;
while (adapter->EnumOutputs(i, &output) != DXGI_ERROR_NOT_FOUND)
{
DXGI_OUTPUT_DESC desc;
output->GetDesc(&desc);
wstring text = L"***OUTPUT: ";
text += desc.DeviceName;
text += L"\n";
OutputDebugString(text.c_str());
LogOutputDisplayModes(output, _backBufferFormat);
ReleaseCom(output);
++i;
}
}
示例8: if
//--------------------------------------------------------------------------------------
HRESULT CD3D11Enumeration::EnumerateOutputs( _In_ CD3D11EnumAdapterInfo* pAdapterInfo )
{
HRESULT hr;
IDXGIOutput* pOutput;
for( int iOutput = 0; ; ++iOutput )
{
pOutput = nullptr;
hr = pAdapterInfo->m_pAdapter->EnumOutputs( iOutput, &pOutput );
if( DXGI_ERROR_NOT_FOUND == hr )
{
return S_OK;
}
else if( FAILED( hr ) )
{
return hr; //Something bad happened.
}
else //Success!
{
CD3D11EnumOutputInfo* pOutputInfo = new (std::nothrow) CD3D11EnumOutputInfo;
if( !pOutputInfo )
{
SAFE_RELEASE( pOutput );
return E_OUTOFMEMORY;
}
pOutputInfo->Output = iOutput;
pOutputInfo->m_pOutput = pOutput;
pOutput->GetDesc( &pOutputInfo->Desc );
EnumerateDisplayModes( pOutputInfo );
if( pOutputInfo->displayModeList.empty() )
{
// If this output has no valid display mode, do not save it.
delete pOutputInfo;
continue;
}
pAdapterInfo->outputInfoList.push_back( pOutputInfo );
}
}
}
示例9: getOutputName
static string getOutputName( IDXGISwapChain* pSwapChain )
{
string sRet = "";
if ( pSwapChain )
{
IDXGIOutput* pOutput = NULL;
pSwapChain->GetContainingOutput( &pOutput );
if ( pOutput )
{
DXGI_OUTPUT_DESC desc;
if ( SUCCEEDED( pOutput->GetDesc( &desc ) ) )
{
sRet = PluginManager::UTF82ACP( PluginManager::UCS22UTF8( desc.DeviceName ) );
}
SAFE_RELEASE( pOutput );
}
}
return sRet;
}
示例10: LogAdapterOutputs
void LogAdapterOutputs(IDXGIAdapter* adapter)
{
UINT i = 0;
//monitors...
IDXGIOutput* output = nullptr;
while (adapter->EnumOutputs(i, &output) != DXGI_ERROR_NOT_FOUND)
{
//hey monitor tell me something about yourself
DXGI_OUTPUT_DESC desc;
output->GetDesc(&desc);
std::wstring text = L"Output: ";
text += desc.DeviceName;
text += L"\n";
wcout << text.c_str() << endl;
LogOutputDisplayModes(output);
output->Release();
output = nullptr;
i++;
}
}
示例11: main
int main() {
printf("\n\ntest_win_api_directx_research\n\n");
/* Retrieve a IDXGIFactory that can enumerate the adapters. */
IDXGIFactory1* factory = NULL;
HRESULT hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&factory));
if (S_OK != hr) {
printf("Error: failed to retrieve the IDXGIFactory.\n");
exit(EXIT_FAILURE);
}
/* Enumerate the adapters.*/
UINT i = 0;
IDXGIAdapter1* adapter = NULL;
std::vector<IDXGIAdapter1*> adapters; /* Needs to be Released(). */
while (DXGI_ERROR_NOT_FOUND != factory->EnumAdapters1(i, &adapter)) {
adapters.push_back(adapter);
++i;
}
/* Get some info about the adapters (GPUs). */
for (size_t i = 0; i < adapters.size(); ++i) {
DXGI_ADAPTER_DESC1 desc;
adapter = adapters[i];
hr = adapter->GetDesc1(&desc);
if (S_OK != hr) {
printf("Error: failed to get a description for the adapter: %lu\n", i);
continue;
}
wprintf(L"Adapter: %lu, description: %s\n", i, desc.Description);
}
/* Check what devices/monitors are attached to the adapters. */
UINT dx = 0;
IDXGIOutput* output = NULL;
std::vector<IDXGIOutput*> outputs; /* Needs to be Released(). */
for (size_t i = 0; i < adapters.size(); ++i) {
dx = 0;
adapter = adapters[i];
while (DXGI_ERROR_NOT_FOUND != adapter->EnumOutputs(dx, &output)) {
printf("Found monitor %d on adapter: %lu\n", dx, i);
outputs.push_back(output);
++dx;
}
}
if (0 >= outputs.size()) {
printf("Error: no outputs found (%lu).\n", outputs.size());
exit(EXIT_FAILURE);
}
/* Print some info about the monitors. */
for (size_t i = 0; i < outputs.size(); ++i) {
DXGI_OUTPUT_DESC desc;
output = outputs[i];
hr = output->GetDesc(&desc);
if (S_OK != hr) {
printf("Error: failed to retrieve a DXGI_OUTPUT_DESC for output %lu.\n", i);
continue;
}
wprintf(L"Monitor: %s, attached to desktop: %c\n", desc.DeviceName, (desc.AttachedToDesktop) ? 'y' : 'n');
}
/*
To get access to a OutputDuplication interface we need to have a
Direct3D device which handles the actuall rendering and "gpu"
stuff. According to a gamedev stackexchange it seems we can create
one w/o a HWND.
*/
ID3D11Device* d3d_device = NULL; /* Needs to be released. */
ID3D11DeviceContext* d3d_context = NULL; /* Needs to be released. */
IDXGIAdapter1* d3d_adapter = NULL;
D3D_FEATURE_LEVEL d3d_feature_level; /* The selected feature level (D3D version), selected from the Feature Levels array, which is NULL here; when it's NULL the default list is used see: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476082%28v=vs.85%29.aspx ) */
{ /* Start creating a D3D11 device */
#if 1
/*
NOTE: Apparently the D3D11CreateDevice function returns E_INVALIDARG, when
you pass a pointer to an adapter for the first parameter and use the
D3D_DRIVER_TYPE_HARDWARE. When you want to pass a valid pointer for the
adapter, you need to set the DriverType parameter (2nd) to
D3D_DRIVER_TYPE_UNKNOWN.
@todo figure out what would be the best solution; easiest to use is
//.........这里部分代码省略.........
示例12: if
//---------------------------------------------------------------------
BOOL D3D11VideoModeList::enumerate()
{
// int pD3D = mDriver->getD3D();
UINT adapter = mDriver->getAdapterNumber();
HRESULT hr;
IDXGIOutput *pOutput;
for( int iOutput = 0; ; ++iOutput )
{
//AIZTODO: one output for a single monitor ,to be handled for mulimon
hr = mDriver->getDeviceAdapter()->EnumOutputs( iOutput, &pOutput );
if( DXGI_ERROR_NOT_FOUND == hr )
{
return false;
}
else if (FAILED(hr))
{
return false; //Something bad happened.
}
else //Success!
{
DXGI_OUTPUT_DESC OutputDesc;
pOutput->GetDesc(&OutputDesc);
UINT NumModes = 0;
hr = pOutput->GetDisplayModeList(DXGI_FORMAT_R8G8B8A8_UNORM,
0,
&NumModes,
NULL );
DXGI_MODE_DESC *pDesc = new DXGI_MODE_DESC[ NumModes ];
ZeroMemory(pDesc, sizeof(DXGI_MODE_DESC) * NumModes);
hr = pOutput->GetDisplayModeList(DXGI_FORMAT_R8G8B8A8_UNORM,
0,
&NumModes,
pDesc );
SAFE_RELEASE(pOutput);
// display mode list can not be obtained when working over terminal session
if(FAILED(hr))
{
NumModes = 0;
if(hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE)
{
pDesc[0].Width = 800;
pDesc[0].Height = 600;
pDesc[0].RefreshRate.Numerator = 60;
pDesc[0].RefreshRate.Denominator = 1;
pDesc[0].Format = DXGI_FORMAT_R8G8B8A8_UNORM;
pDesc[0].ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE;
pDesc[0].Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
NumModes = 1;
}
}
for( UINT m=0; m<NumModes; m++ )
{
DXGI_MODE_DESC displayMode=pDesc[m];
// Filter out low-resolutions
if( displayMode.Width < 640 || displayMode.Height < 400 )
continue;
// Check to see if it is already in the list (to filter out refresh rates)
BOOL found = FALSE;
vector<D3D11VideoMode>::type::iterator it;
for( it = mModeList.begin(); it != mModeList.end(); it++ )
{
DXGI_OUTPUT_DESC oldOutput= it->getDisplayMode();
DXGI_MODE_DESC oldDisp = it->getModeDesc();
if(//oldOutput.Monitor==OutputDesc.Monitor &&
oldDisp.Width == displayMode.Width &&
oldDisp.Height == displayMode.Height// &&
//oldDisp.Format == displayMode.Format
)
{
// Check refresh rate and favour higher if poss
//if (oldDisp.RefreshRate < displayMode.RefreshRate)
// it->increaseRefreshRate(displayMode.RefreshRate);
found = TRUE;
break;
}
}
if( !found )
mModeList.push_back( D3D11VideoMode( OutputDesc,displayMode ) );
}
delete [] pDesc;
}
}
/*
UINT iMode;
for( iMode=0; iMode < pD3D->GetAdapterModeCount( adapter, D3DFMT_R5G6B5 ); iMode++ )
{
DXGI_OUTPUT_DESC displayMode;
pD3D->EnumAdapterModes( adapter, D3DFMT_R5G6B5, iMode, &displayMode );
//.........这里部分代码省略.........
示例13: InitDupl
//
// Initialize duplication interfaces
//
DUPL_RETURN DUPLICATIONMANAGER::InitDupl(_In_ ID3D11Device* Device, UINT Output)
{
m_OutputNumber = Output;
// Take a reference on the device
m_Device = Device;
m_Device->AddRef();
// Get DXGI device
IDXGIDevice* DxgiDevice = nullptr;
HRESULT hr = m_Device->QueryInterface(__uuidof(IDXGIDevice), reinterpret_cast<void**>(&DxgiDevice));
if (FAILED(hr))
{
return ProcessFailure(nullptr, L"Failed to QI for DXGI Device", L"Error", hr);
}
// Get DXGI adapter
IDXGIAdapter* DxgiAdapter = nullptr;
hr = DxgiDevice->GetParent(__uuidof(IDXGIAdapter), reinterpret_cast<void**>(&DxgiAdapter));
DxgiDevice->Release();
DxgiDevice = nullptr;
if (FAILED(hr))
{
return ProcessFailure(m_Device, L"Failed to get parent DXGI Adapter", L"Error", hr, SystemTransitionsExpectedErrors);
}
// Get output
IDXGIOutput* DxgiOutput = nullptr;
hr = DxgiAdapter->EnumOutputs(Output, &DxgiOutput);
DxgiAdapter->Release();
DxgiAdapter = nullptr;
if (FAILED(hr))
{
return ProcessFailure(m_Device, L"Failed to get specified output in DUPLICATIONMANAGER", L"Error", hr, EnumOutputsExpectedErrors);
}
DxgiOutput->GetDesc(&m_OutputDesc);
// QI for Output 1
IDXGIOutput1* DxgiOutput1 = nullptr;
hr = DxgiOutput->QueryInterface(__uuidof(DxgiOutput1), reinterpret_cast<void**>(&DxgiOutput1));
DxgiOutput->Release();
DxgiOutput = nullptr;
if (FAILED(hr))
{
return ProcessFailure(nullptr, L"Failed to QI for DxgiOutput1 in DUPLICATIONMANAGER", L"Error", hr);
}
// Create desktop duplication
hr = DxgiOutput1->DuplicateOutput(m_Device, &m_DeskDupl);
DxgiOutput1->Release();
DxgiOutput1 = nullptr;
if (FAILED(hr))
{
if (hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE)
{
MessageBoxW(nullptr, L"There is already the maximum number of applications using the Desktop Duplication API running, please close one of those applications and then try again.", L"Error", MB_OK);
return DUPL_RETURN_ERROR_UNEXPECTED;
}
return ProcessFailure(m_Device, L"Failed to get duplicate output in DUPLICATIONMANAGER", L"Error", hr, CreateDuplicationExpectedErrors);
}
return DUPL_RETURN_SUCCESS;
}
示例14: getTitle
bool D3D11App::initAPI(const API_Revision api_revision, const DXGI_FORMAT backBufferFmt, const DXGI_FORMAT depthBufferFmt, const int samples, const uint flags)
{
backBufferFormat = backBufferFmt;
depthBufferFormat = depthBufferFmt;
msaaSamples = samples;
const bool sampleBackBuffer = (flags & SAMPLE_BACKBUFFER) != 0;
// if (screen >= GetSystemMetrics(SM_CMONITORS)) screen = 0;
IDXGIFactory1 *dxgiFactory;
if (FAILED(CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void **) &dxgiFactory)))
{
ErrorMsg("Couldn't create DXGIFactory");
return false;
}
IDXGIAdapter1 *dxgiAdapter;
if (dxgiFactory->EnumAdapters1(0, &dxgiAdapter) == DXGI_ERROR_NOT_FOUND)
{
ErrorMsg("No adapters found");
return false;
}
// DXGI_ADAPTER_DESC1 adapterDesc;
// dxgiAdapter->GetDesc1(&adapterDesc);
IDXGIOutput *dxgiOutput;
if (dxgiAdapter->EnumOutputs(0, &dxgiOutput) == DXGI_ERROR_NOT_FOUND)
{
ErrorMsg("No outputs found");
return false;
}
DXGI_OUTPUT_DESC oDesc;
dxgiOutput->GetDesc(&oDesc);
// Find a suitable fullscreen format
int targetHz = 85;
DXGI_RATIONAL fullScreenRefresh;
int fsRefresh = 60;
fullScreenRefresh.Numerator = fsRefresh;
fullScreenRefresh.Denominator = 1;
char str[128];
uint nModes = 0;
dxgiOutput->GetDisplayModeList(backBufferFormat, 0, &nModes, NULL);
DXGI_MODE_DESC *modes = new DXGI_MODE_DESC[nModes];
dxgiOutput->GetDisplayModeList(backBufferFormat, 0, &nModes, modes);
resolution->clear();
for (uint i = 0; i < nModes; i++)
{
if (modes[i].Width >= 640 && modes[i].Height >= 480)
{
sprintf(str, "%dx%d", modes[i].Width, modes[i].Height);
int index = resolution->addItemUnique(str);
if (int(modes[i].Width) == fullscreenWidth && int(modes[i].Height) == fullscreenHeight)
{
int refresh = modes[i].RefreshRate.Numerator / modes[i].RefreshRate.Denominator;
if (abs(refresh - targetHz) < abs(fsRefresh - targetHz))
{
fsRefresh = refresh;
fullScreenRefresh = modes[i].RefreshRate;
}
resolution->selectItem(index);
}
}
}
delete [] modes;
sprintf(str, "%s (%dx%d)", getTitle(), width, height);
DWORD wndFlags = 0;
int x, y, w, h;
if (fullscreen)
{
wndFlags |= WS_POPUP;
x = y = 0;
w = width;
h = height;
}
else
{
wndFlags |= WS_OVERLAPPEDWINDOW;
RECT wRect;
wRect.left = 0;
wRect.right = width;
wRect.top = 0;
wRect.bottom = height;
AdjustWindowRect(&wRect, wndFlags, FALSE);
MONITORINFO monInfo;
monInfo.cbSize = sizeof(monInfo);
GetMonitorInfo(oDesc.Monitor, &monInfo);
w = min(wRect.right - wRect.left, monInfo.rcWork.right - monInfo.rcWork.left);
//.........这里部分代码省略.........
示例15: if
//.........这里部分代码省略.........
// Toggle captured viewport - switched which viewport the mouse controls.
//
if (m_pCapturedCamera == &m_ViewportCamera)
{
m_pCapturedCamera = &m_DebugCamera;
}
else
{
m_pCapturedCamera = &m_ViewportCamera;
}
}
else if (wParam == GetVirtualKeyFromCharacter('d')) // 'D'etach camera.
{
//
// Toggle scene viewport - switches which camera is used as the scene camera
// which determines prefetching and display behavior.
//
if (m_pSceneCamera == &m_ViewportCamera)
{
m_pSceneCamera = &m_DebugCamera;
}
else
{
m_pSceneCamera = &m_ViewportCamera;
m_pCapturedCamera = &m_ViewportCamera;
}
}
else if (wParam == GetVirtualKeyFromCharacter('f')) // Toggle 'f'ullscreen mode.
{
HRESULT hr = S_OK;
if (m_bFullscreen)
{
SetWindowLongPtr(m_Hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW);
SetWindowPos(
m_Hwnd,
nullptr,
m_WindowRect.left,
m_WindowRect.top,
m_WindowRect.right - m_WindowRect.left,
m_WindowRect.bottom - m_WindowRect.top,
0);
}
else
{
IDXGIOutput* pDXGIOutput;
hr = m_pDXGISwapChain->GetContainingOutput(&pDXGIOutput);
if (SUCCEEDED(hr))
{
DXGI_OUTPUT_DESC Desc;
pDXGIOutput->GetDesc(&Desc);
GetWindowRect(m_Hwnd, &m_WindowRect);
SetWindowLongPtr(m_Hwnd, GWL_STYLE, WS_POPUP);
SetWindowPos(
m_Hwnd,
HWND_TOP,
Desc.DesktopCoordinates.left,
Desc.DesktopCoordinates.top,
Desc.DesktopCoordinates.right - Desc.DesktopCoordinates.left,
Desc.DesktopCoordinates.bottom - Desc.DesktopCoordinates.top,
SWP_FRAMECHANGED | SWP_SHOWWINDOW);
pDXGIOutput->Release();
}
}
if (SUCCEEDED(hr))
{
ShowWindow(m_Hwnd, SW_SHOWNORMAL);
m_bFullscreen = !m_bFullscreen;
}
}
//
// Budget overrides in debug builds.
//
else if (wParam == VK_OEM_PLUS || wParam == VK_ADD) // '+' - Increase budget.
{
UINT64 CurrentOverride = GetLocalBudgetOverride();
CurrentOverride += _128MB;
SetLocalBudgetOverride(CurrentOverride);
}
else if (wParam == VK_OEM_MINUS || wParam == VK_SUBTRACT) // '-' - Decrease budget.
{
UINT64 CurrentOverride = GetLocalBudgetOverride();
if (CurrentOverride > _128MB)
{
CurrentOverride -= _128MB;
}
else
{
CurrentOverride = 0;
}
SetLocalBudgetOverride(CurrentOverride);
}
return true;
}
}
return false;
}