diff --git a/Programs/AvatarPreview/AvatarPreview.csproj b/Programs/AvatarPreview/AvatarPreview.csproj index 0cca7aad..2ac715dc 100644 --- a/Programs/AvatarPreview/AvatarPreview.csproj +++ b/Programs/AvatarPreview/AvatarPreview.csproj @@ -1,148 +1,156 @@ - - Local - 14.0.25123 - 2.0 - {93CEA633-0000-0000-0000-000000000000} - Debug - - - - AvatarPreview - JScript - Grid - IE50 - false - v4.0 - WinExe - - AvatarPreview - - - - - - - True - 285212672 - False - - - TRACE;DEBUG - - True - 4096 - False - ..\..\bin\ - False - False - False - 4 - False - 1591,1574,0419 - AnyCPU - - - True - 285212672 - False - - - TRACE - - False - 4096 - True - ..\..\bin\ - False - False - False - 4 - False - 1591,1574,0419 - AnyCPU - - - - System - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.Xml - False - - - Tao.OpenGl - False - - - Tao.Platform.Windows - False - - - - - LibreMetaverse - {27C70F3A-0000-0000-0000-000000000000} - {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False - - - LibreMetaverseTypes - {B37B02AD-0000-0000-0000-000000000000} - {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False - - - - - Code - - - Code - - - Code - - - Code - - - Code - - - frmAvatar.cs - - - frmAvatar.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - - - - - - - - - - + + Local + 14.0.25123 + 2.0 + {93CEA633-0000-0000-0000-000000000000} + Debug + + + + + AvatarPreview + JScript + Grid + IE50 + false + v4.0 + WinExe + + + AvatarPreview + + + + + + + + + True + 285212672 + False + + + TRACE;DEBUG + + + True + 4096 + False + ..\..\bin\ + False + False + False + 4 + False + 1591,1574,0419,0618 + AnyCPU + + + True + 285212672 + False + + + TRACE + + + False + 4096 + True + ..\..\bin\ + False + False + False + 4 + False + 1591,1574,0419,0618 + AnyCPU + + + + ..\..\packages\OpenTK.2.0.0\lib\net20\OpenTK.dll + + + ..\..\packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll + + + System + False + + + System.Data + False + + + System.Drawing + False + + + System.Windows.Forms + False + + + System.Xml + False + + + + + LibreMetaverse + {27C70F3A-0000-0000-0000-000000000000} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + + + LibreMetaverseTypes + {B37B02AD-0000-0000-0000-000000000000} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + + + + + Form + + + Code + + + Code + + + Code + + + Code + + + frmAvatar.cs + + + frmAvatar.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + + + + + + + + + + + diff --git a/Programs/AvatarPreview/GLMesh.cs b/Programs/AvatarPreview/GLMesh.cs index 22e2320a..95b76bf8 100644 --- a/Programs/AvatarPreview/GLMesh.cs +++ b/Programs/AvatarPreview/GLMesh.cs @@ -110,6 +110,7 @@ namespace AvatarPreview } } + [Obsolete] public override void LoadLODMesh(int level, string filename) { LODMesh lod = new LODMesh(); diff --git a/Programs/AvatarPreview/app.config b/Programs/AvatarPreview/app.config new file mode 100644 index 00000000..d4f722e0 --- /dev/null +++ b/Programs/AvatarPreview/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Programs/AvatarPreview/frmAvatar.Designer.cs b/Programs/AvatarPreview/frmAvatar.Designer.cs index c06836d4..2e3dec86 100644 --- a/Programs/AvatarPreview/frmAvatar.Designer.cs +++ b/Programs/AvatarPreview/frmAvatar.Designer.cs @@ -41,7 +41,7 @@ namespace AvatarPreview this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.glControl = new Tao.Platform.Windows.SimpleOpenGlControl(); + this.glControl = new OpenTK.GLControl(); this.tabControl = new System.Windows.Forms.TabControl(); this.tavView = new System.Windows.Forms.TabPage(); this.scrollZoom = new System.Windows.Forms.HScrollBar(); @@ -250,19 +250,11 @@ namespace AvatarPreview // // glControl // - this.glControl.AccumBits = ((byte)(0)); - this.glControl.AutoCheckErrors = false; - this.glControl.AutoFinish = false; - this.glControl.AutoMakeCurrent = true; - this.glControl.AutoSwapBuffers = true; this.glControl.BackColor = System.Drawing.Color.Black; - this.glControl.ColorBits = ((byte)(32)); - this.glControl.DepthBits = ((byte)(16)); this.glControl.Dock = System.Windows.Forms.DockStyle.Fill; this.glControl.Location = new System.Drawing.Point(0, 0); this.glControl.Name = "glControl"; this.glControl.Size = new System.Drawing.Size(558, 653); - this.glControl.StencilBits = ((byte)(0)); this.glControl.TabIndex = 0; this.glControl.Paint += new System.Windows.Forms.PaintEventHandler(this.glControl_Paint); this.glControl.Resize += new System.EventHandler(this.glControl_Resize); @@ -1101,7 +1093,7 @@ namespace AvatarPreview private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; private System.Windows.Forms.SplitContainer splitContainer1; - private Tao.Platform.Windows.SimpleOpenGlControl glControl; + private OpenTK.GLControl glControl; private System.Windows.Forms.TabControl tabControl; private System.Windows.Forms.TabPage tabMorphs; private System.Windows.Forms.TabPage tabTextures; diff --git a/Programs/AvatarPreview/frmAvatar.cs b/Programs/AvatarPreview/frmAvatar.cs index 58977857..f3a6a0ea 100644 --- a/Programs/AvatarPreview/frmAvatar.cs +++ b/Programs/AvatarPreview/frmAvatar.cs @@ -1,19 +1,14 @@ using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; using System.Drawing; -using System.Text; using System.Windows.Forms; using System.IO; using System.Xml; -using Tao.OpenGl; -using Tao.Platform.Windows; +using OpenTK.Graphics.OpenGL; using OpenMetaverse; using OpenMetaverse.Imaging; -using OpenMetaverse.Rendering; using OpenMetaverse.Assets; namespace AvatarPreview @@ -29,16 +24,13 @@ namespace AvatarPreview { InitializeComponent(); - glControl.InitializeContexts(); - - Gl.glShadeModel(Gl.GL_SMOOTH); - Gl.glClearColor(0f, 0f, 0f, 0f); - - Gl.glClearDepth(1.0f); - Gl.glEnable(Gl.GL_DEPTH_TEST); - Gl.glDepthMask(Gl.GL_TRUE); - Gl.glDepthFunc(Gl.GL_LEQUAL); - Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST); + GL.ShadeModel(ShadingModel.Smooth); + GL.ClearColor(Color.Black); + GL.ClearDepth(1.0f); + GL.Enable(EnableCap.DepthTest); + GL.DepthMask(true); + GL.DepthFunc(DepthFunction.Lequal); + GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest); glControl_Resize(null, null); } @@ -125,25 +117,20 @@ namespace AvatarPreview private void glControl_Paint(object sender, PaintEventArgs e) { - Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); - Gl.glLoadIdentity(); - - // Setup wireframe or solid fill drawing mode + GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + GL.LoadIdentity(); if (_wireframe) - Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); else - Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_FILL); - + GL.PolygonMode(MaterialFace.Front, PolygonMode.Fill); // Push the world matrix - Gl.glPushMatrix(); - - Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); - Gl.glEnableClientState(Gl.GL_TEXTURE_COORD_ARRAY); - + GL.PushMatrix(); + GL.EnableClientState(ArrayCap.VertexArray); + GL.EnableClientState(ArrayCap.TextureCoordArray); // World rotations - Gl.glRotatef((float)scrollRoll.Value, 1f, 0f, 0f); - Gl.glRotatef((float)scrollPitch.Value, 0f, 1f, 0f); - Gl.glRotatef((float)scrollYaw.Value, 0f, 0f, 1f); + GL.Rotate(scrollRoll.Value, 1f, 0f, 0f); + GL.Rotate(scrollRoll.Value, 0f, 1f, 0f); + GL.Rotate(scrollRoll.Value, 0f, 0f, 1f); if (_meshes.Count > 0) { @@ -151,61 +138,62 @@ namespace AvatarPreview { if (!_showSkirt && mesh.Name == "skirtMesh") continue; - - Gl.glColor3f(1f, 1f, 1f); + + GL.Color3(1f, 1f, 1f); // Individual prim matrix - Gl.glPushMatrix(); + GL.PushMatrix(); //Gl.glTranslatef(mesh.Position.X, mesh.Position.Y, mesh.Position.Z); - Gl.glRotatef(mesh.RotationAngles.X, 1f, 0f, 0f); - Gl.glRotatef(mesh.RotationAngles.Y, 0f, 1f, 0f); - Gl.glRotatef(mesh.RotationAngles.Z, 0f, 0f, 1f); + GL.Rotate(mesh.RotationAngles.X, 1f, 0f, 0f); + GL.Rotate(mesh.RotationAngles.Y, 0f, 1f, 0f); + GL.Rotate(mesh.RotationAngles.Z, 0f, 0f, 1f); - Gl.glScalef(mesh.Scale.X, mesh.Scale.Y, mesh.Scale.Z); + GL.Scale(mesh.Scale.X, mesh.Scale.Y, mesh.Scale.Z); // TODO: Texturing - Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, mesh.RenderData.TexCoords); - Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, mesh.RenderData.Vertices); - Gl.glDrawElements(Gl.GL_TRIANGLES, mesh.RenderData.Indices.Length, Gl.GL_UNSIGNED_SHORT, mesh.RenderData.Indices); + GL.TexCoordPointer(2, TexCoordPointerType.Float, 0, mesh.RenderData.TexCoords); + GL.VertexPointer(3, VertexPointerType.Float, 0, mesh.RenderData.TexCoords); + GL.DrawElements(BeginMode.Triangles, mesh.RenderData.Indices.Length, DrawElementsType.UnsignedShort, mesh.RenderData.Indices); } } // Pop the world matrix - Gl.glPopMatrix(); + GL.PopMatrix(); + + GL.DisableClientState(ArrayCap.TextureCoordArray); + GL.DisableClientState(ArrayCap.VertexArray); - Gl.glDisableClientState(Gl.GL_TEXTURE_COORD_ARRAY); - Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY); - - Gl.glFlush(); + GL.Flush(); } private void glControl_Resize(object sender, EventArgs e) { - //Gl.glClearColor(0.39f, 0.58f, 0.93f, 1.0f); // Cornflower blue anyone? - Gl.glClearColor(0f, 0f, 0f, 1f); + //GL.ClearColor(0.39f, 0.58f, 0.93f, 1.0f); // Cornflower blue anyone? + GL.ClearColor(0f, 0f, 0f, 1f); - Gl.glPushMatrix(); - Gl.glMatrixMode(Gl.GL_PROJECTION); - Gl.glLoadIdentity(); + GL.PushMatrix(); + GL.MatrixMode(MatrixMode.Projection); + GL.LoadIdentity(); + + GL.Viewport(0, 0, glControl.Width, glControl.Height); - Gl.glViewport(0, 0, glControl.Width, glControl.Height); - - Glu.gluPerspective(50.0d, 1.0d, 0.001d, 50d); + OpenTK.Matrix4 perspectiveMatrix = OpenTK.Matrix4.CreatePerspectiveFieldOfView(50.0f, 1.0f, 0.001f, 50f); + GL.LoadMatrix(ref perspectiveMatrix); Vector3 center = Vector3.Zero; GLMesh head, lowerBody; if (_meshes.TryGetValue("headMesh", out head) && _meshes.TryGetValue("lowerBodyMesh", out lowerBody)) center = (head.RenderData.Center + lowerBody.RenderData.Center) / 2f; - Glu.gluLookAt( - center.X, (double)scrollZoom.Value * 0.1d + center.Y, center.Z, - center.X, (double)scrollZoom.Value * 0.1d + center.Y + 1d, center.Z, - 0d, 0d, 1d); - - Gl.glMatrixMode(Gl.GL_MODELVIEW); + OpenTK.Matrix4 lookAt = OpenTK.Matrix4.LookAt( + new OpenTK.Vector3(center.X, scrollZoom.Value * 0.1f + center.Y, center.Z), + new OpenTK.Vector3(center.X, scrollZoom.Value * 0.1f + center.Y + 1f, center.Z), + new OpenTK.Vector3(0f, 0f, 1f)); + GL.LoadMatrix(ref lookAt); + GL.MatrixMode(MatrixMode.Modelview); } private void scroll_ValueChanged(object sender, EventArgs e) diff --git a/Programs/AvatarPreview/packages.config b/Programs/AvatarPreview/packages.config new file mode 100644 index 00000000..44488244 --- /dev/null +++ b/Programs/AvatarPreview/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Programs/PrimWorkshop/PrimWorkshop.csproj b/Programs/PrimWorkshop/PrimWorkshop.csproj index cd2793d3..924a666c 100644 --- a/Programs/PrimWorkshop/PrimWorkshop.csproj +++ b/Programs/PrimWorkshop/PrimWorkshop.csproj @@ -76,6 +76,15 @@ ..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + ..\..\packages\Lyncee.OpenTK.1.1.1173.43181\lib\OpenTK.dll + + + ..\..\packages\Lyncee.OpenTK.Compatibility.1.1.1173.43181\lib\OpenTK.Compatibility.dll + + + ..\..\packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll + System False @@ -96,14 +105,6 @@ System.Xml False - - Tao.OpenGl - False - - - Tao.Platform.Windows - False - @@ -167,6 +168,8 @@ + + diff --git a/Programs/PrimWorkshop/app.config b/Programs/PrimWorkshop/app.config new file mode 100644 index 00000000..d4f722e0 --- /dev/null +++ b/Programs/PrimWorkshop/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Programs/PrimWorkshop/frmBrowser.Designer.cs b/Programs/PrimWorkshop/frmBrowser.Designer.cs index 0d6a35e3..0f4685b2 100644 --- a/Programs/PrimWorkshop/frmBrowser.Designer.cs +++ b/Programs/PrimWorkshop/frmBrowser.Designer.cs @@ -31,7 +31,7 @@ namespace PrimWorkshop GlacialComponents.Controls.GLColumn glColumn1 = new GlacialComponents.Controls.GLColumn(); GlacialComponents.Controls.GLColumn glColumn2 = new GlacialComponents.Controls.GLColumn(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.glControl = new Tao.Platform.Windows.SimpleOpenGlControl(); + this.glControl = new OpenTK.GLControl(); this.panel1 = new System.Windows.Forms.Panel(); this.txtPass = new System.Windows.Forms.TextBox(); this.txtLast = new System.Windows.Forms.TextBox(); @@ -83,20 +83,12 @@ namespace PrimWorkshop // // glControl // - this.glControl.AccumBits = ((byte)(0)); - this.glControl.AutoCheckErrors = false; - this.glControl.AutoFinish = false; - this.glControl.AutoMakeCurrent = true; - this.glControl.AutoSwapBuffers = true; this.glControl.BackColor = System.Drawing.Color.Black; - this.glControl.ColorBits = ((byte)(32)); this.tableLayoutPanel1.SetColumnSpan(this.glControl, 2); - this.glControl.DepthBits = ((byte)(16)); this.glControl.Dock = System.Windows.Forms.DockStyle.Fill; this.glControl.Location = new System.Drawing.Point(3, 3); this.glControl.Name = "glControl"; this.glControl.Size = new System.Drawing.Size(618, 411); - this.glControl.StencilBits = ((byte)(0)); this.glControl.TabIndex = 7; this.glControl.TabStop = false; this.glControl.MouseMove += new System.Windows.Forms.MouseEventHandler(this.glControl_MouseMove); @@ -366,7 +358,7 @@ namespace PrimWorkshop #endregion private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private Tao.Platform.Windows.SimpleOpenGlControl glControl; + private OpenTK.GLControl glControl; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.TextBox txtPass; private System.Windows.Forms.TextBox txtLast; diff --git a/Programs/PrimWorkshop/frmBrowser.cs b/Programs/PrimWorkshop/frmBrowser.cs index 5126a186..e30e78f5 100644 --- a/Programs/PrimWorkshop/frmBrowser.cs +++ b/Programs/PrimWorkshop/frmBrowser.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using System.Drawing.Imaging; using System.Windows.Forms; using System.IO; using System.Runtime.InteropServices; -using Tao.OpenGl; -using Tao.Platform.Windows; using ICSharpCode.SharpZipLib.Zip; +using OpenTK.Graphics.OpenGL; using OpenMetaverse; using OpenMetaverse.StructuredData; using OpenMetaverse.Imaging; @@ -50,7 +48,7 @@ namespace PrimWorkshop uint LastHit = 0; //warning CS0414: The private field `PrimWorkshop.frmBrowser.PivotPosition' is assigned but its value is never used - Vector3 PivotPosition = Vector3.Zero; + OpenMetaverse.Vector3 PivotPosition = OpenMetaverse.Vector3.Zero; private bool Pivoting; Point LastPivot; @@ -73,7 +71,6 @@ namespace PrimWorkshop InitializeComponent(); // Setup OpenGL - glControl.InitializeContexts(); glControl.SwapBuffers(); glControl.MouseWheel += new MouseEventHandler(glControl_MouseWheel); @@ -122,7 +119,7 @@ namespace PrimWorkshop foreach (TextureInfo tex in Textures.Values) { int id = tex.ID; - Gl.glDeleteTextures(1, ref id); + GL.DeleteTextures(1, ref id); } Textures.Clear(); @@ -218,13 +215,13 @@ namespace PrimWorkshop private void InitOpenGL() { - Gl.glShadeModel(Gl.GL_SMOOTH); + GL.ShadeModel(ShadingModel.Smooth); - Gl.glClearDepth(1.0f); - Gl.glEnable(Gl.GL_DEPTH_TEST); - Gl.glDepthMask(Gl.GL_TRUE); - Gl.glDepthFunc(Gl.GL_LEQUAL); - Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST); + GL.ClearDepth(1d); + GL.Enable(EnableCap.DepthTest); + GL.DepthMask(true); + GL.DepthFunc(DepthFunction.Lequal); + GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest); } private void InitHeightmap() @@ -301,14 +298,14 @@ namespace PrimWorkshop Client.Self.Movement.Camera.Far = (float)Camera.Far; } - Gl.glPushMatrix(); - Gl.glMatrixMode(Gl.GL_PROJECTION); - Gl.glLoadIdentity(); + GL.PushMatrix(); + GL.MatrixMode(MatrixMode.Projection); + GL.LoadIdentity(); SetPerspective(); - - Gl.glMatrixMode(Gl.GL_MODELVIEW); - Gl.glPopMatrix(); + + GL.MatrixMode(MatrixMode.Modelview); + GL.PopMatrix(); } private bool ExportObject(RenderablePrim parent, string fileName, out int prims, out int textures, out string error) @@ -824,28 +821,38 @@ namespace PrimWorkshop private void SetPerspective() { - Glu.gluPerspective(50.0d * Camera.Zoom, 1.0d, 0.1d, Camera.Far); + OpenTK.Matrix4 perspective = OpenTK.Matrix4.CreatePerspectiveFieldOfView( + 50.0f * (float)Camera.Zoom, 1.0f, 0.1f, (float)Camera.Far); + } + + private void GluPickMatrix(double x, double y, double deltax, double deltay, int[] viewport) + { + if (deltax <= 0 || deltay <= 0) return; + + GL.Translate((viewport[2] - 2 * (x - viewport[0])) / deltax, + (viewport[3] - 2 * (y - viewport[1])) / deltay, + 0); + GL.Scale(viewport[2] / deltax, viewport[3] / deltay, 1.0); } private void StartPicking(int cursorX, int cursorY) { int[] viewport = new int[4]; + + GL.SelectBuffer(SELECT_BUFSIZE, SelectBuffer); + GL.RenderMode(RenderingMode.Select); - Gl.glSelectBuffer(SELECT_BUFSIZE, SelectBuffer); - Gl.glRenderMode(Gl.GL_SELECT); - - Gl.glMatrixMode(Gl.GL_PROJECTION); - Gl.glPushMatrix(); - Gl.glLoadIdentity(); - - Gl.glGetIntegerv(Gl.GL_VIEWPORT, viewport); - Glu.gluPickMatrix(cursorX, viewport[3] - cursorY, 5, 5, viewport); + GL.MatrixMode(MatrixMode.Projection); + GL.PushMatrix(); + GL.LoadIdentity(); + GL.GetInteger(GetPName.Viewport, viewport); + GluPickMatrix(cursorX, viewport[3] - cursorY, 5, 5, viewport); + SetPerspective(); - Gl.glMatrixMode(Gl.GL_MODELVIEW); - - Gl.glInitNames(); + GL.MatrixMode(MatrixMode.Modelview); + GL.InitNames(); } private void StopPicking() @@ -853,13 +860,13 @@ namespace PrimWorkshop int hits; // Resotre the original projection matrix - Gl.glMatrixMode(Gl.GL_PROJECTION); - Gl.glPopMatrix(); - Gl.glMatrixMode(Gl.GL_MODELVIEW); - Gl.glFlush(); + GL.MatrixMode(MatrixMode.Projection); + GL.PopMatrix(); + GL.MatrixMode(MatrixMode.Modelview); + GL.Flush(); // Return to normal rendering mode - hits = Gl.glRenderMode(Gl.GL_RENDER); + hits = GL.RenderMode(RenderingMode.Render); // If there are hits process them if (hits != 0) @@ -1083,34 +1090,36 @@ namespace PrimWorkshop { try { - Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); - Gl.glLoadIdentity(); - Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); - Gl.glEnableClientState(Gl.GL_TEXTURE_COORD_ARRAY); + GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + GL.LoadIdentity(); + GL.EnableClientState(ArrayCap.VertexArray); + GL.EnableClientState(ArrayCap.TextureCoordArray); if (Clicked) StartPicking(ClickX, ClickY); // Setup wireframe or solid fill drawing mode - Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_LINE); + GL.PolygonMode(MaterialFace.Front, PolygonMode.Line); // Position the camera - Glu.gluLookAt( + OpenTK.Matrix4 lookAt = OpenTK.Matrix4.LookAt( Camera.Position.X, Camera.Position.Y, Camera.Position.Z, Camera.FocalPoint.X, Camera.FocalPoint.Y, Camera.FocalPoint.Z, 0f, 0f, 1f); + GL.MatrixMode(MatrixMode.Modelview); + GL.LoadMatrix(ref lookAt); RenderSkybox(); // Push the world matrix - Gl.glPushMatrix(); + GL.PushMatrix(); RenderTerrain(); RenderPrims(); RenderAvatars(); - Gl.glDisableClientState(Gl.GL_TEXTURE_COORD_ARRAY); - Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY); + GL.DisableClientState(ArrayCap.TextureCoordArray); + GL.DisableClientState(ArrayCap.VertexArray); if (Clicked) { @@ -1119,8 +1128,8 @@ namespace PrimWorkshop } // Pop the world matrix - Gl.glPopMatrix(); - Gl.glFlush(); + GL.PopMatrix(); + GL.Flush(); glControl.Invalidate(); } @@ -1175,14 +1184,14 @@ namespace PrimWorkshop int i = 0; // No texture - Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0); + GL.BindTexture(TextureTarget.Texture2D, 0); for (int hy = 0; hy < 16; hy++) { for (int hx = 0; hx < 16; hx++) { uint patchName = (uint)(TERRAIN_START + i); - Gl.glPushName(patchName); + GL.PushName(patchName); ++i; // Check if this patch is currently selected @@ -1190,8 +1199,7 @@ namespace PrimWorkshop for (int y = 0; y < 15; y++) { - Gl.glBegin(Gl.GL_TRIANGLE_STRIP); - + GL.Begin(BeginMode.TriangleStrip); for (int x = 0; x < 15; x++) { // Vertex 0 @@ -1199,42 +1207,41 @@ namespace PrimWorkshop float color = height / MaxHeight; float red = (selected) ? 1f : color; - Gl.glColor3f(red, color, color); - Gl.glTexCoord2f(0f, 0f); - Gl.glVertex3f(hx * 16 + x, hy * 16 + y, height); + GL.Color3(red, color, color); + GL.TexCoord2(0f, 0f); + GL.Vertex3(hx * 16 + x, hy * 16 + y, height); // Vertex 1 height = Heightmap[hy, hx].Data[y * 16 + (x + 1)]; color = height / MaxHeight; red = (selected) ? 1f : color; - Gl.glColor3f(red, color, color); - Gl.glTexCoord2f(1f, 0f); - Gl.glVertex3f(hx * 16 + x + 1, hy * 16 + y, height); + GL.Color3(red, color, color); + GL.TexCoord2(1f, 0f); + GL.Vertex3(hx * 16 + x + 1, hy * 16 + y, height); // Vertex 2 height = Heightmap[hy, hx].Data[(y + 1) * 16 + x]; color = height / MaxHeight; red = (selected) ? 1f : color; - Gl.glColor3f(red, color, color); - Gl.glTexCoord2f(0f, 1f); - Gl.glVertex3f(hx * 16 + x, hy * 16 + y + 1, height); + GL.Color3(red, color, color); + GL.TexCoord2(0f, 1f); + GL.Vertex3(hx * 16 + x, hy * 16 + y + 1, height); // Vertex 3 height = Heightmap[hy, hx].Data[(y + 1) * 16 + (x + 1)]; color = height / MaxHeight; red = (selected) ? 1f : color; - Gl.glColor3f(red, color, color); - Gl.glTexCoord2f(1f, 1f); - Gl.glVertex3f(hx * 16 + x + 1, hy * 16 + y + 1, height); + GL.Color3(red, color, color); + GL.TexCoord2(1f, 1f); + GL.Vertex3(hx * 16 + x + 1, hy * 16 + y + 1, height); } - Gl.glEnd(); + GL.End(); } - - Gl.glPopName(); + GL.PopName(); } } } @@ -1254,13 +1261,13 @@ namespace PrimWorkshop { if (RenderPrimList != null && RenderPrimList.Count > 0) { - Gl.glEnable(Gl.GL_TEXTURE_2D); + GL.Enable(EnableCap.Texture2D); lock (RenderPrimList) { bool firstPass = true; - Gl.glDisable(Gl.GL_BLEND); - Gl.glEnable(Gl.GL_DEPTH_TEST); + GL.Disable(EnableCap.Blend); + GL.Enable(EnableCap.DepthTest); StartRender: @@ -1278,9 +1285,9 @@ namespace PrimWorkshop continue; } } - - Gl.glPushName(prim.LocalID); - Gl.glPushMatrix(); + + GL.PushName(prim.LocalID); + GL.PushMatrix(); if (prim.ParentID != 0) { @@ -1288,23 +1295,23 @@ namespace PrimWorkshop Primitive parent = parentRender.Prim; // Apply parent translation and rotation - Gl.glMultMatrixf(Math3D.CreateTranslationMatrix(parent.Position)); - Gl.glMultMatrixf(Math3D.CreateRotationMatrix(parent.Rotation)); + GL.MultMatrix(Math3D.CreateTranslationMatrix(parent.Position)); + GL.MultMatrix(Math3D.CreateRotationMatrix(parent.Rotation)); } // Apply prim translation and rotation - Gl.glMultMatrixf(Math3D.CreateTranslationMatrix(prim.Position)); - Gl.glMultMatrixf(Math3D.CreateRotationMatrix(prim.Rotation)); + GL.MultMatrix(Math3D.CreateTranslationMatrix(prim.Position)); + GL.MultMatrix(Math3D.CreateRotationMatrix(prim.Rotation)); // Scale the prim - Gl.glScalef(prim.Scale.X, prim.Scale.Y, prim.Scale.Z); + GL.Scale(prim.Scale.X, prim.Scale.Y, prim.Scale.Z); // Draw the prim faces for (int j = 0; j < render.Mesh.Faces.Count; j++) { Face face = render.Mesh.Faces[j]; FaceData data = (FaceData)face.UserData; - Color4 color = face.TextureFace.RGBA; + OpenMetaverse.Color4 color = face.TextureFace.RGBA; bool alpha = false; int textureID = 0; @@ -1322,18 +1329,18 @@ namespace PrimWorkshop textureID = info.ID; // Enable texturing for this face - Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); } else { if (face.TextureFace.TextureID == Primitive.TextureEntry.WHITE_TEXTURE || face.TextureFace.TextureID == UUID.Zero) { - Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_FILL); + GL.PolygonMode(MaterialFace.Front, PolygonMode.Fill); } else { - Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_LINE); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); } } @@ -1342,41 +1349,40 @@ namespace PrimWorkshop // Color this prim differently based on whether it is selected or not if (LastHit == prim.LocalID || (LastHit != 0 && LastHit == prim.ParentID)) { - Gl.glColor4f(1f, color.G * 0.3f, color.B * 0.3f, color.A); + GL.Color4(1f, color.G * 0.3f, color.B * 0.3f, color.A); } else { - Gl.glColor4f(color.R, color.G, color.B, color.A); + GL.Color4(color.R, color.G, color.B, color.A); } // Bind the texture - Gl.glBindTexture(Gl.GL_TEXTURE_2D, textureID); - - Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, data.TexCoords); - Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, data.Vertices); - Gl.glDrawElements(Gl.GL_TRIANGLES, data.Indices.Length, Gl.GL_UNSIGNED_SHORT, data.Indices); + GL.BindTexture(TextureTarget.Texture2D, textureID); + + GL.TexCoordPointer(2, TexCoordPointerType.Float, 0, data.TexCoords); + GL.VertexPointer(3, VertexPointerType.Float, 0, data.Vertices); + GL.DrawElements(BeginMode.Triangles, data.Indices.Length, DrawElementsType.UnsignedShort, data.Indices); } #endregion Texturing } - Gl.glPopMatrix(); - Gl.glPopName(); + GL.PopMatrix(); + GL.PopName(); } if (firstPass) { firstPass = false; - Gl.glEnable(Gl.GL_BLEND); - Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA); - //Gl.glDisable(Gl.GL_DEPTH_TEST); + GL.Enable(EnableCap.Blend); + GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); goto StartRender; } } - Gl.glEnable(Gl.GL_DEPTH_TEST); - Gl.glDisable(Gl.GL_TEXTURE_2D); + GL.Enable(EnableCap.DepthTest); + GL.Disable(EnableCap.Texture2D); } } @@ -1384,23 +1390,23 @@ namespace PrimWorkshop { if (Client != null && Client.Network.CurrentSim != null) { - Gl.glColor3f(0f, 1f, 0f); + GL.Color3(0f, 1f, 0f); Client.Network.CurrentSim.ObjectsAvatars.ForEach( delegate(Avatar avatar) { - Gl.glPushMatrix(); - Gl.glTranslatef(avatar.Position.X, avatar.Position.Y, avatar.Position.Z); + GL.PushMatrix(); + GL.Translate(avatar.Position.X, avatar.Position.Y, avatar.Position.Z); - Glu.GLUquadric quad = Glu.gluNewQuadric(); - Glu.gluSphere(quad, 1.0d, 10, 10); - Glu.gluDeleteQuadric(quad); - - Gl.glPopMatrix(); + var quad = OpenTK.Graphics.Glu.NewQuadric(); + OpenTK.Graphics.Glu.Sphere(quad, 1.0d, 10, 10); + OpenTK.Graphics.Glu.DeleteQuadric(quad); + + GL.PopMatrix(); } ); - Gl.glColor3f(1f, 1f, 1f); + GL.Color3(1f, 1f, 1f); } } @@ -1446,21 +1452,23 @@ namespace PrimWorkshop try { - Gl.glGenTextures(1, out textureID); - Gl.glBindTexture(Gl.GL_TEXTURE_2D, textureID); + GL.GenTextures(1, out textureID); + GL.BindTexture(TextureTarget.Texture2D, textureID); + + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.LinearMipmapNearest); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)All.Linear); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)All.Repeat); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)All.Repeat); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.GenerateMipmap, 1); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR_MIPMAP_NEAREST); //Gl.GL_NEAREST); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_GENERATE_MIPMAP, Gl.GL_TRUE); //Gl.GL_FALSE); //Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, bitmap.Width, bitmap.Height, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, // bitmapData.Scan0); //int error = Gl.glGetError(); - - int error = Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, Gl.GL_RGBA, imgData.Width, imgData.Height, Gl.GL_BGRA, - Gl.GL_UNSIGNED_BYTE, raw); + + int error = OpenTK.Graphics.Glu.Build2DMipmap(OpenTK.Graphics.TextureTarget.Texture2D, + (int)OpenTK.Graphics.PixelInternalFormat.Rgba, imgData.Width, imgData.Height, + OpenTK.Graphics.PixelFormat.Bgra, OpenTK.Graphics.PixelType.UnsignedByte, raw); if (error == 0) { @@ -1629,18 +1637,18 @@ namespace PrimWorkshop private void glControl_Resize(object sender, EventArgs e) { - Gl.glClearColor(0.39f, 0.58f, 0.93f, 1.0f); + GL.ClearColor(0.39f, 0.58f, 0.93f, 1.0f); - Gl.glViewport(0, 0, glControl.Width, glControl.Height); + GL.Viewport(0, 0, glControl.Width, glControl.Height); - Gl.glPushMatrix(); - Gl.glMatrixMode(Gl.GL_PROJECTION); - Gl.glLoadIdentity(); + GL.PushMatrix(); + GL.MatrixMode(MatrixMode.Projection); + GL.LoadIdentity(); SetPerspective(); - Gl.glMatrixMode(Gl.GL_MODELVIEW); - Gl.glPopMatrix(); + GL.MatrixMode(MatrixMode.Modelview); + GL.PopMatrix(); // Set the center of the glControl as the default pivot point LastPivot = glControl.PointToScreen(new Point(glControl.Width / 2, glControl.Height / 2)); diff --git a/Programs/PrimWorkshop/frmPrimWorkshop.Designer.cs b/Programs/PrimWorkshop/frmPrimWorkshop.Designer.cs index f969477a..6b54675f 100644 --- a/Programs/PrimWorkshop/frmPrimWorkshop.Designer.cs +++ b/Programs/PrimWorkshop/frmPrimWorkshop.Designer.cs @@ -15,7 +15,7 @@ namespace PrimWorkshop { if (disposing && (components != null)) { - glControl.DestroyContexts(); + glControl.Context.Dispose(); components.Dispose(); } base.Dispose(disposing); @@ -48,7 +48,7 @@ namespace PrimWorkshop this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.splitContainer = new System.Windows.Forms.SplitContainer(); - this.glControl = new Tao.Platform.Windows.SimpleOpenGlControl(); + this.glControl = new OpenTK.GLControl(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.panel2 = new System.Windows.Forms.Panel(); this.label2 = new System.Windows.Forms.Label(); @@ -233,19 +233,11 @@ namespace PrimWorkshop // // glControl // - this.glControl.AccumBits = ((byte)(0)); - this.glControl.AutoCheckErrors = false; - this.glControl.AutoFinish = false; - this.glControl.AutoMakeCurrent = true; - this.glControl.AutoSwapBuffers = true; this.glControl.BackColor = System.Drawing.Color.Black; - this.glControl.ColorBits = ((byte)(32)); - this.glControl.DepthBits = ((byte)(16)); this.glControl.Dock = System.Windows.Forms.DockStyle.Fill; this.glControl.Location = new System.Drawing.Point(0, 0); this.glControl.Name = "glControl"; this.glControl.Size = new System.Drawing.Size(550, 512); - this.glControl.StencilBits = ((byte)(0)); this.glControl.TabIndex = 5; this.glControl.Paint += new System.Windows.Forms.PaintEventHandler(this.glControl_Paint); this.glControl.Resize += new System.EventHandler(this.glControl_Resize); @@ -436,7 +428,7 @@ namespace PrimWorkshop private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; private System.Windows.Forms.SplitContainer splitContainer; - private Tao.Platform.Windows.SimpleOpenGlControl glControl; + private OpenTK.GLControl glControl; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.HScrollBar scrollRoll; private System.Windows.Forms.HScrollBar scrollPitch; diff --git a/Programs/PrimWorkshop/frmPrimWorkshop.cs b/Programs/PrimWorkshop/frmPrimWorkshop.cs index 33107d82..c52e279a 100644 --- a/Programs/PrimWorkshop/frmPrimWorkshop.cs +++ b/Programs/PrimWorkshop/frmPrimWorkshop.cs @@ -1,13 +1,11 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Windows.Forms; -using Tao.OpenGl; -using Tao.Platform.Windows; using ICSharpCode.SharpZipLib.Zip; +using OpenTK.Graphics.OpenGL; using OpenMetaverse; using OpenMetaverse.StructuredData; using OpenMetaverse.Imaging; @@ -35,16 +33,15 @@ namespace PrimWorkshop public frmPrimWorkshop() { InitializeComponent(); - glControl.InitializeContexts(); - Gl.glShadeModel(Gl.GL_SMOOTH); - Gl.glClearColor(0f, 0f, 0f, 0f); + GL.ShadeModel(ShadingModel.Smooth); + GL.ClearColor(Color.Black); - Gl.glClearDepth(1.0f); - Gl.glEnable(Gl.GL_DEPTH_TEST); - Gl.glDepthMask(Gl.GL_TRUE); - Gl.glDepthFunc(Gl.GL_LEQUAL); - Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST); + GL.ClearDepth(1f); + GL.Enable(EnableCap.DepthTest); + GL.DepthMask(true); + GL.DepthFunc(DepthFunction.Lequal); + GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest); TexturePointers[0] = 0; @@ -81,32 +78,33 @@ namespace PrimWorkshop private void glControl_Paint(object sender, PaintEventArgs e) { - Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); - Gl.glLoadIdentity(); + GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + GL.LoadIdentity(); // Setup wireframe or solid fill drawing mode if (Wireframe) - Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); else - Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_FILL); + GL.PolygonMode(MaterialFace.Front, PolygonMode.Fill); Vector3 center = Vector3.Zero; - Glu.gluLookAt( - center.X, (double)scrollZoom.Value * 0.1d + center.Y, center.Z, - center.X, center.Y, center.Z, - 0d, 0d, 1d); + OpenTK.Matrix4 lookAt = OpenTK.Matrix4.LookAt( + center.X, scrollZoom.Value * 0.1f + center.Y, center.Z, + center.X, center.Y, center.Z, + 0f, 0f, 1f); + GL.LoadMatrix(ref lookAt); // Push the world matrix - Gl.glPushMatrix(); - - Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); - Gl.glEnableClientState(Gl.GL_TEXTURE_COORD_ARRAY); + GL.PushMatrix(); + + GL.EnableClientState(ArrayCap.VertexArray); + GL.EnableClientState(ArrayCap.TextureCoordArray); // World rotations - Gl.glRotatef((float)scrollRoll.Value, 1f, 0f, 0f); - Gl.glRotatef((float)scrollPitch.Value, 0f, 1f, 0f); - Gl.glRotatef((float)scrollYaw.Value, 0f, 0f, 1f); + GL.Rotate((float)scrollRoll.Value, 1f, 0f, 0f); + GL.Rotate((float)scrollPitch.Value, 0f, 1f, 0f); + GL.Rotate((float)scrollYaw.Value, 0f, 0f, 1f); if (Prims != null) { @@ -115,12 +113,12 @@ namespace PrimWorkshop Primitive prim = Prims[i].Prim; if (i == cboPrim.SelectedIndex) - Gl.glColor3f(1f, 0f, 0f); + GL.Color3(1f, 0f, 0f); else - Gl.glColor3f(1f, 1f, 1f); + GL.Color3(1f, 1f, 1f); // Individual prim matrix - Gl.glPushMatrix(); + GL.PushMatrix(); // The root prim position is sim-relative, while child prim positions are // parent-relative. We want to apply parent-relative translations but not @@ -128,12 +126,12 @@ namespace PrimWorkshop if (Prims[i].Prim.ParentID != 0) { // Apply prim translation and rotation - Gl.glMultMatrixf(Math3D.CreateTranslationMatrix(prim.Position)); - Gl.glMultMatrixf(Math3D.CreateRotationMatrix(prim.Rotation)); + GL.MultMatrix(Math3D.CreateTranslationMatrix(prim.Position)); + GL.MultMatrix(Math3D.CreateRotationMatrix(prim.Rotation)); } // Prim scaling - Gl.glScalef(prim.Scale.X, prim.Scale.Y, prim.Scale.Z); + GL.Scale(prim.Scale.X, prim.Scale.Y, prim.Scale.Z); // Draw the prim faces for (int j = 0; j < Prims[i].Faces.Count; j++) @@ -142,7 +140,7 @@ namespace PrimWorkshop { // This prim is currently selected in the dropdown //Gl.glColor3f(0f, 1f, 0f); - Gl.glColor3f(1f, 1f, 1f); + GL.Color3(1f, 1f, 1f); if (j == cboFace.SelectedIndex) { @@ -156,7 +154,7 @@ namespace PrimWorkshop else { // This prim is not currently selected in the dropdown - Gl.glColor3f(1f, 1f, 1f); + GL.Color3(1f, 1f, 1f); } #region Texturing @@ -169,51 +167,52 @@ namespace PrimWorkshop // Set the color to solid white so the texture is not altered //Gl.glColor3f(1f, 1f, 1f); // Enable texturing for this face - Gl.glEnable(Gl.GL_TEXTURE_2D); + GL.Enable(EnableCap.Texture2D); } else { - Gl.glDisable(Gl.GL_TEXTURE_2D); + GL.Disable(EnableCap.Texture2D); } // Bind the texture - Gl.glBindTexture(Gl.GL_TEXTURE_2D, data.TexturePointer); + GL.BindTexture(TextureTarget.Texture2D, data.TexturePointer); #endregion Texturing - Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, data.TexCoords); - Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, data.Vertices); - Gl.glDrawElements(Gl.GL_TRIANGLES, data.Indices.Length, Gl.GL_UNSIGNED_SHORT, data.Indices); + GL.TexCoordPointer(2, TexCoordPointerType.Float, 0, data.TexCoords); + GL.VertexPointer(3, VertexPointerType.Float, 0, data.Vertices); + GL.DrawElements(BeginMode.Triangles, data.Indices.Length, DrawElementsType.UnsignedShort, data.Indices); } // Pop the prim matrix - Gl.glPopMatrix(); + GL.PopMatrix(); } } // Pop the world matrix - Gl.glPopMatrix(); + GL.PopMatrix(); + + GL.DisableClientState(ArrayCap.TextureCoordArray); + GL.DisableClientState(ArrayCap.VertexArray); - Gl.glDisableClientState(Gl.GL_TEXTURE_COORD_ARRAY); - Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY); - - Gl.glFlush(); + GL.Flush(); } private void glControl_Resize(object sender, EventArgs e) { - Gl.glClearColor(0.39f, 0.58f, 0.93f, 1.0f); + GL.ClearColor(0.39f, 0.58f, 0.93f, 1.0f); - Gl.glViewport(0, 0, glControl.Width, glControl.Height); + GL.Viewport(0, 0, glControl.Width, glControl.Height); - Gl.glPushMatrix(); - Gl.glMatrixMode(Gl.GL_PROJECTION); - Gl.glLoadIdentity(); + GL.PushMatrix(); + GL.MatrixMode(MatrixMode.Projection); + GL.LoadIdentity(); - Glu.gluPerspective(50.0d, 1.0d, 0.1d, 256d); + OpenTK.Matrix4 perspectiveMatrix = OpenTK.Matrix4.CreatePerspectiveFieldOfView(50.0f, 1.0f, 0.1f, 256f); + GL.LoadMatrix(ref perspectiveMatrix); - Gl.glMatrixMode(Gl.GL_MODELVIEW); - Gl.glPopMatrix(); + GL.MatrixMode(MatrixMode.Modelview); + GL.PopMatrix(); } #endregion GLControl Callbacks @@ -428,18 +427,19 @@ namespace PrimWorkshop Bitmap bitmap = new Bitmap(data.Texture); bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rectangle = new Rectangle(0, 0, bitmap.Width, bitmap.Height); - BitmapData bitmapData = bitmap.LockBits(rectangle, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); + BitmapData bitmapData = bitmap.LockBits(rectangle, ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb); - Gl.glGenTextures(1, out data.TexturePointer); - Gl.glBindTexture(Gl.GL_TEXTURE_2D, data.TexturePointer); + GL.GenTextures(1, out data.TexturePointer); + GL.BindTexture(TextureTarget.Texture2D, data.TexturePointer); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR_MIPMAP_LINEAR); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_GENERATE_MIPMAP, Gl.GL_TRUE); - - Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, Gl.GL_RGB8, bitmap.Width, bitmap.Height, Gl.GL_BGR, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.LinearMipmapLinear); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)All.Linear); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)All.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)All.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.GenerateMipmap, 1); + + OpenTK.Graphics.Glu.Build2DMipmap(OpenTK.Graphics.TextureTarget.Texture2D, (int)OpenTK.Graphics.PixelInternalFormat.Rgb8, + bitmap.Width, bitmap.Height, OpenTK.Graphics.PixelFormat.Bgr, OpenTK.Graphics.PixelType.UnsignedByte, bitmapData.Scan0); bitmap.UnlockBits(bitmapData); bitmap.Dispose(); @@ -510,19 +510,20 @@ namespace PrimWorkshop bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); // Create the GL texture space - Gl.glGenTextures(1, TexturePointers); + GL.GenTextures(1, TexturePointers); Rectangle rectangle = new Rectangle(0, 0, bitmap.Width, bitmap.Height); - BitmapData bitmapData = bitmap.LockBits(rectangle, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); + BitmapData bitmapData = bitmap.LockBits(rectangle, ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb); - Gl.glBindTexture(Gl.GL_TEXTURE_2D, TexturePointers[0]); + GL.BindTexture(TextureTarget.Texture2D, TexturePointers[0]); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR_MIPMAP_LINEAR); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_CLAMP_TO_EDGE); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_CLAMP_TO_EDGE); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_GENERATE_MIPMAP, Gl.GL_TRUE); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.LinearMipmapLinear); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)All.Linear); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)All.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)All.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.GenerateMipmap, 1); - Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, Gl.GL_RGB8, bitmap.Width, bitmap.Height, Gl.GL_BGR, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0); + OpenTK.Graphics.Glu.Build2DMipmap(OpenTK.Graphics.TextureTarget.Texture2D, (int)OpenTK.Graphics.PixelInternalFormat.Rgb8, + bitmap.Width, bitmap.Height, OpenTK.Graphics.PixelFormat.Bgr, OpenTK.Graphics.PixelType.UnsignedByte, bitmapData.Scan0); bitmap.UnlockBits(bitmapData); bitmap.Dispose(); diff --git a/Programs/PrimWorkshop/packages.config b/Programs/PrimWorkshop/packages.config index ad90cab2..b4c3de3b 100644 --- a/Programs/PrimWorkshop/packages.config +++ b/Programs/PrimWorkshop/packages.config @@ -1,4 +1,8 @@  + + + + \ No newline at end of file diff --git a/bin/Tao.OpenGl.dll b/bin/Tao.OpenGl.dll deleted file mode 100755 index 8eb040e6..00000000 Binary files a/bin/Tao.OpenGl.dll and /dev/null differ diff --git a/bin/Tao.Platform.Windows.dll b/bin/Tao.Platform.Windows.dll deleted file mode 100755 index dea153db..00000000 Binary files a/bin/Tao.Platform.Windows.dll and /dev/null differ