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); }
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; } }
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); }
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); }
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); }
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; }
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; }
internal void RestoreFromSystemCopy() { SlimDX.DataRectangle data = texture.LockRectangle(0, SlimDX.Direct3D9.LockFlags.Discard); data.Data.Write(systemCopy, 0, systemCopy.Length); texture.UnlockRectangle(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; }
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); }