2
0

BsGpuProgramImporter.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "BsGpuProgramImporter.h"
  2. #include "BsPath.h"
  3. #include "BsDataStream.h"
  4. #include "BsFileSystem.h"
  5. #include "BsGpuProgramImportOptions.h"
  6. #include "BsGpuProgram.h"
  7. #include "BsDebug.h"
  8. namespace BansheeEngine
  9. {
  10. bool GpuProgramImporter::isExtensionSupported(const WString& ext) const
  11. {
  12. if(ext == L"gpuprog")
  13. return true;
  14. return false;
  15. }
  16. bool GpuProgramImporter::isMagicNumberSupported(const UINT8* magicNumPtr, UINT32 numBytes) const
  17. {
  18. // Gpu program files are plain-text so no magic number
  19. return true;
  20. }
  21. ResourcePtr GpuProgramImporter::import(const Path& filePath, ConstImportOptionsPtr importOptions)
  22. {
  23. WString ext = filePath.getWExtension();
  24. ext = ext.substr(1, ext.size() - 1); // Remove the .
  25. DataStreamPtr stream = FileSystem::openFile(filePath);
  26. String shaderSource = stream->getAsString();
  27. const GpuProgramImportOptions* gpuProgImportOptions = static_cast<const GpuProgramImportOptions*>(importOptions.get());
  28. String entryPoint = gpuProgImportOptions->getEntryPoint();
  29. GpuProgramProfile profile = gpuProgImportOptions->getProfile();
  30. String language = gpuProgImportOptions->getLanguage();
  31. GpuProgramType gptype = gpuProgImportOptions->getType();
  32. Vector<HGpuProgInclude> includes = gpuProgImportOptions->getIncludes();
  33. GpuProgramPtr gpuProgram = GpuProgram::_createPtr(shaderSource, entryPoint, language, gptype, profile, &includes);
  34. gpuProgram->blockUntilCoreInitialized();
  35. if (!gpuProgram->isCompiled())
  36. {
  37. LOGERR("Failed compiling GPU program: " + filePath.toString() + ". Error: " + gpuProgram->getCompileErrorMessage());
  38. // TODO - Return some dummy program here?
  39. }
  40. WString fileName = filePath.getWFilename(false);
  41. gpuProgram->setName(fileName);
  42. return gpuProgram;
  43. }
  44. ImportOptionsPtr GpuProgramImporter::createImportOptions() const
  45. {
  46. return bs_shared_ptr<GpuProgramImportOptions, PoolAlloc>();
  47. }
  48. }