Panagiotis Christopoulos Charitos 15 лет назад
Родитель
Сommit
050a698709
3 измененных файлов с 81 добавлено и 2 удалено
  1. 0 1
      build/debug/Makefile
  2. 72 0
      src/Scene/ModelNodePatch.cpp
  3. 9 1
      src/Scene/ModelNodePatch.h

Разница между файлами не показана из-за своего большого размера
+ 0 - 1
build/debug/Makefile


+ 72 - 0
src/Scene/ModelNodePatch.cpp

@@ -0,0 +1,72 @@
+#include "ModelNodePatch.h"
+#include "Material.h"
+#include "MeshData.h"
+
+
+#define BUFFER_OFFSET(i) ((char *)NULL + (i))
+
+
+//======================================================================================================================
+// Constructor                                                                                                         =
+//======================================================================================================================
+ModelNodePatch::ModelNodePatch(const Model::SubModel& modelPatch_, bool isSkinPatch):
+	modelPatch(modelPatch_)
+{
+	//if()
+}
+
+
+//======================================================================================================================
+// createVao                                                                                                           =
+//======================================================================================================================
+void ModelNodePatch::createVao(const Material& mtl, const boost::array<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);
+	}
+
+	if(mtl.getStdAttribVar(Material::SAV_VERT_WEIGHT_BONES_NUM) != NULL)
+	{
+		vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_WEIGHTS],
+		                         *mtl.getStdAttribVar(Material::SAV_VERT_WEIGHT_BONES_NUM), 1,
+		                         GL_FLOAT, GL_FALSE, sizeof(MeshData::VertexWeight), BUFFER_OFFSET(0));
+	}
+
+	if(mtl.getStdAttribVar(Material::SAV_VERT_WEIGHT_BONE_IDS) != NULL)
+	{
+		vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_WEIGHTS],
+		                         *mtl.getStdAttribVar(Material::SAV_VERT_WEIGHT_BONE_IDS), 4,
+		                         GL_FLOAT, GL_FALSE, sizeof(MeshData::VertexWeight), BUFFER_OFFSET(4));
+	}
+
+	if(mtl.getStdAttribVar(Material::SAV_VERT_WEIGHT_WEIGHTS) != NULL)
+	{
+		vao.attachArrayBufferVbo(*vbos[Mesh::VBO_VERT_WEIGHTS],
+		                         *mtl.getStdAttribVar(Material::SAV_VERT_WEIGHT_WEIGHTS), 4,
+		                         GL_FLOAT, GL_FALSE, sizeof(MeshData::VertexWeight), BUFFER_OFFSET(20));
+	}
+
+	vao.attachElementArrayBufferVbo(*vbos[Mesh::VBO_VERT_INDECES]);
+}

+ 9 - 1
src/Scene/ModelNodePatch.h

@@ -5,12 +5,18 @@
 #include "Vao.h"
 #include "Vbo.h"
 #include "Mesh.h" // For the Vbos enum
+#include "Model.h"
+
+
+class Material;
 
 
 /// A fragment of the ModelNode
 class ModelNodePatch
 {
 	public:
+		ModelNodePatch(const Model::SubModel& modelPatch, bool isSkinPatch);
+
 		/// Transform feedback VBOs
 		enum TfVbos
 		{
@@ -20,7 +26,7 @@ class ModelNodePatch
 			TF_VBOS_NUM
 		};
 
-		Vbo& getTfVbo(TfVbos i) {return tfVbos[i];}
+		const Vbo& getTfVbo(TfVbos i) const {return tfVbos[i];}
 
 	private:
 		const Model::SubModel& modelPatch;
@@ -29,6 +35,8 @@ class ModelNodePatch
 		Vao mainVao; ///< VAO for MS and BS
 		Vao dpVao; ///< VAO for depth passes
 		Vao tfVao; ///< VAO for transform feedback
+
+		static void createVao(const Material& material, const boost::array<Vbo*, Mesh::VBOS_NUM>& vbos, Vao& vao);
 };
 
 

Некоторые файлы не были показаны из-за большого количества измененных файлов