PolyShader.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. * PolyShader.h
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 9/20/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. // @package Materials
  10. #pragma once
  11. #include "PolyString.h"
  12. #include "PolyGlobals.h"
  13. #include "PolyResource.h"
  14. #include "PolyTexture.h"
  15. #include "PolyCubemap.h"
  16. namespace Polycode {
  17. class ShaderBinding;
  18. class _PolyExport Shader : public Resource {
  19. public:
  20. Shader(int type);
  21. virtual ~Shader();
  22. int getType();
  23. void setName(String name);
  24. String getName();
  25. virtual ShaderBinding *createBinding() = 0;
  26. static const int FIXED_SHADER = 0;
  27. static const int MODULE_SHADER = 1;
  28. protected:
  29. String name;
  30. int type;
  31. };
  32. class _PolyExport ShaderRenderTarget {
  33. public:
  34. String id;
  35. Number width;
  36. Number height;
  37. int sizeMode;
  38. bool hasSize;
  39. Texture *texture;
  40. static const int SIZE_MODE_PIXELS = 0;
  41. static const int SIZE_MODE_NORMALIZED = 1;
  42. };
  43. typedef struct {
  44. String name;
  45. void *data;
  46. } LocalShaderParam;
  47. typedef struct {
  48. String id;
  49. String name;
  50. int mode;
  51. Texture *texture;
  52. Number width;
  53. Number height;
  54. static const int MODE_IN= 0;
  55. static const int MODE_OUT = 1;
  56. } RenderTargetBinding;
  57. class _PolyExport ShaderBinding {
  58. public:
  59. ShaderBinding(Shader *shader);
  60. virtual ~ShaderBinding();
  61. virtual void clearTexture(String name){};
  62. virtual void addTexture(String name, Texture *texture) {};
  63. virtual void addParam(String type, String name, String value) {};
  64. virtual void addCubemap(String name, Cubemap *cubemap) {};
  65. unsigned int getNumLocalParams();
  66. LocalShaderParam *getLocalParam(unsigned int index);
  67. LocalShaderParam *getLocalParamByName(String name);
  68. void addRenderTargetBinding(RenderTargetBinding *binding);
  69. unsigned int getNumRenderTargetBindings();
  70. RenderTargetBinding *getRenderTargetBinding(unsigned int index);
  71. unsigned int getNumInTargetBindings();
  72. RenderTargetBinding *getInTargetBinding(unsigned int index);
  73. unsigned int getNumOutTargetBindings();
  74. RenderTargetBinding *getOutTargetBinding(unsigned int index);
  75. Shader* shader;
  76. vector<LocalShaderParam*> localParams;
  77. vector<RenderTargetBinding*> renderTargetBindings;
  78. vector<RenderTargetBinding*> inTargetBindings;
  79. vector<RenderTargetBinding*> outTargetBindings;
  80. };
  81. }