Пример #1
0
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");
}
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");
}
Пример #3
0
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
}