From 3ed18e70da6c155d57575e994ac154b0e30dae3a Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 17 Jan 2015 00:34:09 +0100 Subject: [PATCH] Added default material to sprites Former-commit-id: 8a68d3d9b251ff93a793d4e001aed721558a8eef --- include/Nazara/Graphics/Sprite.hpp | 1 + src/Nazara/Graphics/Sprite.cpp | 63 ++++++++++++++++-------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/include/Nazara/Graphics/Sprite.hpp b/include/Nazara/Graphics/Sprite.hpp index ed4b99f20..b3739cb07 100644 --- a/include/Nazara/Graphics/Sprite.hpp +++ b/include/Nazara/Graphics/Sprite.hpp @@ -32,6 +32,7 @@ class NAZARA_API NzSprite : public NzSceneNode bool IsDrawable() const; void SetColor(const NzColor& color); + void SetDefaultMaterial(); void SetMaterial(NzMaterial* material, bool resizeSprite = true); void SetSize(const NzVector2f& size); void SetSize(float sizeX, float sizeY); diff --git a/src/Nazara/Graphics/Sprite.cpp b/src/Nazara/Graphics/Sprite.cpp index 24778dbd6..542f17cd4 100644 --- a/src/Nazara/Graphics/Sprite.cpp +++ b/src/Nazara/Graphics/Sprite.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -15,32 +16,18 @@ m_size(64.f, 64.f), m_boundingVolumeUpdated(true), m_verticesUpdated(false) { + SetDefaultMaterial(); } NzSprite::NzSprite(NzTexture* texture) : m_boundingVolume(NzBoundingVolumef::Null()), m_color(NzColor::White), m_textureCoords(0.f, 0.f, 1.f, 1.f), +m_size(64.f, 64.f), +m_boundingVolumeUpdated(false), m_verticesUpdated(false) { - if (texture) - { - m_material = new NzMaterial; - m_material->SetPersistent(false); - m_material->SetDiffuseMap(texture); - - if (texture->IsValid()) - m_size.Set(texture->GetWidth(), texture->GetHeight()); - else - m_size.Set(64.f, 64.f); - - m_boundingVolumeUpdated = false; - } - else - { - m_size.Set(64.f, 64.f); - m_boundingVolumeUpdated = true; - } + SetTexture(texture, true); } NzSprite::NzSprite(const NzSprite& sprite) : @@ -108,13 +95,27 @@ void NzSprite::SetColor(const NzColor& color) m_verticesUpdated = false; } +void NzSprite::SetDefaultMaterial() +{ + std::unique_ptr material(new NzMaterial); + material->Enable(nzRendererParameter_FaceCulling, false); + material->EnableLighting(false); + + SetMaterial(material.get()); + + material->SetPersistent(false); + material.release(); +} + void NzSprite::SetMaterial(NzMaterial* material, bool resizeSprite) { m_material = material; - - NzTexture* diffuseMap = m_material->GetDiffuseMap(); - if (resizeSprite && diffuseMap && diffuseMap->IsValid()) - SetSize(NzVector2f(NzVector2ui(diffuseMap->GetSize()))); + if (m_material && resizeSprite) + { + NzTexture* diffuseMap = m_material->GetDiffuseMap(); + if (diffuseMap && diffuseMap->IsValid()) + SetSize(NzVector2f(NzVector2ui(diffuseMap->GetSize()))); + } } void NzSprite::SetSize(const NzVector2f& size) @@ -134,15 +135,17 @@ void NzSprite::SetSize(float sizeX, float sizeY) void NzSprite::SetTexture(NzTexture* texture, bool resizeSprite) { - std::unique_ptr material(new NzMaterial); - material->SetPersistent(false); + if (!m_material) + SetDefaultMaterial(); + else if (m_material->GetResourceReferenceCount() > 1) + { + m_material = new NzMaterial(*m_material); + m_material->SetPersistent(false); + } - material->Enable(nzRendererParameter_FaceCulling, false); - material->EnableLighting(false); - material->SetDiffuseMap(texture); - - SetMaterial(material.get(), resizeSprite); - material.release(); + m_material->SetDiffuseMap(texture); + if (resizeSprite && texture && texture->IsValid()) + SetSize(NzVector2f(NzVector2ui(texture->GetSize()))); } void NzSprite::SetTextureCoords(const NzRectf& coords)