I'm trying to render to a texture, but for some reason, I get D3DERR_INVALIDCALL exceptions.
This is my code:
private void RenderIntoSurface()
{
try
{
renderTexture = new Texture(device, RenderSurfaceSize, RenderSurfaceSize, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);
rts = new RenderToSurface(device, RenderSurfaceSize, RenderSurfaceSize, Format.X8R8G8B8, true, DepthFormat.D16);
renderSurface = renderTexture.GetSurfaceLevel(0);
Viewport v = new Viewport();
v.Width = RenderSurfaceSize;
v.Height = RenderSurfaceSize;
v.MaxZ = 1.0f;
rts.BeginScene(renderSurface, v);
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkBlue, 1.0f, 0);
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 1000.0f);
device.Transform.View = Matrix.LookAtLH(new Vector3(0,0, -580), new Vector3(), new Vector3(0,1,0));
DrawMesh(angle / (float)Math.PI, angle / (float)Math.PI * 2.0f, angle / (float)Math.PI / 4.0f, 0, 0, 0);
DrawMesh(angle / (float)Math.PI, angle / (float)Math.PI / 2.0f, angle / (float)Math.PI * 4.0f, 150, -100, 175);
rts.EndScene(Filter.None);
}
catch (Direct3DXException e)
{
System.Console.WriteLine((long)e.ErrorCode + " " + e.ErrorString);
}
}
I get the exception on the call to rts.BeginScene(renderSurface, v);
And the stack-trace:
at Microsoft.DirectX.Direct3D.RenderToSurface.BeginSceneInternal(Surface surface, Viewport& viewport)
at Microsoft.DirectX.Direct3D.RenderToSurface.BeginScene(Surface surface, Viewport viewport)
at D3D_Chap1.Form1.RenderIntoSurface() in e:\projects\c#\games\managed directx kickstart\chapter 9 - render to surface\form1.cs:line 156
Any ideas why this is wrong?
Toolmaker