PolyGLSLShader.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * PolyGLSLShader.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 9/20/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyGLSLShader.h"
  10. using namespace Polycode;
  11. GLSLShaderBinding::GLSLShaderBinding(GLSLShader *shader) : ShaderBinding(shader) {
  12. glslShader = shader;
  13. }
  14. GLSLShaderBinding::~GLSLShaderBinding() {
  15. }
  16. void GLSLShaderBinding::addTexture(String name, Texture *texture) {
  17. GLSLTextureBinding binding;
  18. binding.name = name;
  19. binding.texture = texture;
  20. // binding.vpParam = GLSLGetNamedParameter(glslShader->fp->program, name.c_str());
  21. textures.push_back(binding);
  22. }
  23. void GLSLShaderBinding::addCubemap(String name, Cubemap *cubemap) {
  24. GLSLCubemapBinding binding;
  25. binding.cubemap = cubemap;
  26. binding.name = name;
  27. // binding.vpParam = GLSLGetNamedParameter(GLSLShader->fp->program, name.c_str());
  28. cubemaps.push_back(binding);
  29. }
  30. void GLSLShaderBinding::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 GLSLShaderBinding::addParam(String type, String name, String value) {
  39. int paramType;
  40. void *defaultData = GLSLProgramParam::createParamData(&paramType, type, value);
  41. LocalShaderParam *newParam = new LocalShaderParam;
  42. newParam->data = defaultData;
  43. newParam->name = name;
  44. localParams.push_back(newParam);
  45. }
  46. GLSLShader::GLSLShader(GLSLProgram *vp, GLSLProgram *fp) : Shader(Shader::MODULE_SHADER) {
  47. this->vp = vp;
  48. this->fp = fp;
  49. shader_id = glCreateProgram();
  50. glAttachShader(shader_id, fp->program);
  51. glAttachShader(shader_id, vp->program);
  52. glLinkProgram(shader_id);
  53. }
  54. GLSLShader::~GLSLShader() {
  55. glDetachShader(shader_id, fp->program);
  56. glDetachShader(shader_id, vp->program);
  57. glDeleteProgram(shader_id);
  58. }
  59. ShaderBinding *GLSLShader::createBinding() {
  60. return new GLSLShaderBinding(this);
  61. }