PolyGLSLProgram.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * PolyGLSLProgram.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 9/20/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyGLSLProgram.h"
  10. using namespace Polycode;
  11. GLSLProgram::GLSLProgram(int type) : Resource(Resource::RESOURCE_PROGRAM) {
  12. this->type = type;
  13. }
  14. GLSLProgram::~GLSLProgram() {
  15. glDeleteShader(program);
  16. }
  17. void GLSLProgram::addParam(String name, bool isAuto, int autoID, int paramType, void *defaultData) {
  18. GLSLProgramParam newParam;
  19. newParam.name = name;
  20. newParam.paramType = paramType;
  21. newParam.defaultData = defaultData;
  22. newParam.isAuto = isAuto;
  23. newParam.autoID = autoID;
  24. // newParam.cgParam = cgGetNamedParameter(program, name.c_str());
  25. params.push_back(newParam);
  26. }
  27. void *GLSLProgramParam::createParamData(int *retType, String type, String value) {
  28. void *defaultData;
  29. if(type == "float") {
  30. *retType = GLSLProgramParam::PARAM_FLOAT;
  31. float *val = new float();
  32. *val = atof(value.c_str());
  33. defaultData = (void*)val;
  34. return defaultData;
  35. } else if(type == "float3") {
  36. *retType = GLSLProgramParam::PARAM_FLOAT3;
  37. Vector3 *val = new Vector3();
  38. defaultData = (void*)val;
  39. vector<String> values = value.split(" ");
  40. if(values.size() == 3) {
  41. val->set(atof(values[0].c_str()), atof(values[1].c_str()), atof(values[2].c_str()));
  42. } else {
  43. Logger::log("Error: A float3 must have 3 values (%d provided)!\n", values.size());
  44. }
  45. return defaultData;
  46. } else {
  47. *retType = GLSLProgramParam::PARAM_UNKNOWN;
  48. return NULL;
  49. }
  50. }