Exemplo n.º 1
0
		public FormContext(int index, string title, int windowWidth, int windowHeight)
		{
			m_Index = index;

#if DEBUG
			RC.WriteLine(ConsoleThemeColor.SubText3, "RenderContext [" + m_Index + "]");
#endif

			m_Form = new RenderForm(title)
			{
				ClientSize = new Size(windowWidth, windowHeight)
			};

			m_SwapChainDescription = new SwapChainDescription
			{
				BufferCount = 1,
				Flags = SwapChainFlags.AllowModeSwitch,
				IsWindowed = true,
				ModeDescription = new ModeDescription(m_Form.ClientSize.Width, m_Form.ClientSize.Height, new Rational(GameConfiguration.DesiredFrameRate, 1), Format.R8G8B8A8_UNorm),
				OutputHandle = m_Form.Handle,
				SampleDescription = new SampleDescription(1, 0),
				SwapEffect = SwapEffect.Discard,
				Usage = Usage.RenderTargetOutput
			};
		}
Exemplo n.º 2
0
        public override void Initialize()
        {
            using (var fac = new Factory())
            {
                using (var tmpDevice = new Device(fac.GetAdapter(0), DriverType.Hardware, DeviceCreationFlags.None))
                {
                    using (var rf = new RenderForm())
                    {
                        var desc = new SwapChainDescription
                        {
                            BufferCount = 1,
                            Flags = SwapChainFlags.None,
                            IsWindowed = true,
                            ModeDescription = new ModeDescription(100, 100, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                            OutputHandle = rf.Handle,
                            SampleDescription = new SampleDescription(1, 0),
                            SwapEffect = SwapEffect.Discard,
                            Usage = Usage.RenderTargetOutput
                        };
                        using (var sc = new SwapChain(fac, tmpDevice, desc))
                        {
                            PresentPointer = Pulse.Magic.GetObjectVtableFunction(sc.ComPointer, VMT_PRESENT);
                            ResetTargetPointer = Pulse.Magic.GetObjectVtableFunction(sc.ComPointer, VMT_RESIZETARGET);
                        }
                    }
                }
            }

            _presentDelegate = Pulse.Magic.RegisterDelegate<Direct3D10Present>(PresentPointer);
            _presentHook = Pulse.Magic.Detours.CreateAndApply(_presentDelegate, new Direct3D10Present(Callback), "D10Present");
        }
Exemplo n.º 3
0
        public override void Initialize()
        {
            Device tmpDevice;
            SwapChain sc;
            using (var rf = new RenderForm())
            {
                var desc = new SwapChainDescription
                {
                    BufferCount = 1,
                    Flags = SwapChainFlags.None,
                    IsWindowed = true,
                    ModeDescription = new ModeDescription(100, 100, new Rational(60, 1), SlimDX.DXGI.Format.R8G8B8A8_UNorm),
                    OutputHandle = rf.Handle,
                    SampleDescription = new SampleDescription(1, 0),
                    SwapEffect = SwapEffect.Discard,
                    Usage = Usage.RenderTargetOutput
                };

                var res = Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out tmpDevice, out sc);
                if (res.IsSuccess)
                {
                    using (tmpDevice)
                    {
                        using (sc)
                        {
                            PresentPointer = Pulse.Magic.GetObjectVtableFunction(sc.ComPointer, VMT_PRESENT);
                            ResetTargetPointer = Pulse.Magic.GetObjectVtableFunction(sc.ComPointer, VMT_RESIZETARGET);
                        }
                    }
                }
            }

            _presentDelegate = Pulse.Magic.RegisterDelegate<Direct3D11Present>(PresentPointer);
            _presentHook = Pulse.Magic.Detours.CreateAndApply(_presentDelegate, new Direct3D11Present(Callback), "D11Present");
        }
Exemplo n.º 4
0
 public Window(int width, int height)
 {
     form = new RenderForm("Game");
     form.Width = width;
     form.Height = height;
     form.UserResized += HandleResize;
     device = Device.GetDevice(this);
 }
Exemplo n.º 5
0
        public static void CreateDevice( RenderForm form )
        {
            int width = form.ClientSize.Width;
            int height = form.ClientSize.Height;
            _device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
            {
                BackBufferWidth = width,
                BackBufferHeight = height
            });

            _device.Viewport = new Viewport(0, 0, width, height, 0.0f, 1.0f);
        }
        static void Main()
        {
            //Console.ReadLine();
            var form = new RenderForm ("Transparency");

            start_screen mycube = new start_screen(form);
            {
                MessagePump.Run(form, mycube.RenderFrame);
                {

                }
            }
        }
Exemplo n.º 7
0
        public Application()
        {
            Assembly renderAssembly = Assembly.GetAssembly(typeof(RenderService));
            Assembly inputAssembly = Assembly.GetAssembly(typeof(InputService));

            Factory drawFactory = new SlimDX.Direct2D.Factory();

            GameLoader gameLoader = new GameLoader("game.kgl", new Assembly[] { renderAssembly, inputAssembly }, die);

            game = gameLoader.CreateGame();

            renderService = game.GetService<RenderService>();
            renderService.Dpi = drawFactory.DesktopDpi;

            if (renderService.Width == 0)
            {
                renderService.Width = 800;
            }

            if (renderService.Height == 0)
            {
                renderService.Height = 600;
            }

            PointF pixelSize = renderService.ConvertDipsToPixels(new PointF(renderService.Width, renderService.Height));
            Size size = new Size((int)pixelSize.X, (int)pixelSize.Y);

            form = new RenderForm(game.Name)
            {
                ClientSize = size,
                FormBorderStyle = FormBorderStyle.FixedSingle,
                MaximizeBox = false
            };

            renderService.RenderTarget = new WindowRenderTarget(drawFactory, new WindowRenderTargetProperties()
            {
                Handle = form.Handle,
                PixelSize = size
            });

            inputService = game.GetService<InputService>();
            inputService.Form = form;

            int y = (int)((SystemInformation.VirtualScreen.Height - renderService.Height * renderService.Dpi.Height / 96.0) / 2);
            if (y < 0) y = 0;
            int x = (int)((SystemInformation.VirtualScreen.Width - renderService.Width * renderService.Dpi.Width / 96.0) / 2);
            if (x < 0) x = 0;
            form.SetDesktopLocation(x, y);
        }
        private void InitializeWindows(string title)
        {
            int width  = Screen.PrimaryScreen.Bounds.Width;
            int height = Screen.PrimaryScreen.Bounds.Height;

            // Initialize Window.
            RenderForm = new RenderForm(title)
            {
                ClientSize      = new Size(Configuration.Width, Configuration.Height),
                FormBorderStyle = DSystemConfiguration.BorderStyle
            };

            // The form must be showing in order for the handle to be used in Input and Graphics objects.
            RenderForm.Show();
            RenderForm.Location = new Point((width / 2) - (Configuration.Width / 2), (height / 2) - (Configuration.Height / 2));
        }
        static void Main()
        {
            var form = new RenderForm("Render");

            using (var engine = new Engine(form))
            {
                form.Width  = 800;
                form.Height = 600;
                form.Icon   = null;
                form.Show();

                var TestCase = new Test(engine);

                engine.Run();
            }
        }
    public CompanionWindow(Device device, ShaderCache shaderCache, StandardSamplers standardSamplers, string title, IArchiveDirectory dataDir)
    {
        this.device           = device;
        this.standardSamplers = standardSamplers;

        form = new RenderForm(title);

        // SwapChain description
        var desc = new SwapChainDescription()
        {
            BufferCount     = 1,
            ModeDescription =
                new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                    default(Rational), Format.R8G8B8A8_UNorm_SRgb),
            IsWindowed        = true,
            OutputHandle      = form.Handle,
            SampleDescription = new SampleDescription(1, 0),
            SwapEffect        = SwapEffect.Discard,      //TODO: consider using flip
            Usage             = Usage.RenderTargetOutput
        };

        using (var factory = new Factory1()) {
            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);
            swapChain = new SwapChain(factory, device, desc);
        }

        form.UserResized += OnUserResized;

        SetupBackbufferAndViewport();

        copyFromSourceVertexShader = shaderCache.GetVertexShader <CompanionWindow>("viewer/companion-window/CopyFromSource");
        copyFromSourcePixelShader  = shaderCache.GetPixelShader <CompanionWindow>("viewer/companion-window/CopyFromSource");

        uiBlendState = MakeUiBlendState(device);

        aspectRatiosBufferManager = new ConstantBufferManager <AspectRatios>(device);

        overlay = Overlay.Load(device, shaderCache, dataDir.Subdirectory("ui").File("put-on-headset-overlay.dds"));

        form.KeyPress  += OnKeyPress;
        form.MouseDown += OnMouseDown;
        form.MouseUp   += OnMouseUp;
        form.MouseMove += OnMouseMove;


        DebugInitialize();
    }
Exemplo n.º 11
0
        static void Main(string[] args)
        {
            form = new RenderForm("Simple Texture Example");

            if (InitDevice().IsFailure)
            {
                CleanUpDevice();
                return;
            }

            MessagePump.Run(form, () =>
            {
                Render();
            });

            CleanUpDevice();
        }
Exemplo n.º 12
0
        public void RegisterEvent(RenderForm form)
        {
            m_form = form;

            m_form.UserResized      += handlerUserResize;
            m_form.KeyDown          += handlerKeyDown;
            m_form.KeyUp            += handlerKeyUp;
            m_form.KeyPress         += handlerKeyPress;
            m_form.MouseMove        += handlerMouseMove;
            m_form.MouseDown        += handlerMouseDown;
            m_form.MouseUp          += handlerMouseUp;
            m_form.MouseClick       += handlerMouseClick;
            m_form.MouseDoubleClick += handlerMouseDoubleClick;
            m_form.MouseWheel       += handlerMouseWheel;
            m_form.DragEnter        += handlerDragEnter;
            m_form.DragDrop         += handlerDragDrop;
        }
Exemplo n.º 13
0
 public static PresentParameters CreateFor(RenderForm renderForm)
 {
     return new PresentParameters
            {
                BackBufferFormat = Format.A8R8G8B8,
                BackBufferCount = 1,
                BackBufferWidth = renderForm.ClientSize.Width,
                BackBufferHeight = renderForm.ClientSize.Height,
                Multisample = MultisampleType.None,
                SwapEffect = SwapEffect.Flip,
                EnableAutoDepthStencil = true,
                AutoDepthStencilFormat = Format.D24X8,
                PresentationInterval = PresentInterval.Default,
                Windowed = true,
                DeviceWindowHandle = renderForm.Handle
            };
 }
Exemplo n.º 14
0
        public static Direct3DGraphicsFacade Create(RenderForm form)
        {
            // Low-level device
            var device = Direct3DGraphicsDevice.Create(form);

            // Load support defaults
            var shaderLoader        = new Direct3DShaderLoader(device.InternalD3DDevice);
            var techniqueCollection = Direct3DTechniqueCollection.Create(shaderLoader);
            var textureFactory      = new Direct3DTextureFactory(device.InternalD3DDevice);
            var presetsStore        = Direct3DPresetsStore.Create(device, textureFactory);

            return(new Direct3DGraphicsFacade {
                Device = device,
                Techniques = techniqueCollection,
                Presets = presetsStore
            });
        }
Exemplo n.º 15
0
        public static void Show(Wallpaper wallpaper)
        {
            IntPtr handler = IntPtr.Zero;

            Execute.OnUIThread(() =>
            {
                if (RenderWindow == null)
                {
                    RenderWindow = new RenderForm
                    {
                        Wallpaper = wallpaper
                    };
                    RenderWindow.SetAspect(VideoAspect);
                    RenderWindow.Show();
                }
                else
                {
                    try
                    {
                        RenderWindow.Wallpaper = wallpaper;
                        RenderWindow.SetAspect(VideoAspect);

                        //RenderWindow .Visibility = System.Windows.Visibility.Visible;
                        RenderWindow.Visible = true;
                    }
                    catch (Exception)
                    {
                        RenderWindow?.Close();
                        RenderWindow = null;
                        //explorer 崩溃后会触发这个问题

                        RenderWindow = new RenderForm
                        {
                            Wallpaper = wallpaper
                        };
                        RenderWindow.Show();
                    }
                }

                //handler = new WindowInteropHelper(RenderWindow).Handle;
                handler = RenderWindow.Handle;
            });

            //HandlerWallpaper.Show(handler);
            _LWECore.SendToBackground(handler);
        }
Exemplo n.º 16
0
        public static void Initiate()
        {
            var form = new RenderForm("SharpDX - MiniCube Direct3D9 Sample");
            // Creates the Device
            var direct3D = new Direct3D();
            var device   = new SharpDX.Direct3D9.Device(direct3D, 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters(form.ClientSize.Width, form.ClientSize.Height));

            // Prepare matrices
            var view     = Matrix.LookAtLH(new Vector3(0, 0, -5), new Vector3(0, 0, 0), Vector3.UnitY);
            var proj     = Matrix.PerspectiveFovLH((float)Math.PI / 4.0f, form.ClientSize.Width / (float)form.ClientSize.Height, 0.1f, 100.0f);
            var viewProj = Matrix.Multiply(view, proj);

            // Use clock
            var clock = new Stopwatch();

            clock.Start();

            string Game = "WOT";

            switch (Game)
            {
            case "WOT":
                _list.Add(new DrawTextureAndCatchIt(SharpDX.Direct3D9.Texture.FromFile(device, "Resources/error_enter.png"), SharpDX.Direct3D9.Texture.FromFile(device, "Resources/error_6473.png"), new SharpDX.Mathematics.Interop.RawRectangle(1, 1, 100, 100), new SharpDX.Vector3(100, 100, 0)));
                _list.Add(new DrawTextureAndCatchIt(SharpDX.Direct3D9.Texture.FromFile(device, "Resources/edit-addenter.png"), SharpDX.Direct3D9.Texture.FromFile(device, "Resources/edit-add.png"), new SharpDX.Mathematics.Interop.RawRectangle(1, 1, 100, 100), new SharpDX.Vector3(100, 400, 0)));
                break;
            }
            //choose game


            RenderLoop.Run(form, () =>
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
                device.BeginScene();
                foreach (DrawTextureAndCatchIt dr in _list)
                {
                    dr.CheckCursorPosition();
                    dr.DrawTexture(device);
                }

                device.EndScene();
                device.Present();
            });

            device.Dispose();
            direct3D.Dispose();
        }
        public override void Hook()
        {
            DebugMessage("Hook: Begin");

            // Determine method addresses in Direct3D10.Device, and DXGI.SwapChain
            if (d3d101VTblAddresses == null)
            {
                d3d101VTblAddresses        = new List <IntPtr>();
                dxgiSwapChainVTblAddresses = new List <IntPtr>();
                DebugMessage("Hook: Before device creation");
                using var factory = new Factory1();
                using var device  = new Device1(factory.GetAdapter(0), DeviceCreationFlags.None, FeatureLevel.Level_10_1);

                DebugMessage("Hook: Device created");
                d3d101VTblAddresses.AddRange(GetVTblAddresses(device.NativePointer, D_3D10_1_DEVICE_METHOD_COUNT));

                using var renderForm = new RenderForm();
                using var sc         = new SwapChain(factory, device, Dxgi.CreateSwapChainDescription(renderForm.Handle));

                dxgiSwapChainVTblAddresses.AddRange(GetVTblAddresses(sc.NativePointer, Dxgi.DXGI_SWAPCHAIN_METHOD_COUNT));
            }

            // We will capture the backbuffer here
            dxgiSwapChainPresentHook = new Hook <DxgiSwapChainPresentDelegate>(
                dxgiSwapChainVTblAddresses[(int)Dxgi.DxgiSwapChainVTbl.Present],
                new DxgiSwapChainPresentDelegate(PresentHook),
                this);

            // We will capture target/window resizes here
            dxgiSwapChainResizeTargetHook = new Hook <DxgiSwapChainResizeTargetDelegate>(
                dxgiSwapChainVTblAddresses[(int)Dxgi.DxgiSwapChainVTbl.ResizeTarget],
                new DxgiSwapChainResizeTargetDelegate(ResizeTargetHook),
                this);

            /*
             * Don't forget that all hooks will start deactivated...
             * The following ensures that all threads are intercepted:
             * Note: you must do this for each hook.
             */
            dxgiSwapChainPresentHook.Activate();

            dxgiSwapChainResizeTargetHook.Activate();

            Hooks.Add(dxgiSwapChainPresentHook);
            Hooks.Add(dxgiSwapChainResizeTargetHook);
        }
Exemplo n.º 18
0
        private void InitDirect3D(RenderForm form)
        {
            int width  = form.ClientSize.Width;
            int height = form.ClientSize.Height;

            viewport.Width    = width;
            viewport.Height   = height;
            viewport.MaxDepth = 1.0f;

            scissorRect.Right  = width;
            scissorRect.Bottom = height;

#if DEBUG
            // Enable the D3D12 debug layer.
            {
                DebugInterface.Get().EnableDebugLayer();
            }
#endif

            _factory = new Factory4();

            device          = new Device(null, SharpDX.Direct3D.FeatureLevel.Level_11_0);
            DXGlobal.device = device;
            this.Device     = device;

            Fence       = Device.CreateFence(0, FenceFlags.None);
            _fenceEvent = new AutoResetEvent(false);

            RtvDescriptorSize       = device.GetDescriptorHandleIncrementSize(DescriptorHeapType.RenderTargetView);
            DsvDescriptorSize       = device.GetDescriptorHandleIncrementSize(DescriptorHeapType.DepthStencilView);
            CbvSrvUavDescriptorSize = device.GetDescriptorHandleIncrementSize(
                DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView);


            FeatureDataMultisampleQualityLevels msQualityLevels;
            msQualityLevels.Format            = BackBufferFormat;
            msQualityLevels.SampleCount       = 4;
            msQualityLevels.Flags             = MultisampleQualityLevelFlags.None;
            msQualityLevels.QualityLevelCount = 0;
            // Debug.Assert(Device.CheckFeatureSupport(Feature.MultisampleQualityLevels, ref msQualityLevels));
            _m4xMsaaQuality = msQualityLevels.QualityLevelCount;

            CreateCommandObjects();
            CreateSwapChain();
            CreateRtvAndDsvDescriptorHeaps();
        }
Exemplo n.º 19
0
        public D3DApp(string name, int adapterIndex = 0)
        {
            _window = new RenderForm(name);
            _window.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
            _adapterIndex           = adapterIndex;
            _gametimer = new Stopwatch();

            _frameLabel = new System.Windows.Forms.Label
            {
                Location  = new System.Drawing.Point(10, 10),
                BackColor = System.Drawing.Color.Green,
                ForeColor = System.Drawing.Color.White,
                Size      = new System.Drawing.Size(93, 39),
                Font      = new System.Drawing.Font("Arial", 25)
            };
            _window.Controls.Add(_frameLabel);
        }
Exemplo n.º 20
0
        static void Main()
        {
            using (RenderForm form = new RenderForm(FormCaption))
                using (D2DFactory d2dFactory = new D2DFactory())
                {
                    form.ClientSize = new System.Drawing.Size(Width, Height);

                    HwndRenderTargetProperties wtp = new HwndRenderTargetProperties();
                    wtp.Hwnd           = form.Handle;
                    wtp.PixelSize      = new Size2(Width, Height);
                    wtp.PresentOptions = PresentOptions.Immediately;
                    using (WindowRenderTarget renderTarget = new WindowRenderTarget(d2dFactory, new RenderTargetProperties(), wtp))
                    {
                        RunGame(form, renderTarget);
                    }
                }
        }
Exemplo n.º 21
0
        private void InitializeWindows()
        {
            if (MainForm != null)
            {
                return;
            }

            ApplicationHandle = this;
            ApplicationName   = "Engine";

            MainForm = new RenderForm(Configuration.Title)
            {
                ClientSize = new Size(Configuration.Width, Configuration.Height)
            };

            MainForm.Show();
        }
Exemplo n.º 22
0
        private SwapChainDescription DescribeSwapChain(
            ModeDescription modeDescription,
            RenderForm renderForm,
            bool windowed)
        {
            SwapChainDescription desc = new SwapChainDescription()
            {
                ModeDescription   = modeDescription,
                SampleDescription = new SampleDescription(1, 0),
                Usage             = Usage.RenderTargetOutput,
                BufferCount       = (int)BufferingType.DoubleBuffering,
                OutputHandle      = renderForm.Handle,
                IsWindowed        = windowed
            };

            return(desc);
        }
Exemplo n.º 23
0
        static void Main(string[] args)
        {
            var form = new RenderForm("Conway's Game of Life");

            var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing,
                                    new PresentParameters(form.ClientSize.Width, form.ClientSize.Height));

            var vertices = new VertexBuffer(device, 3 * 20, Usage.WriteOnly, VertexFormat.None, Pool.Managed);

            vertices.Lock(0, 0, LockFlags.None).WriteRange(new[] {
                new Vertex {
                    Color = Color.Red, Position = new Vector4(400.0f, 100.0f, 0.5f, 1.0f)
                },
                new Vertex {
                    Color = Color.Blue, Position = new Vector4(650.0f, 500.0f, 0.5f, 1.0f)
                },
                new Vertex {
                    Color = Color.Green, Position = new Vector4(150.0f, 500.0f, 0.5f, 1.0f)
                },
            });

            vertices.Unlock();
            var vertexElements = new[]
            {
                new VertexElement(0, 0, DeclarationType.Float4, DeclarationMethod.Default, DeclarationUsage.PositionTransformed, 0),
                new VertexElement(0, 16, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
                VertexElement.VertexDeclarationEnd,
            };

            var vertexDeclaration = new VertexDeclaration(device, vertexElements);

            RenderLoop.Run(form, () =>
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);

                device.BeginScene();

                device.SetStreamSource(0, vertices, 0, 20);
                device.VertexDeclaration = vertexDeclaration;
                device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);

                device.EndScene();
                device.Present();
            });
        }
        /// <summary>
        ///     Initializes Geisha Engine for specified <paramref name="game" /> and starts the game loop.
        /// </summary>
        /// <param name="game"><see cref="IGame" /> instance providing custom game functionality.</param>
        public static void Run(IGame game)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;

            LogFactory.ConfigureFileTarget("GeishaEngine.log");

            var log = LogFactory.Create(typeof(GeishaEngineForWindows));

            log.Info("Starting engine.");

            log.Info("Loading configuration from file.");
            var configuration = Configuration.LoadFromFile(EngineConfigFile);

            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            using (var form = new RenderForm(game.WindowTitle)
            {
                ClientSize = new Size(configuration.Rendering.ScreenWidth, configuration.Rendering.ScreenHeight),
                AllowUserResizing = false
            })
            {
                using var engine = new Engine(
                          configuration,
                          new CSCoreAudioBackend(),
                          new WindowsInputBackend(form),
                          new DirectXRenderingBackend(form, DriverType.Hardware),
                          game
                          );

                log.Info("Engine started successfully.");

                RenderLoop.Run(form, () =>
                {
                    // ReSharper disable AccessToDisposedClosure
                    engine.Update();

                    if (engine.IsScheduledForShutdown)
                    {
                        form.Close();
                    }
                    // ReSharper restore AccessToDisposedClosure
                });
            }

            log.Info("Engine shutdown completed.");
        }
Exemplo n.º 25
0
        /// <summary>
        /// Constructor. Initialize all objects.
        /// </summary>
        public GameProcess()
        {
            audioDevice           = new SharpAudioDevice();
            renderForm            = new RenderForm("SharpDX");
            renderForm.ClientSize = new Size(1500, 800);

            renderForm.UserResized += RenderFormResizedCallback;
            renderForm.Activated   += RenderFormActivatedCallback;
            renderForm.Deactivate  += RenderFormDeactivateCallback;
            directX3DGraphics       = new DirectX3DGraphics(renderForm);
            renderer = new Renderer(directX3DGraphics);
            renderer.CreateConstantBuffers();
            directX2DGraphics = new DirectX2DGraphics(directX3DGraphics);
            Loader loader = new Loader(directX3DGraphics, directX2DGraphics, renderer, directX2DGraphics.ImagingFactory);

            samplerStates = new SamplerStates(directX3DGraphics);
            timeHelper    = new TimeHelper();

            InitializeTextures(loader);
            renderer.SetWhiteTexture(textures["white.bmp"]);
            loader.StubTexture = textures["white.bmp"];
            materials          = loader.LoadMaterials("Resources\\materials.txt", textures);

            Vector3 initial = new Vector3(105f, 0, -105f);
            Vector4 pos     = new Vector4(0, 0, 0, 0);

            InitHUDResources();
            InitializeLight();

            inputController = new InputController(renderForm);

            mainCharacterService = new MainCharacterService("some", inputController, loader, materials[3], audioDevice);
            Queue <string> files = new Queue <string>();

            files.Enqueue("Resources\\Description\\map1.txt");
            files.Enqueue("Resources\\Description\\map1.txt");
            levelService = new LevelService(files, mainCharacterService, loader, materials[2], inputController, audioDevice);

            cameraService = new CameraService(new Camera(new Vector4(-119.0f, 144.0f, 129.0f, 1.0f)), inputController);

            Vector4 initialPosition = new Vector4(20.5f, 1f, 20.5f, 1);
            Vector4 position        = initialPosition;

            loader = null;
        }
Exemplo n.º 26
0
        private void InitialiseWindows(string title)
        {
            var width  = Screen.PrimaryScreen.Bounds.Width;
            var height = Screen.PrimaryScreen.Bounds.Height;

            _renderForm = new RenderForm(title)
            {
                ClientSize      = new Size(Configuration.Size.Width, Configuration.Size.Height),
                FormBorderStyle = SystemConfiguration.BorderStyle
            };

            _renderForm.Show();

            var x = (width / 2) - (Configuration.Size.Width / 2);
            var y = (height / 2) - (Configuration.Size.Height / 2);

            _renderForm.Location = new Point(x, y);
        }
Exemplo n.º 27
0
        public InputManager(IoCContainer container)
        {
            IDeviceContextService deviceContextManager = container.Resolve <IDeviceContextService>();

            RenderForm form = deviceContextManager.Form;

            form.KeyDown          += OnKeyDown;
            form.KeyUp            += OnKeyUp;
            form.MouseClick       += OnMouseClick;
            form.MouseDoubleClick += OnMouseDoubleClick;
            form.MouseDown        += OnMouseDown;
            form.MouseMove        += OnMouseMove;
            form.MouseUp          += OnMouseUp;
            form.MouseWheel       += OnMouseWheel;

            _keyBindings   = new Dictionary <Keys, InputBinding>();
            _mouseBindings = new Dictionary <MouseButtons, InputBinding>();
        }
Exemplo n.º 28
0
        public static GraphicsLoop CreateWithNewWindow(Size clientSize, InitFlags flags = 0)
        {
            var renderForm = new RenderForm {
                ClientSize = clientSize, StartPosition = FormStartPosition.CenterScreen
            };
            var graphicsFacade = Direct3DGraphicsFacade.Create(renderForm);
            var renderer       = new RenderContext(graphicsFacade);

            if (!flags.HasFlag(InitFlags.HiddenWindow))
            {
                renderForm.Show();
            }

            graphicsFacade.Device.ImmediateContext.SetVsyncEnabled(
                !flags.HasFlag(InitFlags.DisableVerticalSync));

            return(new GraphicsLoop(flags, renderForm, graphicsFacade, renderer));
        }
Exemplo n.º 29
0
 static void RunGame(RenderForm form, RenderTarget renderTarget)
 {
     using (Game game = new Game(Width, Height, "Gameboard1.json"))
     {
         game.LoadResources(renderTarget);
         Stopwatch gameTime   = Stopwatch.StartNew();
         TimeSpan  lastUpdate = TimeSpan.Zero;
         RenderLoop.Run(form, () =>
         {
             TimeSpan totalTime = gameTime.Elapsed;
             TimeSpan elapsed   = totalTime - lastUpdate;
             lastUpdate         = totalTime;
             game.Update((float)elapsed.TotalSeconds);
             game.DrawScene(renderTarget);
             //Thread.Sleep(TimSeSpan.FromSeconds(1));
         });
     }
 }
Exemplo n.º 30
0
        public virtual void SetUp()
        {
            var renderingConfigurationBuilder = RenderingConfiguration.CreateBuilder();

            ConfigureRendering(renderingConfigurationBuilder);
            var renderingConfiguration = renderingConfigurationBuilder.Build();

            _renderForm = new RenderForm("IntegrationTestsWindow")
            {
                ClientSize = new Size(renderingConfiguration.ScreenWidth, renderingConfiguration.ScreenWidth)
            };

            if (ShowDebugWindow)
            {
                _renderForm.Show();
            }

            var containerBuilder = new ContainerBuilder();

            // Register configuration
            containerBuilder.RegisterInstance(renderingConfiguration).As <RenderingConfiguration>().SingleInstance();

            // Register engine back-ends
            containerBuilder.RegisterInstance(new CSCoreAudioBackend()).As <IAudioBackend>().SingleInstance();
            containerBuilder.RegisterInstance(new WindowsInputBackend(_renderForm)).As <IInputBackend>().SingleInstance();
            containerBuilder.RegisterInstance(new DirectXRenderingBackend(_renderForm, DriverType.Software)).As <IRenderingBackend>().SingleInstance();

            // Register common modules
            CommonModules.RegisterAll(containerBuilder);

            // Register engine modules
            EngineModules.RegisterAll(containerBuilder);

            // Register test components
            RegisterTestComponents(containerBuilder);

            // Register tested components
            containerBuilder.RegisterType <TSystemUnderTest>().AsSelf().SingleInstance();

            _container     = containerBuilder.Build();
            _lifetimeScope = _container.BeginLifetimeScope();

            SystemUnderTest = _lifetimeScope.Resolve <TSystemUnderTest>();
        }
Exemplo n.º 31
0
        public MiniUIApplication()
        {
            var services = new ServiceRegistry();
            // Needs to be declared before the D3D device manager as it hooks to
            // the D3D device creation event
            var d2dDeviceManager = new Direct2DDeviceManager(services);

            d3dDeviceManager = ToDispose(new SimpleDeviceManager(services)
            {
                HorizontalDpi             = 96.0f,
                VerticalDpi               = 96.0f,
                PreferredBackBufferWidth  = 1280,
                PreferredBackBufferHeight = 720,
                PreferredBackBufferFormat = Format.R8G8B8A8_UNorm,
                IsFullScreen              = false,
                IsStereo = false,
                PreferredGraphicsProfile  = new[] { FeatureLevel.Level_11_0, },
                PreferredMultiSampleCount = 1
            });
            form = new RenderForm("OdysseyUI Test")
            {
                ClientSize = new Size(d3dDeviceManager.PreferredBackBufferWidth, d3dDeviceManager.PreferredBackBufferHeight),
            };

            d3dDeviceManager.CreateDevice(form.Handle, DeviceCreationFlags.Debug | DeviceCreationFlags.BgraSupport);

            var content      = new ContentManager(services);
            var styleManager = new StyleManager(services);

            uiManager       = new DesktopUserInterfaceManager(services);
            applicationTime = new ApplicationTime();
            timerTick       = new TimerTick();

            services.AddService(typeof(IStyleService), styleManager);
            services.AddService(typeof(IUserInterfaceState), uiManager);
            services.AddService(typeof(IWindowService), this);
            services.AddService(typeof(IDirect2DService), d2dDeviceManager);

            content.LoadAssetList("Assets/Assets.yaml");

            overlay = ToDispose(SampleOverlay.New(services));
            uiManager.Initialize();
            uiManager.CurrentOverlay = overlay;
        }
Exemplo n.º 32
0
        static void Main()
        {
            if (!SharpDevice.IsDirectX11Supported())
            {
                System.Windows.Forms.MessageBox.Show("DirectX11 Not Supported");
                return;
            }

            //render form
            RenderForm form = new RenderForm();

            form.Text = "Tutorial 3: Font";


            //main loop
            using (SharpDevice device = new SharpDevice(form))
            {
                RenderLoop.Run(form, () =>
                {
                    //resize if form was resized
                    if (device.MustResize)
                    {
                        device.Resize();
                    }

                    //clear color
                    device.Clear(Color.CornflowerBlue);

                    //begin drawing text
                    device.Font.Begin();

                    //draw string
                    device.Font.DrawString("Hello SharpDX", 0, 0);

                    device.Font.DrawString("Current Time " + DateTime.Now.ToString(), 0, 32);

                    //flush text to view
                    device.Font.End();

                    //present
                    device.Present();
                });
            }
        }
Exemplo n.º 33
0
        private GraphicCore()
        {
            form                 = new RenderForm("");
            form.Width           = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width;
            form.Height          = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
            form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
            form.ControlBox      = false;
            form.MaximizeBox     = false;
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(form.Width, form.Height, new Rational(frame_rate, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            Camera.width  = form.Width;
            Camera.height = form.Height;

            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc,
                                        SharpDX.Direct3D10.FeatureLevel.Level_10_0, out device, out swapChain);

            factory2d   = new SharpDX.Direct2D1.Factory();
            factoryText = new SharpDX.DirectWrite.Factory();

            // Ignore all windows events
            factoryDX = swapChain.GetParent <SharpDX.DXGI.Factory>();
            //factoryDX.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            Texture2D backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            var       renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();

            this.render2d = new RenderTarget(factory2d, surface,
                                             new RenderTargetProperties(new SharpDX.Direct2D1.PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            brush      = new SolidColorBrush(this.render2d, Color.White);
            _isRunning = true;
        }
Exemplo n.º 34
0
        public Class1(RenderForm renderForm)
        {
            Color = new Color(0, 0, 128);

            _renderForm = renderForm;

            ViewRatio = (float)_renderForm.ClientSize.Width / _renderForm.ClientSize.Height;

            InitializeDeviceResources();

            _directInput = new DirectInput();
            _keyboard    = new Keyboard(_directInput);
            _keyboard.Properties.BufferSize = 128;
            _keyboard.Acquire();
            _stopWatch.Reset();

            _c0     = CreateConstantBuffer(Utilities.SizeOf <PerFrame>());
            _c1     = CreateConstantBuffer(Utilities.SizeOf <PerMaterial>());
            _c2     = CreateConstantBuffer(Utilities.SizeOf <Matrix>() * 6);
            _model0 = new ModelSDX(_dx11Device, "Wm\\", "Female.md5mesh");
            _model1 = new ModelSDX(_dx11Device, "Wm\\", "Female.md5mesh");

            ShaderFlags shaderFlags = ShaderFlags.None;

#if DEBUG
            shaderFlags = ShaderFlags.Debug;
#endif
            var shadersFile = "CubeMap.hlsl";
            using (var vertexShaderByteCode = ShaderBytecode.CompileFromFile(shadersFile, "VS0", "vs_5_0", shaderFlags))
            {
                _inputSignature = ShaderSignature.GetInputSignature(vertexShaderByteCode);
                _VS0            = new VertexShader(_dx11Device, vertexShaderByteCode);
            }
            using (var vertexShaderByteCode = ShaderBytecode.CompileFromFile(shadersFile, "VS1", "vs_5_0", shaderFlags))
                _VS1 = new VertexShader(_dx11Device, vertexShaderByteCode);
            using (var vertexShaderByteCode = ShaderBytecode.CompileFromFile(shadersFile, "PS0", "ps_5_0", shaderFlags))
                _PS0 = new PixelShader(_dx11Device, vertexShaderByteCode);
            using (var vertexShaderByteCode = ShaderBytecode.CompileFromFile(shadersFile, "PS1", "ps_5_0", shaderFlags))
                _PS1 = new PixelShader(_dx11Device, vertexShaderByteCode);
            using (var vertexShaderByteCode = ShaderBytecode.CompileFromFile(shadersFile, "GS0", "gs_5_0", shaderFlags))
                _GS0 = new GeometryShader(_dx11Device, vertexShaderByteCode);
            _layout = new InputLayout(_dx11Device, _inputSignature, inputElements);
        }
Exemplo n.º 35
0
        static void Main()
        {
            // initialize main window
            var form = new RenderForm("SlimDX - ZeroEngine");

            // initialize Engine
            Engine.GlobalInit globalInit = new Engine.GlobalInit();
            globalInit.hWindow = form;
            Engine.Global.Initialize(globalInit);

            // messages loop
            MessagePump.Run(form, () =>
            {
                // game loop goes here
                Engine.Global.Update();
            });

            // cleanup
        }
Exemplo n.º 36
0
        static void Main()
        {
            // initialize main window
            var form = new RenderForm("SlimDX - ZeroEngine");

            // initialize Engine
            Engine.GlobalInit globalInit = new Engine.GlobalInit();
            globalInit.hWindow = form;
            Engine.Global.Initialize(globalInit);

            // messages loop
            MessagePump.Run(form, () =>
            {
                // game loop goes here
                Engine.Global.Update();
            });

            // cleanup
        }
Exemplo n.º 37
0
        static void Main(string[] args)
        {
//			PrintAdapterInfo();

            RenderForm fm = new RenderForm();

            AutoCollector.Collect(fm);
            RenderformInput formInput = new RenderformInput(fm);                //TODO: refact to factory creation

            AutoCollector.Collect(formInput);
            LogicBasic    logicModule = new LogicBasic(formInput);
            RenderContext mainRC      = new RenderContext(fm, logicModule);

            AutoCollector.Collect(mainRC);

            RenderLoop.Run(fm, mainRC.RenderProc);

            AutoCollector.DisposeAndClear();
        }
Exemplo n.º 38
0
 public Form1()
 {
     InitializeComponent();
     renderForm = new RenderForm()
     {
         TopLevel = false,
         Anchor   = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right
     };
     renderForm.Dock            = DockStyle.Fill;
     renderForm.FormBorderStyle = FormBorderStyle.None;
     renderForm.ShowIcon        = false;
     app = new CoreTestApp(renderForm);
     splitContainer1.Panel2.Controls.Add(renderForm);
     Shown       += Form1_Shown;
     FormClosing += Form1_FormClosing;
     splitContainer1.Panel2.Resize += Panel2_Resize;
     renderForm.Width  = splitContainer1.Panel2.Width;
     renderForm.Height = splitContainer1.Panel2.Height;
 }
Exemplo n.º 39
0
 public void Dispose(RenderForm form)
 {
     if (form == null)
     {
         return;
     }
     form.UserResized      -= handlerUserResize;
     form.KeyDown          -= handlerKeyDown;
     form.KeyUp            -= handlerKeyUp;
     form.KeyPress         -= handlerKeyPress;
     form.MouseMove        -= handlerMouseMove;
     form.MouseDown        -= handlerMouseDown;
     form.MouseUp          -= handlerMouseUp;
     form.MouseClick       -= handlerMouseClick;
     form.MouseDoubleClick -= handlerMouseDoubleClick;
     form.MouseWheel       -= handlerMouseWheel;
     form.DragEnter        -= handlerDragEnter;
     form.DragDrop         -= handlerDragDrop;
 }
Exemplo n.º 40
0
        static void Main()
        {
            var form = new RenderForm("SlimDX - MiniTri Direct3D9 Sample");
            var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
            {
                BackBufferWidth = form.ClientSize.Width,
                BackBufferHeight = form.ClientSize.Height
            });

            var vertices = new VertexBuffer(device, 3 * 20, Usage.WriteOnly, VertexFormat.None, Pool.Managed);
            vertices.Lock(0, 0, LockFlags.None).WriteRange(new[] {
                new Vertex() { Color = Color.Red.ToArgb(), Position = new Vector4(400.0f, 100.0f, 0.5f, 1.0f) },
                new Vertex() { Color = Color.Blue.ToArgb(), Position = new Vector4(650.0f, 500.0f, 0.5f, 1.0f) },
                new Vertex() { Color = Color.Green.ToArgb(), Position = new Vector4(150.0f, 500.0f, 0.5f, 1.0f) }
            });
            vertices.Unlock();

        	var vertexElems = new[] {
        		new VertexElement(0, 0, DeclarationType.Float4, DeclarationMethod.Default, DeclarationUsage.PositionTransformed, 0),
        		new VertexElement(0, 16, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
				VertexElement.VertexDeclarationEnd
        	};

        	var vertexDecl = new VertexDeclaration(device, vertexElems);

            MessagePump.Run(form, () =>
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
                device.BeginScene();

                device.SetStreamSource(0, vertices, 0, 20);
                device.VertexDeclaration = vertexDecl;
                device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);

                device.EndScene();
                device.Present();
            });

            foreach (var item in ObjectTable.Objects)
                item.Dispose();
        }
Exemplo n.º 41
0
        static Program()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            RenderForm = new RenderForm("Subdivision") { ClientSize = WindowSize };

            RenderForm.FormClosing += OnExit;

            RenderForm.KeyDown += HandleKeyboardStart;
            RenderForm.KeyUp += HandleKeyboardEnd;

            RenderForm.UserResized += FormResized;

            RenderForm.MouseDown += HandleMouseDown;
            RenderForm.MouseUp += HandleMouseUp;
            RenderForm.MouseMove += HandleMouseMove;
            RenderForm.MouseWheel += HandleMouseWheel;

            SetupRendering();
        }
Exemplo n.º 42
0
        public SimplestDemo()
        {
            Form = new RenderForm();
            Form.Text = "BulletSharp - Simplest Demo";
            Form.ClientSize = new Size(Width, Height);
            Form.Closed += (o, args) => { isFormClosed = true; };

            Initialize();

            OnResourceLoad();

            Timer timer = new Timer(1.0f / 60.0f);
            timer.Elapsed += (o, args) => { physics.Update(1.0f / 60.0f); };
            timer.Enabled = true;

            MessagePump.Run(Form, () =>
            {
                if (isFormClosed)
                    return;

                Render();
            });
        }
Exemplo n.º 43
0
        public BaseFormWrapper(BaseRenderer renderer, string title, int width, int height) {
            _title = title;

            Form = new RenderForm(title) {
                Width = width,
                Height = height,
                StartPosition = FormStartPosition.CenterScreen
            };

            Renderer = renderer;
            Renderer.Initialize(Form.Handle);

            Renderer.Width = Form.ClientSize.Width;
            Renderer.Height = Form.ClientSize.Height;

            Form.UserResized += OnResize;
            Form.KeyDown += OnKeyDown;
            Form.KeyUp += OnKeyUp;

            Form.GotFocus += OnGotFocus;
            Form.LostFocus += OnLostFocus;

            renderer.Tick += OnTick;
        }
Exemplo n.º 44
0
        static void Main()
        {
            Device device;
            SwapChain swapChain;

            var form = new RenderForm("Test Game");
            var description = new SwapChainDescription()
            {
                BufferCount = 2,
                Usage = Usage.RenderTargetOutput,
                OutputHandle = form.Handle,
                IsWindowed = true,
                ModeDescription = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                SampleDescription = new SampleDescription(1, 0),
                Flags = SwapChainFlags.AllowModeSwitch,
                SwapEffect = SwapEffect.Discard
            };

            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, description, out device, out swapChain);

            // create a view of our render target, which is the backbuffer of the swap chain we just created
            RenderTargetView renderTarget;
            using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0))
                renderTarget = new RenderTargetView(device, resource);

            var viewport = new Viewport(0.0f, 0.0f, form.ClientSize.Width, form.ClientSize.Height);

            // setting a viewport is required if you want to actually see anything
            var context = device.ImmediateContext;
            context.OutputMerger.SetTargets(renderTarget);
            context.Rasterizer.SetViewports(viewport);

            // prevent DXGI handling of alt+enter, which doesn't work properly with Winforms
            using (var factory = swapChain.GetParent<Factory>())
                factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAltEnter);

            // handle alt+enter ourselves
            form.KeyDown += (o, e) =>
            {
                if (e.Alt && e.KeyCode == Keys.Enter)
                    swapChain.IsFullScreen = !swapChain.IsFullScreen;
            };

            // handle form size changes
            form.UserResized += (o, e) =>
            {
                renderTarget.Dispose();

                swapChain.ResizeBuffers(2, 0, 0, Format.R8G8B8A8_UNorm, SwapChainFlags.AllowModeSwitch);
                using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0))
                    renderTarget = new RenderTargetView(device, resource);

                context.OutputMerger.SetTargets(renderTarget);
            };

            // Create a renderobject
            var renderObject = new RenderObject(device);

            // Create some gameobjects to populate world

            var gameObjects = new List<GameObject>();

            gameObjects.Add(
                    new GameObject() { RenderObj = renderObject }
                );

            var angle = 0.0f;

            MessagePump.Run(form, () =>
            {
                // clear the render target to a soothing blue
                context.ClearRenderTargetView(renderTarget, new Color4(0.5f, 0.5f, 1.0f));

                renderObject.cb.vp = Matrix.OrthoLH(viewport.Width, viewport.Height, 0, 1);

                // Render each gameobject
                foreach (var obj in gameObjects)
                {
                    renderObject.cb.world = Matrix.Translation(new Vector3(
                        (float)Math.Cos(angle) * 100.0f,
                        (float)Math.Sin(angle) * 100.0f,
                        0));

                    obj.RenderObj.Render(context);
                }

                angle += 0.0001f;

                swapChain.Present(0, PresentFlags.None);
            });

            // clean up all resources
            // anything we missed will show up in the debug output
            renderObject.Dispose();
            renderTarget.Dispose();
            swapChain.Dispose();
            device.Dispose();
        }
Exemplo n.º 45
0
        private static void Main()
        {
            // Device creation
            var form = new RenderForm("Stereo test")
                           {
                               ClientSize = size,
                               //FormBorderStyle = System.Windows.Forms.FormBorderStyle.None,
                               //WindowState = FormWindowState.Maximized
                           };

            form.KeyDown += new KeyEventHandler(form_KeyDown);
               // form.Resize += new EventHandler(form_Resize);

            ModeDescription mDesc = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                                        new Rational(120000, 1000), Format.R8G8B8A8_UNorm);
            mDesc.ScanlineOrdering = DisplayModeScanlineOrdering.Progressive;
            mDesc.Scaling = DisplayModeScaling.Unspecified;

            var desc = new SwapChainDescription()
                           {
                               BufferCount = 1,
                               ModeDescription = mDesc,
                                   Flags = SwapChainFlags.AllowModeSwitch,
                               IsWindowed = false,
                               OutputHandle = form.Handle,
                               SampleDescription = new SampleDescription(1, 0),
                               SwapEffect = SwapEffect.Discard,
                               Usage = Usage.RenderTargetOutput
                           };

            Device.CreateWithSwapChain(null, DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device,
                                       out swapChain);

            //Stops Alt+enter from causing fullscreen skrewiness.
            factory = swapChain.GetParent<Factory>();
            factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            backBuffer = Resource.FromSwapChain<Texture2D>(swapChain, 0);
            renderView = new RenderTargetView(device, backBuffer);

            ImageLoadInformation info = new ImageLoadInformation()
                                            {
                                                BindFlags = BindFlags.None,
                                                CpuAccessFlags = CpuAccessFlags.Read,
                                                FilterFlags = FilterFlags.None,
                                                Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm,
                                                MipFilterFlags = FilterFlags.None,
                                                OptionFlags = ResourceOptionFlags.None,
                                                Usage = ResourceUsage.Staging,
                                                MipLevels = 1
                                            };

            // Make texture 3D
            sourceTexture = Texture2D.FromFile(device, "medusa.jpg", info);
            ImageLoadInformation info2 = new ImageLoadInformation()
                                            {
                                                BindFlags = BindFlags.ShaderResource,
                                                CpuAccessFlags = CpuAccessFlags.None,
                                                FilterFlags = FilterFlags.None,
                                                Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm,
                                                MipFilterFlags = FilterFlags.None,
                                                OptionFlags = ResourceOptionFlags.None,
                                                Usage = ResourceUsage.Default,
                                                MipLevels = 1
                                            };
            Texture2D tShader = Texture2D.FromFile(device, "medusa.jpg", info2);
            srv = new ShaderResourceView(device, tShader);
            //ResizeDevice(new Size(1920, 1080), true);
            // Create a quad that fills the whole screen

            BuildQuad();
            // Create world view (ortho) projection matrices
            //QuaternionCam qCam = new QuaternionCam();

            // Load effect from file. It is a basic effect that renders a full screen quad through
            // an ortho projectio=n matrix
            effect = Effect.FromFile(device, "Texture.fx", "fx_4_0", ShaderFlags.Debug, EffectFlags.None);
            EffectTechnique technique = effect.GetTechniqueByIndex(0);
            EffectPass pass = technique.GetPassByIndex(0);
            InputLayout layout = new InputLayout(device, pass.Description.Signature, new[]
                                                                                         {
                                                                                             new InputElement(
                                                                                                 "POSITION", 0,
                                                                                                 Format.
                                                                                                     R32G32B32A32_Float,
                                                                                                 0, 0),
                                                                                             new InputElement(
                                                                                                 "TEXCOORD", 0,
                                                                                                 Format.
                                                                                                     R32G32_Float,
                                                                                                 16, 0)
                                                                                         });
            //effect.GetVariableByName("mWorld").AsMatrix().SetMatrix(
            //    Matrix.Translation(Layout.OrthographicTransform(Vector2.Zero, 99, size)));
            //effect.GetVariableByName("mView").AsMatrix().SetMatrix(qCam.View);
            //effect.GetVariableByName("mProjection").AsMatrix().SetMatrix(qCam.OrthoProjection);
            //effect.GetVariableByName("tDiffuse").AsResource().SetResource(srv);

            // Set RT and Viewports
            device.OutputMerger.SetTargets(renderView);
            device.Rasterizer.SetViewports(new Viewport(0, 0, size.Width, size.Height, 0.0f, 1.0f));

            // Create solid rasterizer state
            RasterizerStateDescription rDesc = new RasterizerStateDescription()
                                                   {
                                                       CullMode = CullMode.None,
                                                       IsDepthClipEnabled = true,
                                                       FillMode = FillMode.Solid,
                                                       IsAntialiasedLineEnabled = false,
                                                       IsFrontCounterclockwise = true,
                                                       //IsMultisampleEnabled = true,
                                                   };
            RasterizerState rState = RasterizerState.FromDescription(device, rDesc);
            device.Rasterizer.State = rState;

            Texture2DDescription rtDesc = new Texture2DDescription
                                              {
                                                  ArraySize = 1,
                                                  Width = size.Width,
                                                  Height = size.Height,
                                                  BindFlags = BindFlags.RenderTarget,
                                                  CpuAccessFlags = CpuAccessFlags.None,
                                                  Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm,
                                                  OptionFlags = ResourceOptionFlags.None,
                                                  Usage = ResourceUsage.Default,
                                                  MipLevels = 1,
                                                  SampleDescription = new SampleDescription(1, 0)
                                              };
            rtTex = new Texture2D(device, rtDesc);

            rv = new RenderTargetView(device, rtTex);

            stereoizedTexture = Make3D(sourceTexture);
            //ResizeDevice(new Size(1920, 1080), true);
            Console.WriteLine(form.ClientSize);
            // Main Loop
            MessagePump.Run(form, () =>
            {
            device.ClearRenderTargetView(renderView, Color.Cyan);

            //device.InputAssembler.SetInputLayout(layout);
            //device.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList);
            //device.OutputMerger.SetTargets(rv);
            //device.InputAssembler.SetVertexBuffers(0,
            //                                new VertexBufferBinding(vertices, 24, 0));
            //device.InputAssembler.SetIndexBuffer(indices, Format.R16_UInt, 0);
            //for (int i = 0; i < technique.Description.PassCount; ++i)
            //{
            //    // Render the full screen quad
            //    pass.Apply();
            //    device.DrawIndexed(6, 0, 0);
            //}
            ResourceRegion stereoSrcBox = new ResourceRegion { Front = 0, Back = 1, Top = 0, Bottom = size.Height, Left = 0, Right = size.Width };
            device.CopySubresourceRegion(stereoizedTexture, 0, stereoSrcBox, backBuffer, 0, 0, 0, 0);
            //device.CopyResource(rv.Resource, backBuffer);

            swapChain.Present(0, PresentFlags.None);
            });

            // Dispose resources
            vertices.Dispose();
            layout.Dispose();
            effect.Dispose();
            renderView.Dispose();
            backBuffer.Dispose();
            device.Dispose();
            swapChain.Dispose();

            rState.Dispose();
            stereoizedTexture.Dispose();
            sourceTexture.Dispose();
            indices.Dispose();
            srv.Dispose();
        }
Exemplo n.º 46
0
 static void Main()
 {
     var form = new RenderForm("Tutorial 1: Basic Window");
     MessagePump.Run(form, () => { });
 }
        public void OnShutdown(ShutdownMessage msg)
        {
            // Debug
            Console.WriteLine("Shutting down renderer...");

            // Clean up all shader resource views
            /*foreach (var pair in shaderresourcemap)
                pair.Value.Dispose();
            shaderresourcemap.Clear();
            shaderresourcemap = null;

            // Clean up the sampler states
            smpClamp.Dispose();
            smpClamp = null;

            // Clean up the meshes
            mshrQuad.Dispose();
            mshrQuad = null;
            mshQuad = null;

            // Clean up the shaders
            shdBasic.Dispose();
            shdBasic = null;*/

            // Clean up the RT and depth buffer
            vwDepthBuffer.Dispose();
            vwDepthBuffer = null;
            texDepthBuffer.Dispose();
            texDepthBuffer = null;
            rtBackbuffer.Dispose();
            rtBackbuffer = null;

            // Clean up the depth states
            Depth_Disabled.Dispose();
            Depth_Disabled = null;
            Depth_Enabled.Dispose();
            Depth_Enabled = null;

            // Shutdown the swapchain and device
            swapchain.Dispose();
            swapchain = null;
            Device.Dispose();
            Device = null;

            // Cleanup other stuff
            context = null;

            // Cleanup the window
            window.Dispose();
            window = null;
        }
Exemplo n.º 48
0
        static void Main()
        {
            var form = new RenderForm("SlimDX - MiniTri Direct3D9 Sample");
            //var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
            //{
            //    BackBufferWidth = form.ClientSize.Width,
            //    BackBufferHeight = form.ClientSize.Height
            //});
            Core.CreateDevice(form);
            C3Sprite sprite = null;
            if (DnFile.OpenDnpFile("c3.dnp"))
            {
                C3DObj obj = new C3DObj();
                obj.Create( "c3/mesh/002137040.c3" );

                DnFile.CloseDnpFile("c3.dnp");
                C3Texture texture = new C3Texture( "c3/texture/001000000.dds" );
                sprite = new C3Sprite(texture);

            }

            var vertices = new VertexBuffer(Core.Device, 4 * 16, Usage.WriteOnly, VertexFormat.None, Pool.Managed);
            vertices.Lock(0, 0, LockFlags.None).WriteRange(new[] {
                //new Vertex() { Color = Color.Red.ToArgb(), Position = new Vector4(100.0f, 100.0f, 0.5f, 1.0f) },
                //new Vertex() { Color = Color.Blue.ToArgb(), Position = new Vector4(550.0f, 100.0f, 0.5f, 1.0f) },
                //new Vertex() { Color = Color.Green.ToArgb(), Position = new Vector4(350.0f, 500.0f, 0.5f, 1.0f) },
                ////new Vertex() { Color = Color.Blue.ToArgb(), Position = new Vector4(550.0f, 100.0f, 0.5f, 1.0f) },
                //new Vertex() { Color = Color.Green.ToArgb(), Position = new Vector4(450.0f, 500.0f, 0.5f, 1.0f) },
                //new Vertex() { Color = Color.Green.ToArgb(), Position = new Vector4(350.0f, 300.0f, 0.5f, 1.0f) }
                new Vertex() { Color = Color.Red.ToArgb(), Position = new Vector3(0.0f, 0.0f, 0.0f) },
                new Vertex() { Color = Color.Blue.ToArgb(), Position = new Vector3(0.5f, 1.0f, 0.0f) },
                new Vertex() { Color = Color.Red.ToArgb(), Position = new Vector3(1.0f, 0.0f, 0.0f) },
                new Vertex() { Color = Color.Red.ToArgb(), Position = new Vector3(0.5f, 0.5f, 1.0f) },

            });
            vertices.Unlock();

            IndexBuffer indexs = new IndexBuffer(Core.Device, 6 * sizeof(ushort), Usage.WriteOnly, Pool.Managed, true);
            indexs.Lock(0, 0, LockFlags.None).WriteRange<ushort>(new ushort[] { 0, 1, 2, 1, 3, 2 });
            indexs.Unlock();

                var vertexElems = new[] {
                        new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0),
                        new VertexElement(0, 12, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
                                VertexElement.VertexDeclarationEnd
                };

                var vertexDecl = new VertexDeclaration(Core.Device, vertexElems);
              Mesh teapot = Mesh.CreateTeapot(Core.Device);

                Camera cam = new Camera();
                //cam.BuildView();
                //cam.BuildProjection(form.ClientSize.Width, form.ClientSize.Height);

                Core.Device.SetRenderState(RenderState.Lighting, false);//很重要 默认是开启光照的
                //Core.Device.SetRenderState(RenderState.FillMode, FillMode.Solid);

            MessagePump.Run(form, () =>
            {
                //device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
                //Matrix mat = new Matrix();

                //Core.Device.SetTransform(TransformState.World, mat);
               // Core.Device.SetTransform(TransformState.World, Matrix.Identity);
                Core.ClearBuffer(true, true, new Color4(0, 0, 0));
                Core.Begin3D();

                sprite.Draw(0,0);
                //Core.Device.SetStreamSource(0, vertices, 0, 16);
                //Core.Device.VertexDeclaration = vertexDecl;
                //Core.Device.Indices = indexs;
                ////device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);
                //Core.Device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 4, 0, 2);

                //teapot.DrawSubset(0);
                Core.End3D();
                Core.Filp();
            });

            foreach (var item in ObjectTable.Objects)
                item.Dispose();
        }
Exemplo n.º 49
0
        static void Main()
        {
            var form = new RenderForm("SlimDX - MiniTri Direct3D 10 Sample");
            var desc = new SwapChainDescription()
            {
                BufferCount = 1,
                ModeDescription = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed = true,
                OutputHandle = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect = SwapEffect.Discard,
                Usage = Usage.RenderTargetOutput
            };

            Device device;
            SwapChain swapChain;
            Device.CreateWithSwapChain(null, DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);

            //Stops Alt+enter from causing fullscreen skrewiness.
            device.Factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            Texture2D backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0);
            var renderView = new RenderTargetView(device, backBuffer);
            var effect = Effect.FromFile(device, "MiniTri.fx", "fx_4_0");
            var technique = effect.GetTechniqueByIndex(0);
            var pass = technique.GetPassByIndex(0);
            var layout = new InputLayout(device, pass.Description.Signature, new[] {
                new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0),
                new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0) 
            });

            var stream = new DataStream(3 * 32, true, true);
            stream.WriteRange(new[] {
                new Vector4(0.0f, 0.5f, 0.5f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
                new Vector4(0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
                new Vector4(-0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f)
            });
            stream.Position = 0;

            var vertices = new SlimDX.Direct3D10.Buffer(device, stream, new BufferDescription()
            {
                BindFlags = BindFlags.VertexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None,
                SizeInBytes = 3 * 32,
                Usage = ResourceUsage.Default
            });
            stream.Dispose();

            device.OutputMerger.SetTargets(renderView);
            device.Rasterizer.SetViewports(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f));

            MessagePump.Run(form, () =>
            {
                device.ClearRenderTargetView(renderView, Color.Black);

                device.InputAssembler.SetInputLayout(layout);
                device.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList);
                device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 32, 0));

                for (int i = 0; i < technique.Description.PassCount; ++i)
                {
                    pass.Apply();
                    device.Draw(3, 0);
                }

                swapChain.Present(0, PresentFlags.None);
            });

            vertices.Dispose();
            layout.Dispose();
            effect.Dispose();
            renderView.Dispose();
            backBuffer.Dispose();
            device.Dispose();
            swapChain.Dispose();
            //foreach (var item in ObjectTable.Objects)
            //    item.Dispose();
        }
Exemplo n.º 50
0
        public void Init()
        {
            Common.Instance.WriteLine("------- Client initialization --------");

            form = new RenderForm("CubeHags")
            {
                ClientSize = Renderer.Instance.RenderSize,
                StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
            };

            for (int i = 0; i < PingList.Length; i++)
            {
                PingList[i] = new Ping();
            }

            ClearState();
            state = ConnectState.DISCONNECTED;
            realtime = 0;

            CVars.Instance.Get("name", "UnknownCube", CVarFlags.USER_INFO | CVarFlags.ARCHIVE);
            CVars.Instance.Get("rate", "25000", CVarFlags.USER_INFO | CVarFlags.ARCHIVE);
            CVars.Instance.Get("model", "unknown", CVarFlags.USER_INFO | CVarFlags.ARCHIVE);
            CVars.Instance.Get("cl_updaterate", "40", CVarFlags.USER_INFO | CVarFlags.ARCHIVE);
            CVars.Instance.Get("cl_showTimeDelta", "0", CVarFlags.TEMP);
            CVars.Instance.Get("cl_timeout", "30", CVarFlags.NONE);

            cin = new Cinematic();

            // Register commands
            Commands.Instance.AddCommand("cinematic", new CommandDelegate(cin.PlayCinematic_f));
            Commands.Instance.AddCommand("connect", new CommandDelegate(CL_Connect_f));
            Commands.Instance.AddCommand("localservers", new CommandDelegate(CL_LocalServers_f));
            Commands.Instance.AddCommand("cmd", new CommandDelegate(CL_ForwardToServer_f));
            Commands.Instance.AddCommand("configstrings", new CommandDelegate(CL_Configstrings_f));
            Commands.Instance.AddCommand("clientinfo", new CommandDelegate(CL_Clientinfo_f));
            Commands.Instance.AddCommand("disconnect", new CommandDelegate(CL_Disconnect_f));
            //Commands.Instance.AddCommand("rcon", new CommandDelegate(CL_Rcon_f));
            Commands.Instance.AddCommand("ping", new CommandDelegate(CL_Ping_f));
            Commands.Instance.AddCommand("serverstatus", new CommandDelegate(CL_ServerStatus_f));
            Commands.Instance.AddCommand("model", new CommandDelegate(CL_SetModel_f));

            Renderer.Instance.Init(form);
            Input.Instance.InitializeInput();
            HagsConsole.Instance.Init();

            CVars.Instance.Set("cl_running", "1");
            Common.Instance.WriteLine("------- Client initialization Complete --------");
        }
        public override void Start()
        {
            base.Start();
            var form = new RenderForm("02_vertex_and_fragment_program");
            this.device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters
                                                                                                                                {
                                                                                                                                    BackBufferWidth = form.ClientSize.Width,
                                                                                                                                    BackBufferHeight = form.ClientSize.Height
                                                                                                                                });
            int vertexCount = 0;

            for (int i = 0; i < MyStarCount; i++)
            {
                vertexCount += myStarList[i].Points * 2 + 2;
            }

            vertexBuffer = new VertexBuffer(device, vertexCount * 12, Usage.WriteOnly, VertexFormat.Position, Pool.Default);

            Vector3[] starVertices = new Vector3[vertexCount];
            var dataStream = vertexBuffer.Lock(0, 0, LockFlags.Discard);
            for (int i = 0, n = 0; i < myStarList.Length; i++)
            {
                double piOverStarPoints = 3.14159 / myStarList[i].Points;
                float x = myStarList[i].X,
                      y = myStarList[i].Y,
                      outerRadius = myStarList[i].OuterRadius,
                      r = myStarList[i].InnerRadius;
                double angle = 0.0;

                /* Center of star */
                starVertices[n++] = new Vector3(x, y, 0);
                /* Emit exterior vertices for star's points. */
                for (int j = 0; j < myStarList[i].Points; j++)
                {
                    starVertices[n++] = new Vector3(x + outerRadius * (float)Math.Cos(angle), y + outerRadius * (float)Math.Sin(angle), 0);
                    angle -= piOverStarPoints;
                    starVertices[n++] = new Vector3(x + r * (float)Math.Cos(angle), y + r * (float)Math.Sin(angle), 0);
                    angle -= piOverStarPoints;
                }
                /* End by repeating first exterior vertex of star. */
                angle = 0;
                starVertices[n++] = new Vector3(x + outerRadius * (float)Math.Cos(angle), y + outerRadius * (float)Math.Sin(angle), 0);
            }
            dataStream.WriteRange(starVertices);
            dataStream.Position = 0;
            vertexBuffer.Unlock();

            this.CgContext = Context.Create();
            this.CgContext.ParameterSettingMode = ParameterSettingMode.Deferred;
            this.CreateCgPrograms();

            form.Show();
            while (form.Visible)
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, new Color4(0.1f, 0.3f, 0.6f), 1.0f, 0);
                device.BeginScene();

                vertexProgram.Bind();
                fragmentProgram.Bind();

                /* Render the triangle. */
                device.SetStreamSource(0, vertexBuffer, 0, 12);
                device.VertexFormat = VertexFormat.Position;
                for (int i = 0; i < MyStarCount; i++)
                {
                    device.DrawPrimitives(PrimitiveType.TriangleFan, i * 12, 10);
                }
                device.EndScene();
                device.Present();
                Application.DoEvents();
            }

            fragmentProgram.Dispose();
            vertexProgram.Dispose();
            this.CgContext.Dispose();
            foreach (var item in ObjectTable.Objects)
            {
                item.Dispose();
            }
        }
Exemplo n.º 52
0
        static void Main()
        {
            var form = new RenderForm("DotRocket/SlimDX example");

            var description = new SwapChainDescription()
            {
                BufferCount = 1,
                Usage = Usage.RenderTargetOutput,
                OutputHandle = form.Handle,
                IsWindowed = true,
                ModeDescription = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                SampleDescription = new SampleDescription(1, 0),
                Flags = SwapChainFlags.AllowModeSwitch,
                SwapEffect = SwapEffect.Discard
            };

            // Setup rendering
            Device device;
            SwapChain swapChain;
            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, description, out device, out swapChain);
            RenderTargetView renderTarget;
            using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0))
                renderTarget = new RenderTargetView(device, resource);
            var context = device.ImmediateContext;
            var viewport = new Viewport(0.0f, 0.0f, form.ClientSize.Width, form.ClientSize.Height);
            context.OutputMerger.SetTargets(renderTarget);
            context.Rasterizer.SetViewports(viewport);

            // Prevent alt+enter (broken on WinForms)
            using (var factory = swapChain.GetParent<Factory>())
                factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAltEnter);

            // Setup audio-streaming
            XAudio2 xaudio2 = new XAudio2();
            stream = new XWMAStream("tune.xwma");
            MasteringVoice masteringVoice = new MasteringVoice(xaudio2);
            sourceVoice = new SourceVoice(xaudio2, stream.Format);
            audioBuffer = new AudioBuffer();
            audioBuffer.AudioData = stream;
            audioBuffer.AudioBytes = (int)stream.Length;
            audioBuffer.Flags = BufferFlags.EndOfStream;
            sourceVoice.SubmitSourceBuffer(audioBuffer, stream.DecodedPacketsInfo);
            sourceVoice.Start();

            // Setup DotRocket
#if DEBUG
            DotRocket.Device rocket = new DotRocket.ClientDevice("sync");
            rocket.OnPause += Pause;
            rocket.OnSetRow += SetRow;
            rocket.OnIsPlaying += IsPlaying;
            rocket.Connect("localhost", 1338);
#else
            DotRocket.Device rocket = new DotRocket.PlayerDevice("sync");
#endif

            // Get our belowed tracks!
            DotRocket.Track clear_r = rocket.GetTrack("clear.r");
            DotRocket.Track clear_g = rocket.GetTrack("clear.g");
            DotRocket.Track clear_b = rocket.GetTrack("clear.b");

            MessagePump.Run(form, () =>
            {
                // Hammertime.
                double row = ((double)(sourceVoice.State.SamplesPlayed - samplesBias) / stream.Format.SamplesPerSecond) * rowRate;

                // Paint some stuff.
                rocket.Update((int)System.Math.Floor(row));
                context.ClearRenderTargetView(renderTarget, new Color4(
                    clear_r.GetValue(row),
                    clear_g.GetValue(row),
                    clear_b.GetValue(row)));
                swapChain.Present(0, PresentFlags.None);
            });

            // clean up all resources
            // anything we missed will show up in the debug output
            renderTarget.Dispose();
            swapChain.Dispose();
            device.Dispose();
        }
Exemplo n.º 53
0
        static void Main()
        {
            var form = new RenderForm("SlimDX - Conway's game of life Direct3D 11 Sample");
            var desc = new SwapChainDescription()
            {
                BufferCount = 1,
                ModeDescription = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed = true,
                OutputHandle = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect = SwapEffect.Discard,
                Usage = Usage.RenderTargetOutput
            };

            Device device;
            SwapChain swapChain;
            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);

            device.Factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            Texture2D backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0);
            var renderView = new RenderTargetView(device, backBuffer);
            var bytecode = ShaderBytecode.CompileFromFile("Render.fx", "fx_5_0", ShaderFlags.None, EffectFlags.None);
            var effect = new Effect(device, bytecode);
            var technique = effect.GetTechniqueByIndex(0);
            var pass = technique.GetPassByIndex(0);
            String errors;
            var computeByteCode = ShaderBytecode.CompileFromFile("compute.fx", "CS", "cs_5_0", ShaderFlags.None, EffectFlags.None, null, null, out errors);
            var compute = new ComputeShader(device, computeByteCode);

            // shader variable handles
            var conwayResourceH = effect.GetVariableByName("tex").AsResource();
            var resolutionInvH = effect.GetVariableByName("resolutionInv").AsVector();
            resolutionInvH.Set(new Vector2(1.0f / form.ClientSize.Width, 1.0f / form.ClientSize.Height));
            EffectVectorVariable lightPosSSH = effect.GetVariableByName("lightPosSS").AsVector();

            // create texture, fill it with random data
            Texture2DDescription textureDesc = new Texture2DDescription()
            {
                Width = form.ClientSize.Width,
                Height = form.ClientSize.Height,
                MipLevels = 1,
                ArraySize = 1,
                CpuAccessFlags = CpuAccessFlags.None,
                SampleDescription = new SampleDescription(1, 0),
                Usage = ResourceUsage.Default,
                OptionFlags = ResourceOptionFlags.None,
                BindFlags = BindFlags.UnorderedAccess | BindFlags.ShaderResource,
                Format = Format.R32_Float
            };

            var random = new Random();
            var data = new float[form.ClientSize.Width * form.ClientSize.Height];
            for (int i = 0; i < form.ClientSize.Width; ++i)
            {
                for (int j = 0; j < form.ClientSize.Height; ++j)
                    data[i * form.ClientSize.Height + j] = (float)random.Next(2);
            }

            DataStream ds = new DataStream(data, true, false);
            DataRectangle dataRect = new DataRectangle(4 * form.ClientSize.Width, ds);

            Texture2D conwayTex = new Texture2D(device, textureDesc, dataRect);

            // Create SRV and UAV over the same texture
            UnorderedAccessView conwayUAV = new UnorderedAccessView(device, conwayTex);
            ShaderResourceView conwaySRV = new ShaderResourceView(device, conwayTex);

            // On the more typical setup where you switch shaders, 
            // you will have to set the texture after every
            conwayResourceH.SetResource(conwaySRV);

            device.ImmediateContext.OutputMerger.SetTargets(renderView);
            device.ImmediateContext.Rasterizer.SetViewports(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f));
            device.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;

            Vector2 lightPosSS;
            float angle = 0;

            MessagePump.Run(form, () =>
            {
                // this does the light rotation
                angle += 0.002f;
                lightPosSS = new Vector2((float)Math.Sin(angle) * 0.5f + 0.5f, (float)Math.Cos(angle) * 0.5f + 0.5f);
                lightPosSSH.Set(lightPosSS);

                device.ImmediateContext.ComputeShader.Set(compute);
                device.ImmediateContext.ComputeShader.SetUnorderedAccessView(conwayUAV, 0);
                device.ImmediateContext.Dispatch(form.ClientSize.Width / 16 + 1, form.ClientSize.Height / 16 + 1, 1);

                // After running the CS you have to unset UAV from the shader, so you can use it as SRV
                device.ImmediateContext.ComputeShader.SetUnorderedAccessView(null, 0);

                device.ImmediateContext.ClearRenderTargetView(renderView, Color.Black);

                for (int i = 0; i < technique.Description.PassCount; ++i)
                {
                    pass.Apply(device.ImmediateContext);
                    // No vertices are send as they are created in the vertex shader on the fly.
                    device.ImmediateContext.Draw(4, 0);
                }

                swapChain.Present(0, PresentFlags.None);
            });

            computeByteCode.Dispose();
            conwayUAV.Dispose();
            conwaySRV.Dispose();
            conwayTex.Dispose();
            ds.Dispose();
            bytecode.Dispose();
            effect.Dispose();
            renderView.Dispose();
            backBuffer.Dispose();
            device.Dispose();
            swapChain.Dispose();
        }
Exemplo n.º 54
0
        static void Main()
        {
            MainForm parent = new MainForm();
            RenderForm form = new RenderForm("SlimDX - MiniTri Direct3D9 Sample");
            form.Location = new Point(8, 24);
            form.TopLevel = false;
            parent.Controls.Add(form);
            parent.Size = new Size(900, 600);
            form.ClientSize = new Size((GameTypes.MAP_WIDTH*GameTypes.SPRITE_WIDTH), (GameTypes.MAP_HEIGHT*GameTypes.SPRITE_HEIGHT));
            parent.Controls.Add(new Button());
            parent.Show();

            //Icon ico = new Icon("assets//textures//icon.bmp");

            form.Click += new EventHandler(form_Click);
            form.MouseMove += new MouseEventHandler(form_MouseMove);
            form.MouseLeave += new EventHandler(form_MouseLeave);
            form.MouseEnter += new EventHandler(form_MouseEnter);
            form.KeyDown += new KeyEventHandler(form_KeyDown);
            form.KeyUp += new KeyEventHandler(form_KeyUp);
            form.LostFocus += new EventHandler(form_LostFocus);
            form.Focus();

            parent.KeyDown += new KeyEventHandler(form_KeyDown);
            parent.KeyUp += new KeyEventHandler(form_KeyUp);

            form.FormBorderStyle = FormBorderStyle.None;

            Device device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
            {
                BackBufferWidth = form.ClientSize.Width,
                BackBufferHeight = form.ClientSize.Height
            });

            Maze testmaze = new Maze();
            testmaze.Initialize();
            testmaze.Generate();
            int[,] walkable = new int[GameTypes.MAP_WIDTH, GameTypes.MAP_WIDTH];
            walkable = testmaze.getWalkableArray();

            TextureManager.Instance.init(device);
            GameEngine.Instance.init();
            WindowManager.Instance.Main = parent;
            WindowManager.Instance.Slim = form;

            GameEngine.Instance.LifeTimer.Start();
            GameEngine.Instance.FPSTimer.Start();
            GameEngine.Instance.TestSpriteTimer.Start();

            PathFinding.Instance.init(GameTypes.MAP_WIDTH,GameTypes.MAP_HEIGHT);

            GameEngine.Instance.testvec = new Vector3(5 * 32, 5 * 632, 0);

            Enemy e = new Enemy(GameTypes.ENEMY_UNI);
            e.StackTest();

            GameEngine.Instance.testEnemy = new Enemy(GameTypes.ENEMY_UNI);
            GameEngine.Instance.Enemies = new System.Collections.Generic.List<Enemy>();

            GameEngine.Instance.LifeTimer.Stop();
            //for (int i = 0; i < 10; i++)
            //{
            //    Enemy enemy = new Enemy(GameTypes.ENEMY_UNI);
            //    enemy.BirthTime = (float)GameEngine.Instance.LifeTimer.Elapsed + i;
            //    GameEngine.Instance.Enemies.Add(enemy);
            //}

            //close some nodes
            //PathFinding.Instance.Nodes[4 + 10].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 20].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 30].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 40].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 50].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 60].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 70].Walkable = false;
            //PathFinding.Instance.Nodes[4 + 80].Walkable = false;

            for (int y = 0; y < GameTypes.MAP_HEIGHT; y++)
            {
                for (int x = 0; x < GameTypes.MAP_WIDTH; x++)
                {
                    if (walkable[x, y] == 0 || y == GameTypes.MAP_HEIGHT - 1)
                    {
                        PathFinding.Instance.GetNode(x, y).Walkable = false;
                    }
                }
            }

            PathFinding.Instance.GetNode(GameTypes.PLAYER_START_COORDS).Walkable = true;

            GameEngine.Instance.SpawnEnemy(GameEngine.Instance.PlayerLevel);
            GameEngine.Instance.PlaceShiny();

            WindowManager.Instance.Main.lblScore.Text = "SCORE: " + GameEngine.Instance.PlayerScore.ToString();
            WindowManager.Instance.Main.lblLife.Text = "LIFE";
            WindowManager.Instance.Main.ShowLife();
            WindowManager.Instance.Main.lblHiscore.Text = "HI-SCORE  " + GameEngine.Instance.HiScore.ToString();

            MessagePump.Run(form, () =>
            {
                if (!GameEngine.Instance.PauseRendering)
                {
                    int score = GameEngine.Instance.PlayerScore;
                    int life = GameEngine.Instance.PlayerLife;
                    int hiscore = GameEngine.Instance.HiScore;

                    //Time to spawn?
                    GameEngine.Instance.SpawnTimer.Stop();
                    if ((float)GameEngine.Instance.SpawnTimer.Elapsed >= GameEngine.Instance.SpawnFrequency)
                    {
                        GameEngine.Instance.SpawnEnemy(GameEngine.Instance.PlayerLevel);
                        if((GameEngine.Instance.SpawnFrequency - GameTypes.GAME_SPAWN_SPEEDUP_RATE >= GameTypes.GAME_SPAWN_MIN_FREQ))
                            GameEngine.Instance.SpawnFrequency -= GameTypes.GAME_SPAWN_SPEEDUP_RATE;

                        for(int i =0;i<GameTypes.GAME_LEVEL_FREQ.Length;i++)
                            if(GameEngine.Instance.SpawnFrequency <= GameTypes.GAME_LEVEL_FREQ[i])
                                GameEngine.Instance.PlayerLevel = i;

                        GameEngine.Instance.SpawnTimer.Start();
                    }
                    else
                    {
                        //if (GameEngine.Instance.Enemies.Count == 1)
                          //  GameEngine.Instance.SpawnEnemy(GameEngine.Instance.PlayerLevel);
                    }

                    GameEngine.Instance.LifeTimer.Stop();
                    float time = (float)GameEngine.Instance.LifeTimer.Elapsed;
                    float fps = (float)GameEngine.Instance.FPSTimer.FPS;
                    float ticks = (float)GameEngine.Instance.LifeTimer.GetTicks(0.017f);
                    WindowManager.Instance.Main.showelapsed(time, fps, ticks);

                    device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
                    device.BeginScene();

                    //draw maze

                    TextureManager.Instance.spritey.Begin(SpriteFlags.AlphaBlend | SpriteFlags.DoNotAddRefTexture);
                    for (int y = 0; y < GameTypes.MAP_HEIGHT; y++)
                    {
                        for (int x = 0; x < GameTypes.MAP_WIDTH; x++)
                        {
                            if (PathFinding.Instance.GetNode(x, y).Walkable)
                                TextureManager.Instance.spritey.Draw(TextureManager.Instance.ddsTestTile, new Rectangle(0, 0, 32, 32), new Vector3(0, 0, 0), new Vector3(x * 32, y * 32, 0), new Color4(Color.White));
                            else
                                TextureManager.Instance.spritey.Draw(TextureManager.Instance.ddsTestTileOut, new Rectangle(0, 0, 32, 32), new Vector3(0, 0, 0), new Vector3(x * 32, y * 32, 0), new Color4(Color.White));
                        }
                    }

                    //draw shiny
                    TextureManager.Instance.spritey.Draw(TextureManager.Instance.pngShiny, new Rectangle(0, 0, 32, 32), new Vector3(0, 0, 0), new Vector3(GameEngine.Instance.ShinyLocation.X*32,GameEngine.Instance.ShinyLocation.Y*32,0), new Color4(Color.White));

                    //sprite update
                    GameEngine.Instance.TestSpriteTimer.Stop();
                    if (GameEngine.Instance.TestSpriteTimer.Elapsed > 0.017)
                    {
                        GameEngine.Instance.ThePlayer.Update();
                        //GameEngine.Instance.testvec.X += 0.5f;
                        //GameEngine.Instance.testEnemy.UpdateMove();

                        // move enemies
                        foreach (Enemy enemy in GameEngine.Instance.Enemies)
                        {
                            if (enemy.Active)
                                enemy.UpdateMove();
                            else
                            {
                                if (GameEngine.Instance.LifeTimer.Elapsed > enemy.BirthTime)
                                    enemy.Active = true;
                            }
                        }
                        //move player
                        GameEngine.Instance.ThePlayer.Move(GameEngine.Instance.KEYS_DOWN);

                        GameEngine.Instance.TestSpriteTimer.Start();
                    }

                    //Draw enemies
                    GameEngine.Instance.Enemies.Sort(delegate(Enemy e1, Enemy e2)
                    {
                        if (e1.Position.Y != e2.Position.Y)
                            return e1.Position.Y.CompareTo(e2.Position.Y);
                        else
                            return e1.BirthTime.CompareTo(e2.BirthTime);
                    });
                    bool playerDrawn = false;
                    bool playerShadowDrawn = false;

                    //SHADOWS first
                    foreach (Enemy enemy in GameEngine.Instance.Enemies)
                    {
                        if (enemy.Active)
                        {
                            if (!playerShadowDrawn && enemy.Position.Y > GameEngine.Instance.ThePlayer.Location.Y)
                            {
                                TextureManager.Instance.spritey.Draw(TextureManager.Instance.pngDropShadow, new Rectangle(0, 0, 32, 32),
                                    new Vector3(0, 0, 0), GameEngine.Instance.ThePlayer.Location, new Color4(Color.White));
                                playerShadowDrawn = true;
                            }

                            if (PathFinding.Instance.GetNode(enemy.LastPoint).Walkable && PathFinding.Instance.GetNode(enemy.NextPoint).Walkable)
                            {
                                TextureManager.Instance.spritey.Draw(TextureManager.Instance.pngDropShadow, new Rectangle(0, 0, 32, 32),
                                    new Vector3(0, 0, 0), enemy.Position, new Color4(Color.White));
                            }
                        }
                    }
                    if (!playerShadowDrawn)
                    {
                        TextureManager.Instance.spritey.Draw(TextureManager.Instance.pngDropShadow, new Rectangle(0, 0, 32, 32),
                                new Vector3(0, 0, 0), GameEngine.Instance.ThePlayer.Location, new Color4(Color.White));
                    }

                    //DRAW ENEMIES
                    foreach (Enemy enemy in GameEngine.Instance.Enemies)
                    {
                        if (enemy.Active)
                        {
                            if (!playerDrawn && enemy.Position.Y > GameEngine.Instance.ThePlayer.Location.Y)
                            {
                                TextureManager.Instance.spritey.Draw(TextureManager.Instance.tgaEnemies, GameEngine.Instance.ThePlayer.RenderRect,
                                    new Vector3(0, 0, 0), GameEngine.Instance.ThePlayer.LocationDraw, new Color4(Color.White));
                                playerDrawn = true;
                            }

                            if (PathFinding.Instance.GetNode(enemy.LastPoint).Walkable && PathFinding.Instance.GetNode(enemy.NextPoint).Walkable)
                            {
                                TextureManager.Instance.spritey.Draw(TextureManager.Instance.tgaEnemies, enemy.RenderRect,
                                    new Vector3(0, 0, 0), enemy.Position, new Color4(Color.White));
                            }
                        }
                    }

                    //Draw PLAYER if at bottom of screen
                    if (!playerDrawn)
                    {
                        TextureManager.Instance.spritey.Draw(TextureManager.Instance.tgaEnemies, GameEngine.Instance.ThePlayer.RenderRect,
                                    new Vector3(0, 0, 0), GameEngine.Instance.ThePlayer.LocationDraw, new Color4(Color.White));
                    }

                    //Draw mouseover effect
                    if (WindowManager.Instance.MouseOverDX)
                    {
                        TextureManager.Instance.spritey.Draw(TextureManager.Instance.ddsMouseover, new Rectangle(0, 0, 32, 32), new Vector3(0, 0, 0),
                            new Vector3(WindowManager.Instance.mouseGridLocation.X * GameTypes.SPRITE_WIDTH, WindowManager.Instance.mouseGridLocation.Y * GameTypes.SPRITE_HEIGHT, 0),
                            new Color4(Color.White));
                        TextureManager.Instance.spritey.Draw(TextureManager.Instance.pngMouse, new Rectangle(0, 0, 32, 32), new Vector3(16, 16, 0),
                            new Vector3(WindowManager.Instance.mouseVector.X, WindowManager.Instance.mouseVector.Y, 0),
                            new Color4(Color.White));
                    }

                    TextureManager.Instance.spritey.End();

                    device.EndScene();
                    device.Present();

                    //WindowManager.Instance.Main.showkeys();

                    GameEngine.Instance.CheckCollisions();

                    if(score != GameEngine.Instance.PlayerScore)
                        WindowManager.Instance.Main.lblScore.Text = "SCORE: " + GameEngine.Instance.PlayerScore.ToString();
                    if (life != GameEngine.Instance.PlayerLife)
                    {
                        WindowManager.Instance.Main.lblLife.Text = "LIFE";
                        WindowManager.Instance.Main.ShowLife();
                    }
                    if (hiscore != GameEngine.Instance.HiScore)
                        WindowManager.Instance.Main.lblHiscore.Text = "HI-SCORE  " + GameEngine.Instance.HiScore.ToString();
                }
            });

            foreach (var item in ObjectTable.Objects)
                item.Dispose();
        }
Exemplo n.º 55
0
        /// <summary>
        /// Runs the game.
        /// </summary>
        public void Run()
        {
            bool isFormClosed = false;
            bool formIsResizing = false;

            Form = new RenderForm();

            currentFormWindowState = Form.WindowState;
            Form.Resize += (o, args) =>
            {
                if (Form.WindowState != currentFormWindowState)
                {
                    if (togglingFullScreen == false)
                        HandleResize(o, args);
                }

                currentFormWindowState = Form.WindowState;
            };

            Form.ResizeBegin += (o, args) => { formIsResizing = true; };
            Form.ResizeEnd += (o, args) =>
            {
                formIsResizing = false;
                HandleResize(o, args);
            };

            Form.Closed += (o, args) => { isFormClosed = true; };

            // initialize input
            SlimDX.RawInput.Device.RegisterDevice(UsagePage.Generic, UsageId.Keyboard, DeviceFlags.None);
            SlimDX.RawInput.Device.RegisterDevice(UsagePage.Generic, UsageId.Mouse, DeviceFlags.None);

            Input = new Input(Form);

            SlimDX.RawInput.Device.KeyboardInput += Input.Device_KeyboardInput;
            SlimDX.RawInput.Device.MouseInput += Input.Device_MouseInput;

            Width = 1024;
            Height = 768;
            FullScreenWidth = Screen.PrimaryScreen.Bounds.Width;
            FullScreenHeight = Screen.PrimaryScreen.Bounds.Height;
            NearPlane = 0.1f;
            FarPlane = 200f;
            FieldOfView = (float)Math.PI / 4;
            Freelook = new FreeLook(Input);
            Ambient = Color.Gray.ToArgb();

            OnInitializeDevice();

            Fps = new FpsDisplay(Device);
            MeshFactory = new GraphicObjectFactory(Device);

            OnInitialize();
            OnResetDevice();

            clock.Start();
            MessagePump.Run(Form, () =>
            {
                OnHandleInput();
                Update();
                Input.ClearKeyCache();

                if (isFormClosed)
                    return;

                if (!formIsResizing)
                    Render();
            });

            SlimDX.RawInput.Device.KeyboardInput -= Input.Device_KeyboardInput;
            SlimDX.RawInput.Device.MouseInput -= Input.Device_MouseInput;

            OnLostDevice();
        }
Exemplo n.º 56
0
 public Window()
 {
     form = new RenderForm("Game");
     form.UserResized += HandleResize;
     device = Device.GetDevice(this);
 }
Exemplo n.º 57
0
        internal static void InitForm()
        {
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);

            GameForm = new RenderForm();
            GameForm.SizeChanged += new EventHandler(Form_SizeChanged);
            GameForm.MouseDown += new MouseEventHandler(Form_MouseDown);

            _MainMenu = new MainMenu();

            _MainMenu.MenuItems.Add("New Game");
            _MainMenu.MenuItems[0].MenuItems.Add("Hotseat");
            _MainMenu.MenuItems[0].MenuItems[0].Click += new EventHandler(MainForm_NewGame_Hotseat);

            _MainMenu.MenuItems[0].MenuItems.Add("Singleplayer");
            _MainMenu.MenuItems[0].MenuItems[1].Click += new EventHandler(MainForm_NewGame_Singleplayer);

            _MainMenu.MenuItems[0].MenuItems.Add("-");

            _MainMenu.MenuItems[0].MenuItems.Add("Multiplayer Host");
            _MainMenu.MenuItems[0].MenuItems[3].Click += new EventHandler(MainForm_NewGame_Multiplayer_Host);

            _MainMenu.MenuItems[0].MenuItems.Add("Multiplayer Join");
            _MainMenu.MenuItems[0].MenuItems[4].Click += new EventHandler(MainForm_NewGame_Multiplayer_Join);

            _MainMenu.MenuItems.Add("Options");
            _MainMenu.MenuItems[1].Click +=new EventHandler(MainForm_Options);

            _MainMenu.MenuItems.Add("Disconnect");
            _MainMenu.MenuItems[2].Click += new EventHandler(MainForm_Disconnect);
            _MainMenu.MenuItems[2].Enabled = false;

            _MainMenu.MenuItems.Add("History");
            _MainMenu.MenuItems[3].MenuItems.Add("Undo move");
            _MainMenu.MenuItems[3].MenuItems[0].ShowShortcut = true;
            _MainMenu.MenuItems[3].MenuItems[0].Shortcut = Shortcut.CtrlZ;
            _MainMenu.MenuItems[3].MenuItems[0].Click += new EventHandler(MainForm_History_Undo);
            _MainMenu.MenuItems[3].MenuItems.Add("Redo move");
            _MainMenu.MenuItems[3].MenuItems[1].ShowShortcut = true;
            _MainMenu.MenuItems[3].MenuItems[1].Shortcut = Shortcut.CtrlQ;
            _MainMenu.MenuItems[3].MenuItems[1].Click += new EventHandler(MainForm_History_Redo);
            _MainMenu.MenuItems[3].MenuItems.Add("Resume Game");
            _MainMenu.MenuItems[3].MenuItems[2].Click += new EventHandler(MainForm_History_Resume);

            #if DEBUG
            _MainMenu.MenuItems[0].MenuItems.Add("AI Test");
            _MainMenu.MenuItems[0].MenuItems[5].Click += new EventHandler(MainForm_AITest);
            #endif

            GameForm.Menu = _MainMenu;

            GameForm.MinimumSize = new Size(640, 480);

            GameForm.Icon = new Icon(Resource_Manager.GetResourceStream("logo.ico"), 256, 256);

            GameForm.ResizeEnd += new EventHandler(GameForm_ResizeEnd);
            GameForm.ResizeBegin += new EventHandler(GameForm_ResizeBegin);
            #if !DEBUG
            GameForm.Text = "Connect-4 3D";
            #else
            GameForm.Text = "Connect-4 3D - Debug Mode";
            #endif
            GameForm.FormClosing += new FormClosingEventHandler(GameForm_FormClosing);
        }
        public void OnInitialise(InitialiseMessage msg)
        {
            // Initialise renderer
            Console.WriteLine("Initialising renderer...");
            rendermsg = new RenderMessage();
            updatemsg = new UpdateMessage();

            // Create the window
            window = new RenderForm("Castle Renderer - 11030062");
            window.Width = 1280;
            window.Height = 720;

            // Add form events
            window.FormClosed += window_FormClosed;

            // Defaults
            ClearColour = new Color4(1.0f, 0.0f, 0.0f, 1.0f);

            // Setup the device
            var description = new SwapChainDescription()
            {
                BufferCount = 1,
                Usage = Usage.RenderTargetOutput,
                OutputHandle = window.Handle,
                IsWindowed = true,
                ModeDescription = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                SampleDescription = new SampleDescription(1, 0),
                Flags = SwapChainFlags.AllowModeSwitch,
                SwapEffect = SwapEffect.Discard
            };
            Device tmp;
            var result = Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, description, out tmp, out swapchain);
            if (result.IsFailure)
            {
                Console.WriteLine("Failed to create Direct3D11 device (" + result.Code.ToString() + ":" + result.Description + ")");
                return;
            }
            Device = tmp;
            context = Device.ImmediateContext;
            using (var factory = swapchain.GetParent<Factory>())
                factory.SetWindowAssociation(window.Handle, WindowAssociationFlags.IgnoreAltEnter);

            // Check AA stuff
            int q = Device.CheckMultisampleQualityLevels(Format.R8G8B8A8_UNorm, 8);

            // Setup the viewport
            viewport = new Viewport(0.0f, 0.0f, window.ClientSize.Width, window.ClientSize.Height);
            viewport.MinZ = 0.0f;
            viewport.MaxZ = 1.0f;
            context.Rasterizer.SetViewports(viewport);

            // Setup the backbuffer
            using (var resource = Resource.FromSwapChain<Texture2D>(swapchain, 0))
                rtBackbuffer = new RenderTargetView(Device, resource);

            // Setup depth for backbuffer
            {
                Texture2DDescription texdesc = new Texture2DDescription()
                {
                    ArraySize = 1,
                    BindFlags = BindFlags.DepthStencil,
                    CpuAccessFlags = CpuAccessFlags.None,
                    Format = Format.D32_Float,
                    Width = (int)viewport.Width,
                    Height = (int)viewport.Height,
                    MipLevels = 1,
                    OptionFlags = ResourceOptionFlags.None,
                    SampleDescription = new SampleDescription(1, 0),
                    Usage = ResourceUsage.Default
                };
                texDepthBuffer = new Texture2D(Device, texdesc);
                DepthStencilViewDescription viewdesc = new DepthStencilViewDescription()
                {
                    ArraySize = 0,
                    Format = Format.D32_Float,
                    Dimension = DepthStencilViewDimension.Texture2D,
                    MipSlice = 0,
                    Flags = 0,
                    FirstArraySlice = 0
                };
                vwDepthBuffer = new DepthStencilView(Device, texDepthBuffer, viewdesc);
            }

            // Setup states
            #region Depth States
            // Setup depth states
            {
                DepthStencilStateDescription desc = new DepthStencilStateDescription()
                {
                    IsDepthEnabled = true,
                    IsStencilEnabled = false,
                    DepthWriteMask = DepthWriteMask.All,
                    DepthComparison = Comparison.Less
                };
                Depth_Enabled = DepthStencilState.FromDescription(Device, desc);
            }
            {
                DepthStencilStateDescription desc = new DepthStencilStateDescription()
                {
                    IsDepthEnabled = false,
                    IsStencilEnabled = false,
                    DepthWriteMask = DepthWriteMask.Zero,
                    DepthComparison = Comparison.Less
                };
                Depth_Disabled = DepthStencilState.FromDescription(Device, desc);
            }
            {
                DepthStencilStateDescription desc = new DepthStencilStateDescription()
                {
                    IsDepthEnabled = true,
                    IsStencilEnabled = false,
                    DepthWriteMask = DepthWriteMask.Zero,
                    DepthComparison = Comparison.Less
                };
                Depth_ReadOnly = DepthStencilState.FromDescription(Device, desc);
            }
            #endregion
            #region Sampler States
            Sampler_Clamp = SamplerState.FromDescription(Device, new SamplerDescription()
            {
                AddressU = TextureAddressMode.Clamp,
                AddressV = TextureAddressMode.Clamp,
                AddressW = TextureAddressMode.Clamp,
                Filter = Filter.Anisotropic,
                MinimumLod = 0.0f,
                MaximumLod = float.MaxValue,
                MaximumAnisotropy = 16
            });
            Sampler_Clamp_Point = SamplerState.FromDescription(Device, new SamplerDescription()
            {
                AddressU = TextureAddressMode.Clamp,
                AddressV = TextureAddressMode.Clamp,
                AddressW = TextureAddressMode.Clamp,
                Filter = Filter.MinMagMipPoint
            });
            Sampler_Clamp_Linear = SamplerState.FromDescription(Device, new SamplerDescription()
            {
                AddressU = TextureAddressMode.Clamp,
                AddressV = TextureAddressMode.Clamp,
                AddressW = TextureAddressMode.Clamp,
                Filter = Filter.MinMagMipLinear
            });
            Sampler_Wrap = SamplerState.FromDescription(Device, new SamplerDescription()
            {
                AddressU = TextureAddressMode.Wrap,
                AddressV = TextureAddressMode.Wrap,
                AddressW = TextureAddressMode.Wrap,
                Filter = Filter.Anisotropic,
                MinimumLod = 0.0f,
                MaximumLod = float.MaxValue,
                MaximumAnisotropy = 16
            });
            #endregion
            #region Rasterizer States
            Culling_Backface = RasterizerState.FromDescription(Device, new RasterizerStateDescription()
            {
                CullMode = CullMode.Back,
                DepthBias = 0,
                DepthBiasClamp = 0.0f,
                IsDepthClipEnabled = true,
                FillMode = FillMode.Solid,
                IsAntialiasedLineEnabled = false,
                IsFrontCounterclockwise = false,
                IsMultisampleEnabled = true,
                IsScissorEnabled = false,
                SlopeScaledDepthBias = 0.0f
            });
            Culling_Frontface = RasterizerState.FromDescription(Device, new RasterizerStateDescription()
            {
                CullMode = CullMode.Front,
                DepthBias = 0,
                DepthBiasClamp = 0.0f,
                IsDepthClipEnabled = true,
                FillMode = FillMode.Solid,
                IsAntialiasedLineEnabled = false,
                IsFrontCounterclockwise = false,
                IsMultisampleEnabled = true,
                IsScissorEnabled = false,
                SlopeScaledDepthBias = 0.0f
            });
            Culling_None = RasterizerState.FromDescription(Device, new RasterizerStateDescription()
            {
                CullMode = CullMode.None,
                DepthBias = 0,
                DepthBiasClamp = 0.0f,
                IsDepthClipEnabled = true,
                FillMode = FillMode.Solid,
                IsAntialiasedLineEnabled = false,
                IsFrontCounterclockwise = false,
                IsMultisampleEnabled = true,
                IsScissorEnabled = false,
                SlopeScaledDepthBias = 0.0f
            });
            #endregion
            #region Blend States
            {
                BlendStateDescription desc = new BlendStateDescription();
                desc.RenderTargets[0].BlendEnable = true;
                desc.RenderTargets[0].BlendOperation = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlend = BlendOption.One;
                desc.RenderTargets[0].DestinationBlend = BlendOption.Zero;
                desc.RenderTargets[0].BlendOperationAlpha = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlendAlpha = BlendOption.One;
                desc.RenderTargets[0].DestinationBlendAlpha = BlendOption.Zero;
                desc.RenderTargets[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                Blend_Opaque = BlendState.FromDescription(Device, desc);
            }
            {
                BlendStateDescription desc = new BlendStateDescription();
                desc.RenderTargets[0].BlendEnable = true;
                desc.RenderTargets[0].BlendOperation = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlend = BlendOption.SourceAlpha;
                desc.RenderTargets[0].DestinationBlend = BlendOption.InverseSourceAlpha;
                desc.RenderTargets[0].BlendOperationAlpha = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlendAlpha = BlendOption.One;
                desc.RenderTargets[0].DestinationBlendAlpha = BlendOption.Zero;
                desc.RenderTargets[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                Blend_Alpha = BlendState.FromDescription(Device, desc);
            }
            {
                BlendStateDescription desc = new BlendStateDescription();
                desc.RenderTargets[0].BlendEnable = true;
                desc.RenderTargets[0].BlendOperation = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlend = BlendOption.One;
                desc.RenderTargets[0].DestinationBlend = BlendOption.One;
                desc.RenderTargets[0].BlendOperationAlpha = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlendAlpha = BlendOption.One;
                desc.RenderTargets[0].DestinationBlendAlpha = BlendOption.Zero;
                desc.RenderTargets[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                Blend_Add = BlendState.FromDescription(Device, desc);
            }
            {
                BlendStateDescription desc = new BlendStateDescription();
                desc.RenderTargets[0].BlendEnable = true;
                desc.RenderTargets[0].BlendOperation = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlend = BlendOption.DestinationColor;
                desc.RenderTargets[0].DestinationBlend = BlendOption.Zero;
                desc.RenderTargets[0].BlendOperationAlpha = BlendOperation.Add;
                desc.RenderTargets[0].SourceBlendAlpha = BlendOption.One;
                desc.RenderTargets[0].DestinationBlendAlpha = BlendOption.Zero;
                desc.RenderTargets[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
                Blend_Multiply = BlendState.FromDescription(Device, desc);
            }
            #endregion

            // Setup default states
            Depth = Depth_Enabled;
            Culling = Culling_Backface;
            Blend = Blend_Opaque;

            // Setup other objects
            shaderresourcemap = new Dictionary<Resource, ShaderResourceView>();
            resourceviewslots = new ShaderResourceViewData[MaxPixelShaderResourceViewSlots];

            // Send the window created message
            WindowCreatedMessage windowcreatedmsg = new WindowCreatedMessage();
            windowcreatedmsg.Form = window;
            Owner.MessagePool.SendMessage(windowcreatedmsg);

            // Show the form
            window.Show();
        }
Exemplo n.º 59
0
        public void Run()
        {
            _form = new RenderForm("SlimDX Sandbox");

            Initialize();

            MessagePump.Run(_form, RenderFrame);
        }
Exemplo n.º 60
0
        public void Init(RenderForm form)
        {
            this.form = form;

            form.ResizeBegin += new System.EventHandler((o, e) => { formIsResizing = true; });
            form.ResizeEnd += new EventHandler((o, e) => { formIsResizing = false; if(form.ClientSize != RenderSize) _sizeChanged = true; });
            form.Show();
            InitDevice();

            // Init input
            Commands.Instance.AddCommand("r_mode", ToggleFillMode);
            KeyHags.Instance.SetBind("F12", "r_mode");
        }