PatchNode.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "PatchNode.h"
  2. #include "rsrc/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. mtlRun(new MaterialRuntime(rsrc.getMaterial()))
  11. {}
  12. //==============================================================================
  13. // createVao =
  14. //==============================================================================
  15. void PatchNode::createVao(const Material& mtl, const VboArray& vbos,
  16. Vao& vao)
  17. {
  18. vao.create();
  19. if(mtl.buildinVariableExits(MaterialBuildinVariable::MV_POSITION))
  20. {
  21. ASSERT(vbos[Mesh::VBO_VERT_POSITIONS] != NULL);
  22. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_POSITIONS],
  23. 0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  24. }
  25. if(mtl.buildinVariableExits(MaterialBuildinVariable::MV_NORMAL))
  26. {
  27. ASSERT(vbos[Mesh::VBO_VERT_NORMALS] != NULL);
  28. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_NORMALS],
  29. 1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  30. }
  31. if(mtl.buildinVariableExits(MaterialBuildinVariable::MV_TANGENT))
  32. {
  33. ASSERT(vbos[Mesh::VBO_VERT_TANGENTS] != NULL);
  34. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_TANGENTS],
  35. 2, 4, GL_FLOAT, GL_FALSE, 0, NULL);
  36. }
  37. if(mtl.buildinVariableExits(MaterialBuildinVariable::MV_TEX_COORDS))
  38. {
  39. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS],
  40. 3, 2, GL_FLOAT, GL_FALSE, 0, NULL);
  41. }
  42. vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
  43. }