// Create from xml public MaterialGroupLayer(XElement data) : base(data) { _blendType = (LayerBlendType)Loader.loadEnum(typeof(LayerBlendType), data.Attribute("blend_type"), (int)LayerBlendType.Opaque); _multiplier = Loader.loadFloat(data.Attribute("multiplier"), 1f); _baseColor = Loader.loadColor(data.Attribute("base_color"), Color.White); loadLayers(data); }
// Create from xml public MaterialGroupLayer(XElement data) : base(data) { _blendType = (LayerBlendType)Loader.loadEnum(typeof(LayerBlendType), data.Attribute("blend_type"), (int)LayerBlendType.Opaque); _multiplier = Loader.loadFloat(data.Attribute("multiplier"), 1f); _baseColor = Loader.loadColor(data.Attribute("base_color"), Color.White); loadLayers(data); }
// Create new public MaterialGroupLayer(string type, bool enabled) : base(type, enabled) { _blendType = LayerBlendType.Opaque; _multiplier = 1f; _baseColor = Color.White; _layers = new List<MaterialLayer>(); }
// Create from xml public MaterialTextureLayer(XElement data) : base(data) { _textureUID = data.Attribute("texture_uid").Value; _scale = Loader.loadFloat(data.Attribute("scale"), 1f); _multiplier = Loader.loadFloat(data.Attribute("multiplier"), 1f); _baseColor = Loader.loadColor(data.Attribute("base_color"), Color.White); _blendType = (LayerBlendType)Loader.loadEnum(typeof(LayerBlendType), data.Attribute("blend_type"), (int)LayerBlendType.Opaque); }
// Create new public MaterialGroupLayer(string type, bool enabled) : base(type, enabled) { _blendType = LayerBlendType.Opaque; _multiplier = 1f; _baseColor = Color.White; _layers = new List <MaterialLayer>(); }
// Texture pass public Texture2D texturePass(Texture2D current, Texture2D texture, LayerBlendType blendType, float scale, float multiplier, Color baseColor) { // Initialize render targets and textures RenderTarget2D renderTarget = new RenderTarget2D(_graphicsDevice, current.Width, current.Height); Texture2D result = new Texture2D(_graphicsDevice, renderTarget.Width, renderTarget.Height); Color[] data = new Color[renderTarget.Width * renderTarget.Height]; for (int i = 0; i < (renderTarget.Width * renderTarget.Height); i++) { data[i] = Color.Transparent; } result.SetData <Color>(data); // Handle missing texture if (texture == null) { texture = new Texture2D(_graphicsDevice, renderTarget.Width, renderTarget.Height); texture.SetData <Color>(data); } // Initialize shader switch (blendType) { case LayerBlendType.Opaque: _textureEffect.CurrentTechnique = _textureEffect.Techniques["opaque"]; break; case LayerBlendType.Additive: _textureEffect.CurrentTechnique = _textureEffect.Techniques["additive"]; break; case LayerBlendType.Overlay: _textureEffect.CurrentTechnique = _textureEffect.Techniques["overlay"]; break; } _textureEffect.Parameters["canvasSize"].SetValue(new Vector2(current.Width, current.Height)); _textureEffect.Parameters["textureSize"].SetValue(new Vector2(texture.Width, texture.Height)); _textureEffect.Parameters["scale"].SetValue(scale); _textureEffect.Parameters["multiplier"].SetValue(multiplier); // Draw _graphicsDevice.SetRenderTarget(renderTarget); _graphicsDevice.Clear(Color.Transparent); _graphicsDevice.Textures[1] = texture; _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, _textureEffect); _spriteBatch.Draw(current, current.Bounds, baseColor); _spriteBatch.End(); _graphicsDevice.SetRenderTarget(null); // Save base texture renderTarget.GetData <Color>(data); result.SetData <Color>(data); // Cleanup renderTarget.Dispose(); return(result); }
// Create from xml public MaterialTextureLayer(XElement data) : base(data) { _textureUID = data.Attribute("texture_uid").Value; _scale = Loader.loadFloat(data.Attribute("scale"), 1f); _multiplier = Loader.loadFloat(data.Attribute("multiplier"), 1f); _baseColor = Loader.loadColor(data.Attribute("base_color"), Color.White); _blendType = (LayerBlendType)Loader.loadEnum(typeof(LayerBlendType), data.Attribute("blend_type"), (int)LayerBlendType.Opaque); }
// Create new public MaterialTextureLayer() : base("texture", true) { _textureUID = "default"; _scale = 1f; _multiplier = 1f; _baseColor = Color.White; _blendType = LayerBlendType.Opaque; }
// Create new public MaterialTextureLayer() : base("texture", true) { _textureUID = "default"; _scale = 1f; _multiplier = 1f; _baseColor = Color.White; _blendType = LayerBlendType.Opaque; }
public static D3D9.TextureStage ConvertEnum(LayerBlendType lbt) { switch (lbt) { case LayerBlendType.Color: return(D3D9.TextureStage.ColorOperation); case LayerBlendType.Alpha: return(D3D9.TextureStage.AlphaOperation); } ; return((D3D9.TextureStage) 0x7fffffff); // D3DTSS_FORCE_DWORD }
// Create from xml public MaterialPerlinLayer(XElement data) : base(data) { _position = Loader.loadVector2(data.Attribute("position"), Vector2.Zero); _scale = Loader.loadFloat(data.Attribute("scale"), 1); _frequency = Loader.loadFloat(data.Attribute("frequency"), 1); _gain = Loader.loadFloat(data.Attribute("gain"), 0.5f); _lacunarity = Loader.loadFloat(data.Attribute("lacunarity"), 1.8f); _multiplier = Loader.loadFloat(data.Attribute("multiplier"), multiplier); _fbmOffset = Loader.loadVector2(data.Attribute("fbm_offset"), Vector2.Zero); _colorLow = Loader.loadColor(data.Attribute("color_low"), Color.Black); _colorHigh = Loader.loadColor(data.Attribute("color_high"), Color.White); _iterations = Loader.loadInt(data.Attribute("iterations"), 0); _blendType = (LayerBlendType)Loader.loadEnum(typeof(LayerBlendType), data.Attribute("blend_type"), (int)LayerBlendType.Opaque); _invert = Loader.loadBool(data.Attribute("invert"), false); _seed = Loader.loadInt(data.Attribute("seed"), 12345); }
// Create new public MaterialPerlinLayer() : base("perlin", true) { _position = Vector2.Zero; _scale = 1f; _frequency = 1.2f; _gain = 0.5f; _lacunarity = 2f; _multiplier = 1f; _fbmOffset = Vector2.Zero; _colorLow = Color.Black; _colorHigh = Color.White; _iterations = 1; _blendType = LayerBlendType.Opaque; _invert = false; _seed = 12345; }
// Create from xml public MaterialPerlinLayer(XElement data) : base(data) { _position = Loader.loadVector2(data.Attribute("position"), Vector2.Zero); _scale = Loader.loadFloat(data.Attribute("scale"), 1); _frequency = Loader.loadFloat(data.Attribute("frequency"), 1); _gain = Loader.loadFloat(data.Attribute("gain"), 0.5f); _lacunarity = Loader.loadFloat(data.Attribute("lacunarity"), 1.8f); _multiplier = Loader.loadFloat(data.Attribute("multiplier"), multiplier); _fbmOffset = Loader.loadVector2(data.Attribute("fbm_offset"), Vector2.Zero); _colorLow = Loader.loadColor(data.Attribute("color_low"), Color.Black); _colorHigh = Loader.loadColor(data.Attribute("color_high"), Color.White); _iterations = Loader.loadInt(data.Attribute("iterations"), 0); _blendType = (LayerBlendType)Loader.loadEnum(typeof(LayerBlendType), data.Attribute("blend_type"), (int)LayerBlendType.Opaque); _invert = Loader.loadBool(data.Attribute("invert"), false); _seed = Loader.loadInt(data.Attribute("seed"), 12345); }
// Create new public MaterialPerlinLayer() : base("perlin", true) { _position = Vector2.Zero; _scale = 1f; _frequency = 1.2f; _gain = 0.5f; _lacunarity = 2f; _multiplier = 1f; _fbmOffset = Vector2.Zero; _colorLow = Color.Black; _colorHigh = Color.White; _iterations = 1; _blendType = LayerBlendType.Opaque; _invert = false; _seed = 12345; }
public static void CombineSurfaces(ApplicationContext context, RenderContext renderContext, Surface bottomSurface, Surface topSurface, LayerBlendType blendType) { Assert.ArgumentNotNull(context, nameof(context)); Assert.ArgumentNotNull(renderContext, nameof(renderContext)); Assert.ArgumentNotNull(bottomSurface, nameof(bottomSurface)); Assert.ArgumentNotNull(topSurface, nameof(topSurface)); var channels = new List <Channel> (); channels.AddRange(bottomSurface.Context.Channels.List); Assert.ArgumentTrue(channels.Except(topSurface.Context.Channels.List.ToList()).Count() == 0, "Surfaces channels are not equals"); if (channels.Contains(Channel.Mask)) { var mask = topSurface.Textures[Channel.Mask]; RenderTexture bottomHeight = null; RenderTexture topHeight = null; channels.Remove(Channel.Mask); if (blendType == LayerBlendType.HeightBlend) { channels.Remove(Channel.Height); channels.Add(Channel.Height); bottomHeight = bottomSurface.Textures[Channel.Height]; topHeight = topSurface.Textures[Channel.Height]; } foreach (var channel in channels) { var bottomTexture = bottomSurface.Textures[channel]; var topTexture = topSurface.Textures[channel]; if (blendType == LayerBlendType.AlphaBlend) { AlphaBlend(context, renderContext, bottomTexture, topTexture, mask); } else { HeightBlend(bottomTexture, topTexture, bottomHeight, topHeight, mask); } } } else { foreach (var channel in channels) { var bottomTexture = bottomSurface.Textures[channel]; var topTexture = topSurface.Textures[channel]; NoBlend(bottomTexture, topTexture); } } }
public static D3D9.TextureStage ConvertEnum( LayerBlendType lbt ) { switch ( lbt ) { case LayerBlendType.Color: return D3D9.TextureStage.ColorOperation; case LayerBlendType.Alpha: return D3D9.TextureStage.AlphaOperation; } ; return (D3D9.TextureStage)0x7fffffff; // D3DTSS_FORCE_DWORD }
// Texture pass public Texture2D texturePass(Texture2D current, Texture2D texture, LayerBlendType blendType, float scale, float multiplier, Color baseColor) { // Initialize render targets and textures RenderTarget2D renderTarget = new RenderTarget2D(_graphicsDevice, current.Width, current.Height); Texture2D result = new Texture2D(_graphicsDevice, renderTarget.Width, renderTarget.Height); Color[] data = new Color[renderTarget.Width * renderTarget.Height]; for (int i = 0; i < (renderTarget.Width * renderTarget.Height); i++) data[i] = Color.Transparent; result.SetData<Color>(data); // Handle missing texture if (texture == null) { texture = new Texture2D(_graphicsDevice, renderTarget.Width, renderTarget.Height); texture.SetData<Color>(data); } // Initialize shader switch (blendType) { case LayerBlendType.Opaque: _textureEffect.CurrentTechnique = _textureEffect.Techniques["opaque"]; break; case LayerBlendType.Additive: _textureEffect.CurrentTechnique = _textureEffect.Techniques["additive"]; break; case LayerBlendType.Overlay: _textureEffect.CurrentTechnique = _textureEffect.Techniques["overlay"]; break; } _textureEffect.Parameters["canvasSize"].SetValue(new Vector2(current.Width, current.Height)); _textureEffect.Parameters["textureSize"].SetValue(new Vector2(texture.Width, texture.Height)); _textureEffect.Parameters["scale"].SetValue(scale); _textureEffect.Parameters["multiplier"].SetValue(multiplier); // Draw _graphicsDevice.SetRenderTarget(renderTarget); _graphicsDevice.Clear(Color.Transparent); _graphicsDevice.Textures[1] = texture; _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, _textureEffect); _spriteBatch.Draw(current, current.Bounds, baseColor); _spriteBatch.End(); _graphicsDevice.SetRenderTarget(null); // Save base texture renderTarget.GetData<Color>(data); result.SetData<Color>(data); // Cleanup renderTarget.Dispose(); return result; }