Exemple #1
0
        protected override void InitializeInner()
        {
            _effect = DeviceContextHolder.GetEffect <EffectSpecialTrackOutline>();

            _maps = _mapFilenames.Select((x, i) => {
                var data = new MapViewData(DeviceContextHolder, x, UseAiLanes);
                if (i == 0)
                {
                    Scale *= (data.MapSize.X / data.MapSize.Y).Clamp(1f, 2f);
                }

                return(data);
            }).ToArray();

            if (LoadPreview)
            {
                if (File.Exists(_previewFilename))
                {
                    using (var preview = Texture2D.FromFile(Device, _previewFilename)) {
                        _previewSize = new Vector2(preview.Description.Width, preview.Description.Height);
                        _previewView = new ShaderResourceView(Device, preview);
                    }
                }
                else
                {
                    AcToolsLogging.Write("Not found: " + _previewFilename);
                }
            }

            _f0Buffer     = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);
            _f1Buffer     = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);
            _fBlendBuffer = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);
            _fSummBuffer  = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);
            _a0Buffer     = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);
            _a1Buffer     = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);
            _aSummBuffer  = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);

            _combineBlendState = Device.CreateBlendState(new RenderTargetBlendDescription {
                BlendEnable           = true,
                SourceBlend           = BlendOption.SourceAlpha,
                DestinationBlend      = BlendOption.InverseSourceAlpha,
                BlendOperation        = BlendOperation.Add,
                SourceBlendAlpha      = BlendOption.One,
                DestinationBlendAlpha = BlendOption.One,
                BlendOperationAlpha   = BlendOperation.Maximum,
                RenderTargetWriteMask = ColorWriteMaskFlags.All
            });
        }
Exemple #2
0
            public void Draw(DeviceContextHolder holder, EffectSpecialTrackOutline effect, Matrix mapMatrix, MapViewData max)
            {
                if (_dirty)
                {
                    Initialize(holder);
                }

                if (AiLaneMode)
                {
                    Kn5MaterialTrackOutline.Matrix = mapMatrix;

                    if (!_materialsSet)
                    {
                        _materialsSet = true;
                        if (holder.TryToGet <IMaterialsFactory>() == null)
                        {
                            holder.Set <IMaterialsFactory>(new TrackOutlineMaterialsFactory());
                        }
                    }

                    _obj.Draw(holder, max?.GetCamera(holder) ?? GetCamera(holder), SpecialRenderMode.Simple);

                    // revert quad
                    holder.PrepareQuad(effect.LayoutPT);
                }
                else
                {
                    // local transformation matrix: global×local offset (calculated from map.ini)×local scale
                    var localScale = Matrix.Transformation2D(Vector2.Zero, 0f,
                                                             new Vector2(max.DataSize.X / DataSize.X, max.DataSize.Y / DataSize.Y) / DataScale,
                                                             Vector2.Zero, 0f, Vector2.Zero);
                    var localOffset = Matrix.AffineTransformation2D(1f, Vector2.Zero, 0f, new Vector2(
                                                                        (DataOffset.X - max.DataOffset.X) / max.DataSize.X,
                                                                        (DataOffset.Y - max.DataOffset.Y) / max.DataSize.Y));
                    effect.FxMatrix.SetMatrix(mapMatrix * localOffset * localScale);
                    effect.FxInputMap.SetResource(_view);
                    effect.TechFirstStep.DrawAllPasses(holder.DeviceContext, 6);
                }
            }
Exemple #3
0
 public void Initialize(IDeviceContextHolder contextHolder)
 {
     _effect = contextHolder.GetEffect <EffectSpecialTrackOutline>();
 }