CmGpuProgramImporter.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "CmGpuProgramImporter.h"
  2. #include "CmPath.h"
  3. #include "CmDataStream.h"
  4. #include "CmFileSystem.h"
  5. #include "CmGpuProgramImportOptions.h"
  6. #include "CmHighLevelGpuProgram.h"
  7. namespace CamelotEngine
  8. {
  9. bool GpuProgramImporter::isExtensionSupported(const String& ext) const
  10. {
  11. if(ext == "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. HResource GpuProgramImporter::import(const String& filePath, ConstImportOptionsPtr importOptions)
  21. {
  22. String ext = Path::getExtension(filePath);
  23. ext = ext.substr(1, ext.size() - 1); // Remove the .
  24. DataStreamPtr stream = FileSystem::open(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>::type includes = gpuProgImportOptions->getIncludes();
  32. HHighLevelGpuProgram gpuProgram = HighLevelGpuProgram::create(shaderSource, entryPoint, language, gptype, profile, &includes);
  33. gpuProgram.waitUntilLoaded();
  34. return gpuProgram;
  35. }
  36. ImportOptionsPtr GpuProgramImporter::createImportOptions() const
  37. {
  38. return ImportOptionsPtr(CM_NEW(GpuProgramImportOptions, PoolAlloc) GpuProgramImportOptions(),
  39. &MemAllocDeleter<GpuProgramImportOptions, PoolAlloc>::deleter);
  40. }
  41. }