OSDN Git Service

Avoid terrain flicker as the patches come in.
authorLatif Khalifa <latifer@streamgrid.net>
Sun, 3 Jul 2011 03:09:16 +0000 (03:09 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Sun, 3 Jul 2011 03:09:16 +0000 (03:09 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@936 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/GUI/Rendering/Rendering.cs

index cff8108..2ae1782 100644 (file)
@@ -1113,26 +1113,38 @@ namespace Radegast.Rendering
 \r
         private void ResetTerrain()\r
         {\r
+            ResetTerrain(true);\r
+        }\r
+\r
+        private void ResetTerrain(bool removeImage)\r
+        {\r
             if (terrainImage != null)\r
             {\r
                 terrainImage.Dispose();\r
                 terrainImage = null;\r
             }\r
 \r
-            terrainTexture = -1;\r
-\r
-            if (terrainVBO == -1)\r
+            if (terrainVBO != -1)\r
             {\r
                 GL.DeleteBuffers(1, ref terrainVBO);\r
                 terrainVBO = -1;\r
             }\r
 \r
-            if (terrainIndexVBO == -1)\r
+            if (terrainIndexVBO != -1)\r
             {\r
                 GL.DeleteBuffers(1, ref terrainIndexVBO);\r
                 terrainIndexVBO = -1;\r
             }\r
 \r
+            if (removeImage)\r
+            {\r
+                if (terrainTexture != -1)\r
+                {\r
+                    GL.DeleteTexture(terrainTexture);\r
+                    terrainTexture = -1;\r
+                }\r
+            }\r
+\r
             fetchingTerrainTexture = false;\r
             TerrainModified = true;\r
         }\r
@@ -1165,10 +1177,8 @@ namespace Radegast.Rendering
             TerrainModified = false;\r
         }\r
 \r
-        void CheckTerrainTexture()\r
+        void UpdateTerrainTexture()\r
         {\r
-            if (terrainTexture != -1) return;\r
-\r
             if (!fetchingTerrainTexture)\r
             {\r
                 fetchingTerrainTexture = true;\r
@@ -1184,11 +1194,6 @@ namespace Radegast.Rendering
                     fetchingTerrainTexture = false;\r
                 });\r
             }\r
-            else if (terrainImage != null)\r
-            {\r
-                terrainTexture = GLLoadImage(terrainImage, false);\r
-            }\r
-\r
         }\r
 \r
         private void RenderTerrain()\r
@@ -1199,11 +1204,22 @@ namespace Radegast.Rendering
 \r
             if (TerrainModified)\r
             {\r
-                ResetTerrain();\r
+                ResetTerrain(false);\r
                 UpdateTerrain();\r
+                UpdateTerrainTexture();\r
             }\r
 \r
-            CheckTerrainTexture();\r
+            if (terrainImage != null)\r
+            {\r
+                if (terrainTexture != -1)\r
+                {\r
+                    GL.DeleteTexture(terrainTexture);\r
+                }\r
+\r
+                terrainTexture = GLLoadImage(terrainImage, false);\r
+                terrainImage.Dispose();\r
+                terrainImage = null;\r
+            }\r
 \r
             if (terrainTexture == -1)\r
             {\r