Changed default material

Former-commit-id: 60fe21986d8cdd22e89ea4ccfbb9c5b33ba8eed6
This commit is contained in:
Lynix 2013-06-26 19:59:34 +02:00
parent 57e12a2625
commit abe56631dd
3 changed files with 30 additions and 13 deletions

View File

@ -40,6 +40,7 @@ using NzMaterialRef = NzResourceRef<NzMaterial>;
class NAZARA_API NzMaterial : public NzResource class NAZARA_API NzMaterial : public NzResource
{ {
friend NzMaterialLoader; friend NzMaterialLoader;
friend class NzRenderer;
public: public:
NzMaterial(); NzMaterial();
@ -120,6 +121,9 @@ class NAZARA_API NzMaterial : public NzResource
private: private:
void Copy(const NzMaterial& material); void Copy(const NzMaterial& material);
static bool Initialize();
static void Uninitialize();
nzUInt32 m_shaderFlags; nzUInt32 m_shaderFlags;
NzColor m_ambientColor; NzColor m_ambientColor;
NzColor m_diffuseColor; NzColor m_diffuseColor;
@ -137,6 +141,7 @@ class NAZARA_API NzMaterial : public NzResource
bool m_lightingEnabled; bool m_lightingEnabled;
float m_shininess; float m_shininess;
static NzMaterial* s_defaultMaterial;
static NzMaterialLoader::LoaderList s_loaders; static NzMaterialLoader::LoaderList s_loaders;
}; };

View File

@ -575,19 +575,7 @@ NzMaterial& NzMaterial::operator=(NzMaterial&& material)
NzMaterial* NzMaterial::GetDefault() NzMaterial* NzMaterial::GetDefault()
{ {
static NzMaterial defaultMaterial; return s_defaultMaterial;
static bool initialized = false;
if (!initialized)
{
defaultMaterial.EnableLighting(false);
defaultMaterial.SetDiffuseColor(NzColor::White);
defaultMaterial.SetFaceFilling(nzFaceFilling_Line);
initialized = true;
}
return &defaultMaterial;
} }
void NzMaterial::Copy(const NzMaterial& material) void NzMaterial::Copy(const NzMaterial& material)
@ -619,4 +607,18 @@ void NzMaterial::Copy(const NzMaterial& material)
m_specularMap = material.m_specularMap; m_specularMap = material.m_specularMap;
} }
bool NzMaterial::Initialize()
{
s_defaultMaterial = new NzMaterial;
return true;
}
void NzMaterial::Uninitialize()
{
delete s_defaultMaterial;
s_defaultMaterial = nullptr;
}
NzMaterial* NzMaterial::s_defaultMaterial = nullptr;
NzMaterialLoader::LoaderList NzMaterial::s_loaders; NzMaterialLoader::LoaderList NzMaterial::s_loaders;

View File

@ -755,6 +755,14 @@ bool NzRenderer::Initialize()
s_quadBuffer = new NzVertexBuffer(declaration.get(), 4, nzBufferStorage_Hardware, nzBufferUsage_Dynamic); s_quadBuffer = new NzVertexBuffer(declaration.get(), 4, nzBufferStorage_Hardware, nzBufferUsage_Dynamic);
declaration.release(); declaration.release();
if (!NzMaterial::Initialize())
{
NazaraError("Failed to initialize materials");
Uninitialize();
return false;
}
if (!NzShaderBuilder::Initialize()) if (!NzShaderBuilder::Initialize())
{ {
NazaraError("Failed to initialize shader builder"); NazaraError("Failed to initialize shader builder");
@ -1293,6 +1301,7 @@ void NzRenderer::Uninitialize()
NzLoaders_Texture_Unregister(); NzLoaders_Texture_Unregister();
NzDebugDrawer::Uninitialize(); NzDebugDrawer::Uninitialize();
NzMaterial::Uninitialize();
NzShaderBuilder::Uninitialize(); NzShaderBuilder::Uninitialize();
NzTextureSampler::Uninitialize(); NzTextureSampler::Uninitialize();
@ -1387,6 +1396,7 @@ bool NzRenderer::EnsureStateUpdate()
{ {
TextureUnit& unit = s_textureUnits[i]; TextureUnit& unit = s_textureUnits[i];
///FIXME: Cet appel ne fait-il pas redondance avec le rebinding des textures avant le return ?
if (!unit.textureUpdated) if (!unit.textureUpdated)
{ {
NzOpenGL::SetTextureUnit(i); NzOpenGL::SetTextureUnit(i);