PolyCGShaderModule.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * PolyCGShader.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 "Polycode.h"
  12. #include "PolyCGProgram.h"
  13. #include "PolyCGShader.h"
  14. #include "PolyMaterial.h"
  15. #include "PolyGLTexture.h"
  16. #include <string>
  17. #include <vector>
  18. #include <CG/cgGL.h>
  19. using std::vector;
  20. using std::string;
  21. namespace Polycode {
  22. class _PolyExport CGShaderModule : public PolycodeShaderModule {
  23. public:
  24. CGShaderModule();
  25. virtual ~CGShaderModule();
  26. bool acceptsExtension(String extension);
  27. Resource* createProgramFromFile(String extension, String fullPath);
  28. void reloadPrograms();
  29. String getShaderType();
  30. Shader *createShader(TiXmlNode *node);
  31. bool applyShaderMaterial(Renderer *renderer, Material *material, ShaderBinding *localOptions, unsigned int shaderIndex);
  32. void clearShader();
  33. protected:
  34. void addParamToProgram(CGProgram *program,TiXmlNode *node);
  35. void recreateCGProgram(CGProgram *prog, String fileName, int type);
  36. CGProgram *createCGProgram(String fileName, int type);
  37. void updateCGParam(Renderer *renderer, CGProgramParam &param, ShaderBinding *materialOptions, ShaderBinding *localOptions);
  38. void setCGAreaLightPositionParameter(Renderer *renderer, CGProgramParam &param, int lightIndex);
  39. void setCGAreaLightColorParameter(Renderer *renderer, CGProgramParam &param, int lightIndex);
  40. void setCGSpotLightPositionParameter(Renderer *renderer, CGProgramParam &param, int lightIndex);
  41. void setCGSpotLightDirectionParameter(Renderer *renderer, CGProgramParam &param, int lightIndex);
  42. void setCGSpotLightColorParameter(Renderer *renderer, CGProgramParam &param, int lightIndex);
  43. void setCGSpotLightTextureMatrixParameter(Renderer *renderer, CGProgramParam &param, int lightIndex);
  44. CGcontext cgContext;
  45. CGprofile vertexProfile;
  46. CGprofile fragmentProfile;
  47. vector<CGProgram*> programs;
  48. };
  49. }