开发者

How do you get the output of a HLSL computation?

开发者 https://www.devze.com 2023-03-12 09:05 出处:网络
I would basically like to screen开发者_JAVA技巧 capture a GPU result into a bitmap file using .NET. I would probably use XNA and my workflow would be something like:

I would basically like to screen开发者_JAVA技巧 capture a GPU result into a bitmap file using .NET. I would probably use XNA and my workflow would be something like:

  1. Call an effect with custom input data
  2. Have the effect run a per-pixel process
  3. Get the result from the effect (???)
  4. Save result as bitmap

Thanks...


Edit

Summary from Liortal's answer:

To use a render target, create a RenderTarget2D object with the width, height, and other options you prefer. Then call GraphicsDevice.SetRenderTarget to make your render target the current render target. From this point on, any Draw calls you make will draw into your render target. When you are finished with the render target, call GraphicsDevice.SetRenderTarget to a new render target (or null for the back buffer). Then at any time you can call RenderTarget2D.GetTexture to get the contents of the render target for further processing.


Read more about Render Targets and how to use them here: http://msdn.microsoft.com/en-us/library/bb976073.aspx

Note that the link refers up to XNA 3.1, here's a post by the awesome Shawn Hargreaves about changes made in this area in XNA 4: http://blogs.msdn.com/b/shawnhar/archive/2010/03/26/rendertarget-changes-in-xna-game-studio-4-0.aspx


RenderTarget's are what you are after here. Set the RenderTarget (graphicsDevice.SetRenderTarget(myRenderTarget);), draw your scene and then use either SaveAsJpeg or SaveAsPng methods to save the output.

Here is the XNA 4 version of the RenderTarget documentation.

However, people have mentioned about memory leaks, so I would use this alternative:

BmpWriter

This link has the source code that you require (as I mentioned above).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号