Česky
Kamil Dudka

RRV - Radiosity Renderer and Visualizer (C++, OpenGL)

File detail

Name:Download0001-rt-vis.patch [Download]
Location: rrv
Size:5.5 KB
Last modification:2009-10-21 22:58

Source code

From 8c99574f57793473f5ccb5d24723557b77664931 Mon Sep 17 00:00:00 2001
From: Kamil Dudka <kdudka@redhat.com>
Date: Wed, 21 Jan 2009 14:09:16 +0100
Subject: [PATCH] rt vis
 
---
 src/CMakeLists.txt  |    2 +-
 src/Visualizer.cpp  |   23 +++++++++++++++++++----
 src/Visualizer.h    |    5 ++++-
 src/rrv-compute.cpp |   18 ++++++++++++++++--
 4 files changed, 40 insertions(+), 8 deletions(-)
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2e52685..7e467e0 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -82,7 +82,7 @@ ADD_LIBRARY(rrv STATIC ArgumentParser.cpp BarrelEntity.cpp ConsoleProgressIndica
 TARGET_LINK_LIBRARIES(rrv ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${MINGW_LIBRARIES})
 
 # Executable binary rrv-compute
-ADD_EXECUTABLE(rrv-compute rrv-compute.cpp ComputeArguments.cpp)
+ADD_EXECUTABLE(rrv-compute rrv-compute.cpp ComputeArguments.cpp Visualizer.cpp)
 TARGET_LINK_LIBRARIES(rrv-compute rrv)
 
 # Executable binary rrv-visualize
diff --git a/src/Visualizer.cpp b/src/Visualizer.cpp
index 565e2eb..02a2734 100644
--- a/src/Visualizer.cpp
+++ b/src/Visualizer.cpp
@@ -1,6 +1,7 @@
 #include "Visualizer.h"
 #include "Triangle.h"
 #include "TriangleSetExt.h"
+#include "Scene.h"
 
 #include <stdlib.h>
 #include <fstream>
@@ -12,10 +13,11 @@
 #else
 #endif
 
-TriangleSetExt * Visualizer::patchSequenceEnumerator_;
+TriangleSetExt * Visualizer::ts_;
 Visualizer::TColorInput Visualizer::colorInput;
 
 GLuint Visualizer::scene_;
+Scene *Visualizer::src_;
 
 int   Visualizer::xnew, Visualizer::ynew, Visualizer::znew;                  /* actual position */
 int   Visualizer::xold, Visualizer::yold, Visualizer::zold;                  /* old position */
@@ -125,6 +127,12 @@ void Visualizer::onKeyboard(unsigned char key, int, int)
       			onReshape(WindowWidth, WindowHeight);
       			glutPostRedisplay();
       			break;
+        case 'r':
+                delete ts_;
+                ts_ = src_->dumpForVis();
+                createCallList();
+                glutPostRedisplay();
+                break;
 		case 's' :				    	/* print to bitmap - screenshot */
 			saveScreenshot(screenshotFileName);
 			break;
@@ -324,10 +332,17 @@ void Visualizer::createWindow(const char * title)
  */
 void Visualizer::visualize(const char * setTitle, TriangleSetExt * patchSequenceEnumerator)
 {
-	patchSequenceEnumerator_ = patchSequenceEnumerator;
+	ts_ = patchSequenceEnumerator;
 	createWindow(setTitle);
 }
 
+void Visualizer::visualize(Scene *src)
+{
+    src_ = src;
+	ts_ = new TriangleSetExt;
+	createWindow("rrv-compute");
+}
+
 /**
  *  Screenshot
  */
@@ -336,7 +351,7 @@ void Visualizer::takeScreenshot(char * filename, TriangleSetExt * patchSequenceE
 	doScreenshot = true;
 	screenshotFileName = filename;
 
-	patchSequenceEnumerator_ = patchSequenceEnumerator;	
+	ts_ = patchSequenceEnumerator;	
 	createWindow("Screenshot");
 }
 
@@ -481,7 +496,7 @@ void Visualizer::createCallList(void)
 {
         glNewList(scene_,GL_COMPILE);
 
-        start(patchSequenceEnumerator_, colorInput);
+        start(ts_, colorInput);
 
         glEndList();
 }
diff --git a/src/Visualizer.h b/src/Visualizer.h
index d77395c..546fa69 100644
--- a/src/Visualizer.h
+++ b/src/Visualizer.h
@@ -16,6 +16,7 @@
 #include <GL/glut.h>
 
 #ifndef BUILDING_DOX
+class Scene;
 class TriangleSetExt;
 #endif
 
@@ -31,6 +32,7 @@ class Visualizer{
 		 * @param te Filled patch container with computed patch and vertex colors.
 		 */
 		static void visualize(const char *title, TriangleSetExt *te);	/* visualize of scene in GLUT window */
+		static void visualize(Scene *);
 
 		/**
 		 * Using TGA image format to save screenshot.
@@ -44,10 +46,11 @@ class Visualizer{
 	private:
 		typedef enum { INTERPOLATE_RADIOSITY, INTERPOLATE_RADIOSITY_RAW, RADIOSITY_LAST, RADIOSITY, REFLECTIVITY, EMISSION, REFLECT_EMISS } TColorInput;
 
-		static TriangleSetExt * patchSequenceEnumerator_;
+		static TriangleSetExt * ts_;
 		static TColorInput colorInput;
 
 		static GLuint scene_;
+        static Scene *src_;
 
 		static int   xnew, ynew, znew;                 	/* actual position */
 		static int   xold, yold, zold;                 	/* old position */
diff --git a/src/rrv-compute.cpp b/src/rrv-compute.cpp
index deb13b3..dd9a325 100644
--- a/src/rrv-compute.cpp
+++ b/src/rrv-compute.cpp
@@ -2,12 +2,14 @@
 #include "RadiosityRenderer.h"
 #include "ConsoleProgressIndicator.h"
 #include "ComputeArguments.h"
+#include "Visualizer.h"
 
 #ifndef NDEBUG
 #	include <iostream>
 #endif
 
 #include <iomanip>
+#include <pthread.h>
 
 class ContinousSaver: public ProgressObserverMultiStep {
 		Scene *scene_;
@@ -53,6 +55,12 @@ class ContinousSaver: public ProgressObserverMultiStep {
 		}
 };
 
+Scene scene;
+void *vis(void *) {
+    Visualizer::visualize(&scene);
+    return 0;
+}
+
 int main(int argc, char *argv[]) {
 	ComputeArguments *args = new ComputeArguments();
 	args->parseArguments( argc, argv );
@@ -63,8 +71,6 @@ int main(int argc, char *argv[]) {
 	std::string fileName(args->getFileIn());
 
 	// Load scene
-	Scene scene;
-
 	try
 	{
 		scene.load(args->getFileIn());
@@ -81,6 +87,14 @@ int main(int argc, char *argv[]) {
 	// Patch division
 	//scene.divide(DIVIDE_TO);
 	scene.divide(args->getDivide());
+
+    // ////////////////////////////////////////////////////////////
+    pthread_attr_t attr;
+    if (0!= pthread_attr_init(&attr));
+
+    pthread_t thread;
+    if (0!= pthread_create(&thread, &attr, vis, 0));
+    // ////////////////////////////////////////////////////////////
 
 	// Compute radiosity
 	RadiosityRenderer *renderer =
-- 
1.6.1