CmD3D11Driver.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "CmD3D11Driver.h"
  2. #include "CmD3D11VideoModeList.h"
  3. namespace CamelotEngine
  4. {
  5. D3D11Driver::D3D11Driver( const D3D11Driver &ob )
  6. {
  7. mAdapterNumber = ob.mAdapterNumber;
  8. mAdapterIdentifier = ob.mAdapterIdentifier;
  9. mDesktopDisplayMode = ob.mDesktopDisplayMode;
  10. mVideoModeList = nullptr;
  11. mDXGIAdapter = ob.mDXGIAdapter;
  12. if(mDXGIAdapter)
  13. mDXGIAdapter->AddRef();
  14. init();
  15. }
  16. D3D11Driver::D3D11Driver(unsigned int adapterNumber, IDXGIAdapter* pDXGIAdapter)
  17. {
  18. mAdapterNumber = adapterNumber;
  19. mVideoModeList = nullptr;
  20. mDXGIAdapter = pDXGIAdapter;
  21. if(mDXGIAdapter)
  22. mDXGIAdapter->AddRef();
  23. // get the description of the adapter
  24. pDXGIAdapter->GetDesc(&mAdapterIdentifier);
  25. init();
  26. }
  27. D3D11Driver::~D3D11Driver()
  28. {
  29. for(UINT32 i = 0; i < mNumOutputs; i++)
  30. SAFE_DELETE(mVideoModeList[i]);
  31. SAFE_DELETE(mVideoModeList);
  32. SAFE_RELEASE(mDXGIAdapter);
  33. }
  34. void D3D11Driver::init()
  35. {
  36. assert(mDXGIAdapter != nullptr);
  37. UINT32 outputIdx = 0;
  38. IDXGIOutput* output;
  39. while(mDXGIAdapter->EnumOutputs(outputIdx, &output) != DXGI_ERROR_NOT_FOUND)
  40. {
  41. outputIdx++;
  42. }
  43. mNumOutputs = outputIdx + 1;
  44. mVideoModeList = new D3D11VideoModeList*[mNumOutputs];
  45. for(UINT32 i = 0; i < mNumOutputs; i++)
  46. mVideoModeList[i] = new D3D11VideoModeList(this, i);
  47. }
  48. D3D11Driver& D3D11Driver::operator=(const D3D11Driver& ob)
  49. {
  50. mAdapterNumber = ob.mAdapterNumber;
  51. mAdapterIdentifier = ob.mAdapterIdentifier;
  52. mDesktopDisplayMode = ob.mDesktopDisplayMode;
  53. mVideoModeList = nullptr;
  54. if(ob.mDXGIAdapter)
  55. ob.mDXGIAdapter->AddRef();
  56. SAFE_RELEASE(mDXGIAdapter);
  57. mDXGIAdapter=ob.mDXGIAdapter;
  58. return *this;
  59. }
  60. String D3D11Driver::getDriverName() const
  61. {
  62. size_t size = wcslen(mAdapterIdentifier.Description);
  63. char* str = new char[size + 1];
  64. wcstombs(str, mAdapterIdentifier.Description, size);
  65. str[size] = '\0';
  66. String Description = str;
  67. delete str;
  68. return String(Description );
  69. }
  70. String D3D11Driver::getDriverDescription() const
  71. {
  72. size_t size = wcslen(mAdapterIdentifier.Description);
  73. char* str = new char[size + 1];
  74. wcstombs(str, mAdapterIdentifier.Description, size);
  75. str[size] = '\0';
  76. String driverDescription = str;
  77. delete [] str;
  78. StringUtil::trim(driverDescription);
  79. return driverDescription;
  80. }
  81. const D3D11VideoModeList* D3D11Driver::getVideoModeList(UINT32 adapterOutputIdx) const
  82. {
  83. assert(adapterOutputIdx >= 0 && adapterOutputIdx < mNumOutputs);
  84. return mVideoModeList[adapterOutputIdx];
  85. }
  86. }