| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #include "BsD3D11Driver.h"
- #include "BsD3D11VideoModeInfo.h"
- #include "Error/BsException.h"
- namespace bs { namespace ct
- {
- D3D11Driver::D3D11Driver(const D3D11Driver &ob)
- {
- mAdapterNumber = ob.mAdapterNumber;
- mAdapterIdentifier = ob.mAdapterIdentifier;
- mDXGIAdapter = ob.mDXGIAdapter;
- if(mDXGIAdapter)
- mDXGIAdapter->AddRef();
- construct();
- }
- D3D11Driver::D3D11Driver(UINT32 adapterNumber, IDXGIAdapter* pDXGIAdapter)
- {
- mAdapterNumber = adapterNumber;
- mDXGIAdapter = pDXGIAdapter;
- if(mDXGIAdapter)
- mDXGIAdapter->AddRef();
- pDXGIAdapter->GetDesc(&mAdapterIdentifier);
- construct();
- }
- D3D11Driver::~D3D11Driver()
- {
- SAFE_RELEASE(mDXGIAdapter);
- }
- void D3D11Driver::construct()
- {
- assert(mDXGIAdapter != nullptr);
- UINT32 outputIdx = 0;
- IDXGIOutput* output = nullptr;
- while(mDXGIAdapter->EnumOutputs(outputIdx, &output) != DXGI_ERROR_NOT_FOUND)
- {
- outputIdx++;
- SAFE_RELEASE(output);
- }
- mNumOutputs = outputIdx;
- mVideoModeInfo = bs_shared_ptr_new<D3D11VideoModeInfo>(mDXGIAdapter);
- }
- D3D11Driver& D3D11Driver::operator=(const D3D11Driver& ob)
- {
- mAdapterNumber = ob.mAdapterNumber;
- mAdapterIdentifier = ob.mAdapterIdentifier;
- if(ob.mDXGIAdapter)
- ob.mDXGIAdapter->AddRef();
- SAFE_RELEASE(mDXGIAdapter);
- mDXGIAdapter = ob.mDXGIAdapter;
- return *this;
- }
- String D3D11Driver::getDriverName() const
- {
- size_t size = wcslen(mAdapterIdentifier.Description);
- char* str = (char*)bs_alloc((UINT32)(size + 1));
- wcstombs(str, mAdapterIdentifier.Description, size);
- str[size] = '\0';
- String Description = str;
-
- bs_free(str);
- return String(Description );
- }
- String D3D11Driver::getDriverDescription() const
- {
- size_t size = wcslen(mAdapterIdentifier.Description);
- char* str = (char*)bs_alloc((UINT32)(size + 1));
- wcstombs(str, mAdapterIdentifier.Description, size);
- str[size] = '\0';
- String driverDescription = str;
- bs_free(str);
- StringUtil::trim(driverDescription);
- return driverDescription;
- }
- 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;
- }
- }}
|