ModelNodePatch.h 961 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #ifndef MODEL_NODE_PATCH_H
  2. #define MODEL_NODE_PATCH_H
  3. #include <boost/array.hpp>
  4. #include "Vao.h"
  5. #include "Vbo.h"
  6. #include "Mesh.h" // For the Vbos enum
  7. #include "Model.h"
  8. #include "RsrcPtr.h"
  9. class Material;
  10. class ModelPatch;
  11. /// A fragment of the ModelNode
  12. class ModelNodePatch
  13. {
  14. public:
  15. ModelNodePatch(const ModelPatch& modelPatch, bool isSkinPatch);
  16. /// Transform feedback VBOs
  17. enum TfVbos
  18. {
  19. TF_VBO_POSITIONS,
  20. TF_VBO_NORMALS,
  21. TF_VBO_TANGENTS,
  22. TF_VBOS_NUM
  23. };
  24. const Vbo& getTfVbo(TfVbos i) const {return tfVbos[i];}
  25. private:
  26. const ModelPatch& modelPatch;
  27. boost::array<Vbo, TF_VBOS_NUM> tfVbos;
  28. boost::array<const Vbo*, Mesh::VBOS_NUM> vbos;
  29. Vao mainVao; ///< VAO for MS and BS
  30. Vao dpVao; ///< VAO for depth passes
  31. Vao tfVao; ///< VAO for transform feedback
  32. RsrcPtr<Material> tfMtl;
  33. static void createVao(const Material& material, const boost::array<const Vbo*, Mesh::VBOS_NUM>& vbos, Vao& vao);
  34. };
  35. #endif