Panagiotis Christopoulos Charitos 4 years ago
parent
commit
3b4c822cd0

+ 2 - 6
AnKi/Importer/GltfImporter.cpp

@@ -1250,16 +1250,12 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
 	auto lensFlaresFname = extras.find("lens_flare");
 	if(lensFlaresFname != extras.getEnd())
 	{
-		ANKI_CHECK(m_sceneFile.writeText("node:loadLensFlare(\"%s\")\n", lensFlaresFname->cstr()));
+		ANKI_CHECK(m_sceneFile.writeText("lfcomp = node:getSceneNodeBase():getLensFlareComponent()\n"));
+		ANKI_CHECK(m_sceneFile.writeText("lfcomp:loadTextureResource(\"%s\")\n", lensFlaresFname->cstr()));
 
 		auto lsSpriteSize = extras.find("lens_flare_first_sprite_size");
 		auto lsColor = extras.find("lens_flare_color");
 
-		if(lsSpriteSize != extras.getEnd() || lsColor != extras.getEnd())
-		{
-			ANKI_CHECK(m_sceneFile.writeText("lfcomp = node:getSceneNodeBase():getLensFlareComponent()\n"));
-		}
-
 		if(lsSpriteSize != extras.getEnd())
 		{
 			DynamicArrayAuto<F64> numbers(m_alloc);

+ 5 - 4
AnKi/Renderer/ClusterBinning.cpp

@@ -43,7 +43,8 @@ Error ClusterBinning::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(variantInitInfo, variant);
 	m_grProg = variant->getProgram();
 
-	m_clusterCount = m_r->getTileCounts().x() * m_r->getTileCounts().y() + m_r->getZSplitCount();
+	m_tileCount = m_r->getTileCounts().x() * m_r->getTileCounts().y();
+	m_clusterCount = m_tileCount + m_r->getZSplitCount();
 
 	return Error::NONE;
 }
@@ -86,8 +87,8 @@ void ClusterBinning::run(RenderPassWorkContext& rgraphCtx)
 	bindUniforms(cmdb, 0, 6, tokens.m_fogDensityVolumesToken);
 	bindUniforms(cmdb, 0, 7, tokens.m_decalsToken);
 
-	const U32 sampleCount = 8;
-	const U32 sizex = m_clusterCount * sampleCount;
+	const U32 sampleCount = 4;
+	const U32 sizex = m_tileCount * sampleCount;
 	const RenderQueue& rqueue = *m_runCtx.m_ctx->m_renderQueue;
 	U32 clusterObjectCounts = rqueue.m_pointLights.getSize();
 	clusterObjectCounts += rqueue.m_spotLights.getSize();
@@ -95,7 +96,7 @@ void ClusterBinning::run(RenderPassWorkContext& rgraphCtx)
 	clusterObjectCounts += rqueue.m_giProbes.getSize();
 	clusterObjectCounts += rqueue.m_fogDensityVolumes.getSize();
 	clusterObjectCounts += rqueue.m_decals.getSize();
-	cmdb->dispatchCompute((sizex - 64 - 1) / 64, clusterObjectCounts, 1);
+	cmdb->dispatchCompute((sizex + 64 - 1) / 64, clusterObjectCounts, 1);
 }
 
 void ClusterBinning::writeClustererBuffers(RenderingContext& ctx)

+ 1 - 0
AnKi/Renderer/ClusterBinning.h

@@ -34,6 +34,7 @@ private:
 	ShaderProgramResourcePtr m_prog;
 	ShaderProgramPtr m_grProg;
 
+	U32 m_tileCount = 0;
 	U32 m_clusterCount = 0;
 
 	class

+ 5 - 0
AnKi/Scene/Components/LensFlareComponent.h

@@ -28,6 +28,11 @@ public:
 
 	ANKI_USE_RESULT Error loadTextureResource(CString textureFilename);
 
+	Bool isLoaded() const
+	{
+		return m_tex.get() != nullptr;
+	}
+
 	CString getTextureResourceFilename() const
 	{
 		return (m_tex) ? m_tex->getFilename() : CString();

+ 6 - 6
AnKi/Scene/LightNode.cpp

@@ -107,11 +107,8 @@ void LightNode::onMoveUpdateCommon(const MoveComponent& move)
 	sp.setSpatialOrigin(move.getWorldTransform().getOrigin().xyz());
 
 	// Update the lens flare
-	LensFlareComponent* lf = tryGetFirstComponentOfType<LensFlareComponent>();
-	if(lf)
-	{
-		lf->setWorldPosition(move.getWorldTransform().getOrigin().xyz());
-	}
+	LensFlareComponent& lf = getFirstComponentOfType<LensFlareComponent>();
+	lf.setWorldPosition(move.getWorldTransform().getOrigin().xyz());
 
 	// Update light component
 	getFirstComponentOfType<LightComponent>().setWorldTransform(move.getWorldTransform());
@@ -126,6 +123,7 @@ PointLightNode::PointLightNode(SceneGraph* scene, CString name)
 	LightComponent* lc = newComponent<LightComponent>();
 	lc->setLightComponentType(LightComponentType::POINT);
 
+	newComponent<LensFlareComponent>();
 	newComponent<OnLightShapeUpdatedFeedbackComponent>();
 	newComponent<SpatialComponent>();
 }
@@ -141,7 +139,7 @@ void PointLightNode::onMoved(const MoveComponent& move)
 
 	// Update the frustums
 	U32 count = 0;
-	Error err = iterateComponentsOfType<FrustumComponent>([&](FrustumComponent& fr) -> Error {
+	const Error err = iterateComponentsOfType<FrustumComponent>([&](FrustumComponent& fr) -> Error {
 		Transform trf = m_shadowData[count].m_localTrf;
 		trf.setOrigin(move.getWorldTransform().getOrigin());
 
@@ -246,6 +244,8 @@ SpotLightNode::SpotLightNode(SceneGraph* scene, CString name)
 	LightComponent* lc = newComponent<LightComponent>();
 	lc->setLightComponentType(LightComponentType::SPOT);
 
+	newComponent<LensFlareComponent>();
+
 	newComponent<OnLightShapeUpdatedFeedbackComponent>();
 
 	FrustumComponent* fr = newComponent<FrustumComponent>();

+ 1 - 1
AnKi/Scene/Visibility.cpp

@@ -515,7 +515,7 @@ void VisibilityTestTask::test(ThreadHive& hive, U32 taskId)
 			}
 		}
 
-		if(lfc)
+		if(lfc && lfc->isLoaded())
 		{
 			LensFlareQueueElement* el = result.m_lensFlares.newElement(alloc);
 			lfc->setupLensFlareQueueElement(*el);