Added copy/move constructor/operator to Material
Former-commit-id: a96676391754ee027bdd6c7b04118db3ea044eb3
This commit is contained in:
parent
91b85589d9
commit
e5650698d2
|
|
@ -32,6 +32,8 @@ class NAZARA_API NzMaterial : public NzResource
|
|||
|
||||
public:
|
||||
NzMaterial();
|
||||
NzMaterial(const NzMaterial& material);
|
||||
NzMaterial(NzMaterial&& material);
|
||||
~NzMaterial();
|
||||
|
||||
void Apply() const;
|
||||
|
|
@ -81,6 +83,9 @@ class NAZARA_API NzMaterial : public NzResource
|
|||
void SetSrcBlend(nzBlendFunc func);
|
||||
void SetZTestCompare(nzRendererComparison compareFunc);
|
||||
|
||||
NzMaterial& operator=(const NzMaterial& material);
|
||||
NzMaterial& operator=(NzMaterial&& material);
|
||||
|
||||
static const NzMaterial* GetDefault();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <Nazara/Renderer/Material.hpp>
|
||||
#include <Nazara/Renderer/Renderer.hpp>
|
||||
#include <Nazara/Renderer/Shader.hpp>
|
||||
#include <cstring>
|
||||
#include <Nazara/Renderer/Debug.hpp>
|
||||
|
||||
bool NzMaterialParams::IsValid() const
|
||||
|
|
@ -19,6 +20,32 @@ m_specularMap(nullptr)
|
|||
Reset();
|
||||
}
|
||||
|
||||
NzMaterial::NzMaterial(const NzMaterial& material)
|
||||
{
|
||||
std::memcpy(this, &material, sizeof(NzMaterial)); // Autorisé dans notre cas, et plus rapide
|
||||
|
||||
if (m_diffuseMap)
|
||||
m_diffuseMap->AddResourceReference();
|
||||
|
||||
if (m_specularMap)
|
||||
m_specularMap->AddResourceReference();
|
||||
}
|
||||
|
||||
NzMaterial::NzMaterial(NzMaterial&& material)
|
||||
{
|
||||
if (m_diffuseMap)
|
||||
m_diffuseMap->RemoveResourceReference();
|
||||
|
||||
if (m_specularMap)
|
||||
m_specularMap->RemoveResourceReference();
|
||||
|
||||
std::memcpy(this, &material, sizeof(NzMaterial)); // Autorisé dans notre cas, et plus rapide
|
||||
|
||||
// Comme ça nous volons la référence du matériau
|
||||
material.m_diffuseMap = nullptr;
|
||||
material.m_specularMap = nullptr;
|
||||
}
|
||||
|
||||
NzMaterial::~NzMaterial()
|
||||
{
|
||||
if (m_diffuseMap)
|
||||
|
|
@ -325,6 +352,42 @@ void NzMaterial::SetZTestCompare(nzRendererComparison compareFunc)
|
|||
m_zTestEnabled = compareFunc;
|
||||
}
|
||||
|
||||
NzMaterial& NzMaterial::operator=(const NzMaterial& material)
|
||||
{
|
||||
if (m_diffuseMap)
|
||||
m_diffuseMap->RemoveResourceReference();
|
||||
|
||||
if (m_specularMap)
|
||||
m_specularMap->RemoveResourceReference();
|
||||
|
||||
std::memcpy(this, &material, sizeof(NzMaterial)); // Autorisé dans notre cas, et plus rapide
|
||||
|
||||
if (m_diffuseMap)
|
||||
m_diffuseMap->AddResourceReference();
|
||||
|
||||
if (m_specularMap)
|
||||
m_specularMap->AddResourceReference();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
NzMaterial& NzMaterial::operator=(NzMaterial&& material)
|
||||
{
|
||||
if (m_diffuseMap)
|
||||
m_diffuseMap->RemoveResourceReference();
|
||||
|
||||
if (m_specularMap)
|
||||
m_specularMap->RemoveResourceReference();
|
||||
|
||||
std::memcpy(this, &material, sizeof(NzMaterial)); // Autorisé dans notre cas, et plus rapide
|
||||
|
||||
// Comme ça nous volons la référence du matériau
|
||||
material.m_diffuseMap = nullptr;
|
||||
material.m_specularMap = nullptr;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
const NzMaterial* NzMaterial::GetDefault()
|
||||
{
|
||||
static NzMaterial defaultMaterial;
|
||||
|
|
|
|||
Loading…
Reference in New Issue