public Graphics(RenderForm form, int width, int height) { reset = () => form.Invoke(new Action(() => { device.Reset(presentParameters); fontRenderer.Flush(); textureRenderer.Flush(); resized = false; })); form.UserResized += (sender, args) => Resize(form.ClientSize.Width, form.ClientSize.Height); presentParameters = new PresentParameters { Windowed = true, SwapEffect = SwapEffect.Discard, BackBufferFormat = Format.A8R8G8B8, BackBufferCount = 1, BackBufferWidth = width, BackBufferHeight = height, PresentationInterval = PresentInterval.One, MultiSampleType = MultisampleType.None, MultiSampleQuality = 0, PresentFlags = PresentFlags.LockableBackBuffer }; direct3D = new Direct3DEx(); device = new DeviceEx(direct3D, 0, DeviceType.Hardware, form.Handle, CREATE_FLAGS, presentParameters); fontRenderer = new FontRenderer(device); textureRenderer = new TextureRenderer(device); renderLocker.Reset(); }
public Engine(IoCContainer container) { _container = container; #if DEBUG_REFERENCES SharpDX.Configuration.EnableObjectTracking = true; SharpDX.Configuration.EnableReleaseOnFinalizer = true; #endif IDeviceContextService deviceContextService = _container.Resolve<IDeviceContextService>(); _form = deviceContextService.Form; _context = deviceContextService.Context; _form.Icon = Resources.openuo; _form.Text = string.Format("OpenUO v{0}", new AssemblyInfo(Assembly.GetEntryAssembly()).Version); _form.ResizeBegin += OnResizeBegin; _form.ResizeEnd += OnResizeEnd; _form.FormClosed += OnFormClosed; _updateState = new UpdateState(); _gameTime = new GameTime(); _world = new World(container); container.Resolve<IConsole>().WriteLine("Testing 123"); _config = _container.Resolve<IConfiguration>(); _updateChain = _container.Resolve<IChain<UpdateState>>(); _worldRenderChain = _container.Resolve<IWorldRenderChain>(); _uiRenderChain = _container.Resolve<IUIRenderChain>(); _screenTarget = new DrawScreenTarget(_context); _updateChain.Freeze(); _worldRenderChain.Freeze(); _uiRenderChain.Freeze(); }
private static void Main(string[] args) { string save_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\TechArts3D\TDCG"; OcuConfig ocu_config; string ocu_config_file = Path.Combine(Application.StartupPath, @"ocuconfig.xml"); if (File.Exists(ocu_config_file)) ocu_config = OcuConfig.Load(ocu_config_file); else ocu_config = new OcuConfig(); RenderForm form = new RenderForm("TSOView for Oculus (SharpDX Direct3D11 net40)"); OculusViewer viewer = new OculusViewer(); if (viewer.InitializeApplication(form, ocu_config)) { foreach (string arg in args) viewer.figures.LoadAnyFile(arg, true); if (viewer.figures.Count == 0) viewer.figures.LoadAnyFile(Path.Combine(save_path, @"system.tdcgsav.png"), true); viewer.MotionEnabled = true; RenderLoop.Run(form, () => { viewer.FrameMove(); viewer.Render(); }); } viewer.Dispose(); }
private static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Args: filepath"); return; } else { var file = args[0]; var form = new RenderForm("Assimp Viewer"); form.Show(); using (var app = new AssimpViewWindow(file)) { app.Initialize(form); using (var loop = new RenderLoop(form)) { while (loop.NextFrame()) { app.Update(); app.Render(); } } } } }
public GBuffer(IKernel kernel) { IDeviceProvider provider = kernel.Get<IDeviceProvider>(); _device = provider.Device; _form = provider.RenderForm; }
static void Main(string[] args) { RenderForm form = new RenderForm("Underground - POO version"); form.Size = new Size(1280, 700); Direct3D direct3D = new Direct3D(); PresentParameters parameters = new PresentParameters(form.ClientSize.Width, form.ClientSize.Height); Device device = new Device(direct3D, 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, parameters); ResManager.Initialize(ref device, ref form); IngameClass ingame = new IngameClass(ref device, ref form); Stopwatch clock = new Stopwatch(); clock.Start(); RenderLoop.Run(form, () => { device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); device.BeginScene(); ingame.Draw(ref device, ref form, ref clock); device.EndScene(); device.Present(); }); ResManager.Dispose(); device.Dispose(); direct3D.Dispose(); }
public Player(ref RenderForm form, Matrix proj) { form.FormClosing += TurnOFFThread; this.form = form; this.proj = proj; if (!ThreadLaunched) { ThreadLaunched = true; ThOrientCamera = new Thread(orient_camera); ThOrientCamera.Start(); } else { debug.WriteNicely("!", ConsoleColor.Magenta, "?? WTF ARE YOU DOING WITH MY SOURCE CODE ??", 0); } input = new Input(ref form); previous_mousepoint = Cursor.Position; view = Matrix.Translation(position.X, position.Y, position.Z) * Matrix.RotationAxis(new Vector3(0, 1, 0), angle.Y) * Matrix.RotationAxis(new Vector3(1, 0, 0), angle.X) * Matrix.RotationAxis(new Vector3(0, 0, 1), angle.Z); speedTranslationPythagore = new Vector3( Convert.ToSingle(speedTranslation.X * speedTranslation.X / Math.Sqrt(speedTranslation.X * speedTranslation.X * 2)), Convert.ToSingle(speedTranslation.Y * speedTranslation.Y / Math.Sqrt(speedTranslation.Y * speedTranslation.Y * 2)), Convert.ToSingle(speedTranslation.Z * speedTranslation.Z / Math.Sqrt(speedTranslation.Z * speedTranslation.Z * 2))); speedTranslationPythagoreRun = new Vector3( Convert.ToSingle(speedTranslationRun.X * speedTranslationRun.X / Math.Sqrt(speedTranslationRun.X * speedTranslationRun.X * 2)), Convert.ToSingle(speedTranslationRun.Y * speedTranslationRun.Y / Math.Sqrt(speedTranslationRun.Y * speedTranslationRun.Y * 2)), Convert.ToSingle(speedTranslationRun.Z * speedTranslationRun.Z / Math.Sqrt(speedTranslationRun.Z * speedTranslationRun.Z * 2))); }
public Dx11(RenderForm form) { AcquireGpu(); CreateDeviceAndSwapChain(form); InitializeBuffers(); CreateMatrices(); }
public GraphicSystem(RenderLoop.RenderCallback LogicMethod, RenderLoop.RenderCallback RenderMethod) { _logicMethod = LogicMethod; _renderMethod = RenderMethod; _renderForm = new RenderForm(); _graphicsDevice = new GraphicsDevice(this); _graphicsDevice.CreateDevice(_renderForm.Handle); }
public Game() { renderForm = new RenderForm("My first SharpDX app"); renderForm.ClientSize = new Size(Width, Height); renderForm.AllowUserResizing = false; InitializeDeviceResources(); }
static void Main() { var form = new RenderForm("KinectLight"); form.Size = new System.Drawing.Size(1920,1200); 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 }; SharpDX.Direct3D10.Device1 device; SwapChain swapChain; SharpDX.Direct3D10.Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc, SharpDX.Direct3D10.FeatureLevel.Level_10_1, out device, out swapChain); var d2dFactory = new SharpDX.Direct2D1.Factory(); var surface = Surface.FromSwapChain(swapChain, 0); RenderTarget dc = new RenderTarget(d2dFactory, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied))); MainGame.Instance.Height = form.ClientSize.Height; MainGame.Instance.Width = form.ClientSize.Width; GameTime gameTime = new GameTime(); var config = new HttpSelfHostConfiguration("http://localhost:8080"); config.Routes.MapHttpRoute( "API Default", "api/{controller}/{action}/{name}", new { id = RouteParameter.Optional }); HttpSelfHostServer server = new HttpSelfHostServer(config); server.OpenAsync().Wait(); RenderLoop.Run(form, () => { gameTime.StartFrame(); MainGame.Instance.Update(gameTime); dc.BeginDraw(); dc.Clear(Colors.White); MainGame.Instance.Render(dc); var res = dc.EndDraw(); swapChain.Present(1, PresentFlags.None); //Thread.Sleep(1); }); server.Dispose(); MainGame.Instance.Dispose(); dc.Dispose(); surface.Dispose(); d2dFactory.Dispose(); device.Dispose(); swapChain.Dispose(); }
private static void Main() { RenderForm form = new RenderForm("Galaxies - test"); Global._G.form = form; form.ClientSize = new System.Drawing.Size(1280, 720);// 2540, 1550); //form.ClientSize = new System.Drawing.Size(2540, 1550); form.MouseDown += new System.Windows.Forms.MouseEventHandler(form_MouseDown); form.MouseUp += new System.Windows.Forms.MouseEventHandler(form_MouseUp); form.MouseMove += new System.Windows.Forms.MouseEventHandler(form_MouseMove); form.MouseWheel += new System.Windows.Forms.MouseEventHandler(form_MouseWheel); form.Resize += new EventHandler(form_Resize); Global._G.camera = new Camera(1, form.ClientSize.Width, form.ClientSize.Height); #if DEBUG Configuration.EnableObjectTracking = true; // some sharpDX COM object tracking that slows performance. #endif Global._G.InitDX(form); Mesh mesh = new Mesh(); mesh.MakeLatLonSphere2(64, 64); // Prepare All the stages Global._G.context.Rasterizer.SetViewports(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f)); Global._G.context.OutputMerger.SetTargets(Global._G.depthView, Global._G.renderView); Global._G.shaderParams.sunDir = new Vector4(Vector3.Normalize(new Vector3(-1, -1, 1)), 1); Global._G.shaderParams.sunColor = new Vector4(5.25f, 4.0f, 2.75f, 1); Global._G.camera.SetupCamera(); // Use clock var clock = new Stopwatch(); clock.Start(); // Main loop RenderLoop.Run(form, () => { var time = clock.ElapsedMilliseconds / 1000.0f; // Clear views Global._G.context.ClearDepthStencilView(Global._G.depthView, DepthStencilClearFlags.Depth, 1.0f, 0); Global._G.context.ClearRenderTargetView(Global._G.renderView, SharpDX.Color.Black); Global._G.shaderParams.world = Matrix.RotationY(time * 0.02f);// Matrix.Identity;// Matrix.RotationX(time) * Matrix.RotationY(time * 2) * Matrix.RotationZ(time * .7f); Global._G.shaderParams.world.Transpose(); Global._G.context.UpdateSubresource(ref Global._G.shaderParams, Global._G.constantBuffer); // Draw the cube mesh.Render(); // Present! Global._G.swapChain.Present(0, PresentFlags.None); }); // Release all resources Global._G.ShutdownDX(); }
/// <summary> /// Create and initialize a new game. /// </summary> public Game() { // Set window properties renderForm = new RenderForm("My first SharpDX game"); renderForm.ClientSize = new Size(Width, Height); renderForm.AllowUserResizing = false; InitializeDeviceResources(); }
public override void Start() { this.gameWindow = Game.GraphicsSystem.Renderer.Form; gameWindow.MouseDown += OnMouseDown; gameWindow.MouseUp += OnMouseUp; gameWindow.MouseMove += OnMouseMoved; gameWindow.KeyDown += OnKeyDown; gameWindow.KeyUp += OnKeyUp; gameWindow.MouseWheel += OnMouseWheel; }
private void CreateWindow() { _form = new RenderForm(ConfigurationManager.Config.Title) { ClientSize = new Size(ConfigurationManager.Config.ScreenSize.X, ConfigurationManager.Config.ScreenSize.Y), FormBorderStyle = FormBorderStyle.FixedSingle }; _form.Show(); _form.Name = "Alpha"; }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); RenderForm form = new RenderForm("Kinect color sample"); RenderDevice device = new RenderDevice(SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport); RenderContext context = new RenderContext(device); DX11SwapChain swapChain = DX11SwapChain.FromHandle(device, form.Handle); KinectSensor sensor = KinectSensor.GetDefault(); sensor.Open(); bool doQuit = false; bool doUpload = false; ColorRGBAFrameData currentData = null; DynamicColorRGBATexture colorTexture = new DynamicColorRGBATexture(device); KinectSensorColorRGBAFrameProvider provider = new KinectSensorColorRGBAFrameProvider(sensor); provider.FrameReceived += (sender, args) => { currentData = args.FrameData; doUpload = true; }; form.KeyDown += (sender, args) => { if (args.KeyCode == Keys.Escape) { doQuit = true; } }; RenderLoop.Run(form, () => { if (doQuit) { form.Dispose(); return; } if (doUpload) { colorTexture.Copy(context, currentData); doUpload = false; } context.RenderTargetStack.Push(swapChain); device.Primitives.ApplyFullTri(context, colorTexture.ShaderView); device.Primitives.FullScreenTriangle.Draw(context); context.RenderTargetStack.Pop(); swapChain.Present(0, SharpDX.DXGI.PresentFlags.None); }); swapChain.Dispose(); context.Dispose(); device.Dispose(); colorTexture.Dispose(); provider.Dispose(); sensor.Close(); }
public Input(ref RenderForm form) { //this.form = form; form.KeyDown += form_KeyDown; form.KeyUp += form_KeyUp; form.MouseMove += form_MouseMove; form.MouseDown += form_MouseDown; KeysDown = new List<Keys>(); KeysPressed = new List<Keys>(); KeysReleased = new List<Keys>(); }
public RenderForm CreateWindow(int PWindowHeight, int PWindowLength, FormStartPosition PScreenPosition) { this._WindowHeight = PWindowHeight; this._WindowLength = PWindowLength; this._FormPosition = PScreenPosition; RenderWindowInstance = new RenderForm(); RenderWindowInstance.ClientSize = new System.Drawing.Size(_WindowLength, _WindowHeight); RenderWindowInstance.StartPosition = FormStartPosition.CenterScreen; return RenderWindowInstance; }
public void Create3dObjects() { //Create RenderWindow RenderWindowInstance = new ModelRenderWindow(); FormInstance = RenderWindowInstance.CreateWindow(1080,1240,FormStartPosition.CenterScreen); //Create SwapChain SwapChainCreator = new ModelSwapChainDesc(); SwapChainD = SwapChainCreator.CreateSwapChain(2, Usage.RenderTargetOutput, FormInstance.Handle, true, 0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm, 1,0,SwapChainFlags.AllowModeSwitch, SwapEffect.Discard); //Create Device Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, SwapChainD, out GraphicsDevice, out NewSwapChain); //Create Back buffer BackBuffer = Surface.FromSwapChain(NewSwapChain, 0); //Create Factory FactoryD2D FactoryInstance = new FactoryD2D(); //Create RenderTarget RenderTargetInstance = new ModelRenderTarget(); RenderTarget = RenderTargetInstance.CreateRenderTarget(SharpDX.Direct2D1.FeatureLevel.Level_DEFAULT, new PixelFormat(Format.Unknown, SharpDX.Direct2D1.AlphaMode.Ignore), RenderTargetType.Default, RenderTargetUsage.None, BackBuffer, FactoryInstance); RenderLoop.Run(FormInstance, () => { RenderTarget.BeginDraw(); RenderTarget.Transform = Matrix3x2.Identity; RenderTarget.Clear(Color.White); using (var brush = new SolidColorBrush(RenderTarget, Color.Red)) { //for (int x = 0; x < RenderTarget.Size.Width; x += 10) // RenderTarget.DrawLine(new Vector2(x, 0), new Vector2(x, RenderTarget.Size.Height), brush, 0.5f); //for (int y = 0; y < RenderTarget.Size.Height; y += 10) // RenderTarget.DrawLine(new Vector2(0, y), new Vector2(RenderTarget.Size.Width, y), brush, 0.5f); RenderTarget.DrawLine(new Vector2(300, 10), new Vector2(300, 300), brush,1.5f); // RenderTarget.FillRectangle(new RectangleF(RenderTarget.Size.Width / 2 - 50, RenderTarget.Size.Height / 2 - 50, 100, 100), brush); } // RenderTarget.DrawRectangle( // new RectangleF(RenderTarget.Size.Width / 2 - 100, RenderTarget.Size.Height / 2 - 100, 200, 200), // new SolidColorBrush(RenderTarget, Color.CornflowerBlue)); RenderTarget.EndDraw(); NewSwapChain.Present(0, PresentFlags.None); }); RenderTarget.Dispose(); NewSwapChain.Dispose(); GraphicsDevice.Dispose(); }
private Program() { form = new RenderForm("Struct-of-Structs"); graphics = new Graphics(800, 600, false, form.Handle); input = new Input(form); Timer = new TimerTick(); OnCleanup += graphics.Dispose; OnCleanup += input.Dispose; OnCleanup += form.Dispose; }
/// <summary> /// Creates a new Renderer instance. /// </summary> /// <param name="window">The window to render into.</param> public Renderer(RenderForm window) { window.ResizeEnd += ResizeWindow; InitializeGraphicsDevice(window); InitializeTweakBar(); InitializeResources(window.ClientSize); InitializeScene(window); InitializeInsight(); timer.Start(); }
public TestDX2() { m_renderForm = new SharpDX.Windows.RenderForm("SharpDxLearn"); m_renderForm.ClientSize = new System.Drawing.Size(m_width, m_height); m_renderForm.AllowUserResizing = false; InitializeDeviceResources(); InitializeShaders(); InitializeTriangle(); }
static void Main() { RenderForm window = new RenderForm("Some title"); SwapChainDescription swapChainDesc = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(window.ClientSize.Width, window.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm), IsWindowed = true, OutputHandle = window.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; //debug Configuration.EnableObjectTracking = true; D3D11Device device; SwapChain swapChain; D3D11Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, swapChainDesc, out device, out swapChain); DeviceContext context = device.ImmediateContext; Factory factory = swapChain.GetParent<Factory>(); factory.MakeWindowAssociation(window.Handle, WindowAssociationFlags.IgnoreAll); Stopwatch clock = new Stopwatch(); clock.Start(); bool resized = true; window.UserResized += (sender, args) => resized = true; window.KeyUp += (sender, args) => { if (args.KeyCode == Keys.F5) swapChain.SetFullscreenState(true, null); else if (args.KeyCode == Keys.F4) swapChain.SetFullscreenState(false, null); else if (args.KeyCode == Keys.Enter) window.Close(); }; RenderLoop.Run(window, () => { swapChain.Present(0, PresentFlags.None); }); context.Flush(); device.Dispose(); context.Dispose(); swapChain.Dispose(); factory.Dispose(); }
protected override void Initialize() { Window.Title = "编程棋 Alpha 0.1"; this.IsMouseVisible = false; Window.AllowUserResizing = true; form = Window.NativeWindow as RenderForm; form.Icon = System.Drawing.Icon.ExtractAssociatedIcon("TPDT.ico"); this.GameSystems.Add(MouseHelper); this.GameSystems.Add(sm); SpriteBatch = new SpriteBatch(GraphicsDevice); sm.ToggleScreen(new GameScreen(this)); base.Initialize(); }
public AppWindow(IInputContext input) { _input = input; _form = new RenderForm(); _renderLoop = new RenderLoop(Form); _form.Resize += OnFormResize; _form.Closed += OnFormClosed; _form.LostFocus += OnLostFocus; _form.MouseMove += OnMouseMove; _form.MouseDown += OnMouseDown; _form.MouseUp += OnMouseUp; _form.MouseWheel += OnMouseWheel; }
public Context(RenderForm form, Dx11 directX, IGame game, WorldContainer worldContainer, IUiManager uiManager, IInput input, Camera camera, NotificationResolver notificationResolver, DataLock datalock) { _worldContainer = worldContainer; NotificationResolver = notificationResolver; Form = form; DirectX = directX; Game = game; TextureManager = new TextureManager(DirectX.Device); TextManager = new TextManager(this); Shaders = new ShaderManager(DirectX.Device); Camera = camera; UiManager = uiManager; Input = input; DataLock = datalock; }
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 DeviceContextManager(IoCContainer container) { IConfiguration configuration = container.Resolve<IConfiguration>(); int width = configuration.GetValue(ConfigSections.Client, ConfigKeys.GameWidth, 1024); int height = configuration.GetValue(ConfigSections.Client, ConfigKeys.GameHeight, 768); Form = new RenderForm() { Width = width, Height = height }; Context = new DeviceContext(Form.Handle, width, height, false, false); }
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)) { //create font from file (generated with tkfont.exe) SharpBatch font = new SharpBatch(device, "textfont.dds"); RenderLoop.Run(form, () => { //resize if form was resized if (device.MustResize) { device.Resize(); font.Resize(); } //clear color device.Clear(Color.CornflowerBlue); //begin drawing text font.Begin(); //draw string font.DrawString("Hello SharpDX", 0, 0, Color.White); font.DrawString("Current Time " + DateTime.Now.ToString(), 0, 32, Color.White); //flush text to view font.End(); //present device.Present(); }); font.Dispose(); } }
/// <summary> /// Defines the entry point of the application. /// </summary> /// <param name="args">The args.</param> public static void Run() { // Select a File to play var openFileDialog = new OpenFileDialog { Title = "Select a file", }; var result = openFileDialog.ShowDialog(); if (result == DialogResult.Cancel) { return; } // Initialize MediaFoundation MediaManager.Startup(); var renderForm = new SharpDX.Windows.RenderForm(); device = CreateDeviceForVideo(out dxgiManager); // Creates the MediaEngineClassFactory var mediaEngineFactory = new MediaEngineClassFactory(); //Assign our dxgi manager, and set format to bgra MediaEngineAttributes attr = new MediaEngineAttributes(); attr.VideoOutputFormat = (int)SharpDX.DXGI.Format.B8G8R8A8_UNorm; attr.DxgiManager = dxgiManager; // Creates MediaEngine for AudioOnly var mediaEngine = new MediaEngine(mediaEngineFactory, attr, MediaEngineCreateFlags.None); // Register our PlayBackEvent mediaEngine.PlaybackEvent += OnPlaybackCallback; // Query for MediaEngineEx interface mediaEngineEx = mediaEngine.QueryInterface <MediaEngineEx>(); // Opens the file var fileStream = openFileDialog.OpenFile(); // Create a ByteStream object from it var stream = new ByteStream(fileStream); // Creates an URL to the file var url = new Uri(openFileDialog.FileName, UriKind.RelativeOrAbsolute); // Set the source stream mediaEngineEx.SetSourceFromByteStream(stream, url.AbsoluteUri); // Wait for MediaEngine to be ready if (!eventReadyToPlay.WaitOne(1000)) { Console.WriteLine("Unexpected error: Unable to play this file"); } //Create our swapchain swapChain = CreateSwapChain(device, renderForm.Handle); //Get DXGI surface to be used by our media engine var texture = Texture2D.FromSwapChain <Texture2D>(swapChain, 0); var surface = texture.QueryInterface <SharpDX.DXGI.Surface>(); //Get our video size int w, h; mediaEngine.GetNativeVideoSize(out w, out h); // Play the music mediaEngineEx.Play(); long ts; RenderLoop.Run(renderForm, () => { //Transfer frame if a new one is available if (mediaEngine.OnVideoStreamTick(out ts)) { mediaEngine.TransferVideoFrame(surface, null, new SharpDX.Rectangle(0, 0, w, h), null); } swapChain.Present(1, SharpDX.DXGI.PresentFlags.None); }); mediaEngine.Shutdown(); swapChain.Dispose(); device.Dispose(); }
public void Start() { running = true; Task.Factory.StartNew(() => { form = new SharpDX.Windows.RenderForm("Oculus UI Debug"); form.Width = 1024 + 16; form.Height = 512 + 39; form.AllowUserResizing = false; // Create DirectX drawing device. SharpDX.Direct3D11.Device device = new Device(SharpDX.Direct3D.DriverType.Hardware, DeviceCreationFlags.Debug); // Create DirectX Graphics Interface factory, used to create the swap chain. Factory factory = new Factory(); DeviceContext immediateContext = device.ImmediateContext; // Define the properties of the swap chain. SwapChainDescription swapChainDescription = new SwapChainDescription(); swapChainDescription.BufferCount = 1; swapChainDescription.IsWindowed = true; swapChainDescription.OutputHandle = form.Handle; swapChainDescription.SampleDescription = new SampleDescription(1, 0); swapChainDescription.Usage = Usage.RenderTargetOutput | Usage.ShaderInput; swapChainDescription.SwapEffect = SwapEffect.Sequential; swapChainDescription.Flags = SwapChainFlags.AllowModeSwitch; swapChainDescription.ModeDescription.Width = 1024; swapChainDescription.ModeDescription.Height = 512; swapChainDescription.ModeDescription.Format = Format.R8G8B8A8_UNorm; swapChainDescription.ModeDescription.RefreshRate.Numerator = 0; swapChainDescription.ModeDescription.RefreshRate.Denominator = 1; // Create the swap chain. SharpDX.DXGI.SwapChain swapChain = new SwapChain(factory, device, swapChainDescription); // Retrieve the back buffer of the swap chain. Texture2D backBuffer = swapChain.GetBackBuffer <Texture2D>(0); RenderTargetView backBufferRenderTargetView = new RenderTargetView(device, backBuffer); // Create a depth buffer, using the same width and height as the back buffer. Texture2DDescription depthBufferDescription = new Texture2DDescription(); depthBufferDescription.Format = Format.D32_Float; depthBufferDescription.ArraySize = 1; depthBufferDescription.MipLevels = 1; depthBufferDescription.Width = 1024; depthBufferDescription.Height = 512; depthBufferDescription.SampleDescription = new SampleDescription(1, 0); depthBufferDescription.Usage = ResourceUsage.Default; depthBufferDescription.BindFlags = BindFlags.DepthStencil; depthBufferDescription.CpuAccessFlags = CpuAccessFlags.None; depthBufferDescription.OptionFlags = ResourceOptionFlags.None; // Define how the depth buffer will be used to filter out objects, based on their distance from the viewer. DepthStencilStateDescription depthStencilStateDescription = new DepthStencilStateDescription(); depthStencilStateDescription.IsDepthEnabled = true; depthStencilStateDescription.DepthComparison = Comparison.Less; depthStencilStateDescription.DepthWriteMask = DepthWriteMask.Zero; // Create the depth buffer. Texture2D depthBuffer = new Texture2D(device, depthBufferDescription); DepthStencilView depthStencilView = new DepthStencilView(device, depthBuffer); DepthStencilState depthStencilState = new DepthStencilState(device, depthStencilStateDescription); Viewport viewport = new Viewport(0, 0, 1024, 512, 0.0f, 1.0f); immediateContext.OutputMerger.SetDepthStencilState(depthStencilState); immediateContext.OutputMerger.SetRenderTargets(depthStencilView, backBufferRenderTargetView); immediateContext.Rasterizer.SetViewport(viewport); SharpDX.Toolkit.Graphics.GraphicsDevice gd = SharpDX.Toolkit.Graphics.GraphicsDevice.New(device); var blendStateDescription = new BlendStateDescription(); blendStateDescription.AlphaToCoverageEnable = false; blendStateDescription.RenderTarget[0].IsBlendEnabled = true; blendStateDescription.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha; blendStateDescription.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha; blendStateDescription.RenderTarget[0].BlendOperation = BlendOperation.Add; blendStateDescription.RenderTarget[0].SourceAlphaBlend = BlendOption.Zero; blendStateDescription.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero; blendStateDescription.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add; blendStateDescription.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All; var blendState = SharpDX.Toolkit.Graphics.BlendState.New(gd, blendStateDescription); gd.SetBlendState(blendState); var resource = sharedTexture.QueryInterface <SharpDX.DXGI.Resource>(); var texture = device.OpenSharedResource <Texture2D>(resource.SharedHandle); var basicEffect = new SharpDX.Toolkit.Graphics.BasicEffect(gd); basicEffect.PreferPerPixelLighting = false; basicEffect.Texture = SharpDX.Toolkit.Graphics.Texture2D.New(gd, texture); basicEffect.TextureEnabled = true; basicEffect.LightingEnabled = false; // background texture var backgroundTexture = SharpDX.Toolkit.Graphics.Texture2D.Load(gd, "Graphics/debug.png"); var backEffect = new SharpDX.Toolkit.Graphics.BasicEffect(gd); backEffect.PreferPerPixelLighting = false; backEffect.Texture = backgroundTexture; backEffect.TextureEnabled = true; backEffect.LightingEnabled = false; var primitive = SharpDX.Toolkit.Graphics.GeometricPrimitive.Plane.New(gd, 2f, 2f, 1); // Retrieve the DXGI device, in order to set the maximum frame latency. using (SharpDX.DXGI.Device1 dxgiDevice = device.QueryInterface <SharpDX.DXGI.Device1>()) { dxgiDevice.MaximumFrameLatency = 1; } RenderLoop.Run(form, () => { immediateContext.ClearRenderTargetView(backBufferRenderTargetView, new Color4(1f, 0.5f, 0.3f, 1f)); immediateContext.ClearDepthStencilView(depthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); backEffect.World = basicEffect.World = Matrix.Identity; backEffect.View = basicEffect.View = Matrix.Identity; backEffect.Projection = basicEffect.Projection = Matrix.Identity; primitive.Draw(backEffect); primitive.Draw(basicEffect); swapChain.Present(0, PresentFlags.None); if (!running) { form.Close(); } }); }); }
unsafe static void Main(string[] args) { ConfirmQuickSyncReadiness.HaltIfNotReady(); if (Environment.OSVersion.Platform != PlatformID.Win32NT) { throw new Exception("DirectX sample only works on Windows"); } Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; // keep ascending directories until 'media' folder is found for (int i = 0; i < 10 && !Directory.Exists("Media"); i++) { Directory.SetCurrentDirectory(".."); } Directory.SetCurrentDirectory("Media"); string fn; fn = @"BigBuckBunny_320x180.264"; //fn = @"C:\w\BigBuckBunny_1920x1080.264"; //fn = @"C:\w\bbb_sunflower_2160p_30fps_normal_track1.h264"; var s = File.Open(fn, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); var buf = new byte[1000]; int n = s.Read(buf, 0, buf.Length); s.Position = 0; Trace.Assert(n == buf.Length); var decVideoParam = QuickSyncStatic.DecodeHeader(buf, CodecId.MFX_CODEC_AVC); mfxVideoParam vppVideoParam = new mfxVideoParam();// = SetupVPPConfiguration(decVideoParam.mfx.FrameInfo.CropW, decVideoParam.mfx.FrameInfo.CropH); vppVideoParam.vpp.In = decVideoParam.mfx.FrameInfo; vppVideoParam.vpp.Out = decVideoParam.mfx.FrameInfo; decVideoParam.IOPattern = IOPattern.MFX_IOPATTERN_OUT_SYSTEM_MEMORY; vppVideoParam.IOPattern = IOPattern.MFX_IOPATTERN_IN_SYSTEM_MEMORY; vppVideoParam.IOPattern |= useSystemMemoryNotVideoMemory ? IOPattern.MFX_IOPATTERN_OUT_SYSTEM_MEMORY : IOPattern.MFX_IOPATTERN_OUT_VIDEO_MEMORY; int vppOutWidth; int vppOutHeight; Console.WriteLine($"Bitstream -- width {0} height {1}", decVideoParam.mfx.FrameInfo.CropW, decVideoParam.mfx.FrameInfo.CropH); // vppOutWidth = 1920; // vppOutHeight = 1080; bool doResize = true; if (doResize) { } else { } vppOutWidth = decVideoParam.mfx.FrameInfo.CropW; // HxW of actual bitstream vppOutHeight = decVideoParam.mfx.FrameInfo.CropH; //resizing setup vppOutWidth = decVideoParam.mfx.FrameInfo.CropW / 4; vppOutHeight = decVideoParam.mfx.FrameInfo.CropH / 4; Console.WriteLine($"VPP output -- width {0} height {1}", vppOutWidth, vppOutHeight); vppVideoParam.vpp.Out.FourCC = FourCC.RGB4; vppVideoParam.vpp.Out.CropW = (ushort)(vppOutWidth); vppVideoParam.vpp.Out.CropH = (ushort)(vppOutHeight); var form = new SharpDX.Windows.RenderForm(); form.Width = vppOutWidth; form.Height = vppOutHeight; // use resized HxW form.Width = decVideoParam.mfx.FrameInfo.CropW; form.Height = decVideoParam.mfx.FrameInfo.CropH; // use original HxW Console.WriteLine($"vppOutWidth {vppOutWidth} vppOutHeight {vppOutHeight}"); Console.WriteLine($"form.Width {form.Width} form.Height {form.Height}"); var impl = mfxIMPL.MFX_IMPL_VIA_D3D11 | mfxIMPL.MFX_IMPL_HARDWARE; var decoder = new StreamDecoder(s, decVideoParam, vppVideoParam, impl); //string impltext = QuickSyncStatic.ImplementationString(decoder.lowLevelDecoder.session); //Console.WriteLine("Implementation = {0}", impltext); //string memtext = QuickSyncStatic.ImplementationString(decoder.lowLevelDecoder.deviceSetup.memType); //Console.WriteLine("Memory type = {0}", memtext); if (useSystemMemoryNotVideoMemory) { device = new SharpDX.Direct3D11.Device(DriverType.Hardware); } else { IntPtr dx11device = decoder.lowLevelDecoder.videoAccelerationSupport.DeviceGetHandle(mfxHandleType.MFX_HANDLE_D3D11_DEVICE); device = new SharpDX.Direct3D11.Device(dx11device); } var fps = new FPSCounter(); var sd = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(vppOutWidth, vppOutHeight, new Rational(60, 1), Format.B8G8R8A8_UNorm), IsWindowed = true, OutputHandle = form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput, Flags = SwapChainFlags.None }; var a = device.QueryInterface <SharpDX.DXGI.Device>(); var b = a.Adapter.QueryInterface <Adapter2>(); var c = b.GetParent <Factory2>(); swapChain = new SwapChain(c, device, sd); var enumerator = decoder.GetFrames().GetEnumerator(); RenderLoop.Run(form, () => { enumerator.MoveNext(); RenderFrameX(decoder, enumerator.Current); fps.PrintFPS(); }); swapChain.Dispose(); device.Dispose(); }
static void Main() { var form = new RenderForm("SlimDX2 - MiniTri Direct3D9 Sample"); 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 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); RenderLoop.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(); }); }
public Game(int width, int height, string title) { Form = new RenderForm { Size = new Size(width, height), StartPosition = FormStartPosition.CenterScreen, AutoScaleMode = AutoScaleMode.None, Text = title }; InputManager = new InputManager(); //初始化渲染组件 InitRenderComponent(width, height, title); //初始化所有组件 ResourcesManager = new ResourcesManager(renderTarget); GameClock = new GameClock(); UpdateDispatcher = new UpdateDispatcher(); SpriteManager = new SpriteManager(); EngineInfoDrawer = new EngineInfoDrawer(renderTarget); //为需要更新的组件添加更新关联 UpdateDispatcher.Schedule(InputManager.Update); UpdateDispatcher.Schedule(EngineInfoDrawer.Update, 0.4f); Instance = this; }