| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include "PatchNode.h"
- #include "Resources/Material.h"
- #include "MaterialRuntime.h"
- //==============================================================================
- // Constructor =
- //==============================================================================
- PatchNode::PatchNode(const ModelPatch& modelPatch, SceneNode* parent)
- : RenderableNode(true, parent),
- rsrc(modelPatch)
- {
- cpMtlRun.reset(new MaterialRuntime(rsrc.getCpMtl()));
- dpMtlRun.reset(new MaterialRuntime(rsrc.getDpMtl()));
- }
- //==============================================================================
- // createVao =
- //==============================================================================
- void PatchNode::createVao(const Material& mtl, const boost::array<const Vbo*,
- Mesh::VBOS_NUM>& vbos, Vao& vao)
- {
- vao.create();
- if(mtl.getStdAttribVar(Material::SAV_POSITION) != NULL)
- {
- vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_POSITIONS],
- *mtl.getStdAttribVar(Material::SAV_POSITION),
- 3, GL_FLOAT, GL_FALSE, 0, NULL);
- }
- if(mtl.getStdAttribVar(Material::SAV_NORMAL) != NULL)
- {
- vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_NORMALS],
- *mtl.getStdAttribVar(Material::SAV_NORMAL),
- 3, GL_FLOAT, GL_FALSE, 0, NULL);
- }
- if(mtl.getStdAttribVar(Material::SAV_TANGENT) != NULL)
- {
- vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_TANGENTS],
- *mtl.getStdAttribVar(Material::SAV_TANGENT),
- 4, GL_FLOAT, GL_FALSE, 0, NULL);
- }
- if(mtl.getStdAttribVar(Material::SAV_TEX_COORDS) != NULL)
- {
- vao.attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS],
- *mtl.getStdAttribVar(Material::SAV_TEX_COORDS),
- 2, GL_FLOAT, GL_FALSE, 0, NULL);
- }
- vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
- }
|