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

View File

@ -575,19 +575,7 @@ NzMaterial& NzMaterial::operator=(NzMaterial&& material)
NzMaterial* NzMaterial::GetDefault()
{
static NzMaterial defaultMaterial;
static bool initialized = false;
if (!initialized)
{
defaultMaterial.EnableLighting(false);
defaultMaterial.SetDiffuseColor(NzColor::White);
defaultMaterial.SetFaceFilling(nzFaceFilling_Line);
initialized = true;
}
return &defaultMaterial;
return s_defaultMaterial;
}
void NzMaterial::Copy(const NzMaterial& material)
@ -619,4 +607,18 @@ void NzMaterial::Copy(const NzMaterial& material)
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;

View File

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