Text archives Help
- From: "Solomon Boulos" <boulos@cs.utah.edu>
- To: manta@sci.utah.edu
- Subject: [Manta] r2110 - in trunk: Core/Persistent Model/Groups Model/Primitives
- Date: Fri, 22 Feb 2008 13:27:29 -0700 (MST)
Author: boulos
Date: Fri Feb 22 13:27:27 2008
New Revision: 2110
Modified:
trunk/Core/Persistent/MantaRTTI.h
trunk/Core/Persistent/XMLArchive.cc
trunk/Model/Groups/DynBVH.cc
trunk/Model/Groups/Mesh.cc
trunk/Model/Groups/Mesh.h
trunk/Model/Primitives/KenslerShirleyTriangle.cc
trunk/Model/Primitives/KenslerShirleyTriangle.h
trunk/Model/Primitives/MeshTriangle.cc
trunk/Model/Primitives/MeshTriangle.h
Log:
Core/Persistent/MantaRTTI.h
Unsigned int is a good first class citizen too.
Core/Persistent/XMLArchive.cc
I was wrong about duplicate field errors, they are a problem and the
current writing of vectors (collections) is broken.
Model/Groups/DynBVH.cc
Writing a BVH should now work once the vector writing works again.
Model/Groups/Mesh.cc
Model/Groups/Mesh.h
Model/Primitives/KenslerShirleyTriangle.cc
Model/Primitives/KenslerShirleyTriangle.h
Model/Primitives/MeshTriangle.cc
Model/Primitives/MeshTriangle.h
Adding support for writing Meshes and MeshTriangles.
Modified: trunk/Core/Persistent/MantaRTTI.h
==============================================================================
--- trunk/Core/Persistent/MantaRTTI.h (original)
+++ trunk/Core/Persistent/MantaRTTI.h Fri Feb 22 13:27:27 2008
@@ -470,6 +470,14 @@
return "int";
}
};
+
+ template<>
+ class MantaRTTI<unsigned int> {
+ public:
+ static std::string getPublicClassname() {
+ return "unsigned int";
+ }
+ };
}
Modified: trunk/Core/Persistent/XMLArchive.cc
==============================================================================
--- trunk/Core/Persistent/XMLArchive.cc (original)
+++ trunk/Core/Persistent/XMLArchive.cc Fri Feb 22 13:27:27 2008
@@ -284,14 +284,14 @@
if(xmlHasProp(node, to_xml_ch_ptr(tagname.c_str()))){
ostringstream msg;
msg << "Writing duplicate field (" << tagname << ") in writing class "
<< to_char_ptr(node->name);
- //throw SerializationError(msg.str());
+ throw SerializationError(msg.str());
}
xmlSetProp(node, to_xml_ch_ptr(tagname.c_str()),
to_xml_ch_ptr(value.c_str()));
} else {
if(xmlHasProp(node, to_xml_ch_ptr(fieldname.c_str()))){
ostringstream msg;
msg << "Writing duplicate field (" << fieldname << ") in writing class
" << to_char_ptr(node->name);
- //throw SerializationError(msg.str());
+ throw SerializationError(msg.str());
}
xmlSetProp(node, to_xml_ch_ptr(fieldname.c_str()),
to_xml_ch_ptr(value.c_str()));
}
Modified: trunk/Model/Groups/DynBVH.cc
==============================================================================
--- trunk/Model/Groups/DynBVH.cc (original)
+++ trunk/Model/Groups/DynBVH.cc Fri Feb 22 13:27:27 2008
@@ -606,7 +606,7 @@
typedef Callback_1Data_2Arg<DynBVH, TaskList*, int, Task*> BVHBuildReduction;
typedef Callback_1Data_5Arg<DynBVH, TaskList*, Task*, int, int, int,
UpdateContext> BVHSAHReduction;
-#define USE_PARALLEL_BUILD 1
+#define USE_PARALLEL_BUILD 0
void DynBVH::beginParallelBuild(UpdateContext context) {
cerr << "Doing parallel BVH build" << endl;
@@ -2418,9 +2418,17 @@
#endif
void DynBVH::readwrite(ArchiveElement* archive) {
- //archive->readwrite("group", currGroup);
+ MantaRTTI<AccelerationStructure>::readwrite(archive, *this);
+ archive->readwrite("group", currGroup);
archive->readwrite("object_ids", object_ids);
archive->readwrite("nodes", nodes);
- //archive->readwrite("num_nodes", num_nodes);
+ if (archive->reading()) {
+ int num_nodes_nonatomic;
+ archive->readwrite("num_nodes", num_nodes_nonatomic);
+ num_nodes.set(num_nodes_nonatomic);
+ } else {
+ int num_nodes_nonatomic = num_nodes;
+ archive->readwrite("num_nodes", num_nodes_nonatomic);
+ }
}
Modified: trunk/Model/Groups/Mesh.cc
==============================================================================
--- trunk/Model/Groups/Mesh.cc (original)
+++ trunk/Model/Groups/Mesh.cc Fri Feb 22 13:27:27 2008
@@ -1,7 +1,11 @@
-#include <Model/Groups/Mesh.h>
+#include <Core/Exceptions/InternalError.h>
+#include <Core/Persistent/ArchiveElement.h>
+#include <Core/Persistent/MantaRTTI.h>
+#include <Core/Persistent/stdRTTI.h>
#include <Core/Util/Preprocessor.h>
#include <Core/Util/UpdateGraph.h>
-#include <Core/Exceptions/InternalError.h>
+#include <Interface/InterfaceRTTI.h>
+#include <Model/Groups/Mesh.h>
#include <Model/Primitives/MeshTriangle.h>
using namespace Manta;
@@ -338,4 +342,26 @@
i-=3;
}
}
+}
+
+namespace Manta {
+ MANTA_REGISTER_CLASS(Mesh);
+}
+
+void Mesh::readwrite(ArchiveElement* archive) {
+ MantaRTTI<Group>::readwrite(archive, *this);
+ // First the data
+ archive->readwrite("vertices", vertices);
+ archive->readwrite("normals", vertexNormals);
+ archive->readwrite("binormals", vertexBinormals);
+ archive->readwrite("tangents", vertexTangents);
+ archive->readwrite("texcoords", texCoords);
+ archive->readwrite("materials", materials);
+ // Now the indices
+ archive->readwrite("vertex_indices", vertex_indices);
+ archive->readwrite("normal_indices", normal_indices);
+ archive->readwrite("binormal_indices", binormal_indices);
+ archive->readwrite("tangent_indices", tangent_indices);
+ archive->readwrite("texture_indices", texture_indices);
+ archive->readwrite("face_material", face_material);
}
Modified: trunk/Model/Groups/Mesh.h
==============================================================================
--- trunk/Model/Groups/Mesh.h (original)
+++ trunk/Model/Groups/Mesh.h Fri Feb 22 13:27:27 2008
@@ -98,7 +98,11 @@
//removes degenerate triangles from mesh.
void removeDegenerateTriangles();
+
+ void readwrite(ArchiveElement* archive);
};
+
+ MANTA_DECLARE_RTTI_DERIVEDCLASS(Mesh, Group, ConcreteClass,
readwriteMethod);
}
#endif //Manta_Model_Group_Mesh_h
Modified: trunk/Model/Primitives/KenslerShirleyTriangle.cc
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.cc (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.cc Fri Feb 22 13:27:27
2008
@@ -60,7 +60,7 @@
const unsigned int binormal1_idx = mesh->binormal_indices[which+1];
const unsigned int binormal2_idx = mesh->binormal_indices[which+2];
-
+
const unsigned int tangent0_idx = mesh->tangent_indices[which+0];
const unsigned int tangent1_idx = mesh->tangent_indices[which+1];
const unsigned int tangent2_idx = mesh->tangent_indices[which+2];
@@ -425,3 +425,14 @@
for(int ray=rays.begin(); ray<rays.end(); ray++)
rays.setGeometricNormal(ray, normal);
}
+
+namespace Manta {
+ MANTA_DECLARE_RTTI_DERIVEDCLASS(KenslerShirleyTriangle, MeshTriangle,
ConcreteClass, readwriteMethod);
+ MANTA_REGISTER_CLASS(KenslerShirleyTriangle);
+}
+
+void KenslerShirleyTriangle::readwrite(ArchiveElement* archive)
+{
+ MantaRTTI<MeshTriangle>::readwrite(archive, *this);
+}
+
Modified: trunk/Model/Primitives/KenslerShirleyTriangle.h
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.h (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.h Fri Feb 22 13:27:27
2008
@@ -1,8 +1,10 @@
#ifndef Manta_Model_KenslerShirleyTriangle_h
#define Manta_Model_KenslerShirleyTriangle_h
+#include <Core/Persistent/MantaRTTI.h>
#include <Model/Primitives/MeshTriangle.h>
#include <Interface/RayPacket.h>
+#include <Interface/InterfaceRTTI.h>
#include <Core/Geometry/Vector.h>
#include <Core/Geometry/Ray.h>
#include <Core/Geometry/BBox.h>
@@ -44,6 +46,8 @@
void computeNormal(const RenderContext& context, RayPacket &rays) const;
void computeGeometricNormal(const RenderContext& context, RayPacket&
rays) const;
+
+ void readwrite(ArchiveElement*);
};
}
Modified: trunk/Model/Primitives/MeshTriangle.cc
==============================================================================
--- trunk/Model/Primitives/MeshTriangle.cc (original)
+++ trunk/Model/Primitives/MeshTriangle.cc Fri Feb 22 13:27:27 2008
@@ -57,10 +57,22 @@
dPdu = inv_det * (uv_diff1[1] * edge0 - uv_diff0[1] * edge1);
dPdv = inv_det * (uv_diff0[0] * edge1 - uv_diff1[0] * edge0);
}
-
+
for(int i = rays.begin(); i != rays.end(); ++i) {
rays.setSurfaceDerivativeU(i, dPdu);
rays.setSurfaceDerivativeV(i, dPdv);
}
rays.setFlag( RayPacket::HaveSurfaceDerivatives );
}
+
+namespace Manta {
+ MANTA_REGISTER_CLASS(MeshTriangle);
+}
+
+void MeshTriangle::readwrite(ArchiveElement* archive)
+{
+ MantaRTTI<Primitive>::readwrite(archive, *this);
+ archive->readwrite("myID", myID);
+ archive->readwrite("mesh", mesh);
+}
+
Modified: trunk/Model/Primitives/MeshTriangle.h
==============================================================================
--- trunk/Model/Primitives/MeshTriangle.h (original)
+++ trunk/Model/Primitives/MeshTriangle.h Fri Feb 22 13:27:27 2008
@@ -1,9 +1,11 @@
#ifndef Manta_Interface_MeshTriangle_h
#define Manta_Interface_MeshTriangle_h
+#include <Core/Persistent/MantaRTTI.h>
+#include <Core/Util/Assert.h>
+#include <Interface/InterfaceRTTI.h>
#include <Interface/Primitive.h>
#include <Model/Groups/Mesh.h>
-#include <Core/Util/Assert.h>
namespace Manta {
@@ -36,6 +38,7 @@
virtual void computeSurfaceDerivatives(const RenderContext& context,
RayPacket& rays) const;
+ void readwrite(ArchiveElement*);
//List of the triangle classes that implement MeshTriangle.
enum TriangleType {
WALD_TRI,
@@ -50,5 +53,7 @@
unsigned int myID;
Mesh *mesh;
};
+
+ MANTA_DECLARE_RTTI_DERIVEDCLASS(MeshTriangle, Primitive, AbstractClass,
readwriteMethod);
}
#endif //Manta_Interface_MeshTriangle_h
- [Manta] r2110 - in trunk: Core/Persistent Model/Groups Model/Primitives, Solomon Boulos, 02/22/2008
Archive powered by MHonArc 2.6.16.