BsGpuProgramImporter.cpp 2.2 KB

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