BsSLImporter.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsSLImporter.h"
  4. #include "FileSystem/BsDataStream.h"
  5. #include "FileSystem/BsFileSystem.h"
  6. #include "BsSLFXCompiler.h"
  7. #include "Importer/BsShaderImportOptions.h"
  8. namespace bs
  9. {
  10. SLImporter::SLImporter()
  11. :SpecificImporter()
  12. {
  13. }
  14. SLImporter::~SLImporter()
  15. {
  16. }
  17. bool SLImporter::isExtensionSupported(const WString& ext) const
  18. {
  19. WString lowerCaseExt = ext;
  20. StringUtil::toLowerCase(lowerCaseExt);
  21. return lowerCaseExt == L"bsl";
  22. }
  23. bool SLImporter::isMagicNumberSupported(const UINT8* magicNumPtr, UINT32 numBytes) const
  24. {
  25. return true; // Plain-text so I don't even check for magic number
  26. }
  27. SPtr<Resource> SLImporter::import(const Path& filePath, SPtr<const ImportOptions> importOptions)
  28. {
  29. SPtr<DataStream> stream = FileSystem::openFile(filePath);
  30. String source = stream->getAsString();
  31. SPtr<const ShaderImportOptions> io = std::static_pointer_cast<const ShaderImportOptions>(importOptions);
  32. WString shaderName = filePath.getWFilename(false);
  33. BSLFXCompileResult result = BSLFXCompiler::compile(toString(shaderName), source, io->getDefines());
  34. if (result.shader != nullptr)
  35. result.shader->setName(shaderName);
  36. if(!result.errorMessage.empty())
  37. {
  38. String file;
  39. if (result.errorFile.empty())
  40. file = filePath.toString();
  41. else
  42. file = result.errorFile;
  43. LOGERR("Compilation error when importing shader \"" + file + "\":\n" + result.errorMessage + ". Location: " +
  44. toString(result.errorLine) + " (" + toString(result.errorColumn) + ")");
  45. }
  46. return result.shader;
  47. }
  48. SPtr<ImportOptions> SLImporter::createImportOptions() const
  49. {
  50. return bs_shared_ptr_new<ShaderImportOptions>();
  51. }
  52. }