BsGpuProgramImporter.cpp 1.8 KB

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