• Advertisement
Sign in to follow this  

[SlimDX] Bitmap from a Texture

This topic is 3480 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

i am trying to record video from the directx surface that i am rendering to, so i have it set up to create a texture2d buffer from the swapchain. but what i need is a bitmap to patch on the end of an avi file. currently i have to save each frame as a bitmap, then load each bitmap and then patch it on to the avi, which is needless to say horribly slow. i am recording at around 8 fps. i havent seen any direct conversion for a texture2d to a bitmap except for the Texture2d.tofile(). so ive been trying some other ways such as DXGI.SampleDescription sampleDescription = new DXGI.SampleDescription(); sampleDescription.Count = 1; sampleDescription.Quality = 0; Vdesc.Width = this.ClientRectangle.Width; Vdesc.Height = this.ClientRectangle.Height; Vdesc.MipLevels = Vdesc.ArraySize = 1; Vdesc.Format = DXGI.Format.R8G8B8A8_UNorm; Vdesc.SampleDescription = sampleDescription; Vdesc.Usage = D3D10.ResourceUsage.Default; Vdesc.BindFlags = D3D10.BindFlags.None; Vdesc.CpuAccessFlags = D3D10.CpuAccessFlags.None; backbuff = new SlimDX.Direct3D10.Texture2D(g_pd3dDevice, Vdesc); //later backbuff = g_pSwapChain.GetBuffer<D3D10.Texture2D>(0); DataRectangle mappedTex = backbuff.Map(0,D3D10.MapMode.Read, D3D10.MapFlags.None); Bitmap bitmap = new Bitmap(ClientRectangle.Width, ClientRectangle.Height); bitmap = Bitmap.FromResource(mappedTex.Data.DataPointer, "newbmp"); aviStream.AddFrame(bitmap); backbuff.Unmap(0); bitmap.Dispose(); The texture constructor will throw an error if the description allows cpu reads, or has anything set for the bindflags or usage. but i think its because the cpu is not allowed to read from the texture that the map operation returns an error. should i use a stream? or how can i get a texture into a bitmap?

Share this post


Link to post
Share on other sites
Advertisement
so after a while of reading slimdx, i find out there is a new release which has a Texture.ToStream() so i update and adapt the code a little and it compiles fine but now there is an issue with how my effect is loaded.

usercontrol.g_pEffect = D3D10.Effect.FromMemory(usercontrol.g_pd3dDevice, WPViewDX.Resources.Tutorial07, "fx_4_0", D3D10.ShaderFlags.EnableStrictness, D3D10.EffectFlags.None, null, null);



is no longer any good, it returns an SEHException:

An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in SlimDX.dll

Additional information: External component has thrown an exception.


even though this code worked on the last version of slimdx i had.

Share this post


Link to post
Share on other sites
What happens if you try to run the effect through the stand-alone FX compiler? It's possible there's some bug or change in the new compiler which is tripping things up.

Share this post


Link to post
Share on other sites
no it was fine, i hadnt changed the fx file at all, i just had to restart visual studio for some reason after i swapped out the slimdx dll

Share this post


Link to post
Share on other sites
VS has an in-process compiler it uses to hold on to some things for intellisense and various build-related magicks. It may have cached the reference to the old DLL in some fashion, and then use that old version with your newer assembly, which would eventually cause an unexpected error that could easily be recognized as a SEHException.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement