Browse Source

Exposing SceneGraph::getActiveCamera to lua

Panagiotis Christopoulos Charitos 9 years ago
parent
commit
722f0133d6

+ 2 - 2
include/anki/renderer/MainRenderer.h

@@ -16,7 +16,7 @@ namespace anki
 class ResourceManager;
 class ResourceManager;
 class ConfigSet;
 class ConfigSet;
 class SceneGraph;
 class SceneGraph;
-class Camera;
+class SceneNode;
 
 
 /// @addtogroup renderer
 /// @addtogroup renderer
 /// @{
 /// @{
@@ -39,7 +39,7 @@ public:
 
 
 	ANKI_USE_RESULT Error render(SceneGraph& scene);
 	ANKI_USE_RESULT Error render(SceneGraph& scene);
 
 
-	void prepareForVisibilityTests(Camera& cam);
+	void prepareForVisibilityTests(SceneNode& cam);
 
 
 	const String& getMaterialShaderSource() const
 	const String& getMaterialShaderSource() const
 	{
 	{

+ 4 - 4
include/anki/scene/SceneGraph.h

@@ -66,16 +66,16 @@ public:
 		return m_frameAlloc;
 		return m_frameAlloc;
 	}
 	}
 
 
-	Camera& getActiveCamera()
+	SceneNode& getActiveCamera()
 	{
 	{
 		ANKI_ASSERT(m_mainCam != nullptr);
 		ANKI_ASSERT(m_mainCam != nullptr);
 		return *m_mainCam;
 		return *m_mainCam;
 	}
 	}
-	const Camera& getActiveCamera() const
+	const SceneNode& getActiveCamera() const
 	{
 	{
 		return *m_mainCam;
 		return *m_mainCam;
 	}
 	}
-	void setActiveCamera(Camera* cam)
+	void setActiveCamera(SceneNode* cam)
 	{
 	{
 		m_mainCam = cam;
 		m_mainCam = cam;
 		m_activeCameraChangeTimestamp = getGlobalTimestamp();
 		m_activeCameraChangeTimestamp = getGlobalTimestamp();
@@ -199,7 +199,7 @@ private:
 	U32 m_nodesCount = 0;
 	U32 m_nodesCount = 0;
 	HashMap<CString, SceneNode*, CStringHasher, CStringCompare> m_nodesDict;
 	HashMap<CString, SceneNode*, CStringHasher, CStringCompare> m_nodesDict;
 
 
-	Camera* m_mainCam = nullptr;
+	SceneNode* m_mainCam = nullptr;
 	Timestamp m_activeCameraChangeTimestamp = getGlobalTimestamp();
 	Timestamp m_activeCameraChangeTimestamp = getGlobalTimestamp();
 	PerspectiveCamera* m_defaultMainCam = nullptr;
 	PerspectiveCamera* m_defaultMainCam = nullptr;
 
 

+ 1 - 1
src/renderer/Dbg.cpp

@@ -10,8 +10,8 @@
 #include <anki/renderer/Pps.h>
 #include <anki/renderer/Pps.h>
 #include <anki/resource/ShaderResource.h>
 #include <anki/resource/ShaderResource.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
+#include <anki/scene/FrustumComponent.h>
 #include <anki/scene/Sector.h>
 #include <anki/scene/Sector.h>
-#include <anki/scene/Camera.h>
 #include <anki/scene/Light.h>
 #include <anki/scene/Light.h>
 #include <anki/util/Logger.h>
 #include <anki/util/Logger.h>
 #include <anki/util/Enum.h>
 #include <anki/util/Enum.h>

+ 1 - 1
src/renderer/Fs.cpp

@@ -9,7 +9,7 @@
 #include <anki/renderer/Is.h>
 #include <anki/renderer/Is.h>
 #include <anki/renderer/Sm.h>
 #include <anki/renderer/Sm.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
-#include <anki/scene/Camera.h>
+#include <anki/scene/FrustumComponent.h>
 
 
 namespace anki
 namespace anki
 {
 {

+ 2 - 1
src/renderer/Is.cpp

@@ -9,8 +9,9 @@
 #include <anki/renderer/Sm.h>
 #include <anki/renderer/Sm.h>
 #include <anki/renderer/Pps.h>
 #include <anki/renderer/Pps.h>
 #include <anki/renderer/Ir.h>
 #include <anki/renderer/Ir.h>
-#include <anki/scene/Camera.h>
 #include <anki/scene/Light.h>
 #include <anki/scene/Light.h>
+#include <anki/scene/FrustumComponent.h>
+#include <anki/scene/MoveComponent.h>
 #include <anki/scene/ReflectionProbeComponent.h>
 #include <anki/scene/ReflectionProbeComponent.h>
 #include <anki/scene/Visibility.h>
 #include <anki/scene/Visibility.h>
 #include <anki/core/Trace.h>
 #include <anki/core/Trace.h>

+ 1 - 1
src/renderer/Lf.cpp

@@ -11,7 +11,7 @@
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/MoveComponent.h>
 #include <anki/scene/MoveComponent.h>
 #include <anki/scene/LensFlareComponent.h>
 #include <anki/scene/LensFlareComponent.h>
-#include <anki/scene/Camera.h>
+#include <anki/scene/FrustumComponent.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/util/Functions.h>
 #include <anki/util/Functions.h>
 
 

+ 1 - 1
src/renderer/MainRenderer.cpp

@@ -194,7 +194,7 @@ F32 MainRenderer::getAspectRatio() const
 }
 }
 
 
 //==============================================================================
 //==============================================================================
-void MainRenderer::prepareForVisibilityTests(Camera& cam)
+void MainRenderer::prepareForVisibilityTests(SceneNode& cam)
 {
 {
 	m_r->prepareForVisibilityTests(cam);
 	m_r->prepareForVisibilityTests(cam);
 }
 }

+ 1 - 1
src/renderer/Ms.cpp

@@ -6,8 +6,8 @@
 #include <anki/renderer/Ms.h>
 #include <anki/renderer/Ms.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/util/Logger.h>
 #include <anki/util/Logger.h>
-#include <anki/scene/Camera.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
+#include <anki/scene/FrustumComponent.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/core/Trace.h>
 #include <anki/core/Trace.h>
 
 

+ 1 - 1
src/renderer/Renderer.cpp

@@ -4,8 +4,8 @@
 // http://www.anki3d.org/LICENSE
 // http://www.anki3d.org/LICENSE
 
 
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/scene/Camera.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
+#include <anki/scene/FrustumComponent.h>
 #include <anki/core/Trace.h>
 #include <anki/core/Trace.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>
 
 

+ 2 - 1
src/renderer/Sm.cpp

@@ -8,8 +8,9 @@
 #include <anki/core/App.h>
 #include <anki/core/App.h>
 #include <anki/core/Trace.h>
 #include <anki/core/Trace.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
-#include <anki/scene/Camera.h>
 #include <anki/scene/Light.h>
 #include <anki/scene/Light.h>
+#include <anki/scene/FrustumComponent.h>
+#include <anki/scene/MoveComponent.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>
 
 
 namespace anki
 namespace anki

+ 0 - 1
src/renderer/Ssao.cpp

@@ -6,7 +6,6 @@
 #include <anki/renderer/Ssao.h>
 #include <anki/renderer/Ssao.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Ms.h>
 #include <anki/renderer/Ms.h>
-#include <anki/scene/Camera.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/util/Functions.h>
 #include <anki/util/Functions.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>

+ 1 - 2
src/scene/SceneGraph.cpp

@@ -215,8 +215,7 @@ void SceneGraph::unregisterNode(SceneNode* node)
 	m_nodes.erase(node);
 	m_nodes.erase(node);
 	--m_nodesCount;
 	--m_nodesCount;
 
 
-	if(m_mainCam != m_defaultMainCam
-		&& static_cast<SceneNode*>(m_mainCam) == node)
+	if(m_mainCam != m_defaultMainCam && m_mainCam == node)
 	{
 	{
 		m_mainCam = m_defaultMainCam;
 		m_mainCam = m_defaultMainCam;
 	}
 	}

+ 53 - 0
src/script/Scene.cpp

@@ -3199,6 +3199,57 @@ static int wrapSceneGraphnewReflectionProxy(lua_State* l)
 	return 0;
 	return 0;
 }
 }
 
 
+//==============================================================================
+/// Pre-wrap method SceneGraph::setActiveCamera.
+static inline int pwrapSceneGraphsetActiveCamera(lua_State* l)
+{
+	UserData* ud;
+	(void)ud;
+	void* voidp;
+	(void)voidp;
+	PtrSize size;
+	(void)size;
+
+	LuaBinder::checkArgsCount(l, 2);
+
+	// Get "this" as "self"
+	if(LuaBinder::checkUserData(
+		   l, 1, classnameSceneGraph, -7754439619132389154, ud))
+	{
+		return -1;
+	}
+
+	SceneGraph* self = ud->getData<SceneGraph>();
+
+	// Pop arguments
+	if(LuaBinder::checkUserData(l, 2, "SceneNode", -2220074417980276571, ud))
+	{
+		return -1;
+	}
+
+	SceneNode* iarg0 = ud->getData<SceneNode>();
+	SceneNode* arg0(iarg0);
+
+	// Call the method
+	self->setActiveCamera(arg0);
+
+	return 0;
+}
+
+//==============================================================================
+/// Wrap method SceneGraph::setActiveCamera.
+static int wrapSceneGraphsetActiveCamera(lua_State* l)
+{
+	int res = pwrapSceneGraphsetActiveCamera(l);
+	if(res >= 0)
+	{
+		return res;
+	}
+
+	lua_error(l);
+	return 0;
+}
+
 //==============================================================================
 //==============================================================================
 /// Wrap class SceneGraph.
 /// Wrap class SceneGraph.
 static inline void wrapSceneGraph(lua_State* l)
 static inline void wrapSceneGraph(lua_State* l)
@@ -3222,6 +3273,8 @@ static inline void wrapSceneGraph(lua_State* l)
 		l, "newReflectionProbe", wrapSceneGraphnewReflectionProbe);
 		l, "newReflectionProbe", wrapSceneGraphnewReflectionProbe);
 	LuaBinder::pushLuaCFuncMethod(
 	LuaBinder::pushLuaCFuncMethod(
 		l, "newReflectionProxy", wrapSceneGraphnewReflectionProxy);
 		l, "newReflectionProxy", wrapSceneGraphnewReflectionProxy);
+	LuaBinder::pushLuaCFuncMethod(
+		l, "setActiveCamera", wrapSceneGraphsetActiveCamera);
 	lua_settop(l, 0);
 	lua_settop(l, 0);
 }
 }
 
 

+ 5 - 0
src/script/Scene.xml

@@ -348,6 +348,11 @@ static SceneGraph* getSceneGraph(lua_State* l)
 					</args>
 					</args>
 					<return>ReflectionProxy*</return>
 					<return>ReflectionProxy*</return>
 				</method>
 				</method>
+				<method name="setActiveCamera">
+					<args>
+						<arg>SceneNode*</arg>
+					</args>
+				</method>
 			</methods>
 			</methods>
 		</class>
 		</class>
 	</classes>
 	</classes>

+ 0 - 3
testapp/Main.cpp

@@ -60,9 +60,6 @@ Error MyApp::init()
 			.loadColorGradingTexture("textures/adis/dungeon.ankitex");
 			.loadColorGradingTexture("textures/adis/dungeon.ankitex");
 	}
 	}
 
 
-	SceneNode& cam = scene.findSceneNode("Camera");
-	scene.setActiveCamera(static_cast<Camera*>(&cam));
-
 	return ErrorCode::NONE;
 	return ErrorCode::NONE;
 }
 }
 
 

+ 2 - 0
tools/scene/Exporter.cpp

@@ -697,6 +697,8 @@ void Exporter::exportCamera(const aiCamera& cam)
 	file << "\nnode = scene:newPerspectiveCamera(\"" << cam.mName.C_Str()
 	file << "\nnode = scene:newPerspectiveCamera(\"" << cam.mName.C_Str()
 		 << "\")\n";
 		 << "\")\n";
 
 
+	file << "scene:setActiveCamera(node:getSceneNodeBase())\n";
+
 	file << "node:setAll(" << cam.mHorizontalFOV * cam.mAspect << ", "
 	file << "node:setAll(" << cam.mHorizontalFOV * cam.mAspect << ", "
 		 << cam.mHorizontalFOV << ", " << cam.mClipPlaneNear << ", "
 		 << cam.mHorizontalFOV << ", " << cam.mClipPlaneNear << ", "
 		 << cam.mClipPlaneFar << ")\n";
 		 << cam.mClipPlaneFar << ")\n";