Przeglądaj źródła

adding python glue code

Panagiotis Christopoulos Charitos 14 lat temu
rodzic
commit
5ff3bc6e77

Plik diff jest za duży
+ 0 - 1
build/debug/Makefile


+ 7 - 7
src/Main.cpp

@@ -149,17 +149,17 @@ void init()
 	horse->init("meshes/horse/horse.mdl");
 	horse->setLocalTransform(Transform(Vec3(-2, 0, 0), Mat3::getIdentity(), 1.0));
 
+	// Pentagram
+	pentagram = new ModelNode();
+	pentagram->init("models/pentagram/pentagram.mdl");
+	pentagram->setLocalTransform(Transform(Vec3(2, 0, 0), Mat3::getIdentity(), 1.0));
+
 	// Sponza
 	ModelNode* sponza = new ModelNode();
 	//sponza->init("maps/sponza/sponza.mdl");
 	sponza->init("maps/sponza-crytek/sponza_crytek.mdl");
 	sponza->setLocalTransform(Transform(Vec3(0.0), Mat3::getIdentity(), 0.05));
 
-	// Pentagram
-	pentagram = new ModelNode();
-	pentagram->init("models/pentagram/pentagram.mdl");
-	pentagram->setLocalTransform(Transform(Vec3(2, 0, 0), Mat3::getIdentity(), 1.0));
-
 
 	// Imp
 	imp = new SkinNode();
@@ -291,8 +291,8 @@ void mainLoopExtra()
 
 	if(InputSingleton::getInstance().getKey(SDL_SCANCODE_T))
 	{
-		pentagram->getModelPatchNodees()[0]->setUserDefVar(PatchNode::MT_BOTH, "specularCol", Vec3(10.0, -1.6, 1.6));
-		pentagram->getModelPatchNodees()[0]->getCpMtlRun().getUserDefinedVarByName("shininess").get<float>() = 10.0;
+		//pentagram->getModelPatchNodees()[0]->setUserDefVar(PatchNode::MT_BOTH, "specularCol", Vec3(10.0, -1.6, 1.6));
+		pentagram->getModelPatchNodes()[0]->getCpMtlRun().getUserDefinedVarByName("shininess").get<float>() = 10.0;
 	}
 
 

+ 1 - 6
src/Scene/ModelNode.h

@@ -21,8 +21,8 @@ class ModelNode: public SceneNode
 
 		/// @name Accessors
 		/// @{
+		GETTER_RW(Vec<ModelPatchNode*>, patches, getModelPatchNodes)
 		const Model& getModel() const {return *model;}
-		const Vec<ModelPatchNode*>& getModelPatchNodes() const {return patches;}
 		const Obb& getVisibilityShapeWSpace() const {return visibilityShapeWSpace;}
 		/// @}
 
@@ -35,11 +35,6 @@ class ModelNode: public SceneNode
 
 		void frameUpdate() {}
 
-		/// @name Accessors
-		/// @{
-		const Vec<ModelPatchNode*>& getModelPatchNodees() const {return patches;}
-		/// @}
-
 	private:
 		RsrcPtr<Model> model;
 		Vec<ModelPatchNode*> patches;

+ 0 - 27
src/Scene/PatchNode.h

@@ -19,14 +19,6 @@ class Material;
 class PatchNode: public RenderableNode
 {
 	public:
-		/// Passed as parameter in setUserDefVar
-		enum MaterialType
-		{
-			MT_COLOR_PASS,
-			MT_DEPTH_PASS,
-			MT_BOTH
-		};
-
 		PatchNode(const ModelPatch& modelPatch, SceneNode* parent);
 
 		/// Do nothing
@@ -46,10 +38,6 @@ class PatchNode: public RenderableNode
 		const Vao& getCpVao() const {return cpVao;}
 		const Vao& getDpVao() const {return dpVao;}
 		uint getVertIdsNum() const {return rsrc.getMesh().getVertIdsNum();}
-
-		/// @todo
-		template<typename Type>
-		void setUserDefVar(MaterialType mt, const char* name, const Type& value);
 		/// @}
 
 	protected:
@@ -64,19 +52,4 @@ class PatchNode: public RenderableNode
 };
 
 
-template<typename Type>
-void PatchNode::setUserDefVar(MaterialType mt, const char* name, const Type& value)
-{
-	if(mt == MT_COLOR_PASS || mt == MT_BOTH)
-	{
-		cpMtlRun->setUserDefVar(name, value);
-	}
-
-	if(mt == MT_DEPTH_PASS || mt == MT_BOTH)
-	{
-		dpMtlRun->setUserDefVar(name, value);
-	}
-}
-
-
 #endif

+ 4 - 0
src/Scripting/BoostPythonInterfaces.cpp

@@ -16,6 +16,10 @@ BOOST_PYTHON_MODULE(Anki)
 
 	CALL_WRAP(SceneNode);
 	CALL_WRAP(Camera);
+	CALL_WRAP(MaterialRuntime);
+	CALL_WRAP(PatchNode);
+	CALL_WRAP(ModelPatchNode);
+	CALL_WRAP(ModelNode);
 	CALL_WRAP(Scene);
 	CALL_WRAP(SceneSingleton);
 

+ 10 - 0
src/Scripting/Scene/MaterialRuntime/MaterialRuntime.bpi.cpp

@@ -0,0 +1,10 @@
+#include "ScriptingCommon.h"
+#include "MaterialRuntime.h"
+
+
+WRAP(MaterialRuntime)
+{
+	class_<MaterialRuntime, noncopyable>("MaterialRuntime", no_init)
+		.def("setUserDefVar", (void (MaterialRuntime::*)(const char*, const Vec3&))(&MaterialRuntime::setUserDefVar))
+	;
+}

+ 13 - 0
src/Scripting/Scene/ModelNode.bpi.cpp

@@ -0,0 +1,13 @@
+#include "ScriptingCommon.h"
+#include "ModelNode.h"
+
+
+WRAP(ModelNode)
+{
+	WRAP_CONTAINER(Vec<ModelPatchNode*>)
+
+	class_<ModelNode, bases<SceneNode>, noncopyable>("ModelNode", no_init)
+		.def("getModelPatchNodes", (Vec<ModelPatchNode*>& (ModelNode::*)())(&ModelNode::getModelPatchNodes),
+		     return_value_policy<reference_existing_object>())
+	;
+}

+ 9 - 0
src/Scripting/Scene/ModelPatchNode.bpi.cpp

@@ -0,0 +1,9 @@
+#include "ScriptingCommon.h"
+#include "ModelPatchNode.h"
+
+
+WRAP(ModelPatchNode)
+{
+	class_<ModelPatchNode, bases<PatchNode>, noncopyable>("ModelPatchNode", no_init)
+	;
+}

+ 13 - 0
src/Scripting/Scene/PatchNode.bpi.cpp

@@ -0,0 +1,13 @@
+#include "ScriptingCommon.h"
+#include "PatchNode.h"
+
+
+WRAP(PatchNode)
+{
+	class_<PatchNode, noncopyable>("PatchNode", no_init)
+		.def("getCpMtlRun", (MaterialRuntime& (PatchNode::*)())(&PatchNode::getCpMtlRun),
+		     return_value_policy<reference_existing_object>())
+		.def("getDpMtlRun", (MaterialRuntime& (PatchNode::*)())(&PatchNode::getDpMtlRun),
+		     return_value_policy<reference_existing_object>())
+	;
+}

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

@@ -1,11 +1,13 @@
 #include "ScriptingCommon.h"
 #include "Scene.h"
 #include "Camera.h"
+#include "ModelNode.h"
 
 
 WRAP(Scene)
 {
 	WRAP_CONTAINER(Scene::Types<Camera>::Container)
+	WRAP_CONTAINER(Scene::Types<ModelNode>::Container)
 
 	class_<Scene, noncopyable>("Scene", no_init)
 		.def("setAmbientCol", &Scene::setAmbientCol)
@@ -14,6 +16,8 @@ WRAP(Scene)
 
 		.def("getCameras", (Scene::Types<Camera>::Container& (Scene::*)())(&Scene::getCameras),
 		     return_value_policy<reference_existing_object>())
+		.def("getModelNodes", (Scene::Types<ModelNode>::Container& (Scene::*)())(&Scene::getModelNodes),
+		     return_value_policy<reference_existing_object>())
 	;
 }
 

+ 1 - 1
src/Scripting/Scene/SceneNode.bpi.cpp

@@ -5,6 +5,6 @@
 WRAP(SceneNode)
 {
 	class_<SceneNode, noncopyable>("SceneNode", no_init)
-		.def("getSceneNodeName", &SceneNode::getSceneNodeName, return_value_policy<reference_existing_object>())
+		.def("getSceneNodeName", &SceneNode::getSceneNodeName, return_value_policy<copy_const_reference>())
 	;
 }

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików