|
@@ -16,10 +16,15 @@ namespace bbiwarg.Graphics
|
|
private VideoHandle videoHandle;
|
|
private VideoHandle videoHandle;
|
|
private uint depthTextureID;
|
|
private uint depthTextureID;
|
|
private uint edgeTextureID;
|
|
private uint edgeTextureID;
|
|
|
|
+ private bool paused = false;
|
|
|
|
+ private long timeSpacePressed, timeLeftPressed, timeRightPressed;
|
|
|
|
+ private Stopwatch watch;
|
|
|
|
|
|
public OutputWindow(VideoHandle videoHandle): base(3 * videoHandle.getWidth(), 2 * videoHandle.getHeight())
|
|
public OutputWindow(VideoHandle videoHandle): base(3 * videoHandle.getWidth(), 2 * videoHandle.getHeight())
|
|
{
|
|
{
|
|
this.videoHandle = videoHandle;
|
|
this.videoHandle = videoHandle;
|
|
|
|
+ watch = new Stopwatch();
|
|
|
|
+ watch.Start();
|
|
}
|
|
}
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
protected override void OnLoad(EventArgs e)
|
|
@@ -68,8 +73,51 @@ namespace bbiwarg.Graphics
|
|
Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, -Vector3.UnitZ, Vector3.UnitY);
|
|
Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, -Vector3.UnitZ, Vector3.UnitY);
|
|
GL.MatrixMode(MatrixMode.Modelview);
|
|
GL.MatrixMode(MatrixMode.Modelview);
|
|
GL.LoadMatrix(ref modelview);
|
|
GL.LoadMatrix(ref modelview);
|
|
-
|
|
|
|
- videoHandle.nextFrame();
|
|
|
|
|
|
+
|
|
|
|
+ const int auotRepeatDelay = 100; // ms
|
|
|
|
+ if (videoHandle.sourceIsMovie())
|
|
|
|
+ {
|
|
|
|
+ // pause and unpause with space
|
|
|
|
+ long elapsed = watch.ElapsedMilliseconds;
|
|
|
|
+ if (OpenTK.Input.Keyboard.GetState().IsKeyDown(OpenTK.Input.Key.Space) && (elapsed - timeSpacePressed) >= auotRepeatDelay)
|
|
|
|
+ {
|
|
|
|
+ timeSpacePressed = elapsed;
|
|
|
|
+ if (paused)
|
|
|
|
+ videoHandle.unpauseMovie();
|
|
|
|
+ else
|
|
|
|
+ videoHandle.pauseMovie();
|
|
|
|
+ paused = !paused;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // when paused go to next / previous frame with right / left keys
|
|
|
|
+ if (paused)
|
|
|
|
+ {
|
|
|
|
+ if (OpenTK.Input.Keyboard.GetState().IsKeyDown(OpenTK.Input.Key.Right) && (elapsed - timeRightPressed) >= auotRepeatDelay)
|
|
|
|
+ {
|
|
|
|
+ timeRightPressed = elapsed;
|
|
|
|
+ videoHandle.unpauseMovie();
|
|
|
|
+ videoHandle.nextFrame();
|
|
|
|
+ videoHandle.pauseMovie();
|
|
|
|
+ }
|
|
|
|
+ else if (OpenTK.Input.Keyboard.GetState().IsKeyDown(OpenTK.Input.Key.Left) && (elapsed - timeLeftPressed) >= auotRepeatDelay)
|
|
|
|
+ {
|
|
|
|
+ timeLeftPressed = elapsed;
|
|
|
|
+ videoHandle.unpauseMovie();
|
|
|
|
+ videoHandle.reversePlay();
|
|
|
|
+ videoHandle.nextFrame();
|
|
|
|
+ videoHandle.reversePlay();
|
|
|
|
+ videoHandle.pauseMovie();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ videoHandle.nextFrame();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ videoHandle.nextFrame();
|
|
|
|
+ }
|
|
|
|
|
|
//draw textures
|
|
//draw textures
|
|
Int16[] depthTextureData = new Int16[3 * videoHandle.getWidth() * videoHandle.getHeight()];
|
|
Int16[] depthTextureData = new Int16[3 * videoHandle.getWidth() * videoHandle.getHeight()];
|