Updated to compile: pyrit
authorRadek Brich <radek.brich@devl.cz>
Tue, 26 Jul 2016 17:41:36 +0200
branchpyrit
changeset 103 3b3257a410fe
parent 102 de3e9ea18f56
child 104 2274a07510c1
Updated to compile: - KdTree+Octree: max_depth changed to static const (this should be configured at compile time) - wget tool replaced by curl, which is now more widespread - added CMakeLists (to eventually replace SCons) - various fixes
CMakeLists.txt
README
include/kdtree.h
include/octree.h
include/quaternion.h
models/download-stanford
src/kdtree.cc
src/octree.cc
src/pixmap.cc
tools/cpuflags.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CMakeLists.txt	Tue Jul 26 17:41:36 2016 +0200
@@ -0,0 +1,11 @@
+# This is still incomplete, use SCons for now.
+
+cmake_minimum_required(VERSION 3.0)
+project(pyrit)
+
+file(GLOB SOURCES
+     src/*.cc
+     include/*.h)
+
+add_library(pyrit STATIC ${SOURCES})
+target_include_directories(pyrit PRIVATE include)
--- a/README	Mon Sep 08 20:14:24 2014 +0200
+++ b/README	Tue Jul 26 17:41:36 2016 +0200
@@ -37,11 +37,7 @@
 Stanford models, type 'scons download-models', which will download
 and extract the archives to appropriate location.
 
-The download script uses 'tar' and 'wget' utilities.
-
-For Windows, these are available here:
-http://gnuwin32.sourceforge.net/packages/wget.htm
-http://gnuwin32.sourceforge.net/packages/libarchive.htm
+The download script uses 'tar' and 'curl' utilities.
 
 
 Pthreads
--- a/include/kdtree.h	Mon Sep 08 20:14:24 2014 +0200
+++ b/include/kdtree.h	Tue Jul 26 17:41:36 2016 +0200
@@ -84,19 +84,15 @@
  */
 class KdTree: public Container
 {
+	static const int MAX_DEPTH;
 	MemoryPool<KdNode> mempool;
 	KdNode *root;
-	const int max_depth;
 	bool built;
 
 	void recursive_build(KdNode *node, const BBox &bbox, int maxdepth);
 	void recursive_load(istream &st, KdNode *node);
 public:
-	/** default constructor, maximum depth is set to 32 */
-	KdTree(): Container(), mempool(64), root(NULL), max_depth(32), built(false) {};
-
-	/** constructor which allows to se maximum tree depth (cannot be changed later) */
-	KdTree(int maxdepth): Container(), mempool(64), root(NULL), max_depth(maxdepth), built(false) {};
+	KdTree(): Container(), mempool(64), root(NULL), built(false) {};
 	~KdTree() { if (root) delete root; };
 
 	/** add shape pointer to the container */
--- a/include/octree.h	Mon Sep 08 20:14:24 2014 +0200
+++ b/include/octree.h	Tue Jul 26 17:41:36 2016 +0200
@@ -73,18 +73,13 @@
  */
 class Octree: public Container
 {
+	static const int MAX_DEPTH;
 	OctreeNode *root;
-	const int max_depth;
 	bool built;
 public:
-	/** default constructor,
-	 * maximum depth of tree is set to 10 */
-	Octree() : Container(), root(NULL), max_depth(10), built(false) {};
+	Octree() : Container(), root(NULL), built(false) {};
+	~Octree() { if (root) delete root; };
 
-	/** constructor
-	 * @param[in] maxdepth	maximum depth of the tree */
-	Octree(int maxdepth) : Container(), root(NULL), max_depth(maxdepth), built(false) {};
-	~Octree() { if (root) delete root; };
 	void addShape(const Shape* aShape) { Container::addShape(aShape); built = false; };
 	const Shape *nearest_intersection(const Shape *origin_shape, const Ray &ray,
 		Float &nearest_distance);
--- a/include/quaternion.h	Mon Sep 08 20:14:24 2014 +0200
+++ b/include/quaternion.h	Tue Jul 26 17:41:36 2016 +0200
@@ -26,7 +26,7 @@
  */
 
 #ifndef QUATERNION_H
-#define QUATER_H
+#define QUATERNION_H
 
 /**
  * quaternion class
@@ -64,7 +64,7 @@
 	};
 	Float mag() const
 	{
-		return sqrtf(mag());
+		return sqrtf(mag2());
 	};
 	friend Quaternion operator*(const Quaternion &q1, const Quaternion &q2)
 	{
--- a/models/download-stanford	Mon Sep 08 20:14:24 2014 +0200
+++ b/models/download-stanford	Tue Jul 26 17:41:36 2016 +0200
@@ -3,19 +3,19 @@
 mkdir -p "$1"
 cd "$1"
 
-wget http://graphics.stanford.edu/pub/3Dscanrep/bunny.tar.gz
+curl -O 'http://graphics.stanford.edu/pub/3Dscanrep/bunny.tar.gz'
 tar xzf bunny.tar.gz
 rm bunny.tar.gz
 rm -rf bunny/data
 mv bunny/reconstruction/* bunny
 rmdir bunny/reconstruction
 
-wget http://graphics.stanford.edu/pub/3Dscanrep/happy/happy_recon.tar.gz
+curl -O 'http://graphics.stanford.edu/pub/3Dscanrep/happy/happy_recon.tar.gz'
 tar xzf happy_recon.tar.gz
 rm happy_recon.tar.gz
 mv happy_recon happy
 
-wget http://graphics.stanford.edu/pub/3Dscanrep/dragon/dragon_recon.tar.gz
+curl -O 'http://graphics.stanford.edu/pub/3Dscanrep/dragon/dragon_recon.tar.gz'
 tar xzf dragon_recon.tar.gz
 rm dragon_recon.tar.gz
 mv dragon_recon dragon
--- a/src/kdtree.cc	Mon Sep 08 20:14:24 2014 +0200
+++ b/src/kdtree.cc	Tue Jul 26 17:41:36 2016 +0200
@@ -66,6 +66,8 @@
 		delete getShapes();
 }
 
+const int KdTree::MAX_DEPTH = 32;
+
 // kd-tree recursive build algorithm, inspired by PBRT (www.pbrt.org)
 void KdTree::recursive_build(KdNode *node, const BBox &bounds, int maxdepth)
 {
@@ -199,7 +201,7 @@
 	ShapeList::iterator shape;
 	for (shape = shapes.begin(); shape != shapes.end(); shape++)
 		root->addShape(*shape);
-	recursive_build(root, bbox, max_depth);
+	recursive_build(root, bbox, MAX_DEPTH);
 	built = true;
 }
 
@@ -221,12 +223,7 @@
 	KdNode *farchild, *node;
 	node = root;
 
-#ifdef MSVC
-	// MSVC wants constant expression here... hope it won't overflow :)
-	StackElem stack[64];
-#else
-	StackElem stack[max_depth];
-#endif
+	StackElem stack[MAX_DEPTH];
 
 	int entry = 0, exit = 1;
 	stack[entry].t = a;
@@ -296,7 +293,7 @@
 			exit++;
 			if (exit == entry)
 				exit++;
-			assert(exit < max_depth);
+			assert(exit < MAX_DEPTH);
 
 			stack[exit].prev = tmp;
 			stack[exit].t = t;
@@ -367,12 +364,7 @@
 	KdNode *farchild, *node;
 	node = root;
 
-#ifdef MSVC
-	// MSVC wants constant expression here... hope it won't overflow :)
-	StackElem4 stack[64];
-#else
-	StackElem4 stack[max_depth];
-#endif
+	StackElem4 stack[MAX_DEPTH];
 
 	int entry = 0, exit = 1;
 	stack[entry].t = a;
@@ -476,7 +468,7 @@
 			exit++;
 			if (exit == entry)
 				exit++;
-			assert(exit < max_depth);
+			assert(exit < MAX_DEPTH);
 
 			stack[exit].prev = tmp;
 			stack[exit].t = t;
--- a/src/octree.cc	Mon Sep 08 20:14:24 2014 +0200
+++ b/src/octree.cc	Tue Jul 26 17:41:36 2016 +0200
@@ -26,6 +26,8 @@
 
 #include "octree.h"
 
+const int Octree::MAX_DEPTH = 10;
+
 OctreeNode::~OctreeNode()
 {
 	if (isLeaf())
@@ -101,7 +103,7 @@
 	ShapeList::iterator shape;
 	for (shape = shapes.begin(); shape != shapes.end(); shape++)
 		root->addShape(*shape);
-	root->subdivide(bbox, max_depth);
+	root->subdivide(bbox, MAX_DEPTH);
 	built = true;
 }
 
@@ -155,12 +157,7 @@
 	if (!built)
 		return Container::nearest_intersection(origin_shape, ray, nearest_distance);
 
-#ifdef MSVC
-	// MSVC wants constant expression here... hope it won't overflow :)
-	OctreeTravState st[20];
-#else
-	OctreeTravState st[max_depth+1];
-#endif
+	OctreeTravState st[MAX_DEPTH+1];
 	OctreeTravState *st_cur = st;
 
 #	define node	st_cur->node
--- a/src/pixmap.cc	Mon Sep 08 20:14:24 2014 +0200
+++ b/src/pixmap.cc	Tue Jul 26 17:41:36 2016 +0200
@@ -31,6 +31,7 @@
 
 #ifdef HAVE_PNG
 #	include <png.h>
+#   include <zlib.h>
 #endif
 
 unsigned char *Pixmap::getCharData() const
--- a/tools/cpuflags.c	Mon Sep 08 20:14:24 2014 +0200
+++ b/tools/cpuflags.c	Tue Jul 26 17:41:36 2016 +0200
@@ -81,7 +81,7 @@
 
 
 /* cpuid, from kernel source ( linux/include/asm-i386/processor.h ) */
-inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
+void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
 {
    __asm__("cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (op));
 }