From 3cbcc527cdfe9ccdbb83fc3d164e5147bb8092ef Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 9 Oct 2013 10:13:46 +0200 Subject: [PATCH] Added Sprite::SetTexture Former-commit-id: 275e689110fe7b86159b895a3016a64f1103effb --- include/Nazara/Graphics/Sprite.hpp | 4 ++- src/Nazara/Graphics/Sprite.cpp | 44 +++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/include/Nazara/Graphics/Sprite.hpp b/include/Nazara/Graphics/Sprite.hpp index d1908340b..98b052075 100644 --- a/include/Nazara/Graphics/Sprite.hpp +++ b/include/Nazara/Graphics/Sprite.hpp @@ -15,6 +15,7 @@ class NAZARA_API NzSprite : public NzSceneNode { public: NzSprite(); + NzSprite(NzTexture* texture); NzSprite(const NzSprite& sprite); NzSprite(NzSprite&& sprite); ~NzSprite(); @@ -29,8 +30,9 @@ class NAZARA_API NzSprite : public NzSceneNode bool IsDrawable() const; - void SetMaterial(NzMaterial* material); + void SetMaterial(NzMaterial* material, bool resizeSprite = true); void SetSize(const NzVector2f& size); + void SetTexture(NzTexture* texture, bool resizeSprite = true); void SetTextureCoords(const NzRectf& coords); void SetTextureRect(const NzRectui& rect); diff --git a/src/Nazara/Graphics/Sprite.cpp b/src/Nazara/Graphics/Sprite.cpp index e22e94c7d..ec4879495 100644 --- a/src/Nazara/Graphics/Sprite.cpp +++ b/src/Nazara/Graphics/Sprite.cpp @@ -3,6 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include NzSprite::NzSprite() : @@ -13,6 +14,30 @@ m_boundingVolumeUpdated(true) { } +NzSprite::NzSprite(NzTexture* texture) : +m_boundingVolume(NzBoundingVolumef::Null()), +m_textureCoords(0.f, 0.f, 1.f, 1.f) +{ + 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; + } +} + NzSprite::NzSprite(const NzSprite& sprite) : NzSceneNode(sprite), m_boundingVolume(sprite.m_boundingVolume), @@ -71,15 +96,32 @@ bool NzSprite::IsDrawable() const return m_material != nullptr; } -void NzSprite::SetMaterial(NzMaterial* material) +void NzSprite::SetMaterial(NzMaterial* material, bool resizeSprite) { m_material = material; + + NzTexture* diffuseMap = m_material->GetDiffuseMap(); + if (resizeSprite && diffuseMap && diffuseMap->IsValid()) + SetSize(NzVector2f(diffuseMap->GetSize())); } void NzSprite::SetSize(const NzVector2f& size) { m_size = size; m_boundingVolume.MakeNull(); + m_boundingVolumeUpdated = false; +} + +void NzSprite::SetTexture(NzTexture* texture, bool resizeSprite) +{ + std::unique_ptr material(new NzMaterial); + material->Enable(nzRendererParameter_DepthBuffer, false); + material->EnableLighting(false); + material->SetDiffuseMap(texture); + material->SetPersistent(false); + + SetMaterial(material.get(), resizeSprite); + material.release(); } void NzSprite::SetTextureCoords(const NzRectf& coords)