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 }; }
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"); }
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"); }
public Window(int width, int height) { form = new RenderForm("Game"); form.Width = width; form.Height = height; form.UserResized += HandleResize; device = Device.GetDevice(this); }
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); { } } }
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(); }
static void Main(string[] args) { form = new RenderForm("Simple Texture Example"); if (InitDevice().IsFailure) { CleanUpDevice(); return; } MessagePump.Run(form, () => { Render(); }); CleanUpDevice(); }
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; }
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 }; }
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 }); }
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); }
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); }
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(); }
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); }
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); } } }
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(); }
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); }
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."); }
/// <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; }
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); }
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>(); }
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)); }
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)); }); } }
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>(); }
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; }
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(); }); } }
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; }
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); }
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 }
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(); }
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; }
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; }
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(); }
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(); }
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(); }); }
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; }
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(); }
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(); }
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; }
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(); }
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(); }
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(); } }
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(); }
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(); }
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(); }
/// <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(); }
public Window() { form = new RenderForm("Game"); form.UserResized += HandleResize; device = Device.GetDevice(this); }
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(); }
public void Run() { _form = new RenderForm("SlimDX Sandbox"); Initialize(); MessagePump.Run(_form, RenderFrame); }
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"); }