Ejemplo n.º 1
0
 public void Load(Device device)
 {
     emptyTexture = new Texture(device, 1, 1, 1, Usage.None, Format.A8R8G8B8, Pool.Managed);
     SlimDX.DataRectangle dr = emptyTexture.LockRectangle(0, LockFlags.Discard);
     dr.Data.Write <uint>(0xffffffff);
     emptyTexture.UnlockRectangle(0);
 }
Ejemplo n.º 2
0
        public static DX11Texture2D CreateImmutable(DX11RenderContext context, int width, int height, SlimDX.DXGI.Format format, int pitch, SlimDX.DataStream initialData)
        {
            Texture2DDescription desc = new Texture2DDescription()
            {
                ArraySize         = 1,
                BindFlags         = BindFlags.ShaderResource,
                CpuAccessFlags    = CpuAccessFlags.None,
                Format            = format,
                Height            = height,
                MipLevels         = 1,
                OptionFlags       = ResourceOptionFlags.None,
                SampleDescription = new SampleDescription(1, 0),
                Usage             = ResourceUsage.Immutable,
                Width             = width
            };

            SlimDX.DataRectangle dataRectangle = new SlimDX.DataRectangle(pitch, initialData);
            Texture2D            texture       = new Texture2D(context.Device, desc, dataRectangle);

            try
            {
                ShaderResourceView shaderView = new ShaderResourceView(context.Device, texture);
                return(TakeOwnership(context, texture, shaderView));
            }
            catch
            {
                texture.Dispose(); //Avoid partial leak in case of failure, that should be really rare but could happen
                throw;
            }
        }
Ejemplo n.º 3
0
        public void Load(string filename, System.Threading.CancellationToken token)
        {
            bitmap = new Bitmap(filename);

            Description = new Texture2DDescription()
            {
                ArraySize         = 1,
                BindFlags         = BindFlags.ShaderResource,
                CpuAccessFlags    = CpuAccessFlags.None,
                Format            = SlimDX.DXGI.Format.B8G8R8A8_UNorm,
                MipLevels         = 1,
                OptionFlags       = ResourceOptionFlags.None,
                Usage             = ResourceUsage.Default,
                Width             = bitmap.Width,
                Height            = bitmap.Height,
                SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0)
            };
            token.ThrowIfCancellationRequested();
            bitmapData = bitmap.LockBits(
                new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                ImageLockMode.ReadOnly,
                PixelFormat.Format32bppPArgb);

            ds = new SlimDX.DataStream(bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, true, false);
            var dr = new SlimDX.DataRectangle(bitmapData.Stride, ds);

            token.ThrowIfCancellationRequested();
            tex = new Texture2D(Device, Description, dr);
            SRV = new ShaderResourceView(Device, tex);
        }
Ejemplo n.º 4
0
 public void Load(Device device)
 {
     crashedTexture = Texture.FromStream(device, FileSystem.GetFile("error.png"), Usage.None, Pool.Default);
     emptyTexture   = new Texture(device, 1, 1, 1, Usage.None, Format.A8R8G8B8, Pool.Managed);
     SlimDX.DataRectangle dr = emptyTexture.LockRectangle(0, LockFlags.Discard);
     dr.Data.Write <uint>(0xffffffff);
     emptyTexture.UnlockRectangle(0);
 }
Ejemplo n.º 5
0
        public void Load(string filename, System.Threading.CancellationToken token)
        {
            int stride;
            var imgF = new ImagingFactory();

            using (var decoder = new SharpDX.WIC.BitmapDecoder(imgF, filename, SharpDX.IO.NativeFileAccess.Read, DecodeOptions.CacheOnLoad))
                using (var frame = decoder.GetFrame(0))
                {
                    var  format      = PixelToTextureFormat(frame.PixelFormat);
                    bool knownFormat = format != Format.Unknown;

                    var w = frame.Size.Width;
                    var h = frame.Size.Height;
                    stride = PixelFormat.GetStride(knownFormat ? frame.PixelFormat:PixelFormat.Format32bppRGBA, w);
                    //stride = PixelFormat.GetStride(PixelFormat.Format32bppBGRA, w);
                    FLength = stride * h;

                    Description = new Texture2DDescription()
                    {
                        ArraySize         = 1,
                        BindFlags         = BindFlags.ShaderResource,
                        CpuAccessFlags    = CpuAccessFlags.None,
                        Format            = knownFormat?format:Format.R8G8B8A8_UNorm,
                        MipLevels         = 1,
                        OptionFlags       = ResourceOptionFlags.None,
                        Usage             = ResourceUsage.Default,
                        Width             = w,
                        Height            = h,
                        SampleDescription = new SampleDescription(1, 0)
                    };
                    token.ThrowIfCancellationRequested();
                    ptr = mp.UnmanagedPool.GetMemory(FLength);
                    //if (frame.PixelFormat != PixelFormat.Format32bppBGRA)
                    if (!knownFormat)
                    {
                        using (var converter = new FormatConverter(imgF))
                        {
                            converter.Initialize(frame, PixelFormat.Format32bppRGBA);
                            converter.CopyPixels(stride, ptr, FLength);
                        }
                    }
                    else
                    {
                        frame.CopyPixels(stride, ptr, FLength);
                    }
                }
            token.ThrowIfCancellationRequested();
            ds = new SlimDX.DataStream(ptr, FLength, true, false);
            var dr = new SlimDX.DataRectangle(stride, ds);

            token.ThrowIfCancellationRequested();
            tex = new Texture2D(Device, Description, dr);
            token.ThrowIfCancellationRequested();
            SRV = new ShaderResourceView(Device, tex);
        }
Ejemplo n.º 6
0
        private void RenderDDSurface()
        {
            if (useDirectX && directXAvailable)
            {
                surfRect = displaySurface.LockRectangle(screenRect, LockFlags.None);

                lock (ziggyWin.zx)
                {
                    surfRect.Data.WriteRange <int>(ziggyWin.zx.ScreenBuffer, 0, (ScreenWidth) * (ScreenHeight));
                }

                displaySurface.UnlockRectangle();

                dxDevice.BeginScene();

                sprite.Begin(SpriteFlags.None);
                dxDisplay.FilterTexture(0, Filter.None);
                sprite.Draw(dxDisplay, displayRect, System.Drawing.Color.White);
                sprite.End();

                if (showScanlines)
                {
                    interlaceSprite.Begin(SpriteFlags.AlphaBlend);
                    dxDevice.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap);
                    dxDevice.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap);
                    interlaceSprite.Draw(interlaceOverlay2, displayRect, System.Drawing.Color.White);
                    interlaceSprite.End();
                }

                dxDevice.EndScene();

                SlimDX.Result deviceState = dxDevice.TestCooperativeLevel();
                if (deviceState == ResultCode.DeviceLost)
                {
                    System.Threading.Thread.Sleep(1);
                    return;
                }
                else if (deviceState == ResultCode.DeviceNotReset)
                {
                    SetSize(Width, Height);
                    return;
                }

                dxDevice.Present();
            }
            isRendering = false;
        }
Ejemplo n.º 7
0
        void ReloadGraphicResources()
        {
            resourceManager.EmptyTexture = new Texture(device, 1, 1, 1, Usage.None, Format.A8R8G8B8, Pool.Managed);
            SlimDX.DataRectangle dr = resourceManager.EmptyTexture.LockRectangle(0, LockFlags.Discard);
            dr.Data.Write <uint>(0x00000000);
            resourceManager.EmptyTexture.UnlockRectangle(0);
            emptyTexture = new Texture(device, 1, 1, 1, Usage.None, Format.A8R8G8B8, Pool.Managed);
            dr           = emptyTexture.LockRectangle(0, LockFlags.Discard);
            dr.Data.Write <uint>(0xffffffff);
            emptyTexture.UnlockRectangle(0);

            spriteRenderer = new SlimDX.Direct3D9.Sprite(device);
            lineRenderer   = new Line(device);

            loadingOverlay.Load(device);
            blendOverlay.Load(device);
            errorOverlay.Load(device);

            renderToSurface = new RenderToSurface(device, engine.GameResolution.x * renderScale, engine.GameResolution.y * renderScale, Format.X8R8G8B8);
            renderToTexture = new Texture(device, engine.GameResolution.x * renderScale, engine.GameResolution.y * renderScale, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            deviceReadyForRender = true;
        }
Ejemplo n.º 8
0
 internal void RestoreFromSystemCopy()
 {
     SlimDX.DataRectangle data = texture.LockRectangle(0, SlimDX.Direct3D9.LockFlags.Discard);
     data.Data.Write(systemCopy, 0, systemCopy.Length);
     texture.UnlockRectangle(0);
 }
Ejemplo n.º 9
0
        protected override void OnPaint(PaintEventArgs e)
        {
            if (useDirectX && directXAvailable)
            {
                surfRect = displaySurface.LockRectangle(screenRect, LockFlags.None);

                lock (ziggyWin.zx)
                {
                    surfRect.Data.WriteRange <int>(ziggyWin.zx.ScreenBuffer, 0, (ScreenWidth) * (ScreenHeight));
                }

                displaySurface.UnlockRectangle();

                dxDevice.BeginScene();

                sprite.Begin(SpriteFlags.None);

                if (!pixelSmoothing)
                {
                    dxDevice.SetSamplerState(0, SamplerState.MinFilter, 0);
                    dxDevice.SetSamplerState(0, SamplerState.MagFilter, 0);
                }

                sprite.Draw(dxDisplay, displayRect, System.Drawing.Color.White);

                sprite.End();

                if (showScanlines)
                {
                    interlaceSprite.Begin(SpriteFlags.AlphaBlend);
                    dxDevice.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap);
                    dxDevice.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap);
                    interlaceSprite.Draw(interlaceOverlay2, displayRect, System.Drawing.Color.White);
                    interlaceSprite.End();
                }

                dxDevice.EndScene();

                SlimDX.Result deviceState = dxDevice.TestCooperativeLevel();
                if (deviceState == ResultCode.DeviceLost)
                {
                    System.Threading.Thread.Sleep(1);
                    return;
                }
                else if (deviceState == ResultCode.DeviceNotReset)
                {
                    SetSize(Width, Height);
                    return;
                }

                dxDevice.Present();
            }
            else
            {
                System.Drawing.Imaging.BitmapData bmpData = gdiDisplay.LockBits(
                    screenRect,
                    System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);

                //Copy the data from the byte array into BitmapData.Scan0
                lock (ziggyWin.zx)
                {
                    System.Runtime.InteropServices.Marshal.Copy(ziggyWin.zx.ScreenBuffer, 0, bmpData.Scan0, (ScreenWidth) * (ScreenHeight));
                }
                //Unlock the pixels
                gdiDisplay.UnlockBits(bmpData);

                System.IntPtr hdc   = e.Graphics.GetHdc();
                System.IntPtr hbmp  = gdiDisplay.GetHbitmap();
                System.IntPtr memdc = CreateCompatibleDC(hdc);

                SelectObject(memdc, hbmp);
                StretchBlt(hdc, 0, 0, this.Width, this.Height, memdc, 0, 0, ScreenWidth, ScreenHeight, 0xCC0020);

                e.Graphics.ReleaseHdc(hdc);

                DeleteObject(hbmp);
                DeleteDC(memdc);
            }

            if (ziggyWin.config.ShowOnscreenIndicators)
            {
                if (ziggyWin.showTapeIndicator)
                {
                    e.Graphics.DrawImage(tapeIcon, ledIndicatorPos.X - tapeIcon.Width - 10, ledIndicatorPos.Y - tapeIcon.Height - 10, tapeIcon.Width, tapeIcon.Height);
                }

                if (ziggyWin.showDiskIndicator)
                {
                    e.Graphics.DrawImage(diskIcon, ledIndicatorPos.X - diskIcon.Width - 10, ledIndicatorPos.Y - diskIcon.Height - 10, diskIcon.Width, diskIcon.Height);
                }

                if (ziggyWin.showDownloadIndicator)
                {
                    e.Graphics.DrawImage(downloadIcon, ledIndicatorPos.X - downloadIcon.Width - 32, ledIndicatorPos.Y - downloadIcon.Height - 10, downloadIcon.Width, downloadIcon.Height);
                }
            }
            isRendering = false;
        }
Ejemplo n.º 10
0
        public int Direct3D9Device_EndScene(IntPtr devicePtr)
        {
            try
            {
                _D3D9Device = SlimDX.Direct3D9.Device.FromPointer(devicePtr);

                if (_renderTarget == null)
                {
                    // Create offscreen surface to use as copy of render target data
                    using (SwapChain sc = _D3D9Device.GetSwapChain(0))
                    {
                        // TODO: pass in a width and height
                        _renderTarget        = Surface.CreateOffscreenPlain(_D3D9Device, sc.PresentParameters.BackBufferWidth, sc.PresentParameters.BackBufferHeight, sc.PresentParameters.BackBufferFormat, Pool.SystemMemory);
                        _targetNoMultiSample = Surface.CreateRenderTarget(_D3D9Device, sc.PresentParameters.BackBufferWidth, sc.PresentParameters.BackBufferHeight, sc.PresentParameters.BackBufferFormat, MultisampleType.None, 0, false);
                        _bufferFormat        = sc.PresentParameters.BackBufferFormat;
                        _Rect = new Rectangle(0, 0, sc.PresentParameters.BackBufferWidth, sc.PresentParameters.BackBufferHeight);
                    }
                }
                // Lets mess with the scene now ;)
                using (Surface backBuffer = _D3D9Device.GetBackBuffer(0, 0))
                {
                    _D3D9Device.StretchRectangle(backBuffer, _Rect, _targetNoMultiSample, _Rect, TextureFilter.Linear);
                    _D3D9Device.GetRenderTargetData(_targetNoMultiSample, _renderTarget);

                    SlimDX.DataRectangle dataRect   = _renderTarget.LockRectangle(LockFlags.None);
                    SlimDX.DataStream    dataStream = dataRect.Data;
                    int    height    = _renderTarget.Description.Height;
                    int    width     = _renderTarget.Description.Width;
                    int    k         = height - 1;
                    int    iSrcPitch = dataRect.Pitch;
                    IntPtr data      = dataStream.DataPointer;
                    unsafe
                    {
                        byte *pSrcRow = (byte *)data.ToPointer();
                        for (int i = 0; i < height; i++)
                        {
                            if (k < 0)
                            {
                                break;
                            }
                            for (int j = 0; j < width; j++)
                            {
                                // toon shade the game pixels here..
                                pSrcRow[i * iSrcPitch + j * 4]     = _map[(int)pSrcRow[i * iSrcPitch + j * 4]];
                                pSrcRow[i * iSrcPitch + j * 4 + 1] = _map[(int)pSrcRow[i * iSrcPitch + j * 4 + 1]];
                                pSrcRow[i * iSrcPitch + j * 4 + 2] = _map[(int)pSrcRow[i * iSrcPitch + j * 4 + 2]];
                            }
                        }
                    }

                    _renderTarget.UnlockRectangle();
                    _D3D9Device.UpdateSurface(_renderTarget, _targetNoMultiSample);
                    _D3D9Device.StretchRectangle(_targetNoMultiSample, backBuffer, TextureFilter.Linear);
                }
            }
            catch (Exception ex)
            {
                // TODO: something useful
                System.IO.File.AppendAllText("C:\\tmp\\_hook.txt", ex.Message + ex.StackTrace);
            }
            return(0);
        }