OSDN Git Service

Made each rendering section responsible for setting the client state and clearing...
authorLatif Khalifa <latifer@streamgrid.net>
Fri, 1 Jul 2011 23:19:58 +0000 (23:19 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Fri, 1 Jul 2011 23:19:58 +0000 (23:19 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@922 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/GUI/Rendering/Rendering.cs

index 4b9f9a7..a87c1b4 100644 (file)
@@ -879,7 +879,8 @@ namespace Radegast.Rendering
         {\r
             lock (Avatars)\r
             {\r
-                GL.DisableClientState(ArrayCap.NormalArray);\r
+                GL.EnableClientState(ArrayCap.VertexArray);\r
+                GL.EnableClientState(ArrayCap.TextureCoordArray);\r
 \r
                 foreach (RenderAvatar av in Avatars.Values)\r
                 {\r
@@ -940,11 +941,10 @@ namespace Radegast.Rendering
                     }\r
                 }\r
 \r
-                GL.EnableClientState(ArrayCap.NormalArray);\r
-\r
+                GL.DisableClientState(ArrayCap.VertexArray);\r
+                GL.DisableClientState(ArrayCap.TextureCoordArray);\r
             }\r
         }\r
-               \r
                #endregion avatars\r
 \r
         #region Terrian\r
@@ -1017,6 +1017,10 @@ namespace Radegast.Rendering
 \r
         private void RenderTerrain()\r
         {\r
+            GL.EnableClientState(ArrayCap.VertexArray);\r
+            GL.EnableClientState(ArrayCap.TextureCoordArray);\r
+            GL.EnableClientState(ArrayCap.NormalArray);\r
+\r
             if (TerrainModified)\r
             {\r
                 UpdateTerrain();\r
@@ -1055,21 +1059,36 @@ namespace Radegast.Rendering
                     GL.GenBuffers(1, out terrainVBO);\r
                     GL.BindBuffer(BufferTarget.ArrayBuffer, terrainVBO);\r
                     GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(terrainVertices.Length * FaceData.VertexSize), terrainVertices, BufferUsageHint.StreamDraw);\r
+                }\r
+                else\r
+                {\r
+                    GL.BindBuffer(BufferTarget.ArrayBuffer, terrainVBO);\r
+                }\r
 \r
+                if (terrainIndexVBO == -1)\r
+                {\r
                     GL.GenBuffers(1, out terrainIndexVBO);\r
                     GL.BindBuffer(BufferTarget.ElementArrayBuffer, terrainIndexVBO);\r
                     GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(terrainIndices.Length * sizeof(ushort)), terrainIndices, BufferUsageHint.StreamDraw);\r
                 }\r
                 else\r
                 {\r
-                    GL.BindBuffer(BufferTarget.ArrayBuffer, terrainVBO);\r
                     GL.BindBuffer(BufferTarget.ElementArrayBuffer, terrainIndexVBO);\r
                 }\r
+\r
+                GL.NormalPointer(NormalPointerType.Float, FaceData.VertexSize, (IntPtr)12);\r
+                GL.TexCoordPointer(2, TexCoordPointerType.Float, FaceData.VertexSize, (IntPtr)(24));\r
+                GL.VertexPointer(3, VertexPointerType.Float, FaceData.VertexSize, (IntPtr)(0));\r
+\r
                 GL.DrawElements(BeginMode.Triangles, terrainIndices.Length, DrawElementsType.UnsignedShort, IntPtr.Zero);\r
+                \r
                 GL.BindBuffer(BufferTarget.ArrayBuffer, 0);\r
                 GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);\r
             }\r
             GL.BindTexture(TextureTarget.Texture2D, 0);\r
+            GL.DisableClientState(ArrayCap.VertexArray);\r
+            GL.DisableClientState(ArrayCap.TextureCoordArray);\r
+            GL.DisableClientState(ArrayCap.NormalArray);\r
         }\r
         #endregion Terrain\r
 \r
@@ -1086,6 +1105,10 @@ namespace Radegast.Rendering
         {\r
             lock (Prims)\r
             {\r
+                GL.EnableClientState(ArrayCap.VertexArray);\r
+                GL.EnableClientState(ArrayCap.TextureCoordArray);\r
+                GL.EnableClientState(ArrayCap.NormalArray);\r
+\r
                 GL.Enable(EnableCap.ColorMaterial);\r
                 int primNr = 0;\r
                 foreach (FacetedMesh mesh in Prims.Values)\r
@@ -1257,6 +1280,9 @@ namespace Radegast.Rendering
                     GL.PopMatrix();\r
                 }\r
                 GL.Disable(EnableCap.ColorMaterial);\r
+                GL.DisableClientState(ArrayCap.VertexArray);\r
+                GL.DisableClientState(ArrayCap.TextureCoordArray);\r
+                GL.DisableClientState(ArrayCap.NormalArray);\r
             }\r
         }\r
 \r
@@ -1295,10 +1321,6 @@ namespace Radegast.Rendering
             // Push the world matrix\r
             GL.PushMatrix();\r
 \r
-            GL.EnableClientState(ArrayCap.VertexArray);\r
-            GL.EnableClientState(ArrayCap.TextureCoordArray);\r
-            GL.EnableClientState(ArrayCap.NormalArray);\r
-\r
             if (Camera.Modified)\r
             {\r
                 GL.GetFloat(GetPName.ProjectionMatrix, out ProjectionMatrix);\r
@@ -1324,11 +1346,6 @@ namespace Radegast.Rendering
 \r
             // Pop the world matrix\r
             GL.PopMatrix();\r
-\r
-            GL.DisableClientState(ArrayCap.TextureCoordArray);\r
-            GL.DisableClientState(ArrayCap.VertexArray);\r
-            GL.DisableClientState(ArrayCap.NormalArray);\r
-\r
             GL.Flush();\r
         }\r
 \r