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:
|
public:
|
||||||
NzMaterial();
|
NzMaterial();
|
||||||
|
NzMaterial(const NzMaterial& material);
|
||||||
|
NzMaterial(NzMaterial&& material);
|
||||||
~NzMaterial();
|
~NzMaterial();
|
||||||
|
|
||||||
void Apply() const;
|
void Apply() const;
|
||||||
|
|
@ -81,6 +83,9 @@ class NAZARA_API NzMaterial : public NzResource
|
||||||
void SetSrcBlend(nzBlendFunc func);
|
void SetSrcBlend(nzBlendFunc func);
|
||||||
void SetZTestCompare(nzRendererComparison compareFunc);
|
void SetZTestCompare(nzRendererComparison compareFunc);
|
||||||
|
|
||||||
|
NzMaterial& operator=(const NzMaterial& material);
|
||||||
|
NzMaterial& operator=(NzMaterial&& material);
|
||||||
|
|
||||||
static const NzMaterial* GetDefault();
|
static const NzMaterial* GetDefault();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include <Nazara/Renderer/Material.hpp>
|
#include <Nazara/Renderer/Material.hpp>
|
||||||
#include <Nazara/Renderer/Renderer.hpp>
|
#include <Nazara/Renderer/Renderer.hpp>
|
||||||
#include <Nazara/Renderer/Shader.hpp>
|
#include <Nazara/Renderer/Shader.hpp>
|
||||||
|
#include <cstring>
|
||||||
#include <Nazara/Renderer/Debug.hpp>
|
#include <Nazara/Renderer/Debug.hpp>
|
||||||
|
|
||||||
bool NzMaterialParams::IsValid() const
|
bool NzMaterialParams::IsValid() const
|
||||||
|
|
@ -19,6 +20,32 @@ m_specularMap(nullptr)
|
||||||
Reset();
|
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()
|
NzMaterial::~NzMaterial()
|
||||||
{
|
{
|
||||||
if (m_diffuseMap)
|
if (m_diffuseMap)
|
||||||
|
|
@ -325,6 +352,42 @@ void NzMaterial::SetZTestCompare(nzRendererComparison compareFunc)
|
||||||
m_zTestEnabled = 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()
|
const NzMaterial* NzMaterial::GetDefault()
|
||||||
{
|
{
|
||||||
static NzMaterial defaultMaterial;
|
static NzMaterial defaultMaterial;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue