Graphics/TextSprite: Inlined some methods
Former-commit-id: 8c6633867e25b86b5b641662c804c446478fe56c
This commit is contained in:
parent
8ade9fa65e
commit
54b0339025
|
|
@ -25,36 +25,31 @@ using NzTextSpriteRef = NzObjectRef<NzTextSprite>;
|
||||||
class NAZARA_GRAPHICS_API NzTextSprite : public NzInstancedRenderable
|
class NAZARA_GRAPHICS_API NzTextSprite : public NzInstancedRenderable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NzTextSprite();
|
inline NzTextSprite();
|
||||||
NzTextSprite(const NzTextSprite& sprite);
|
inline NzTextSprite(const NzTextSprite& sprite);
|
||||||
~NzTextSprite() = default;
|
~NzTextSprite() = default;
|
||||||
|
|
||||||
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const InstanceData& instanceData) const override;
|
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const InstanceData& instanceData) const override;
|
||||||
|
|
||||||
void Clear();
|
inline void Clear();
|
||||||
|
|
||||||
NzTextSprite* Clone() const;
|
inline const NzColor& GetColor() const;
|
||||||
NzTextSprite* Create() const;
|
inline const NzMaterialRef& GetMaterial() const;
|
||||||
|
inline float GetScale() const;
|
||||||
|
|
||||||
const NzColor& GetColor() const;
|
inline void SetColor(const NzColor& color);
|
||||||
NzMaterial* GetMaterial() const;
|
inline void SetDefaultMaterial();
|
||||||
float GetScale() const;
|
inline void SetMaterial(NzMaterialRef material);
|
||||||
|
inline void SetScale(float scale);
|
||||||
void InvalidateVertices();
|
|
||||||
bool IsDrawable() const;
|
|
||||||
|
|
||||||
void SetColor(const NzColor& color);
|
|
||||||
void SetDefaultMaterial();
|
|
||||||
void SetMaterial(NzMaterial* material);
|
|
||||||
void SetScale(float scale);
|
|
||||||
|
|
||||||
void Update(const NzAbstractTextDrawer& drawer);
|
void Update(const NzAbstractTextDrawer& drawer);
|
||||||
|
|
||||||
NzTextSprite& operator=(const NzTextSprite& text);
|
inline NzTextSprite& operator=(const NzTextSprite& text);
|
||||||
|
|
||||||
template<typename... Args> static NzTextSpriteRef New(Args&&... args);
|
template<typename... Args> static NzTextSpriteRef New(Args&&... args);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
inline void InvalidateVertices();
|
||||||
void MakeBoundingVolume() const override;
|
void MakeBoundingVolume() const override;
|
||||||
void OnAtlasInvalidated(const NzAbstractAtlas* atlas);
|
void OnAtlasInvalidated(const NzAbstractAtlas* atlas);
|
||||||
void OnAtlasLayerChange(const NzAbstractAtlas* atlas, NzAbstractImage* oldLayer, NzAbstractImage* newLayer);
|
void OnAtlasLayerChange(const NzAbstractAtlas* atlas, NzAbstractImage* oldLayer, NzAbstractImage* newLayer);
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,123 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <Nazara/Renderer/Debug.hpp>
|
#include <Nazara/Renderer/Debug.hpp>
|
||||||
|
|
||||||
|
inline NzTextSprite::NzTextSprite() :
|
||||||
|
m_color(NzColor::White),
|
||||||
|
m_scale(1.f)
|
||||||
|
{
|
||||||
|
SetDefaultMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline NzTextSprite::NzTextSprite(const NzTextSprite& sprite) :
|
||||||
|
NzInstancedRenderable(sprite),
|
||||||
|
m_renderInfos(sprite.m_renderInfos),
|
||||||
|
m_localVertices(sprite.m_localVertices),
|
||||||
|
m_color(sprite.m_color),
|
||||||
|
m_material(sprite.m_material),
|
||||||
|
m_localBounds(sprite.m_localBounds),
|
||||||
|
m_scale(sprite.m_scale)
|
||||||
|
{
|
||||||
|
for (auto it = sprite.m_atlases.begin(); it != sprite.m_atlases.end(); ++it)
|
||||||
|
{
|
||||||
|
const NzAbstractAtlas* atlas = it->first;
|
||||||
|
AtlasSlots& slots = m_atlases[atlas];
|
||||||
|
|
||||||
|
slots.clearSlot.Connect(atlas->OnAtlasCleared, this, &NzTextSprite::OnAtlasInvalidated);
|
||||||
|
slots.layerChangeSlot.Connect(atlas->OnAtlasLayerChange, this, &NzTextSprite::OnAtlasLayerChange);
|
||||||
|
slots.releaseSlot.Connect(atlas->OnAtlasRelease, this, &NzTextSprite::OnAtlasInvalidated);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void NzTextSprite::Clear()
|
||||||
|
{
|
||||||
|
m_atlases.clear();
|
||||||
|
m_boundingVolume.MakeNull();
|
||||||
|
m_localVertices.clear();
|
||||||
|
m_renderInfos.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const NzColor& NzTextSprite::GetColor() const
|
||||||
|
{
|
||||||
|
return m_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const NzMaterialRef& NzTextSprite::GetMaterial() const
|
||||||
|
{
|
||||||
|
return m_material;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float NzTextSprite::GetScale() const
|
||||||
|
{
|
||||||
|
return m_scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void NzTextSprite::SetColor(const NzColor& color)
|
||||||
|
{
|
||||||
|
m_color = color;
|
||||||
|
|
||||||
|
InvalidateVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void NzTextSprite::SetDefaultMaterial()
|
||||||
|
{
|
||||||
|
NzMaterialRef material = NzMaterial::New();
|
||||||
|
material->Enable(nzRendererParameter_Blend, true);
|
||||||
|
material->Enable(nzRendererParameter_DepthWrite, false);
|
||||||
|
material->Enable(nzRendererParameter_FaceCulling, false);
|
||||||
|
material->EnableLighting(false);
|
||||||
|
material->SetDstBlend(nzBlendFunc_InvSrcAlpha);
|
||||||
|
material->SetSrcBlend(nzBlendFunc_SrcAlpha);
|
||||||
|
|
||||||
|
SetMaterial(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void NzTextSprite::SetMaterial(NzMaterialRef material)
|
||||||
|
{
|
||||||
|
m_material = std::move(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void NzTextSprite::SetScale(float scale)
|
||||||
|
{
|
||||||
|
m_scale = scale;
|
||||||
|
|
||||||
|
InvalidateVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void NzTextSprite::InvalidateVertices()
|
||||||
|
{
|
||||||
|
InvalidateInstanceData(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline NzTextSprite& NzTextSprite::operator=(const NzTextSprite& text)
|
||||||
|
{
|
||||||
|
NzInstancedRenderable::operator=(text);
|
||||||
|
|
||||||
|
m_atlases.clear();
|
||||||
|
|
||||||
|
m_color = text.m_color;
|
||||||
|
m_material = text.m_material;
|
||||||
|
m_renderInfos = text.m_renderInfos;
|
||||||
|
m_localBounds = text.m_localBounds;
|
||||||
|
m_localVertices = text.m_localVertices;
|
||||||
|
m_scale = text.m_scale;
|
||||||
|
|
||||||
|
// Connect to the slots of the new atlases
|
||||||
|
for (auto it = text.m_atlases.begin(); it != text.m_atlases.end(); ++it)
|
||||||
|
{
|
||||||
|
const NzAbstractAtlas* atlas = it->first;
|
||||||
|
AtlasSlots& slots = m_atlases[atlas];
|
||||||
|
|
||||||
|
slots.clearSlot.Connect(atlas->OnAtlasCleared, this, &NzTextSprite::OnAtlasInvalidated);
|
||||||
|
slots.layerChangeSlot.Connect(atlas->OnAtlasLayerChange, this, &NzTextSprite::OnAtlasLayerChange);
|
||||||
|
slots.releaseSlot.Connect(atlas->OnAtlasRelease, this, &NzTextSprite::OnAtlasInvalidated);
|
||||||
|
}
|
||||||
|
|
||||||
|
InvalidateBoundingVolume();
|
||||||
|
InvalidateVertices();
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
NzTextSpriteRef NzTextSprite::New(Args&&... args)
|
NzTextSpriteRef NzTextSprite::New(Args&&... args)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,35 +11,11 @@
|
||||||
#include <Nazara/Utility/Font.hpp>
|
#include <Nazara/Utility/Font.hpp>
|
||||||
#include <Nazara/Graphics/Debug.hpp>
|
#include <Nazara/Graphics/Debug.hpp>
|
||||||
|
|
||||||
NzTextSprite::NzTextSprite() :
|
|
||||||
m_color(NzColor::White),
|
|
||||||
m_scale(1.f)
|
|
||||||
{
|
|
||||||
SetDefaultMaterial();
|
|
||||||
}
|
|
||||||
|
|
||||||
NzTextSprite::NzTextSprite(const NzTextSprite& sprite) :
|
|
||||||
NzInstancedRenderable(sprite),
|
|
||||||
m_renderInfos(sprite.m_renderInfos),
|
|
||||||
m_localVertices(sprite.m_localVertices),
|
|
||||||
m_color(sprite.m_color),
|
|
||||||
m_material(sprite.m_material),
|
|
||||||
m_localBounds(sprite.m_localBounds),
|
|
||||||
m_scale(sprite.m_scale)
|
|
||||||
{
|
|
||||||
for (auto it = sprite.m_atlases.begin(); it != sprite.m_atlases.end(); ++it)
|
|
||||||
{
|
|
||||||
const NzAbstractAtlas* atlas = it->first;
|
|
||||||
AtlasSlots& slots = m_atlases[atlas];
|
|
||||||
|
|
||||||
slots.clearSlot.Connect(atlas->OnAtlasCleared, this, &NzTextSprite::OnAtlasInvalidated);
|
|
||||||
slots.layerChangeSlot.Connect(atlas->OnAtlasLayerChange, this, &NzTextSprite::OnAtlasLayerChange);
|
|
||||||
slots.releaseSlot.Connect(atlas->OnAtlasRelease, this, &NzTextSprite::OnAtlasInvalidated);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const InstanceData& instanceData) const
|
void NzTextSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const InstanceData& instanceData) const
|
||||||
{
|
{
|
||||||
|
if (!m_material)
|
||||||
|
return;
|
||||||
|
|
||||||
for (auto& pair : m_renderInfos)
|
for (auto& pair : m_renderInfos)
|
||||||
{
|
{
|
||||||
NzTexture* overlay = pair.first;
|
NzTexture* overlay = pair.first;
|
||||||
|
|
@ -53,81 +29,6 @@ void NzTextSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const In
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzTextSprite::Clear()
|
|
||||||
{
|
|
||||||
m_atlases.clear();
|
|
||||||
m_boundingVolume.MakeNull();
|
|
||||||
m_localVertices.clear();
|
|
||||||
m_renderInfos.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
NzTextSprite* NzTextSprite::Clone() const
|
|
||||||
{
|
|
||||||
return new NzTextSprite(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
NzTextSprite* NzTextSprite::Create() const
|
|
||||||
{
|
|
||||||
return new NzTextSprite;
|
|
||||||
}
|
|
||||||
|
|
||||||
const NzColor& NzTextSprite::GetColor() const
|
|
||||||
{
|
|
||||||
return m_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
NzMaterial* NzTextSprite::GetMaterial() const
|
|
||||||
{
|
|
||||||
return m_material;
|
|
||||||
}
|
|
||||||
|
|
||||||
float NzTextSprite::GetScale() const
|
|
||||||
{
|
|
||||||
return m_scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::InvalidateVertices()
|
|
||||||
{
|
|
||||||
InvalidateInstanceData(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NzTextSprite::IsDrawable() const
|
|
||||||
{
|
|
||||||
return m_material != nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::SetColor(const NzColor& color)
|
|
||||||
{
|
|
||||||
m_color = color;
|
|
||||||
|
|
||||||
InvalidateVertices();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::SetDefaultMaterial()
|
|
||||||
{
|
|
||||||
NzMaterialRef material = NzMaterial::New();
|
|
||||||
material->Enable(nzRendererParameter_Blend, true);
|
|
||||||
material->Enable(nzRendererParameter_DepthWrite, false);
|
|
||||||
material->Enable(nzRendererParameter_FaceCulling, false);
|
|
||||||
material->EnableLighting(false);
|
|
||||||
material->SetDstBlend(nzBlendFunc_InvSrcAlpha);
|
|
||||||
material->SetSrcBlend(nzBlendFunc_SrcAlpha);
|
|
||||||
|
|
||||||
SetMaterial(material);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::SetMaterial(NzMaterial* material)
|
|
||||||
{
|
|
||||||
m_material = material;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::SetScale(float scale)
|
|
||||||
{
|
|
||||||
m_scale = scale;
|
|
||||||
|
|
||||||
InvalidateInstanceData(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::Update(const NzAbstractTextDrawer& drawer)
|
void NzTextSprite::Update(const NzAbstractTextDrawer& drawer)
|
||||||
{
|
{
|
||||||
m_atlases.clear();
|
m_atlases.clear();
|
||||||
|
|
@ -142,15 +43,7 @@ void NzTextSprite::Update(const NzAbstractTextDrawer& drawer)
|
||||||
{
|
{
|
||||||
NzFont* font = drawer.GetFont(i);
|
NzFont* font = drawer.GetFont(i);
|
||||||
const NzAbstractAtlas* atlas = font->GetAtlas().get();
|
const NzAbstractAtlas* atlas = font->GetAtlas().get();
|
||||||
|
NazaraAssert(atlas->GetStorage() & nzDataStorage_Hardware, "Font uses a non-hardware atlas which cannot be used by text sprites");
|
||||||
#if NAZARA_GRAPHICS_SAFE
|
|
||||||
if ((atlas->GetStorage() & nzDataStorage_Hardware) == 0)
|
|
||||||
{
|
|
||||||
// Cet atlas ne nous donnera pas de texture, nous ne pouvons pas l'utiliser
|
|
||||||
NazaraError("Font " + NzString::Pointer(font) + " uses a non-hardware atlas which cannot be used by text sprites");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (m_atlases.find(atlas) == m_atlases.end())
|
if (m_atlases.find(atlas) == m_atlases.end())
|
||||||
{
|
{
|
||||||
|
|
@ -243,36 +136,6 @@ void NzTextSprite::Update(const NzAbstractTextDrawer& drawer)
|
||||||
clearOnFail.Reset();
|
clearOnFail.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
NzTextSprite& NzTextSprite::operator=(const NzTextSprite& text)
|
|
||||||
{
|
|
||||||
NzInstancedRenderable::operator=(text);
|
|
||||||
|
|
||||||
m_atlases.clear();
|
|
||||||
|
|
||||||
m_color = text.m_color;
|
|
||||||
m_material = text.m_material;
|
|
||||||
m_renderInfos = text.m_renderInfos;
|
|
||||||
m_localBounds = text.m_localBounds;
|
|
||||||
m_localVertices = text.m_localVertices;
|
|
||||||
m_scale = text.m_scale;
|
|
||||||
|
|
||||||
// Connect to the slots of the new atlases
|
|
||||||
for (auto it = text.m_atlases.begin(); it != text.m_atlases.end(); ++it)
|
|
||||||
{
|
|
||||||
const NzAbstractAtlas* atlas = it->first;
|
|
||||||
AtlasSlots& slots = m_atlases[atlas];
|
|
||||||
|
|
||||||
slots.clearSlot.Connect(atlas->OnAtlasCleared, this, &NzTextSprite::OnAtlasInvalidated);
|
|
||||||
slots.layerChangeSlot.Connect(atlas->OnAtlasLayerChange, this, &NzTextSprite::OnAtlasLayerChange);
|
|
||||||
slots.releaseSlot.Connect(atlas->OnAtlasRelease, this, &NzTextSprite::OnAtlasInvalidated);
|
|
||||||
}
|
|
||||||
|
|
||||||
InvalidateBoundingVolume();
|
|
||||||
InvalidateVertices();
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzTextSprite::MakeBoundingVolume() const
|
void NzTextSprite::MakeBoundingVolume() const
|
||||||
{
|
{
|
||||||
NzRectf bounds(m_localBounds);
|
NzRectf bounds(m_localBounds);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue