#include "PatchNode.h" #include "Material.h" #include "MaterialRuntime.h" //====================================================================================================================== // Constructor = //====================================================================================================================== PatchNode::PatchNode(const ModelPatch& modelPatch, SceneNode* parent): RenderableNode(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& 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]); }