Exemple #1
0
void GldpEntity::GatherRenderables(std::vector<GldpRenderable*>& list)
{
	GldpRenderable* renderable = GetRenderable();
	if(renderable)
	{
		list.push_back(GetRenderable());
	}

	for(unsigned int i = 0; i < m_children.size(); ++i)
	{
		GldpEntity* child = m_children[i];
		child->GatherRenderables(list);
	}
}
Exemple #2
0
	STARTDECL(ph_setcolor) (Value &fixture_id, Value &color)
	{
		auto r = GetRenderable(fixture_id.ival);
		auto c = ValueDecTo<float4>(color);
		if (r) r->color = c;
		return Value();
	}
Exemple #3
0
	STARTDECL(ph_setshader) (Value &fixture_id, Value &shader)
	{
		auto r = GetRenderable(fixture_id.ival);
		auto sh = LookupShader(shader.sval->str());
		shader.DECRT();
		if (r && sh) r->sh = sh;
		return Value();
	}
Exemple #4
0
	void OcTree::GetVisibleRenderables(const Collidable &collider, SceneNodes &renderables) const
	{
		renderables.clear();

		WalkScene(collider, [&](const SceneNode::Ptr &sceneNode)
		{
			auto render = sceneNode->GetComponent<MeshRender>();
			if (render != nullptr && render->GetRenderable())
				renderables.push_back(sceneNode);
		});
	}
Exemple #5
0
	void OcTree::GetVisibleShadowCasters(const Collidable &collider, SceneNodes &renderables, bool clear) const
	{
		if (clear)
			renderables.clear();

		WalkScene(collider, [&](const SceneNode::Ptr &sceneNode)
		{
			auto render = sceneNode->GetComponent<MeshRender>();
			if (render != nullptr && render->GetRenderable() && render->GetMesh()->GetCastShadows())
				renderables.push_back(sceneNode);
		});
	}
Exemple #6
0
void GldpEntity::Update(float deltaTime, const GldpTransformf& cameraInverseTransform, const GldpTransformf& accumulatedTransform)
{
	m_worldTransform = accumulatedTransform * m_localTransform;

	GldpRenderable* renderable = GetRenderable();
	if(renderable)
	{
		renderable->SetTransform(cameraInverseTransform * m_worldTransform);
	}

	for(unsigned int i = 0; i < m_children.size(); ++i)
	{
		GldpEntity* child = m_children[i];
		child->Update(deltaTime, cameraInverseTransform, m_worldTransform);
	}
}
Exemple #7
0
	void OcTree::GetVisibleRenderableAndLights(const Collidable &collider, SceneNodes &renderables, SceneNodes &lights, bool clear) const
	{
		if (clear)
		{
			renderables.clear();
			lights.clear();
		}

		WalkScene(collider, [&](const SceneNode::Ptr &sceneNode)
		{
			auto render = sceneNode->GetComponent<MeshRender>();
			if (render != nullptr && render->GetRenderable())
				renderables.push_back(sceneNode);
			else if (sceneNode->GetComponent<Light>() != nullptr)
				lights.push_back(sceneNode);

		});
	}
	void PrelightPipeline::DrawRenderable(const std::shared_ptr<Pass> &pass, const std::shared_ptr<SceneNode> &node)
	{
		auto render = node->GetComponent<MeshRender>();
		if (render == nullptr || !render->GetRenderable())
			return;

		auto mesh = render->GetMesh();
		auto material = render->GetMaterial();
		auto shader = material->GetShaderForPass(pass->GetRenderIndex());

		if (shader == nullptr)
			shader = pass->GetShader(material->GetShaderType());

		if (shader == nullptr)
		{
			LOGW << "Failed to draw " << node->GetName() << ", data incomplete!";
			return;
		}

		shader->Bind();
		shader->BindCamera(m_CurrentCamera);
		shader->BindMatrix(Matrix4::WORLD_MATRIX, node->GetWorldMatrix());

		shader->BindMesh(mesh);
		shader->BindMaterial(material);

		for (unsigned int i = 0; i < pass->GetTextureCount(true); i++)
		{
			auto ptr = pass->GetTextureAt(i, true);
			shader->BindTexture(ptr->GetName(), ptr);
		}

		glDrawElements(GL_TRIANGLES, mesh->Indices.Data.size(), GL_UNSIGNED_INT, 0);

		shader->UnBind();

		m_DrawCall++;
	}
Exemple #9
0
	STARTDECL(ph_settexture) (Value &fixture_id, Value &tex_id, Value &tex_unit)
	{
		auto r = GetRenderable(fixture_id.ival);
		if (r) r->textures[GetSampler(tex_unit)] = tex_id.ival;
		return Value();
	}