diff --git a/include/Nazara/Renderer/Material.hpp b/include/Nazara/Renderer/Material.hpp index 46775567a..526379c37 100644 --- a/include/Nazara/Renderer/Material.hpp +++ b/include/Nazara/Renderer/Material.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -86,17 +87,22 @@ class NAZARA_API NzMaterial : public NzResource void SetAmbientColor(const NzColor& ambient); void SetDiffuseColor(const NzColor& diffuse); + bool SetDiffuseMap(const NzString& texturePath); void SetDiffuseMap(NzTexture* map); void SetDiffuseSampler(const NzTextureSampler& sampler); void SetDstBlend(nzBlendFunc func); + bool SetEmissiveMap(const NzString& texturePath); void SetEmissiveMap(NzTexture* map); void SetFaceCulling(nzFaceCulling culling); void SetFaceFilling(nzFaceFilling filling); + bool SetHeightMap(const NzString& texturePath); void SetHeightMap(NzTexture* map); + bool SetNormalMap(const NzString& texturePath); void SetNormalMap(NzTexture* map); void SetCustomShader(const NzShader* shader); void SetShininess(float shininess); void SetSpecularColor(const NzColor& specular); + bool SetSpecularMap(const NzString& texturePath); void SetSpecularMap(NzTexture* map); void SetSpecularSampler(const NzTextureSampler& sampler); void SetSrcBlend(nzBlendFunc func); diff --git a/src/Nazara/Renderer/Material.cpp b/src/Nazara/Renderer/Material.cpp index c9bd092f9..fa2487fb8 100644 --- a/src/Nazara/Renderer/Material.cpp +++ b/src/Nazara/Renderer/Material.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include bool NzMaterialParams::IsValid() const @@ -367,6 +368,23 @@ void NzMaterial::SetDiffuseColor(const NzColor& diffuse) m_diffuseColor = diffuse; } +bool NzMaterial::SetDiffuseMap(const NzString& texturePath) +{ + std::unique_ptr texture(new NzTexture); + if (!texture->LoadFromFile(texturePath)) + { + NazaraError("Failed to load texture from \"" + texturePath + '"'); + return false; + } + + texture->SetPersistent(false); + + SetDiffuseMap(texture.get()); + texture.release(); + + return true; +} + void NzMaterial::SetDiffuseMap(NzTexture* map) { m_diffuseMap = map; @@ -386,6 +404,23 @@ void NzMaterial::SetDstBlend(nzBlendFunc func) m_dstBlend = func; } +bool NzMaterial::SetEmissiveMap(const NzString& texturePath) +{ + std::unique_ptr texture(new NzTexture); + if (!texture->LoadFromFile(texturePath)) + { + NazaraError("Failed to load texture from \"" + texturePath + '"'); + return false; + } + + texture->SetPersistent(false); + + SetEmissiveMap(texture.get()); + texture.release(); + + return true; +} + void NzMaterial::SetEmissiveMap(NzTexture* map) { m_emissiveMap = map; @@ -405,11 +440,45 @@ void NzMaterial::SetFaceFilling(nzFaceFilling filling) m_faceFilling = filling; } +bool NzMaterial::SetHeightMap(const NzString& texturePath) +{ + std::unique_ptr texture(new NzTexture); + if (!texture->LoadFromFile(texturePath)) + { + NazaraError("Failed to load texture from \"" + texturePath + '"'); + return false; + } + + texture->SetPersistent(false); + + SetHeightMap(texture.get()); + texture.release(); + + return true; +} + void NzMaterial::SetHeightMap(NzTexture* map) { m_heightMap = map; } +bool NzMaterial::SetNormalMap(const NzString& texturePath) +{ + std::unique_ptr texture(new NzTexture); + if (!texture->LoadFromFile(texturePath)) + { + NazaraError("Failed to load texture from \"" + texturePath + '"'); + return false; + } + + texture->SetPersistent(false); + + SetNormalMap(texture.get()); + texture.release(); + + return true; +} + void NzMaterial::SetNormalMap(NzTexture* map) { m_normalMap = map; @@ -429,6 +498,23 @@ void NzMaterial::SetSpecularColor(const NzColor& specular) m_specularColor = specular; } +bool NzMaterial::SetSpecularMap(const NzString& texturePath) +{ + std::unique_ptr texture(new NzTexture); + if (!texture->LoadFromFile(texturePath)) + { + NazaraError("Failed to load texture from \"" + texturePath + '"'); + return false; + } + + texture->SetPersistent(false); + + SetSpecularMap(texture.get()); + texture.release(); + + return true; +} + void NzMaterial::SetSpecularMap(NzTexture* map) { m_specularMap = map;