Browse Source

- Optimizing the compilation time (memory) for scripts
- Redirecting the python stdout and stderr to AnKi methods

Panagiotis Christopoulos Charitos 15 years ago
parent
commit
5294a2c247

File diff suppressed because it is too large
+ 2 - 4
build/debug/Makefile


+ 7 - 1
build/debug/gen.cfg.py

@@ -1,4 +1,10 @@
-sourcePaths = ["../../src/Scripting/", "../../src/Math/", "../../src/Misc/", "../../src/", "../../src/Renderer/", "../../src/Scene/", "../../src/Ui/", "../../src/Resources/", "../../src/Util/", "../../src/Scene/Controllers/", "../../src/Physics/", "../../src/Renderer/BufferObjects/", "../../src/Resources/Helpers/", "../../src/Resources/Core/", "../../src/Core/", "../../src/Scripting/Math", "../../src/Scripting/Util", "../../src/Scripting/Core", "../../src/Scripting/Scene", "../../src/Scripting/Renderer", "../../src/Input", "../../src/Collision"]
+sourcePaths = ["../../src"]
+
+for top, dirs, files in os.walk("../../src"):
+	for nm in dirs:
+		dir_ = os.path.join(top, nm)
+		if dir_.find(".svn") == -1:
+			sourcePaths.append(dir_)
 
 includePaths = []
 includePaths.append("./")

+ 25 - 2
src/Core/App.cpp

@@ -69,6 +69,7 @@ App::App(int argc, char* argv[], Object* parent):
 	parseCommandLineArgs(argc, argv);
 
 	messageHandler = new MessageHandler(this);
+	// send output to handleMessageHanlderMsgs
 	messageHandler->getSignal().connect(boost::bind(&App::handleMessageHanlderMsgs, this, _1, _2, _3, _4));
 
 	printAppInfo();
@@ -101,7 +102,29 @@ App::App(int argc, char* argv[], Object* parent):
 	// create the subsystems. WATCH THE ORDER
 	scriptingEngine = new ScriptingEngine(this);
 	scriptingEngine->exposeVar("app", this);
-	scriptingEngine->execScript("from Anki import *");
+
+	const char* commonPythonCode =
+	"import sys\n"
+	"from Anki import *\n"
+	"\n"
+	"class StdoutCatcher:\n"
+	"\tdef write(self, str):\n"
+	"\t\tline = sys._getframe(2).f_lineno\n"
+	"\t\tfile = sys._getframe(2).f_code.co_filename\n"
+	"\t\tfunc = sys._getframe(2).f_code.co_name\n"
+	"\t\tapp.getMessageHandler().write(fname, line, func, str)\n"
+	"\n"
+	"class StderrCatcher:\n"
+	"\tdef write(self, str):\n"
+	"\t\tline = sys._getframe(2).f_lineno\n"
+	"\t\tfile = sys._getframe(2).f_code.co_filename\n"
+	"\t\tfunc = sys._getframe(2).f_code.co_name\n"
+	"\t\tapp.getMessageHandler().write(fname, line, func, str)\n"
+	"\n"
+	"sys.stdout = StdoutCatcher\n"
+	"sys.stderr = StderrCatcher\n";
+
+	scriptingEngine->execScript(commonPythonCode);
 	mainRenderer = new MainRenderer(this);
 	scene = new Scene(this);
 	stdinListener = new StdinListener(this);
@@ -110,7 +133,7 @@ App::App(int argc, char* argv[], Object* parent):
 
 	// other
 	activeCam = NULL;
-	timerTick = 1000/40; // in ms. 1000/Hz
+	timerTick = 1000 / 40; // in ms. 1000/Hz
 	time = 0;
 }
 

+ 11 - 17
src/Scripting/BoostPythonInterfaces.cpp

@@ -1,29 +1,23 @@
 #include <boost/python.hpp>
-#include "Math.h"
-#include "Scene.h"
-#include "MainRenderer.h"
 #include "App.h"
 
 
-using namespace boost;
-using namespace boost::python;
-using namespace M;
+#define CALL_WRAP(x) extern void boostPythonWrap##x(); boostPythonWrap##x();
 
 
 BOOST_PYTHON_MODULE(Anki)
 {
-	#include "Vec2.bpi.h"
-	#include "Vec3.bpi.h"
-	#include "Vec4.bpi.h"
+	CALL_WRAP(Vec2);
+	CALL_WRAP(Vec3);
+	CALL_WRAP(Vec4);
 
-	#include "Scene.bpi.h"
+	CALL_WRAP(Scene)
 
-	#include "Hdr.bpi.h"
-	#include "Pps.bpi.h"
-	#include "Renderer.bpi.h"
-	#include "Dbg.bpi.h"
-	#include "MainRenderer.bpi.h"
+	CALL_WRAP(Hdr)
+	CALL_WRAP(Pps)
+	CALL_WRAP(Renderer)
+	CALL_WRAP(Dbg)
+	CALL_WRAP(MainRenderer)
 
-	#include "App.bpi.h"
+	CALL_WRAP(App)
 }
-

+ 15 - 0
src/Scripting/Core/App.bpi.cpp

@@ -0,0 +1,15 @@
+#include "ScriptingCommon.h"
+#include "App.h"
+#include "Scene.h"
+#include "MainRenderer.h"
+
+
+WRAP(App)
+{
+	class_<App, noncopyable>("App", no_init)
+		.def("getScene", &App::getScene, return_value_policy<reference_existing_object>())
+		.def("getMainRenderer", &App::getMainRenderer, return_value_policy<reference_existing_object>())
+		.def("getMessageHandler", &App::getMessageHandler, return_value_policy<reference_existing_object>())
+		.def("quit", &App::quit)
+	;
+}

+ 0 - 6
src/Scripting/Core/App.bpi.h

@@ -1,6 +0,0 @@
-
-class_<App, noncopyable>("App", no_init)
-	.def("getScene", &App::getScene, return_value_policy<reference_existing_object>())
-	.def("getMainRenderer", &App::getMainRenderer, return_value_policy<reference_existing_object>())
-	.def("quit", &App::quit)
-;

+ 10 - 0
src/Scripting/Core/MessageHandler.bpi.cpp

@@ -0,0 +1,10 @@
+#include "ScriptingCommon.h"
+#include "MessageHandler.h"
+
+
+WRAP(MessageHandler)
+{
+	class_<MessageHandler, noncopyable>("MessageHandler", no_init)
+		.def("write", &MessageHandler::write)
+	;
+}

+ 44 - 0
src/Scripting/Math/Vec2.bpi.cpp

@@ -0,0 +1,44 @@
+#include "ScriptingCommon.h"
+#include "Math.h"
+
+
+WRAP(Vec2)
+{
+	class_<Vec2>("Vec2")
+		.def_readwrite("x", &Vec2::x)
+		.def_readwrite("y", &Vec2::y)
+		// constructors
+		.def(init<>())
+		.def(init<float>())
+		.def(init<float, float>())
+		.def(init<const Vec2&>())
+		.def(init<const Vec3&>())
+		.def(init<const Vec4&>())
+		// ops with same type
+		.def(self + self)
+		.def(self += self)
+		.def(self - self)
+		.def(self -= self)
+		.def(self * self)
+		.def(self *= self)
+		.def(self / self)
+		.def(self /= self)
+		.def(- self)
+		.def(self == self)
+		.def(self != self)
+		// ops with float
+		.def(self + float())
+		.def(self += float())
+		.def(self - float())
+		.def(self -= float())
+		.def(self * float())
+		.def(self *= float())
+		.def(self / float())
+		.def(self /= float())
+		// other
+		.def("getLength", &Vec2::getLength)
+		.def("getNormalized", &Vec2::getNormalized)
+		.def("normalize", &Vec2::normalize)
+		.def("dot", &Vec2::dot)
+	;
+}

+ 0 - 38
src/Scripting/Math/Vec2.bpi.h

@@ -1,38 +0,0 @@
-
-class_<Vec2>("Vec2")
-	.def_readwrite("x", &Vec2::x)
-	.def_readwrite("y", &Vec2::y)
-	// constructors
-	.def(init<>())
-	.def(init<float>())
-	.def(init<float, float>())
-	.def(init<const Vec2&>())
-	.def(init<const Vec3&>())
-	.def(init<const Vec4&>())
-	// ops with same type
-	.def(self + self)
-	.def(self += self)
-	.def(self - self)
-	.def(self -= self)
-	.def(self * self)
-	.def(self *= self)
-	.def(self / self)
-	.def(self /= self)
-	.def(- self)
-	.def(self == self)
-	.def(self != self)
-	// ops with float
-	.def(self + float())
-	.def(self += float())
-	.def(self - float())
-	.def(self -= float())
-	.def(self * float())
-	.def(self *= float())
-	.def(self / float())
-	.def(self /= float())
-	// other
-	.def("getLength", &Vec2::getLength)
-	.def("getNormalized", &Vec2::getNormalized)
-	.def("normalize", &Vec2::normalize)
-	.def("dot", &Vec2::dot)
-;

+ 41 - 0
src/Scripting/Math/Vec3.bpi.cpp

@@ -0,0 +1,41 @@
+#include "ScriptingCommon.h"
+#include "Math.h"
+
+
+WRAP(Vec3)
+{
+	class_<Vec3>("Vec3")
+		.def_readwrite("x", &Vec3::x)
+		.def_readwrite("y", &Vec3::y)
+		.def_readwrite("z", &Vec3::z)
+		// constructors
+		.def(init<>())
+		.def(init<float>())
+		.def(init<float, float, float>())
+		.def(init<const Vec2&, float>())
+		.def(init<const Vec3&>())
+		.def(init<const Vec4&>())
+		.def(init<const Quat&>())
+		// ops with self
+		.def(self + self) // +
+		.def(self += self) // +=
+		.def(self - self) // -
+		.def(self -= self) // -=
+		.def(self * self) // *
+		.def(self *= self) // *=
+		.def(self / self) // /
+		.def(self /= self) // /=
+		.def(- self) // negative
+		.def(self == self) // ==
+		.def(self != self) // ==
+		// ops with float
+		.def(self + float()) // +
+		.def(self += float()) // +=
+		.def(self - float()) // -
+		.def(self -= float()) // -=
+		.def(self * float()) // *
+		.def(self *= float()) // *=
+		.def(self / float()) // /
+		.def(self /= float()) // /=
+	;
+}

+ 0 - 35
src/Scripting/Math/Vec3.bpi.h

@@ -1,35 +0,0 @@
-
-class_<Vec3>("Vec3")
-	.def_readwrite("x", &Vec3::x)
-	.def_readwrite("y", &Vec3::y)
-	.def_readwrite("z", &Vec3::z)
-	// constructors
-	.def(init<>())
-	.def(init<float>())
-	.def(init<float, float, float>())
-	.def(init<const Vec2&, float>())
-	.def(init<const Vec3&>())
-	.def(init<const Vec4&>())
-	.def(init<const Quat&>())
-	// ops with self
-	.def(self + self) // +
-	.def(self += self) // +=
-	.def(self - self) // -
-	.def(self -= self) // -=
-	.def(self * self) // *
-	.def(self *= self) // *=
-	.def(self / self) // /
-	.def(self /= self) // /=
-	.def(- self) // negative
-	.def(self == self) // ==
-	.def(self != self) // ==
-	// ops with float
-	.def(self + float()) // +
-	.def(self += float()) // +=
-	.def(self - float()) // -
-	.def(self -= float()) // -=
-	.def(self * float()) // *
-	.def(self *= float()) // *=
-	.def(self / float()) // /
-	.def(self /= float()) // /=
-;

+ 42 - 0
src/Scripting/Math/Vec4.bpi.cpp

@@ -0,0 +1,42 @@
+#include "ScriptingCommon.h"
+#include "Math.h"
+
+
+WRAP(Vec4)
+{
+	class_<Vec4>("Vec4")
+		.def_readwrite("x", &Vec4::x)
+		.def_readwrite("y", &Vec4::y)
+		.def_readwrite("z", &Vec4::z)
+		.def_readwrite("w", &Vec4::w)
+		// constructors
+		.def(init<>())
+		.def(init<float>())
+		.def(init<float, float, float, float>())
+		.def(init<const Vec2&, float, float>())
+		.def(init<const Vec3&, float>())
+		.def(init<const Vec4&>())
+		.def(init<const Quat&>())
+		// ops with self
+		.def(self + self) // +
+		.def(self += self) // +=
+		.def(self - self) // -
+		.def(self -= self) // -=
+		.def(self * self) // *
+		.def(self *= self) // *=
+		.def(self / self) // /
+		.def(self /= self) // /=
+		.def(- self) // negative
+		.def(self == self) // ==
+		.def(self != self) // ==
+		// ops with float
+		.def(self + float()) // +
+		.def(self += float()) // +=
+		.def(self - float()) // -
+		.def(self -= float()) // -=
+		.def(self * float()) // *
+		.def(self *= float()) // *=
+		.def(self / float()) // /
+		.def(self /= float()) // /=
+	;
+}

+ 0 - 36
src/Scripting/Math/Vec4.bpi.h

@@ -1,36 +0,0 @@
-
-class_<Vec4>("Vec4")
-	.def_readwrite("x", &Vec4::x)
-	.def_readwrite("y", &Vec4::y)
-	.def_readwrite("z", &Vec4::z)
-	.def_readwrite("w", &Vec4::w)
-	// constructors
-	.def(init<>())
-	.def(init<float>())
-	.def(init<float, float, float, float>())
-	.def(init<const Vec2&, float, float>())
-	.def(init<const Vec3&, float>())
-	.def(init<const Vec4&>())
-	.def(init<const Quat&>())
-	// ops with self
-	.def(self + self) // +
-	.def(self += self) // +=
-	.def(self - self) // -
-	.def(self -= self) // -=
-	.def(self * self) // *
-	.def(self *= self) // *=
-	.def(self / self) // /
-	.def(self /= self) // /=
-	.def(- self) // negative
-	.def(self == self) // ==
-	.def(self != self) // ==
-	// ops with float
-	.def(self + float()) // +
-	.def(self += float()) // +=
-	.def(self - float()) // -
-	.def(self -= float()) // -=
-	.def(self * float()) // *
-	.def(self *= float()) // *=
-	.def(self / float()) // /
-	.def(self /= float()) // /=
-;

+ 10 - 0
src/Scripting/Renderer/Dbg.bpi.cpp

@@ -0,0 +1,10 @@
+#include "ScriptingCommon.h"
+#include "Dbg.h"
+
+
+WRAP(Dbg)
+{
+	class_<Dbg, noncopyable>("Dbg", no_init)
+		.add_property("enabled", &Dbg::isEnabled, &Dbg::setEnabled)
+	;
+}

+ 0 - 4
src/Scripting/Renderer/Dbg.bpi.h

@@ -1,4 +0,0 @@
-
-class_<Dbg, noncopyable>("Dbg", no_init)
-	.add_property("enabled", &Dbg::isEnabled, &Dbg::setEnabled)
-;

+ 12 - 0
src/Scripting/Renderer/Hdr.bpi.cpp

@@ -0,0 +1,12 @@
+#include "ScriptingCommon.h"
+#include "Hdr.h"
+
+
+WRAP(Hdr)
+{
+	class_<Hdr, noncopyable>("Hdr", no_init)
+		.add_property("blurringIterations", &Hdr::getBlurringIterations, &Hdr::setBlurringIterations)
+		.add_property("blurringDist", &Hdr::getBlurringDist, &Hdr::setBlurringDist)
+		.add_property("exposure", &Hdr::getExposure, &Hdr::setExposure)
+	;
+}

+ 0 - 6
src/Scripting/Renderer/Hdr.bpi.h

@@ -1,6 +0,0 @@
-
-class_<Hdr, noncopyable>("Hdr", no_init)
-	.add_property("blurringIterations", &Hdr::getBlurringIterations, &Hdr::setBlurringIterations)
-	.add_property("blurringDist", &Hdr::getBlurringDist, &Hdr::setBlurringDist)
-	.add_property("exposure", &Hdr::getExposure, &Hdr::setExposure)
-;

+ 11 - 0
src/Scripting/Renderer/MainRenderer.bpi.cpp

@@ -0,0 +1,11 @@
+#include "ScriptingCommon.h"
+#include "MainRenderer.h"
+#include "Dbg.h"
+
+
+WRAP(MainRenderer)
+{
+	class_<MainRenderer, bases<Renderer>, noncopyable>("MainRenderer", no_init)
+		.def_readonly("dbg", &MainRenderer::dbg)
+	;
+}

+ 0 - 4
src/Scripting/Renderer/MainRenderer.bpi.h

@@ -1,4 +0,0 @@
-
-class_<MainRenderer, bases<Renderer>, noncopyable>("MainRenderer", no_init)
-	.def_readonly("dbg", &MainRenderer::dbg)
-;

+ 11 - 0
src/Scripting/Renderer/Pps.bpi.cpp

@@ -0,0 +1,11 @@
+#include "ScriptingCommon.h"
+#include "Pps.h"
+#include "Hdr.h"
+
+
+WRAP(Pps)
+{
+	class_<Pps, noncopyable>("Pps", no_init)
+		.def_readonly("hdr", &Pps::hdr)
+	;
+}

+ 0 - 4
src/Scripting/Renderer/Pps.bpi.h

@@ -1,4 +0,0 @@
-
-class_<Pps, noncopyable>("Pps", no_init)
-	.def_readonly("hdr", &Pps::hdr)
-;

+ 11 - 0
src/Scripting/Renderer/Renderer.bpi.cpp

@@ -0,0 +1,11 @@
+#include "ScriptingCommon.h"
+#include "Renderer.h"
+
+
+WRAP(Renderer)
+{
+	class_<Renderer, noncopyable>("Renderer", no_init)
+		.def("getFramesNum", &Renderer::getFramesNum)
+		.def_readonly("pps", &Renderer::pps)
+	;
+}

+ 0 - 12
src/Scripting/Renderer/Renderer.bpi.h

@@ -1,12 +0,0 @@
-
-/*class_<Renderer::Pps::Hdr, noncopyable>("Hdr", no_init)
-	.def("getBlurringDist", &Renderer::Pps::Hdr::getBlurringDist, return_value_policy<reference_existing_object>())
-;*/
-
-/*class_<Renderer::Pps, noncopyable>("Pps", no_init)
-;*/
-
-class_<Renderer, noncopyable>("Renderer", no_init)
-	.def("getFramesNum", &Renderer::getFramesNum)
-	.def_readonly("pps", &Renderer::pps)
-;

+ 11 - 0
src/Scripting/Scene/Scene.bpi.cpp

@@ -0,0 +1,11 @@
+#include "ScriptingCommon.h"
+#include "Scene.h"
+
+
+WRAP(Scene)
+{
+	class_<Scene, noncopyable>("Scene", no_init)
+		.def("setAmbientCol", &Scene::setAmbientCol)
+		.def("getAmbientCol", &Scene::getAmbientCol, return_value_policy<reference_existing_object>())
+	;
+}

+ 0 - 5
src/Scripting/Scene/Scene.bpi.h

@@ -1,5 +0,0 @@
-
-class_<Scene, noncopyable>("Scene", no_init)
-	.def("setAmbientCol", &Scene::setAmbientCol)
-	.def("getAmbientCol", &Scene::getAmbientCol, return_value_policy<reference_existing_object>())
-;

+ 10 - 0
src/Scripting/ScriptingCommon.h

@@ -0,0 +1,10 @@
+/// @file
+/// This file is included by all the *.bpi.cpp files
+
+#include <boost/python.hpp>
+
+using namespace boost;
+using namespace boost::python;
+
+#define WRAP(x) \
+	void boostPythonWrap##x()

Some files were not shown because too many files changed in this diff