PatchNode.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "PatchNode.h"
  2. #include "Material.h"
  3. #include "MaterialRuntime.h"
  4. //======================================================================================================================
  5. // Constructor =
  6. //======================================================================================================================
  7. PatchNode::PatchNode(const ModelPatch& modelPatch, SceneNode* parent):
  8. RenderableNode(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*, Mesh::VBOS_NUM>& vbos, Vao& vao)
  18. {
  19. vao.create();
  20. if(mtl.getStdAttribVar(Material::SAV_POSITION) != NULL)
  21. {
  22. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_POSITIONS], *mtl.getStdAttribVar(Material::SAV_POSITION),
  23. 3, GL_FLOAT, GL_FALSE, 0, NULL);
  24. }
  25. if(mtl.getStdAttribVar(Material::SAV_NORMAL) != NULL)
  26. {
  27. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_NORMALS], *mtl.getStdAttribVar(Material::SAV_NORMAL),
  28. 3, GL_FLOAT, GL_FALSE, 0, NULL);
  29. }
  30. if(mtl.getStdAttribVar(Material::SAV_TANGENT) != NULL)
  31. {
  32. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_TANGENTS], *mtl.getStdAttribVar(Material::SAV_TANGENT),
  33. 4, GL_FLOAT, GL_FALSE, 0, NULL);
  34. }
  35. if(mtl.getStdAttribVar(Material::SAV_TEX_COORDS) != NULL)
  36. {
  37. vao.attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS], *mtl.getStdAttribVar(Material::SAV_TEX_COORDS),
  38. 2, GL_FLOAT, GL_FALSE, 0, NULL);
  39. }
  40. vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
  41. }