CmRenderSystemCapabilities.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "CmRenderSystemCapabilities.h"
  2. #include "CmException.h"
  3. #include "CmString.h"
  4. namespace BansheeEngine
  5. {
  6. Vector<BansheeEngine::String> RenderSystemCapabilities::msGPUVendorStrings;
  7. RenderSystemCapabilities::RenderSystemCapabilities()
  8. : mVendor(GPU_UNKNOWN)
  9. , mNumWorldMatrices(0)
  10. , mNumCombinedTextureUnits(0)
  11. , mNumCombinedUniformBlocks(0)
  12. , mStencilBufferBitDepth(0)
  13. , mNumVertexBlendMatrices(0)
  14. , mNumMultiRenderTargets(1)
  15. , mMaxBoundVertexBuffers(1)
  16. , mNonPOW2TexturesLimited(false)
  17. {
  18. for(int i = 0; i < CAPS_CATEGORY_COUNT; i++)
  19. {
  20. mCapabilities[i] = 0;
  21. }
  22. mCategoryRelevant[CAPS_CATEGORY_COMMON] = true;
  23. mCategoryRelevant[CAPS_CATEGORY_COMMON_2] = true;
  24. mCategoryRelevant[CAPS_CATEGORY_D3D11] = false;
  25. mCategoryRelevant[CAPS_CATEGORY_D3D9] = false;
  26. mCategoryRelevant[CAPS_CATEGORY_GL] = false;
  27. mNumTextureUnitsPerStage[GPT_VERTEX_PROGRAM] = 0;
  28. mNumTextureUnitsPerStage[GPT_FRAGMENT_PROGRAM] = 0;
  29. mNumTextureUnitsPerStage[GPT_GEOMETRY_PROGRAM] = 0;
  30. mNumTextureUnitsPerStage[GPT_HULL_PROGRAM] = 0;
  31. mNumTextureUnitsPerStage[GPT_DOMAIN_PROGRAM] = 0;
  32. mNumTextureUnitsPerStage[GPT_COMPUTE_PROGRAM] = 0;
  33. mNumUniformBlocksPerStage[GPT_VERTEX_PROGRAM] = 0;
  34. mNumUniformBlocksPerStage[GPT_FRAGMENT_PROGRAM] = 0;
  35. mNumUniformBlocksPerStage[GPT_GEOMETRY_PROGRAM] = 0;
  36. mNumUniformBlocksPerStage[GPT_HULL_PROGRAM] = 0;
  37. mNumUniformBlocksPerStage[GPT_DOMAIN_PROGRAM] = 0;
  38. mNumUniformBlocksPerStage[GPT_COMPUTE_PROGRAM] = 0;
  39. }
  40. RenderSystemCapabilities::~RenderSystemCapabilities()
  41. {
  42. }
  43. GPUVendor RenderSystemCapabilities::vendorFromString(const String& vendorString)
  44. {
  45. initVendorStrings();
  46. GPUVendor ret = GPU_UNKNOWN;
  47. String cmpString = vendorString;
  48. StringUtil::toLowerCase(cmpString);
  49. for (int i = 0; i < GPU_VENDOR_COUNT; ++i)
  50. {
  51. // case insensitive (lower case)
  52. if (msGPUVendorStrings[i] == cmpString)
  53. {
  54. ret = static_cast<GPUVendor>(i);
  55. break;
  56. }
  57. }
  58. return ret;
  59. }
  60. String RenderSystemCapabilities::vendorToString(GPUVendor v)
  61. {
  62. initVendorStrings();
  63. return msGPUVendorStrings[v];
  64. }
  65. void RenderSystemCapabilities::initVendorStrings()
  66. {
  67. if (msGPUVendorStrings.empty())
  68. {
  69. // Always lower case
  70. msGPUVendorStrings.resize(GPU_VENDOR_COUNT);
  71. msGPUVendorStrings[GPU_UNKNOWN] = "unknown";
  72. msGPUVendorStrings[GPU_NVIDIA] = "nvidia";
  73. msGPUVendorStrings[GPU_AMD] = "amd";
  74. msGPUVendorStrings[GPU_INTEL] = "intel";
  75. }
  76. }
  77. }