Added RenderTarget listeners
Moved Camera matrices assignation to RenderTechnique Former-commit-id: c8a4ff4b35d40702f047fdfd3fdbc4e4fbbbb1a9
This commit is contained in:
@@ -6,13 +6,37 @@
|
||||
#include <Nazara/Renderer/Renderer.hpp>
|
||||
#include <Nazara/Renderer/Debug.hpp>
|
||||
|
||||
NzRenderTarget::~NzRenderTarget() = default;
|
||||
NzRenderTarget::NzRenderTarget() :
|
||||
m_listenersLocked(false)
|
||||
{
|
||||
}
|
||||
|
||||
NzRenderTarget::~NzRenderTarget()
|
||||
{
|
||||
m_listenersLocked = true;
|
||||
for (auto& pair : m_listeners)
|
||||
pair.first->OnRenderTargetReleased(this, pair.second);
|
||||
}
|
||||
|
||||
void NzRenderTarget::AddListener(Listener* listener, void* userdata) const
|
||||
{
|
||||
NazaraError("What the");
|
||||
if (!m_listenersLocked)
|
||||
m_listeners.insert(std::make_pair(listener, userdata));
|
||||
NazaraError("What the");
|
||||
}
|
||||
|
||||
bool NzRenderTarget::IsActive() const
|
||||
{
|
||||
return NzRenderer::GetTarget() == this;
|
||||
}
|
||||
|
||||
void NzRenderTarget::RemoveListener(Listener* listener) const
|
||||
{
|
||||
if (!m_listenersLocked)
|
||||
m_listeners.erase(listener);
|
||||
}
|
||||
|
||||
bool NzRenderTarget::SetActive(bool active)
|
||||
{
|
||||
if (active)
|
||||
@@ -27,3 +51,59 @@ void NzRenderTarget::Desactivate() const
|
||||
{
|
||||
// Seuls les target sans contextes (ex: NzRenderTexture) nécessitent une désactivation
|
||||
}
|
||||
|
||||
void NzRenderTarget::NotifyParametersChange()
|
||||
{
|
||||
m_listenersLocked = true;
|
||||
|
||||
auto it = m_listeners.begin();
|
||||
while (it != m_listeners.end())
|
||||
{
|
||||
if (!it->first->OnRenderTargetParametersChange(this, it->second))
|
||||
m_listeners.erase(it++);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
|
||||
m_listenersLocked = false;
|
||||
}
|
||||
|
||||
void NzRenderTarget::NotifySizeChange()
|
||||
{
|
||||
m_listenersLocked = true;
|
||||
|
||||
auto it = m_listeners.begin();
|
||||
while (it != m_listeners.end())
|
||||
{
|
||||
if (!it->first->OnRenderTargetSizeChange(this, it->second))
|
||||
m_listeners.erase(it++);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
|
||||
m_listenersLocked = false;
|
||||
}
|
||||
|
||||
NzRenderTarget::Listener::~Listener() = default;
|
||||
|
||||
bool NzRenderTarget::Listener::OnRenderTargetParametersChange(const NzRenderTarget* renderTarget, void* userdata)
|
||||
{
|
||||
NazaraUnused(renderTarget);
|
||||
NazaraUnused(userdata);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void NzRenderTarget::Listener::OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata)
|
||||
{
|
||||
NazaraUnused(renderTarget);
|
||||
NazaraUnused(userdata);
|
||||
}
|
||||
|
||||
bool NzRenderTarget::Listener::OnRenderTargetSizeChange(const NzRenderTarget* renderTarget, void* userdata)
|
||||
{
|
||||
NazaraUnused(renderTarget);
|
||||
NazaraUnused(userdata);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -317,6 +317,9 @@ bool NzRenderTexture::Create(unsigned int width, unsigned int height, bool lock)
|
||||
return false;
|
||||
}
|
||||
|
||||
NotifyParametersChange();
|
||||
NotifySizeChange();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -435,6 +438,7 @@ NzRenderTargetParameters NzRenderTexture::GetParameters() const
|
||||
}
|
||||
#endif
|
||||
|
||||
///TODO
|
||||
return NzRenderTargetParameters();
|
||||
}
|
||||
|
||||
|
||||
@@ -294,6 +294,9 @@ bool NzRenderWindow::OnWindowCreated()
|
||||
if (!SetActive(true)) // Les fenêtres s'activent à la création
|
||||
NazaraWarning("Failed to activate window");
|
||||
|
||||
NotifyParametersChange();
|
||||
NotifySizeChange();
|
||||
|
||||
m_clock.Restart();
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user