CmGpuProgram.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "CmGpuProgram.h"
  2. #include "CmVector3.h"
  3. #include "CmVector4.h"
  4. #include "CmRenderSystemCapabilities.h"
  5. #include "CmException.h"
  6. #include "CmRenderSystem.h"
  7. #include "CmAsyncOp.h"
  8. #include "CmGpuParams.h"
  9. #include "CmGpuProgInclude.h"
  10. #include "CmGpuProgramManager.h"
  11. #include "CmResources.h"
  12. #include "CmGpuProgramRTTI.h"
  13. namespace BansheeEngine
  14. {
  15. GpuProgram::GpuProgram(const String& source, const String& entryPoint,
  16. GpuProgramType gptype, GpuProgramProfile profile, const Vector<HGpuProgInclude>* includes, bool isAdjacencyInfoRequired)
  17. :mEntryPoint(entryPoint), mType(gptype), mIsCompiled(false),
  18. mProfile(profile), mNeedsAdjacencyInfo(isAdjacencyInfoRequired)
  19. {
  20. if(includes != nullptr)
  21. {
  22. StringStream stringStream;
  23. for(auto iter = includes->begin(); iter != includes->end(); ++iter)
  24. {
  25. if(*iter != nullptr)
  26. {
  27. stringStream << (*iter)->getString();
  28. }
  29. }
  30. stringStream << source;
  31. mSource = stringStream.str();
  32. }
  33. else
  34. {
  35. mSource = source;
  36. }
  37. }
  38. GpuProgram::~GpuProgram()
  39. {
  40. }
  41. bool GpuProgram::isSupported() const
  42. {
  43. if (!isRequiredCapabilitiesSupported())
  44. return false;
  45. RenderSystem* rs = BansheeEngine::RenderSystem::instancePtr();
  46. String profile = rs->getCapabilities()->gpuProgProfileToRSSpecificProfile(mProfile);
  47. return rs->getCapabilities()->isShaderProfileSupported(profile);
  48. }
  49. bool GpuProgram::isRequiredCapabilitiesSupported() const
  50. {
  51. return true;
  52. }
  53. GpuParamsPtr GpuProgram::createParameters()
  54. {
  55. return bs_shared_ptr<GpuParams, PoolAlloc>(std::ref(mParametersDesc), false);
  56. }
  57. const String& GpuProgram::getLanguage() const
  58. {
  59. static const String language = "null";
  60. return language;
  61. }
  62. HGpuProgram GpuProgram::create(const String& source, const String& entryPoint, const String& language, GpuProgramType gptype,
  63. GpuProgramProfile profile, const Vector<HGpuProgInclude>* includes, bool requiresAdjacency)
  64. {
  65. GpuProgramPtr programPtr = _createPtr(source, entryPoint, language, gptype, profile, includes);
  66. return static_resource_cast<GpuProgram>(gResources()._createResourceHandle(programPtr));
  67. }
  68. GpuProgramPtr GpuProgram::_createPtr(const String& source, const String& entryPoint,
  69. const String& language, GpuProgramType gptype, GpuProgramProfile profile, const Vector<HGpuProgInclude>* includes, bool requiresAdjacency)
  70. {
  71. return GpuProgramManager::instance().create(source, entryPoint, language, gptype, profile, includes);
  72. }
  73. /************************************************************************/
  74. /* SERIALIZATION */
  75. /************************************************************************/
  76. RTTITypeBase* GpuProgram::getRTTIStatic()
  77. {
  78. return GpuProgramRTTI::instance();
  79. }
  80. RTTITypeBase* GpuProgram::getRTTI() const
  81. {
  82. return GpuProgram::getRTTIStatic();
  83. }
  84. }