コード例 #1
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;
        }