예제 #1
0
    public void Paint(Texture2D newCanvas, P3D_Matrix newMatrix)
    {
        canvas  = newCanvas;
        canvasW = newCanvas.width;
        canvasH = newCanvas.height;
        matrix  = newMatrix;
        if (this.CalculateRect(ref rect))
        {
            inverse     = newMatrix.Inverse;
            opacity     = this.Opacity;
            color       = this.Color;
            direction   = this.Direction;
            shape       = this.Shape;
            detail      = this.Detail;
            detailScale = this.DetailScale;
            if (OnPrePaint != null)
            {
                OnPrePaint(canvas, rect);
            }
            switch (this.Blend)
            {
            case P3D_BlendMode.AlphaBlend:
                AlphaBlend.Paint();
                break;

            case P3D_BlendMode.AlphaBlendRgb:
                AlphaBlendRGB.Paint();
                break;

            case P3D_BlendMode.AlphaErase:
                AlphaErase.Paint();
                break;

            case P3D_BlendMode.AdditiveBlend:
                AdditiveBlend.Paint();
                break;

            case P3D_BlendMode.SubtractiveBlend:
                SubtractiveBlend.Paint();
                break;

            case P3D_BlendMode.NormalBlend:
                NormalBlend.Paint();
                break;

            case P3D_BlendMode.Replace:
                Replace.Paint();
                break;

            default:
                break;
            }
            if (OnPostPaint != null)
            {
                OnPostPaint(canvas, rect);
            }
        }
    }
예제 #2
0
        public BaseLayerDescriptor(ILayerProfile profile)
        {
            // defaults
            AlphaBlend = new AlphaBlend();

            ErosionDescriptor = new ErosionDescriptor();

            Profile = profile;
        }
예제 #3
0
        public async Task Compose(IWorld w)
        {
            var param  = w.Parameters;
            var fields = w.Fields;

            var pars = await generateFields(param, fields);

            IErosionDescriptor bs;

            ILayerMasked    baseLayer;
            IBlendModeAlpha ba;

            if (w.UseBase)
            {
                var bsd = _describer.DescribeBaseLayer(param, w.BaseField);
                //baseLayer = await bsd.LayerGlobalParameters.Profile
                baseLayer = await bsd.LayerGlobalParameters.Generator.GenerateLayer();

                //_layerUtils.Normalize(baseLayer);
                //HACK baselayers mask extend it size
                var x = new Layer2DObject(w.Parameters.BitmapResolution);
                _layerUtils.IterateValues(x, (v, val) => x[v] = baseLayer[v]);
                baseLayer = x;

                ba = bsd.AlphaBlend;
                bs = bsd;
            }
            else
            {
                baseLayer      = new Layer2DObject(w.Parameters.BitmapResolution);
                baseLayer.Mask = new Mask(baseLayer.Resolution);
                _layerUtils.IterateValues(baseLayer.Mask, (v, val) => baseLayer[v] = 1);

                setUpDefaulValue(baseLayer);
                bs = new ErosionDescriptor();
                ba = new AlphaBlend();
            }

            bs.HydraulicErosionParams.Strenght = param.ErosionStrength * strengthMultpilier;

            ILayerMasked merged = merge(ba, baseLayer, pars);

            //_layerUtils.FitInto(merged, 0, 1);
            postProcessWholeLayer(merged, bs, w.Parameters.RiverAmount);
            ComposedLayer = merged;
        }
 internal ShaderPassImplementationBlockBase(BinaryReader binaryReader)
 {
     this.flags        = (Flags)binaryReader.ReadInt16();
     this.invalidName_ = binaryReader.ReadBytes(2);
     this.textures     = ReadShaderPassTextureBlockArray(binaryReader);
     this.vertexShader = binaryReader.ReadTagReference();
     this.vsConstants  = ReadShaderPassVertexShaderConstantBlockArray(binaryReader);
     this.pixelShaderCodeNOLONGERUSED = ReadData(binaryReader);
     this.channels        = (Channels)binaryReader.ReadInt16();
     this.alphaBlend      = (AlphaBlend)binaryReader.ReadInt16();
     this.depth           = (Depth)binaryReader.ReadInt16();
     this.invalidName_0   = binaryReader.ReadBytes(2);
     this.channelState    = ReadShaderStateChannelsStateBlockArray(binaryReader);
     this.alphaBlendState = ReadShaderStateAlphaBlendStateBlockArray(binaryReader);
     this.alphaTestState  = ReadShaderStateAlphaTestStateBlockArray(binaryReader);
     this.depthState      = ReadShaderStateDepthStateBlockArray(binaryReader);
     this.cullState       = ReadShaderStateCullStateBlockArray(binaryReader);
     this.fillState       = ReadShaderStateFillStateBlockArray(binaryReader);
     this.miscState       = ReadShaderStateMiscStateBlockArray(binaryReader);
     this.constants       = ReadShaderStateConstantBlockArray(binaryReader);
     this.pixelShader     = binaryReader.ReadTagReference();
 }
예제 #5
0
 /// <summary>
 /// C#のコードを返す
 /// </summary>
 /// <returns>この追加描画を実装するC#のコード</returns>
 public override string ToCSharp() => $"DrawTriangleAdditionally({CSharpCodeProvider.FromVector2DF(Position1)}, {CSharpCodeProvider.FromVector2DF(Position2)}, {CSharpCodeProvider.FromVector2DF(Position3)}, {CSharpCodeProvider.FromColor(Color)}, {CSharpCodeProvider.FromVector2DF(UV1)}, {CSharpCodeProvider.FromVector2DF(UV2)}, {CSharpCodeProvider.FromVector2DF(UV3)}, {CSharpCodeProvider.FromTexture(Texture)}, AlphaBlendMode.{AlphaBlend.ToString()}, {DrawingPriority}); // {Name}";
예제 #6
0
 /// <summary>
 /// C#のコードを返す
 /// </summary>
 /// <returns>この追加描画を実装するC#のコード</returns>
 public override string ToCSharp() => $"DrawTextAdditionally({CSharpCodeProvider.FromVector2DF(Position)}, {CSharpCodeProvider.FromColor(Color)}, {CSharpCodeProvider.FromFont(FontInfo)}, {Text}, WritingDirection.{WritingDirection.ToString()}, AlphaBlendMode.{AlphaBlend.ToString()}, {DrawingPriority}); // {Name}";
예제 #7
0
 /// <summary>
 /// C#のコードを返す
 /// </summary>
 /// <returns>この追加描画を実装するC#のコード</returns>
 public override string ToCSharp() => $"DrawSpriteAdditionally({CSharpCodeProvider.FromVector2DF(UpperLeftPos)}, {CSharpCodeProvider.FromVector2DF(UpperRightPos)}, {CSharpCodeProvider.FromVector2DF(LowerRightPos)}, {CSharpCodeProvider.FromVector2DF(LowerLeftPos)}, {CSharpCodeProvider.FromColor(UpperLeftColor)}, {CSharpCodeProvider.FromColor(UpperRightColor)}, {CSharpCodeProvider.FromColor(LowerRightColor)}, {CSharpCodeProvider.FromColor(LowerLeftColor)}, {CSharpCodeProvider.FromVector2DF(UpperLeftUV)}, {CSharpCodeProvider.FromVector2DF(UpperRightUV)}, {CSharpCodeProvider.FromVector2DF(LowerRightUV)}, {CSharpCodeProvider.FromVector2DF(LowerLeftUV)}, {CSharpCodeProvider.FromTexture(Texture)}, AlphaBlendMode.{AlphaBlend.ToString()}, {DrawingPriority}); // {Name}";
예제 #8
0
 /// <summary>
 /// C#のコードを返す
 /// </summary>
 /// <returns>この追加描画を実装するC#のコード</returns>
 public override string ToCSharp() => $"DrawRotatedRectangleAdditionally({CSharpCodeProvider.FromRectF(DrawingArea)}, {CSharpCodeProvider.FromColor(Color)}, {CSharpCodeProvider.FromVector2DF(RotationCenter)}, {Angle}, {CSharpCodeProvider.FromRectF(UV)}, {CSharpCodeProvider.FromTexture(Texture)}, AlphaBlendMode.{AlphaBlend.ToString()}, {DrawingPriority}); // {Name}";
예제 #9
0
 /// <summary>
 /// C#のコードを返す
 /// </summary>
 /// <returns>この追加描画を実装するC#のコード</returns>
 public override string ToCSharp() => $"DrawLineAdditionally({CSharpCodeProvider.FromVector2DF(Point1)}, {CSharpCodeProvider.FromVector2DF(Point2)}, {Thickness}, {CSharpCodeProvider.FromColor(Color)}, AlphaBlendMode.{AlphaBlend.ToString()}, {DrawingPriority}); // {Name}";
예제 #10
0
 /// <summary>
 /// C#のコードを返す
 /// </summary>
 /// <returns>この追加描画を実装するC#のコード</returns>
 public override string ToCSharp() => $"DrawCircleAdditionally({CSharpCodeProvider.FromVector2DF(Center)}, {OuterDiameter}, {InnerDiameter}, {CSharpCodeProvider.FromColor(Color)}, {VertNum}, {Angle}, {CSharpCodeProvider.FromTexture(Texture)}, AlphaBlendMode.{AlphaBlend.ToString()}, {DrawingPriority}); // {Name}";