PolyModule.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * PolyModule.h
  3. * PolyCore
  4. *
  5. * Created by Ivan Safrin on 12/1/10.
  6. * Copyright 2010 Local Projects. All rights reserved.
  7. *
  8. */
  9. #pragma once
  10. #include "PolyString.h"
  11. #include "PolyGlobals.h"
  12. class TiXmlNode;
  13. namespace Polycode {
  14. class Material;
  15. class Renderer;
  16. class Shader;
  17. class ShaderBinding;
  18. class Resource;
  19. class ShaderProgram;
  20. class ResourcePool;
  21. class _PolyExport PolycodeModule : public PolyBase {
  22. public:
  23. PolycodeModule();
  24. virtual ~PolycodeModule();
  25. int getType() { return type; }
  26. static const int TYPE_GENERIC = 0;
  27. static const int TYPE_SHADER = 1;
  28. virtual void Update(Number elapsed) {}
  29. bool requiresUpdate();
  30. protected:
  31. int type;
  32. bool _requiresUpdate;
  33. };
  34. class _PolyExport PolycodeShaderModule : public PolycodeModule {
  35. public:
  36. PolycodeShaderModule();
  37. virtual ~PolycodeShaderModule();
  38. virtual bool acceptsExtension(const String& extension) = 0;
  39. virtual ShaderProgram* createProgramFromFile(const String& extension, const String& fullPath) = 0;
  40. virtual String getShaderType() = 0;
  41. virtual Shader *createShader(ResourcePool *resourcePool, TiXmlNode *node) = 0;
  42. virtual Shader *createShader(ResourcePool *resourcePool, String name, String vpName, String fpName) = 0;
  43. virtual bool applyShaderMaterial(Renderer *renderer, Material *material, ShaderBinding *localOptions, unsigned int shaderIndex) = 0;
  44. bool hasShader(Shader *shader) { for(int i=0; i < shaders.size(); i++) { if(shaders[i] == shader){ return true; } } return false; }
  45. virtual void clearShader() = 0;
  46. virtual void reloadPrograms() = 0;
  47. protected:
  48. std::vector<Shader*> shaders;
  49. };
  50. }