diff --git a/include/irender.h b/include/irender.h index ff9262694b..3da395b6ba 100644 --- a/include/irender.h +++ b/include/irender.h @@ -219,8 +219,8 @@ inline std::ostream& operator<< (std::ostream& os, const RendererLight& l) } /** - * \brief - * Interface for an object which can test its intersection with a RendererLight. + * \brief Interface for an object which can test its intersection with a + * RendererLight. * * Objects which implement this interface define a intersectsLight() function * which determines whether the given light intersects the object. diff --git a/test/Entity.cpp b/test/Entity.cpp index b83f3c1fe5..2a1808c79a 100644 --- a/test/Entity.cpp +++ b/test/Entity.cpp @@ -329,6 +329,14 @@ namespace RenderFixture(bool solid = false): renderSolid(solid) {} + // Convenience method to set render backend and traverse a node and its + // children for rendering + void renderSubGraph(const scene::INodePtr& node) + { + node->setRenderSystem(backend); + node->traverse(*this); + } + // NodeVisitor implementation bool pre(const scene::INodePtr& node) override { @@ -434,6 +442,43 @@ TEST_F(EntityTest, RenderLightAsLightSource) "lights/biground_torchflicker"); } +TEST_F(EntityTest, RenderEmptyFuncStatic) +{ + auto funcStatic = createByClassName("func_static"); + + // Func static without a model key is empty + RenderFixture rf; + funcStatic->traverse(rf); + EXPECT_EQ(rf.collector.lights, 0); + EXPECT_EQ(rf.collector.renderables, 0); +} + +TEST_F(EntityTest, RenderFuncStaticWithModel) +{ + // Create a func_static with a model key + auto funcStatic = createByClassName("func_static"); + funcStatic->getEntity().setKeyValue("model", "models/moss_patch.ase"); + + // We should get one renderable + RenderFixture rf; + rf.renderSubGraph(funcStatic); + EXPECT_EQ(rf.collector.lights, 0); + EXPECT_EQ(rf.collector.renderables, 1); +} + +TEST_F(EntityTest, RenderFuncStaticWithMultiSurfaceModel) +{ + // Create a func_static with a model key + auto funcStatic = createByClassName("func_static"); + funcStatic->getEntity().setKeyValue("model", "models/torch.lwo"); + + // This torch model has 3 renderable surfaces + RenderFixture rf; + rf.renderSubGraph(funcStatic); + EXPECT_EQ(rf.collector.lights, 0); + EXPECT_EQ(rf.collector.renderables, 3); +} + TEST_F(EntityTest, CreateAttachedLightEntity) { // Create the torch entity which has an attached light