Modified SceneNode::FrustumCull
Now provides an implementation which will test the bounding volume against the frustum (Basic frustum culling) Is now const Disabled face culling on sprites Former-commit-id: 5cb7a94b38ef8b0ffa5a78f16f5ef65a59ab375d
This commit is contained in:
parent
bc9c8c6bdb
commit
a31ced1d76
|
|
@ -53,7 +53,7 @@ class NAZARA_API NzLight : public NzSceneNode
|
|||
static void Disable(const NzShader* program, const NzLightUniforms& uniforms, int offset = 0);
|
||||
|
||||
private:
|
||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
||||
bool FrustumCull(const NzFrustumf& frustum) const override;
|
||||
void InvalidateNode() override;
|
||||
void Register() override;
|
||||
void Unregister() override;
|
||||
|
|
|
|||
|
|
@ -86,7 +86,6 @@ class NAZARA_API NzModel : public NzSceneNode
|
|||
NzModel& operator=(NzModel&& node);
|
||||
|
||||
protected:
|
||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
||||
void InvalidateNode() override;
|
||||
virtual void UpdateBoundingVolume() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@ class NAZARA_API NzSceneNode : public NzNode
|
|||
NzSceneNode& operator=(NzSceneNode&& sceneNode);
|
||||
|
||||
protected:
|
||||
virtual bool FrustumCull(const NzFrustumf& frustum) const;
|
||||
virtual void OnParenting(const NzNode* parent) override;
|
||||
virtual void OnVisibilityChange(bool visibility);
|
||||
virtual bool FrustumCull(const NzFrustumf& frustum) = 0;
|
||||
void RecursiveSetScene(NzScene* scene, NzNode* node);
|
||||
virtual void Register();
|
||||
void SetScene(NzScene* scene);
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ class NAZARA_API NzSceneRoot : public NzSceneNode
|
|||
NzSceneRoot(NzScene* scene);
|
||||
virtual ~NzSceneRoot();
|
||||
|
||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
||||
void Register();
|
||||
void Unregister();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ class NAZARA_API NzSprite : public NzSceneNode
|
|||
void SetTextureRect(const NzRectui& rect);
|
||||
|
||||
private:
|
||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
||||
void InvalidateNode() override;
|
||||
void Register() override;
|
||||
void Unregister() override;
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ void NzLight::Disable(const NzShader* shader, const NzLightUniforms& uniforms, i
|
|||
shader->SendInteger(uniforms.locations.type + offset, -1);
|
||||
}
|
||||
|
||||
bool NzLight::FrustumCull(const NzFrustumf& frustum)
|
||||
bool NzLight::FrustumCull(const NzFrustumf& frustum) const
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
|
|
@ -244,10 +244,7 @@ bool NzLight::FrustumCull(const NzFrustumf& frustum)
|
|||
return frustum.Contains(NzSpheref(m_derivedPosition, m_radius));
|
||||
|
||||
case nzLightType_Spot:
|
||||
if (!m_boundingVolumeUpdated)
|
||||
UpdateBoundingVolume();
|
||||
|
||||
return frustum.Contains(m_boundingVolume);
|
||||
return NzSceneNode::FrustumCull(frustum);
|
||||
}
|
||||
|
||||
NazaraError("Invalid light type (0x" + NzString::Number(m_type, 16) + ')');
|
||||
|
|
|
|||
|
|
@ -438,14 +438,6 @@ NzModel& NzModel::operator=(NzModel&& node)
|
|||
return *this;
|
||||
}
|
||||
|
||||
bool NzModel::FrustumCull(const NzFrustumf& frustum)
|
||||
{
|
||||
if (!m_boundingVolumeUpdated)
|
||||
UpdateBoundingVolume();
|
||||
|
||||
return frustum.Contains(m_boundingVolume);
|
||||
}
|
||||
|
||||
void NzModel::InvalidateNode()
|
||||
{
|
||||
NzSceneNode::InvalidateNode();
|
||||
|
|
|
|||
|
|
@ -73,6 +73,11 @@ NzSceneNode& NzSceneNode::operator=(NzSceneNode&& sceneNode)
|
|||
return *this;
|
||||
}
|
||||
|
||||
bool NzSceneNode::FrustumCull(const NzFrustumf& frustum) const
|
||||
{
|
||||
return frustum.Contains(GetBoundingVolume());
|
||||
}
|
||||
|
||||
void NzSceneNode::OnParenting(const NzNode* parent)
|
||||
{
|
||||
if (parent)
|
||||
|
|
|
|||
|
|
@ -36,13 +36,6 @@ bool NzSceneRoot::IsDrawable() const
|
|||
return true;
|
||||
}
|
||||
|
||||
bool NzSceneRoot::FrustumCull(const NzFrustumf& frustum)
|
||||
{
|
||||
NazaraUnused(frustum);
|
||||
|
||||
return true; // Toujours visible
|
||||
}
|
||||
|
||||
void NzSceneRoot::Register()
|
||||
{
|
||||
NazaraInternalError("SceneNode::Register() called on SceneRoot");
|
||||
|
|
|
|||
|
|
@ -116,10 +116,11 @@ void NzSprite::SetSize(const NzVector2f& size)
|
|||
void NzSprite::SetTexture(NzTexture* texture, bool resizeSprite)
|
||||
{
|
||||
std::unique_ptr<NzMaterial> material(new NzMaterial);
|
||||
material->Enable(nzRendererParameter_DepthBuffer, false);
|
||||
material->SetPersistent(false);
|
||||
|
||||
material->Enable(nzRendererParameter_FaceCulling, false);
|
||||
material->EnableLighting(false);
|
||||
material->SetDiffuseMap(texture);
|
||||
material->SetPersistent(false);
|
||||
|
||||
SetMaterial(material.get(), resizeSprite);
|
||||
material.release();
|
||||
|
|
@ -154,14 +155,6 @@ void NzSprite::SetTextureRect(const NzRectui& rect)
|
|||
SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height));
|
||||
}
|
||||
|
||||
bool NzSprite::FrustumCull(const NzFrustumf& frustum)
|
||||
{
|
||||
if (!m_boundingVolumeUpdated)
|
||||
UpdateBoundingVolume();
|
||||
|
||||
return frustum.Contains(m_boundingVolume);
|
||||
}
|
||||
|
||||
void NzSprite::InvalidateNode()
|
||||
{
|
||||
NzSceneNode::InvalidateNode();
|
||||
|
|
@ -180,7 +173,7 @@ void NzSprite::Unregister()
|
|||
void NzSprite::UpdateBoundingVolume() const
|
||||
{
|
||||
if (m_boundingVolume.IsNull())
|
||||
m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0, m_size.x, m_size.y, 0.f);
|
||||
m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0.f, m_size.x, m_size.y, 0.f);
|
||||
|
||||
if (!m_transformMatrixUpdated)
|
||||
UpdateTransformMatrix();
|
||||
|
|
|
|||
Loading…
Reference in New Issue