OSDN Git Service

Add basic stats display and show FPS to 3D scene
authorRobin Cornelius <robin.cornelius@gmail.com>
Sat, 2 Jul 2011 20:19:28 +0000 (20:19 +0000)
committerRobin Cornelius <robin.cornelius@gmail.com>
Sat, 2 Jul 2011 20:19:28 +0000 (20:19 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@930 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/GUI/Rendering/Rendering.cs

index b30ed40..54cbeee 100644 (file)
@@ -105,6 +105,8 @@ namespace Radegast.Rendering
         OpenTK.Matrix4 ProjectionMatrix;\r
         int[] Viewport = new int[4];\r
         bool useVBO = true;\r
+        int lastTimerTick;\r
+        int advTimerTick;\r
 \r
         #endregion Private fields\r
 \r
@@ -431,6 +433,7 @@ namespace Radegast.Rendering
                 };\r
                 textureThread.Start();\r
                 TextureThreadContextReady.WaitOne(1000, false);\r
+                this.lastTimerTick = Environment.TickCount;\r
                 glControl.MakeCurrent();\r
             }\r
             catch (Exception ex)\r
@@ -707,6 +710,7 @@ namespace Radegast.Rendering
                 {\r
                     item.Data.TextureInfo = TexturesPtrMap[item.TeFace.TextureID];\r
                     GL.BindTexture(TextureTarget.Texture2D, item.Data.TextureInfo.TexturePointer);\r
+                    \r
                     continue;\r
                 }\r
 \r
@@ -818,6 +822,25 @@ namespace Radegast.Rendering
 #pragma warning disable 0612\r
         OpenTK.Graphics.TextPrinter Printer = new OpenTK.Graphics.TextPrinter(OpenTK.Graphics.TextQuality.High);\r
 #pragma warning restore 0612\r
+\r
+        private void RenderStats()\r
+        {\r
+            int posX = glControl.Width - 100;\r
+            int posY = 0;\r
+\r
+            int elapsedTime = Environment.TickCount - lastTimerTick;\r
+            lastTimerTick = Environment.TickCount;\r
+            // This is a FIR filter known as a MMA or Modified Mean Average, using a 20 point sampling width\r
+            advTimerTick = ((19 * advTimerTick) + elapsedTime) / 20;\r
+\r
+            GL.Color4(0f, 0f, 0f, 0.6f);\r
+            Printer.Begin();\r
+            Printer.Print(String.Format("FPS {0:000.00}",1000.0f/(float)advTimerTick), AvatarTagFont, Color.Orange,\r
+                new RectangleF(posX, posY, 100, 50),\r
+                OpenTK.Graphics.TextPrinterOptions.Default, OpenTK.Graphics.TextAlignment.Center);\r
+            Printer.End();\r
+        }\r
+\r
         private void RenderText()\r
         {\r
             GLHUDBegin();\r
@@ -1518,11 +1541,13 @@ namespace Radegast.Rendering
                 RenderWater();\r
                 RenderObjects(RenderPass.Alpha);\r
                 RenderText();\r
+                RenderStats();\r
             }\r
 \r
             // Pop the world matrix\r
             GL.PopMatrix();\r
             GL.Flush();\r
+\r
         }\r
 \r
         private void GluPerspective(float fovy, float aspect, float zNear, float zFar)\r