Added fadeout and fadein effect.
This commit is contained in:
parent
58ee3ea427
commit
c6d9dd5df3
5 changed files with 129 additions and 4 deletions
|
@ -13,6 +13,7 @@ using System.Windows.Forms;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace Examples.Tests
|
namespace Examples.Tests
|
||||||
{
|
{
|
||||||
|
@ -21,15 +22,19 @@ namespace Examples.Tests
|
||||||
{
|
{
|
||||||
public static void Main()
|
public static void Main()
|
||||||
{
|
{
|
||||||
|
int count = 0;
|
||||||
foreach (DisplayDevice dev in DisplayDevice.AvailableDisplays)
|
foreach (DisplayDevice dev in DisplayDevice.AvailableDisplays)
|
||||||
{
|
{
|
||||||
|
if (count++ == 0) continue;
|
||||||
Trace.WriteLine(dev.ToString());
|
Trace.WriteLine(dev.ToString());
|
||||||
MessageBox.Show(dev.ToString());
|
MessageBox.Show(dev.ToString());
|
||||||
// Switch to 640x480@60Hz, keeping bits per pixel the same.
|
// Switch to 640x480@60Hz, keeping bits per pixel the same.
|
||||||
dev.ChangeResolution(dev.SelectResolution(640, 480, dev.BitsPerPixel, 60.0f));
|
dev.ChangeResolution(dev.SelectResolution(640, 480, dev.BitsPerPixel, 60.0f));
|
||||||
MessageBox.Show(dev.ToString());
|
Thread.Sleep(2000);
|
||||||
|
//MessageBox.Show(dev.ToString());
|
||||||
dev.RestoreResolution();
|
dev.RestoreResolution();
|
||||||
MessageBox.Show(dev.ToString());
|
//MessageBox.Show(dev.ToString());
|
||||||
|
//Thread.Sleep(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1185,6 +1185,7 @@ namespace OpenTK
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
/*
|
/*
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Top coordinate of the GameWindow's rendering area, in pixel coordinates relative to the GameWindow's top left point.
|
/// Gets the Top coordinate of the GameWindow's rendering area, in pixel coordinates relative to the GameWindow's top left point.
|
||||||
|
|
|
@ -10,6 +10,8 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace OpenTK.Graphics
|
namespace OpenTK.Graphics
|
||||||
{
|
{
|
||||||
|
@ -32,6 +34,7 @@ namespace OpenTK.Graphics
|
||||||
static List<DisplayDevice> available_displays = new List<DisplayDevice>();
|
static List<DisplayDevice> available_displays = new List<DisplayDevice>();
|
||||||
static object display_lock = new object();
|
static object display_lock = new object();
|
||||||
static DisplayDevice primary_display;
|
static DisplayDevice primary_display;
|
||||||
|
static FadeEffect effect = new FadeEffect();
|
||||||
|
|
||||||
static IDisplayDeviceDriver implementation;
|
static IDisplayDeviceDriver implementation;
|
||||||
|
|
||||||
|
@ -191,6 +194,8 @@ namespace OpenTK.Graphics
|
||||||
if (resolution == current_resolution)
|
if (resolution == current_resolution)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
effect.FadeOut();
|
||||||
|
|
||||||
if (implementation.TryChangeResolution(this, resolution))
|
if (implementation.TryChangeResolution(this, resolution))
|
||||||
{
|
{
|
||||||
if (original_resolution == null)
|
if (original_resolution == null)
|
||||||
|
@ -199,6 +204,8 @@ namespace OpenTK.Graphics
|
||||||
}
|
}
|
||||||
else throw new GraphicsModeException(String.Format("Device {0}: Failed to change resolution to {1}.",
|
else throw new GraphicsModeException(String.Format("Device {0}: Failed to change resolution to {1}.",
|
||||||
this, resolution));
|
this, resolution));
|
||||||
|
|
||||||
|
effect.FadeIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -210,12 +217,18 @@ namespace OpenTK.Graphics
|
||||||
public void RestoreResolution()
|
public void RestoreResolution()
|
||||||
{
|
{
|
||||||
if (original_resolution != null)
|
if (original_resolution != null)
|
||||||
|
{
|
||||||
|
effect.FadeOut();
|
||||||
|
|
||||||
if (implementation.TryRestoreResolution(this))
|
if (implementation.TryRestoreResolution(this))
|
||||||
{
|
{
|
||||||
current_resolution = original_resolution;
|
current_resolution = original_resolution;
|
||||||
original_resolution = null;
|
original_resolution = null;
|
||||||
}
|
}
|
||||||
else throw new GraphicsModeException(String.Format("Device {0}: Failed to restore resolution.", this));
|
else throw new GraphicsModeException(String.Format("Device {0}: Failed to restore resolution.", this));
|
||||||
|
|
||||||
|
effect.FadeIn();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -297,4 +310,111 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region --- FadeEffect ---
|
||||||
|
|
||||||
|
class FadeEffect : IDisposable
|
||||||
|
{
|
||||||
|
List<Form> forms = new List<Form>();
|
||||||
|
double opacity_step = 0.05;
|
||||||
|
int sleep_step;
|
||||||
|
|
||||||
|
internal FadeEffect()
|
||||||
|
{
|
||||||
|
foreach (Screen s in Screen.AllScreens)
|
||||||
|
{
|
||||||
|
Form form = new Form();
|
||||||
|
form.ShowInTaskbar = false;
|
||||||
|
form.StartPosition = FormStartPosition.Manual;
|
||||||
|
form.FormBorderStyle = FormBorderStyle.None;
|
||||||
|
form.WindowState = FormWindowState.Maximized;
|
||||||
|
form.TopMost = true;
|
||||||
|
|
||||||
|
form.BackColor = System.Drawing.Color.Black;
|
||||||
|
forms.Add(form);
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep_step = 10 / forms.Count;
|
||||||
|
MoveToStartPositions();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveToStartPositions()
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
foreach (Screen s in Screen.AllScreens)
|
||||||
|
forms[count++].Location = new System.Drawing.Point(s.Bounds.X, s.Bounds.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FadedOut
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
bool ready = true;
|
||||||
|
foreach (Form form in forms)
|
||||||
|
ready = ready && form.Opacity >= 1.0;
|
||||||
|
|
||||||
|
return ready;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FadedIn
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
bool ready = true;
|
||||||
|
foreach (Form form in forms)
|
||||||
|
ready = ready && form.Opacity <= 0.0;
|
||||||
|
|
||||||
|
return ready;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void FadeOut()
|
||||||
|
{
|
||||||
|
MoveToStartPositions();
|
||||||
|
|
||||||
|
foreach (Form form in forms)
|
||||||
|
{
|
||||||
|
form.Opacity = 0.0;
|
||||||
|
form.Visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!FadedOut)
|
||||||
|
{
|
||||||
|
foreach (Form form in forms)
|
||||||
|
form.Opacity += opacity_step;
|
||||||
|
Thread.Sleep(sleep_step);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void FadeIn()
|
||||||
|
{
|
||||||
|
MoveToStartPositions();
|
||||||
|
|
||||||
|
foreach (Form form in forms)
|
||||||
|
form.Opacity = 1.0;
|
||||||
|
|
||||||
|
while (!FadedIn)
|
||||||
|
{
|
||||||
|
foreach (Form form in forms)
|
||||||
|
form.Opacity -= opacity_step;
|
||||||
|
Thread.Sleep(sleep_step);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Form form in forms)
|
||||||
|
form.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
foreach (Form form in forms)
|
||||||
|
form.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,5 @@ namespace OpenTK.Graphics
|
||||||
{
|
{
|
||||||
bool TryChangeResolution(DisplayDevice device, DisplayResolution resolution);
|
bool TryChangeResolution(DisplayDevice device, DisplayResolution resolution);
|
||||||
bool TryRestoreResolution(DisplayDevice device);
|
bool TryRestoreResolution(DisplayDevice device);
|
||||||
//DisplayDevice[] AvailableDevices { get; }
|
|
||||||
//DisplayResolution[]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,7 @@ namespace OpenTK.Platform.Windows
|
||||||
public bool TryChangeResolution(OpenTK.Graphics.DisplayDevice device, DisplayResolution resolution)
|
public bool TryChangeResolution(OpenTK.Graphics.DisplayDevice device, DisplayResolution resolution)
|
||||||
{
|
{
|
||||||
DeviceMode mode = null;
|
DeviceMode mode = null;
|
||||||
|
|
||||||
if (resolution != null)
|
if (resolution != null)
|
||||||
{
|
{
|
||||||
mode = new DeviceMode();
|
mode = new DeviceMode();
|
||||||
|
|
Loading…
Reference in a new issue