diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs
index d0367a7d..9aa5d8b1 100644
--- a/Vocaluxe/Base/CSettings.cs
+++ b/Vocaluxe/Base/CSettings.cs
@@ -61,7 +61,7 @@ namespace Vocaluxe.Base
public static int zFar = 100;
public static bool bFullScreen = false;
- public static int iVertexBufferElements = 1000;
+ public static int iVertexBufferElements = 10000;
public const string sIcon = "Vocaluxe.ico";
public const string sLogo = "Logo.png";
diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs
index 5bb3ece1..07fb2e5c 100644
--- a/Vocaluxe/Lib/Draw/CDirect3D.cs
+++ b/Vocaluxe/Lib/Draw/CDirect3D.cs
@@ -229,6 +229,8 @@ namespace Vocaluxe.Lib.Draw
}
}
#endregion form events
+
+ #region resize
///
/// Resizes the viewport
///
@@ -323,6 +325,7 @@ namespace Vocaluxe.Lib.Draw
CConfig.SaveConfig();
}
+ #endregion resize
#region mouse event handlers
private void OnMouseMove(object sender, MouseEventArgs e)
@@ -383,7 +386,7 @@ namespace Vocaluxe.Lib.Draw
#endregion keyboard event handlers
#region implementation
-
+ #region main stuff
///
/// Inits the Device
///
@@ -626,6 +629,7 @@ namespace Vocaluxe.Lib.Draw
_VerticesRotationMatrices.Clear();
}
}
+#endregion main stuff
#region Basic Draw Methods
@@ -638,24 +642,51 @@ namespace Vocaluxe.Lib.Draw
}
///
- /// Not implemented yet
- ///
- ///
+ /// Copies the current frame into a texture
+ /// A texture holding the current frame
public STexture CopyScreen()
{
- //FIXME
STexture texture = new STexture(-1);
+
+ Surface backbufferSurface = _Device.GetBackBuffer(0, 0);
+ Texture tex = new Texture(_Device, _PresentParameters.BackBufferWidth, _PresentParameters.BackBufferHeight, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed);
+ Surface textureSurface = tex.GetSurfaceLevel(0);
+ Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0);
+ backbufferSurface.Dispose();
+ _D3DTextures.Add(tex);
+
+ texture.color = new SColorF(1f, 1f, 1f, 1f);
+ texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f);
+ texture.width = w;
+ texture.height = h;
+ texture.w2 = NextPowerOfTwo(texture.width);
+ texture.h2 = NextPowerOfTwo(texture.height);
+ texture.index = _D3DTextures.Count - 1;
+
+ lock (MutexTexture)
+ {
+ _Textures[texture.index] = texture;
+ }
return texture;
}
///
- /// Not implemented yet
+ /// Copies the current frame into a texture
///
- ///
+ /// The texture in which the frame is copied to
public void CopyScreen(ref STexture Texture)
{
- //FIXME
- return;
+ if (!_TextureExists(ref Texture) || (Texture.width != GetScreenWidth()) || (Texture.height != GetScreenHeight()))
+ {
+ RemoveTexture(ref Texture);
+ Texture = CopyScreen();
+ }
+ else
+ {
+ Surface backbufferSurface = _Device.GetBackBuffer(0, 0);
+ Surface textureSurface = _D3DTextures[Texture.index].GetSurfaceLevel(0);
+ Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0);
+ }
}
///
@@ -731,18 +762,11 @@ namespace Vocaluxe.Lib.Draw
/// The coordinates in a SRectF struct
public void DrawColor(SColorF color, SRectF rect)
{
- //blankMap = new Bitmap(1, 1);
- //Graphics g = Graphics.FromImage(blankMap);
- //g.Clear(Color.White);
- //g.Dispose();
- //blankTexture = AddTexture(blankMap);
- //blankMap.Dispose();
-
DrawTexture(blankTexture, rect, color);
- //RemoveTexture(ref blankTexture);
}
#endregion Basic Draw Methods
#region Textures
+ #region adding
///
/// Adds a texture and stores it in the VRam
@@ -769,17 +793,6 @@ namespace Vocaluxe.Lib.Draw
return new STexture(-1);
}
- ///
- /// Calculates the next power of two
- ///
- /// The value of which the next power of two will be calculated
- /// The next power of two
- private static float NextPowerOfTwo(float n)
- {
- if (n < 0) throw new ArgumentOutOfRangeException("n", "Must be positive.");
- return (float)System.Math.Pow(2, System.Math.Ceiling(System.Math.Log((double)n, 2)));
- }
-
///
/// Adds a texture and stores it in the Vram
///
@@ -957,7 +970,9 @@ namespace Vocaluxe.Lib.Draw
}
return texture;
}
+ #endregion adding
+ #region updating
///
/// Updates the data of a texture
///
@@ -999,6 +1014,7 @@ namespace Vocaluxe.Lib.Draw
else
return false;
}
+ #endregion updating
///
/// Checks if a texture exists
@@ -1040,6 +1056,7 @@ namespace Vocaluxe.Lib.Draw
}
}
+ #region drawing
///
/// Draws a texture
///
@@ -1314,6 +1331,7 @@ namespace Vocaluxe.Lib.Draw
}
}
}
+ #endregion drawing
private void CheckQueque()
{
@@ -1367,6 +1385,20 @@ namespace Vocaluxe.Lib.Draw
{
return _Textures.Count;
}
+ #endregion Textures
+ #endregion implementation
+
+ #region utility
+ ///
+ /// Calculates the next power of two
+ ///
+ /// The value of which the next power of two will be calculated
+ /// The next power of two
+ private static float NextPowerOfTwo(float n)
+ {
+ if (n < 0) throw new ArgumentOutOfRangeException("n", "Must be positive.");
+ return (float)System.Math.Pow(2, System.Math.Ceiling(System.Math.Log((double)n, 2)));
+ }
private Matrix CalculateRotationMatrix(float rot, float rx1, float rx2, float ry1, float ry2)
{
@@ -1390,8 +1422,7 @@ namespace Vocaluxe.Lib.Draw
}
return originTranslation;
}
- #endregion Textures
- #endregion implementation
+ #endregion utility
#region TexturedColoredVertex
public struct TexturedColoredVertex