NzTextureBackground::NzTextureBackground() { m_uberShader = NzUberShaderLibrary::Get("Basic"); NzParameterList list; list.SetParameter("DIFFUSE_MAPPING", true); list.SetParameter("TEXTURE_MAPPING", true); list.SetParameter("UNIFORM_VERTEX_DEPTH", true); m_uberShaderInstance = m_uberShader->Get(list); const NzShader* shader = m_uberShaderInstance->GetShader(); m_materialDiffuseUniform = shader->GetUniformLocation("MaterialDiffuse"); m_materialDiffuseMapUniform = shader->GetUniformLocation("MaterialDiffuseMap"); m_vertexDepthUniform = shader->GetUniformLocation("VertexDepth"); }
NzColorBackground::NzColorBackground(const NzColor& color) : m_color(color) { m_uberShader = NzUberShaderLibrary::Get("Basic"); NzParameterList list; list.SetParameter("UNIFORM_VERTEX_DEPTH", true); m_uberShaderInstance = m_uberShader->Get(list); const NzShader* shader = m_uberShaderInstance->GetShader(); m_materialDiffuseUniform = shader->GetUniformLocation("MaterialDiffuse"); m_vertexDepthUniform = shader->GetUniformLocation("VertexDepth"); }
void NzMaterial::GenerateShader(nzUInt32 flags) const { NzParameterList list; list.SetParameter("ALPHA_MAPPING", m_alphaMap.IsValid()); list.SetParameter("ALPHA_TEST", m_alphaTestEnabled); list.SetParameter("COMPUTE_TBNMATRIX", m_normalMap.IsValid() || m_heightMap.IsValid()); list.SetParameter("DIFFUSE_MAPPING", m_diffuseMap.IsValid()); list.SetParameter("EMISSIVE_MAPPING", m_emissiveMap.IsValid()); list.SetParameter("LIGHTING", m_lightingEnabled); list.SetParameter("NORMAL_MAPPING", m_normalMap.IsValid()); list.SetParameter("PARALLAX_MAPPING", m_heightMap.IsValid()); list.SetParameter("SPECULAR_MAPPING", m_specularMap.IsValid()); list.SetParameter("TEXTURE_MAPPING", m_alphaMap.IsValid() || m_diffuseMap.IsValid() || m_emissiveMap.IsValid() || m_normalMap.IsValid() || m_heightMap.IsValid() || m_specularMap.IsValid()); list.SetParameter("TRANSFORM", m_transformEnabled); list.SetParameter("FLAG_DEFERRED", static_cast<bool>((flags & nzShaderFlags_Deferred) != 0)); list.SetParameter("FLAG_INSTANCING", static_cast<bool>((flags & nzShaderFlags_Instancing) != 0)); ShaderInstance& instance = m_shaders[flags]; instance.uberInstance = m_uberShader->Get(list); instance.shader = instance.uberInstance->GetShader(); #define CacheUniform(name) instance.uniforms[nzMaterialUniform_##name] = instance.shader->GetUniformLocation("Material" #name) CacheUniform(AlphaMap); CacheUniform(AlphaThreshold); CacheUniform(Ambient); CacheUniform(Diffuse); CacheUniform(DiffuseMap); CacheUniform(EmissiveMap); CacheUniform(HeightMap); CacheUniform(NormalMap); CacheUniform(Shininess); CacheUniform(Specular); CacheUniform(SpecularMap); #undef CacheUniform }