Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Runtime.InteropServices;
- namespace TimePlease
- {
- class App
- {
- static void Main(string[] args)
- {
- var app = new App();
- app.run();
- }
- Otter.Game engine;
- Otter.Scene scene;
- long counter;
- public float lastTimePerformance;
- public DateTime lastTimeMedia;
- void run()
- {
- engine = new Otter.Game("Otter time and framerate", 640, 480, 60, false);
- engine.SetWindow(640, 480, false, true);
- scene = new Otter.Scene();
- scene.OnUpdate = update;
- lastTimePerformance = PerformanceTimer.time;
- lastTimeMedia = MediaTimer.UtcNow;
- engine.Start(scene);
- }
- string f(float x)
- {
- return x.ToString("00.000");
- }
- void update()
- {
- var performanceTime = PerformanceTimer.time;
- var performanceDeltaTime = performanceTime - lastTimePerformance;
- lastTimePerformance = performanceTime;
- var engineRealDeltaTime = engine.RealDeltaTime / 1000;
- var mediaTime = MediaTimer.UtcNow;
- var mediaDeltaTime = Convert.ToSingle((MediaTimer.UtcNow - lastTimeMedia).TotalMilliseconds / 1000);
- lastTimeMedia = mediaTime;
- if (counter % 3 == 0)
- {
- Console.WriteLine("engine-fps = " + f(engine.Framerate)
- + "; engine-real-dt = " + f(engineRealDeltaTime)
- + "; performance-dt = " + f(performanceDeltaTime)
- + "; media-dt = " + f(mediaDeltaTime)
- + "; " + performanceTime);
- }
- counter++;
- }
- }
- static class MediaTimer
- {
- public static bool IsAvailable { get; private set; }
- [DllImport("Kernel32.dll", CallingConvention = CallingConvention.Winapi)]
- private static extern void GetSystemTimePreciseAsFileTime(out long filetime);
- public static DateTime UtcNow
- {
- get
- {
- if (!IsAvailable)
- {
- throw new InvalidOperationException(
- "High resolution clock isn't available.");
- }
- long filetime;
- GetSystemTimePreciseAsFileTime(out filetime);
- return DateTime.FromFileTimeUtc(filetime);
- }
- }
- static MediaTimer()
- {
- try
- {
- long filetime;
- GetSystemTimePreciseAsFileTime(out filetime);
- IsAvailable = true;
- }
- catch (EntryPointNotFoundException)
- {
- // Not running Windows 8 or higher.
- IsAvailable = false;
- }
- }
- }
- static class PerformanceTimer
- {
- [DllImport("Kernel32.dll")]
- private static extern bool QueryPerformanceCounter(
- out long lpPerformanceCount);
- [DllImport("Kernel32.dll")]
- private static extern bool QueryPerformanceFrequency(
- out long lpFrequency);
- static private float freqency;
- // Constructor
- static PerformanceTimer()
- {
- long performanceFrequency;
- if (QueryPerformanceFrequency(out performanceFrequency))
- {
- freqency = performanceFrequency;
- Console.WriteLine("frequency = " + freqency);
- }
- else
- {
- throw new Exception("High-performance counter not supported");
- }
- }
- public static float time
- {
- get
- {
- long performanceTime;
- QueryPerformanceCounter(out performanceTime);
- return (float)performanceTime / freqency;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement