ModelPatchNode.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <boost/array.hpp>
  2. #include "ModelPatchNode.h"
  3. #include "Material.h"
  4. #include "MeshData.h"
  5. #include "ModelPatch.h"
  6. #include "ModelNode.h"
  7. #include "ModelNode.h"
  8. //======================================================================================================================
  9. // Constructor =
  10. //======================================================================================================================
  11. ModelPatchNode::ModelPatchNode(const ModelPatch& modelPatch_, ModelNode* parent):
  12. RenderableNode(modelPatch_.getMesh().getBoundingShape(), parent),
  13. rsrc(modelPatch_)
  14. {
  15. boost::array<const Vbo*, Mesh::VBOS_NUM> vboArr;
  16. for(uint i = 0; i < Mesh::VBOS_NUM; i++)
  17. {
  18. vboArr[i] = &rsrc.getMesh().getVbo((Mesh::Vbos)i);
  19. }
  20. createVao(rsrc.getCpMtl(), vboArr, cpVao);
  21. createVao(rsrc.getDpMtl(), vboArr, dpVao);
  22. }
  23. //======================================================================================================================
  24. // createVao =
  25. //======================================================================================================================
  26. void ModelPatchNode::createVao(const Material& mtl, const boost::array<const Vbo*, Mesh::VBOS_NUM>& vbos, Vao& vao)
  27. {
  28. vao.create();
  29. if(mtl.getStdAttribVar(Material::SAV_POSITION) != NULL)
  30. {
  31. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_POSITIONS], *mtl.getStdAttribVar(Material::SAV_POSITION),
  32. 3, GL_FLOAT, GL_FALSE, 0, NULL);
  33. }
  34. if(mtl.getStdAttribVar(Material::SAV_NORMAL) != NULL)
  35. {
  36. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_NORMALS], *mtl.getStdAttribVar(Material::SAV_NORMAL),
  37. 3, GL_FLOAT, GL_FALSE, 0, NULL);
  38. }
  39. if(mtl.getStdAttribVar(Material::SAV_TANGENT) != NULL)
  40. {
  41. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_TANGENTS], *mtl.getStdAttribVar(Material::SAV_TANGENT),
  42. 4, GL_FLOAT, GL_FALSE, 0, NULL);
  43. }
  44. if(mtl.getStdAttribVar(Material::SAV_TEX_COORDS) != NULL)
  45. {
  46. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS], *mtl.getStdAttribVar(Material::SAV_TEX_COORDS),
  47. 2, GL_FLOAT, GL_FALSE, 0, NULL);
  48. }
  49. vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
  50. }