コード例 #1
0
 // 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);
 }
コード例 #2
0
 // 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);
 }
コード例 #3
0
 // Create new
 public MaterialGroupLayer(string type, bool enabled)
     : base(type, enabled)
 {
     _blendType = LayerBlendType.Opaque;
     _multiplier = 1f;
     _baseColor = Color.White;
     _layers = new List<MaterialLayer>();
 }
コード例 #4
0
 // 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);
 }
コード例 #5
0
 // Create new
 public MaterialGroupLayer(string type, bool enabled)
     : base(type, enabled)
 {
     _blendType  = LayerBlendType.Opaque;
     _multiplier = 1f;
     _baseColor  = Color.White;
     _layers     = new List <MaterialLayer>();
 }
コード例 #6
0
        // 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);
        }
コード例 #7
0
 // 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);
 }
コード例 #8
0
 // Create new
 public MaterialTextureLayer()
     : base("texture", true)
 {
     _textureUID = "default";
     _scale      = 1f;
     _multiplier = 1f;
     _baseColor  = Color.White;
     _blendType  = LayerBlendType.Opaque;
 }
コード例 #9
0
 // Create new
 public MaterialTextureLayer()
     : base("texture", true)
 {
     _textureUID = "default";
     _scale = 1f;
     _multiplier = 1f;
     _baseColor = Color.White;
     _blendType = LayerBlendType.Opaque;
 }
コード例 #10
0
        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
        }
コード例 #11
0
 // 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);
 }
コード例 #12
0
 // 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;
 }
コード例 #13
0
 // 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);
 }
コード例 #14
0
 // 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;
 }
コード例 #15
0
        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);
                }
            }
        }
コード例 #16
0
ファイル: D3D9Helper.cs プロジェクト: ryan-bunker/axiom3d
		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
		}
コード例 #17
0
        // 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;
        }