Note that there are some explanatory texts on larger screens.

plurals
  1. POApply pixel shader to video with DirectX
    primarykey
    data
    text
    <p>I need to apply a pixel shader to this code (the fullscreen quad). I have the FX file. What is the procedure? (EDIT finalized: code is working)</p> <pre><code>public int CompositeImage(IntPtr pD3DDevice, IntPtr pddsRenderTarget, AMMediaType pmtRenderTarget, long rtStart, long rtEnd, int dwClrBkGnd, VMR9VideoStreamInfo[] pVideoStreamInfo, int cStreams) { try { if (udevice != pD3DDevice) { InitCompositionDevice(pD3DDevice); } // will be creating managed object from those so increment ref count Marshal.AddRef(pddsRenderTarget); Marshal.AddRef(pVideoStreamInfo[0].pddsVideoSurface); device.Clear(ClearFlags.Target, Color.Red, 1f, 0); device.BeginScene(); // here the video frame will be stored Texture capturedVideoTexture = null; // this is the output surface Surface renderTarget = new Surface(pddsRenderTarget); // get the surface for the input video Surface videoSurface = new Surface(pVideoStreamInfo[0].pddsVideoSurface); // will use this rect for calculations Rectangle videoSurfaceRect = new Rectangle(0, 0, videoSurface.Description.Width, videoSurface.Description.Height); // create single layer texture from input video capturedVideoTexture = new Texture(device, videoSurfaceRect.Width, videoSurfaceRect.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); // get its surface Surface textureSurface = capturedVideoTexture.GetSurfaceLevel(0); // will use this rect for calculations Rectangle textureSurfaceRect = new Rectangle(0, 0, textureSurface.Description.Width, textureSurface.Description.Height); // copy the whole video surface into the texture surface device.StretchRectangle(videoSurface, videoSurfaceRect, textureSurface, textureSurfaceRect, TextureFilter.Linear); // identity matreices for world projection and view device.Transform.World = Matrix.Identity; device.Transform.Projection = Matrix.Identity; device.Transform.View = Matrix.Identity; // setup viewport Viewport view = new Viewport(); view.X = 0; view.Y = 0; view.Width = 1920; view.Height = 1080; view.MinZ = 0; view.MaxZ = 1; device.Viewport = view; // writing will go to output surface device.SetRenderTarget(0, renderTarget); // nothing fancy of a vertex shader device.VertexFormat = CustomVertex.PositionTextured.Format; // use the texture while rendering device.SetTexture(0, capturedVideoTexture); //Bind our Vertex Buffer device.SetStreamSource(0, vb, 0); // setup and apply shader ps.Begin(FX.None); ps.BeginPass(0); ps.SetValue("ScreenTexture", capturedVideoTexture); //Render from our Vertex Buffer device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2); ps.EndPass(); ps.End(); device.EndScene(); videoSurface.Dispose(); textureSurface.Dispose(); capturedVideoTexture.Dispose(); renderTarget.Dispose(); videoSurface = null; renderTarget = null; capturedVideoTexture = null; } catch (Exception e) { Debug.WriteLine(e.ToString()); } return 0; } </code></pre> <p>This is the final effect achieved: Sepia on the VMR9 video:</p> <p><img src="https://i.stack.imgur.com/HA27j.png" alt="http://img825.imageshack.us/img825/9207/sepiag.png"></p> <p>Now what remains is code the anaglyph shaders for 3D content :)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload