PolyGLSLShader.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * PolyCGShader.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 9/20/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyCGShader.h"
  10. using namespace Polycode;
  11. CGShaderBinding::CGShaderBinding(CGShader *shader) : ShaderBinding(shader) {
  12. cgShader = shader;
  13. }
  14. CGShaderBinding::~CGShaderBinding() {
  15. }
  16. void CGShaderBinding::addTexture(string name, Texture *texture) {
  17. CGTextureBinding binding;
  18. binding.name = name;
  19. binding.texture = texture;
  20. binding.vpParam = cgGetNamedParameter(cgShader->fp->program, name.c_str());
  21. textures.push_back(binding);
  22. }
  23. void CGShaderBinding::addCubemap(string name, Cubemap *cubemap) {
  24. CGCubemapBinding binding;
  25. binding.cubemap = cubemap;
  26. binding.name = name;
  27. binding.vpParam = cgGetNamedParameter(cgShader->fp->program, name.c_str());
  28. cubemaps.push_back(binding);
  29. }
  30. void CGShaderBinding::clearTexture(string name) {
  31. for(int i=0; i < textures.size(); i++) {
  32. if(textures[i].name == name) {
  33. textures.erase(textures.begin()+i);
  34. return;
  35. }
  36. }
  37. }
  38. void CGShaderBinding::addParam(string type, string name, string value) {
  39. int paramType;
  40. void *defaultData = CGProgramParam::createParamData(&paramType, type, value);
  41. LocalShaderParam *newParam = new LocalShaderParam;
  42. newParam->data = defaultData;
  43. newParam->name = name;
  44. localParams.push_back(newParam);
  45. }
  46. CGShader::CGShader(CGProgram *vp, CGProgram *fp) : Shader(Shader::CG_SHADER) {
  47. this->vp = vp;
  48. this->fp = fp;
  49. }
  50. CGShader::~CGShader() {
  51. }
  52. ShaderBinding *CGShader::createBinding() {
  53. return new CGShaderBinding(this);
  54. }