PatchNode.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "anki/scene/PatchNode.h"
  2. #include "anki/resource/Material.h"
  3. #include "anki/scene/MaterialRuntime.h"
  4. namespace anki {
  5. //==============================================================================
  6. // Constructor =
  7. //==============================================================================
  8. PatchNode::PatchNode(const ModelPatch& modelPatch, ulong flags,
  9. SceneNode& parent)
  10. : RenderableNode(parent.getScene(), flags | SNF_INHERIT_PARENT_TRANSFORM,
  11. &parent),
  12. rsrc(modelPatch),
  13. mtlRun(new MaterialRuntime(rsrc.getMaterial()))
  14. {}
  15. //==============================================================================
  16. // createVao =
  17. //==============================================================================
  18. void PatchNode::createVao(const MaterialRuntime& mtl, const VboArray& vbos,
  19. Vao& vao)
  20. {
  21. vao.create();
  22. if(mtl.variableExits("position"))
  23. {
  24. ANKI_ASSERT(vbos[Mesh::VBO_VERT_POSITIONS] != NULL);
  25. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_POSITIONS],
  26. 0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  27. }
  28. if(mtl.variableExits("normal"))
  29. {
  30. ANKI_ASSERT(vbos[Mesh::VBO_VERT_NORMALS] != NULL);
  31. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_NORMALS],
  32. 1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
  33. }
  34. if(mtl.variableExits("tangent"))
  35. {
  36. ANKI_ASSERT(vbos[Mesh::VBO_VERT_TANGENTS] != NULL);
  37. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_TANGENTS],
  38. 2, 4, GL_FLOAT, GL_FALSE, 0, NULL);
  39. }
  40. if(mtl.variableExits("texCoords"))
  41. {
  42. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS],
  43. 3, 2, GL_FLOAT, GL_FALSE, 0, NULL);
  44. }
  45. vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
  46. }
  47. } // end namespace