2
0

PatchNode.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "PatchNode.h"
  2. #include "Resources/Material.h"
  3. #include "MaterialRuntime.h"
  4. //==============================================================================
  5. // Constructor =
  6. //==============================================================================
  7. PatchNode::PatchNode(const ModelPatch& modelPatch, SceneNode* parent)
  8. : RenderableNode(true, parent),
  9. rsrc(modelPatch)
  10. {
  11. cpMtlRun.reset(new MaterialRuntime(rsrc.getCpMtl()));
  12. dpMtlRun.reset(new MaterialRuntime(rsrc.getDpMtl()));
  13. }
  14. //==============================================================================
  15. // createVao =
  16. //==============================================================================
  17. void PatchNode::createVao(const Material& mtl, const boost::array<const Vbo*,
  18. Mesh::VBOS_NUM>& vbos, Vao& vao)
  19. {
  20. vao.create();
  21. if(mtl.getStdAttribVar(Material::SAV_POSITION) != NULL)
  22. {
  23. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_POSITIONS],
  24. *mtl.getStdAttribVar(Material::SAV_POSITION),
  25. 3, GL_FLOAT, GL_FALSE, 0, NULL);
  26. }
  27. if(mtl.getStdAttribVar(Material::SAV_NORMAL) != NULL)
  28. {
  29. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_NORMALS],
  30. *mtl.getStdAttribVar(Material::SAV_NORMAL),
  31. 3, GL_FLOAT, GL_FALSE, 0, NULL);
  32. }
  33. if(mtl.getStdAttribVar(Material::SAV_TANGENT) != NULL)
  34. {
  35. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_TANGENTS],
  36. *mtl.getStdAttribVar(Material::SAV_TANGENT),
  37. 4, GL_FLOAT, GL_FALSE, 0, NULL);
  38. }
  39. if(mtl.getStdAttribVar(Material::SAV_TEX_COORDS) != NULL)
  40. {
  41. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS],
  42. *mtl.getStdAttribVar(Material::SAV_TEX_COORDS),
  43. 2, GL_FLOAT, GL_FALSE, 0, NULL);
  44. }
  45. vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
  46. }