// END OF TERRAIN BLENDING IN THE GAME Universe // ****************************************** /* * make the terrain look more natural * e.g. by applying blending of the textures where needed */ public void MakeTerrainLookReal() { // go through the quads for (int z = 0; z < Universe.chunkSize; z++) { for (int x = 0; x < Universe.chunkSize; x++) { // Blend the tectures where needed TextureBlending.GradientBlend(chunkData, x, z); } } }
private WidgetMaterial(Blending blending, ShaderId shader, int numTextures, TextureBlending textureBlending, bool premulAlpha) { PremulAlpha = premulAlpha || blending == Blending.Burn || blending == Blending.Darken; var options = PremulAlpha ? ShaderOptions.PremultiplyAlpha : ShaderOptions.None; if (textureBlending == TextureBlending.CutOut) { options |= ShaderOptions.CutOutTextureBlending; } ShaderProgram = ShaderPrograms.Instance.GetShaderProgram(shader, numTextures, options); Blending = blending; PassCount = Blending == Blending.Glow || Blending == Blending.Darken ? 2 : 1; }
private static int GetInstanceKey(Blending blending, ShaderId shader, int numTextures, TextureBlending textureBlending, bool premulAlpha) { var premulAlphaFlag = premulAlpha ? 1 : 0; return((int)blending | ((int)shader << 8) | (numTextures << 16) | (premulAlphaFlag << 24) | ((int)textureBlending << 25)); }
public static WidgetMaterial GetInstance(Blending blending, ShaderId shader, int numTextures, TextureBlending textureBlending = TextureBlending.Multiply, bool premulAlpha = false) { lock (instanceCache) { var instanceKey = GetInstanceKey(blending, shader, numTextures, textureBlending, premulAlpha); WidgetMaterial instance; if (!instanceCache.TryGetValue(instanceKey, out instance)) { instance = new WidgetMaterial(blending, shader, numTextures, textureBlending, premulAlpha); instanceCache.Add(instanceKey, instance); } return(instance); } }