From 04869b2814cfdba30278ca22e677fd6066d28ddf Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Thu, 24 Sep 2020 12:04:06 +0200 Subject: [PATCH] simplify Renderer.cs --- .../Preview/ModelPreview.cs | 1 + .../Rendering/Renderer.cs | 369 +++++++++--------- 2 files changed, 189 insertions(+), 181 deletions(-) diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.cs b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.cs index 5c6c62d..1a1156b 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.cs +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.cs @@ -13,6 +13,7 @@ using Keyboard = OpenTK.Input.Keyboard; using global::Pilz.Drawing.Drawing3D.OpenGLFactory.CameraN; using global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN; using global::Pilz.S3DFileParser; +using RenderingN; namespace Pilz.Drawing.Drawing3D.OpenGLFactory.PreviewN { diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.cs b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.cs index 1fd4f73..d145bf3 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.cs +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.cs @@ -1,44 +1,51 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Data; using System.Diagnostics; using global::System.Drawing; -using Bitmap = global::System.Drawing.Bitmap; -using Color = global::System.Drawing.Color; -using Image = global::System.Drawing.Image; +using Bitmap = System.Drawing.Bitmap; +using Color = System.Drawing.Color; +using Image = System.Drawing.Image; +using System.Globalization; +using System.IO; using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; using global::System.Threading; using System.Threading.Tasks; using global::System.Windows.Forms; using System.Xml.Linq; using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices; -using global::OpenTK; -using global::OpenTK.Graphics.OpenGL; -using global::Pilz.S3DFileParser; +using OpenTK; +using OpenTK.Graphics.OpenGL; +using Pilz.S3DFileParser; +using Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN; -namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN +namespace RenderingN { - public class Renderer + public partial class Renderer { - private global::Pilz.S3DFileParser.Object3D obj3d; - private Dictionary dicTextureIDs = new global::System.Collections.Generic.Dictionary(); - private global::System.Collections.Generic.Dictionary dicColorIDs = new global::System.Collections.Generic.Dictionary(); - private global::System.Drawing.Bitmap emptyTexture = null; - private global::System.Drawing.Bitmap lineTexture = null; - private global::System.Drawing.Bitmap selectedLineTexture = null; + private Object3D obj3d; + private Dictionary dicTextureIDs = new Dictionary(); + private Dictionary dicColorIDs = new Dictionary(); + private Bitmap emptyTexture = null; + private Bitmap lineTexture = null; + private Bitmap selectedLineTexture = null; public float ModelScaling { get; set; } = 1.0f; public bool HasRendered { get; private set; } = false; - public global::System.Collections.Generic.List SelectedElements { get; private set; } - private global::System.Collections.Generic.Dictionary VertexBuffers { get; set; } = new global::System.Collections.Generic.Dictionary(); - private global::System.Collections.Generic.Dictionary> IndicesBuffers { get; set; } = new global::System.Collections.Generic.Dictionary>(); - private global::System.Collections.Generic.Dictionary UVBuffers { get; set; } = new global::System.Collections.Generic.Dictionary(); - private global::System.Collections.Generic.Dictionary VertexColorBuffers { get; set; } = new global::System.Collections.Generic.Dictionary(); - private global::System.Collections.Generic.Dictionary NormalBuffers { get; set; } = new global::System.Collections.Generic.Dictionary(); + public List SelectedElements { get; private set; } + private Dictionary VertexBuffers { get; set; } = new Dictionary(); + private Dictionary> IndicesBuffers { get; set; } = new Dictionary>(); + private Dictionary UVBuffers { get; set; } = new Dictionary(); + private Dictionary VertexColorBuffers { get; set; } = new Dictionary(); + private Dictionary NormalBuffers { get; set; } = new Dictionary(); - public global::Pilz.S3DFileParser.Object3D Model + public Object3D Model { get { @@ -46,23 +53,23 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN } } - public Renderer(global::Pilz.S3DFileParser.Object3D obj3d) + public Renderer(Object3D obj3d) { this.obj3d = obj3d.ToOneMesh(); // Set Texture used for faces without texture - this.emptyTexture = (global::System.Drawing.Bitmap)this.ColorToTexture(global::System.Drawing.Color.LightGray); + this.emptyTexture = (Bitmap)this.ColorToTexture(Color.LightGray); // Set Texture used for lines - this.lineTexture = (global::System.Drawing.Bitmap)this.ColorToTexture(global::System.Drawing.Color.Black); + this.lineTexture = (Bitmap)this.ColorToTexture(Color.Black); // Set Texture used for lines of selected faces - this.selectedLineTexture = (global::System.Drawing.Bitmap)this.ColorToTexture(global::System.Drawing.Color.Orange); + this.selectedLineTexture = (Bitmap)this.ColorToTexture(Color.Orange); } - private global::System.Drawing.Image ColorToTexture(global::System.Drawing.Color color) + private Image ColorToTexture(Color color) { - var tex = new global::System.Drawing.Bitmap(1, 1); + var tex = new Bitmap(1, 1); tex.SetPixel(0, 0, color); return tex; } @@ -72,11 +79,11 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// /// The Mesh where the Vertex is listed. /// The Vertex to update. - public void UpdateVertexData(global::Pilz.S3DFileParser.Mesh m, global::Pilz.S3DFileParser.Vertex v) + public void UpdateVertexData(Mesh m, Vertex v) { - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.VertexBuffers[m]); - var argdata = new global::OpenTK.Vector3((global::System.Single)v.X, (global::System.Single)v.Y, (global::System.Single)v.Z); - global::OpenTK.Graphics.OpenGL.GL.BufferSubData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((m.Vertices.IndexOf(v)) * (global::OpenTK.Vector3.SizeInBytes)), global::OpenTK.Vector3.SizeInBytes, ref argdata); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.VertexBuffers[m]); + var vector = new Vector3((float)v.X, (float)v.Y, (float)v.Z); + GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)((m.Vertices.IndexOf(v)) * (Vector3.SizeInBytes)), Vector3.SizeInBytes, ref vector); } /// @@ -84,11 +91,11 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// /// The Mesh where the Vertex is listed. /// The Normal to update. - public void UpdateNormalData(global::Pilz.S3DFileParser.Mesh m, global::Pilz.S3DFileParser.Normal n) + public void UpdateNormalData(Mesh m, Normal n) { - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.NormalBuffers[m]); - var argdata = new global::OpenTK.Vector3(n.X, n.Y, n.Z); - global::OpenTK.Graphics.OpenGL.GL.BufferSubData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((m.Normals.IndexOf(n)) * (global::OpenTK.Vector3.SizeInBytes)), global::OpenTK.Vector3.SizeInBytes, ref argdata); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.NormalBuffers[m]); + var vector = new Vector3((float)n.X, (float)n.Y, (float)n.Z); + GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)((m.Normals.IndexOf(n)) * (Vector3.SizeInBytes)), Vector3.SizeInBytes, ref vector); } /// @@ -96,11 +103,11 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// /// The Mesh where the Vertex is listed. /// The Vertex Color to update. - public void UpdateVertexColorData(global::Pilz.S3DFileParser.Mesh m, global::Pilz.S3DFileParser.VertexColor vc) + public void UpdateVertexColorData(Mesh m, VertexColor vc) { - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.VertexColorBuffers[m]); - var argdata = new global::OpenTK.Vector4(vc.R, vc.G, vc.B, vc.A); - global::OpenTK.Graphics.OpenGL.GL.BufferSubData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((m.VertexColors.IndexOf(vc)) * (global::OpenTK.Vector4.SizeInBytes)), global::OpenTK.Vector4.SizeInBytes, ref argdata); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.VertexColorBuffers[m]); + var vector = new Vector4(vc.R, vc.G, vc.B, vc.A); + GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)((m.VertexColors.IndexOf(vc)) * (Vector4.SizeInBytes)), Vector4.SizeInBytes, ref vector); } /// @@ -108,11 +115,11 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// /// The Mesh where the Vertex is listed. /// The UV to update. - public void UpdateUVData(global::Pilz.S3DFileParser.Mesh m, global::Pilz.S3DFileParser.UV uv) + public void UpdateUVData(Mesh m, UV uv) { - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.UVBuffers[m]); - var argdata = new global::OpenTK.Vector2(uv.U, uv.V); - global::OpenTK.Graphics.OpenGL.GL.BufferSubData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((m.UVs.IndexOf(uv)) * (global::OpenTK.Vector2.SizeInBytes)), global::OpenTK.Vector2.SizeInBytes, ref argdata); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.UVBuffers[m]); + var vector = new Vector2(uv.U, uv.V); + GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)((m.UVs.IndexOf(uv)) * (Vector2.SizeInBytes)), Vector2.SizeInBytes, ref vector); } /// @@ -120,13 +127,13 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// /// The Mesh where the Vertex is listed. /// The Face to update. - public void UpdateFaceIndicies(global::Pilz.S3DFileParser.Mesh m, global::Pilz.S3DFileParser.Face f) + public void UpdateFaceIndicies(Mesh m, Face f) { - global::System.Int32 faceIndex = m.Faces.IndexOf(f); - global::System.Byte uintlen = (global::System.Byte)global::Microsoft.VisualBasic.Strings.Len(new uint()); - var indicies = new global::OpenTK.Vector3((global::System.Single)m.Vertices.IndexOf(f.Points[0].Vertex), (global::System.Single)m.Vertices.IndexOf(f.Points[1].Vertex), (global::System.Single)m.Vertices.IndexOf(f.Points[2].Vertex)); - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.IndicesBuffers[m][faceIndex]); - global::OpenTK.Graphics.OpenGL.GL.BufferSubData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((global::System.Int32)(uintlen) * (faceIndex)), (global::System.Int32)uintlen, ref indicies); + int faceIndex = m.Faces.IndexOf(f); + byte uintlen = (byte)Strings.Len(new uint()); + var indicies = new Vector3(m.Vertices.IndexOf(f.Points[0].Vertex), m.Vertices.IndexOf(f.Points[1].Vertex), m.Vertices.IndexOf(f.Points[2].Vertex)); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.IndicesBuffers[m][faceIndex]); + GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)(uintlen * faceIndex), uintlen, ref indicies); } /// @@ -134,14 +141,14 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// /// /// - public void UpdateTexture(global::System.Drawing.Image oldImage, global::System.Drawing.Image newImage) + public void UpdateTexture(Image oldImage, Image newImage) { if (this.dicTextureIDs.ContainsKey(oldImage)) { - global::System.Int32 id = this.dicTextureIDs[oldImage]; + int id = this.dicTextureIDs[oldImage]; this.dicTextureIDs.Remove(oldImage); this.dicTextureIDs.Add(newImage, id); - global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.ContentPipe.LoadTexture((global::System.Drawing.Bitmap)newImage, id); + ContentPipe.LoadTexture((Bitmap)newImage, id); } } @@ -149,11 +156,11 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN /// Updates an Image. /// /// - public void UpdateTexture(global::System.Drawing.Image image) + public void UpdateTexture(Image image) { if (this.dicTextureIDs.ContainsKey(image)) { - global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.ContentPipe.LoadTexture((this.dicTextureIDs[image]).ToString()); + ContentPipe.LoadTexture(this.dicTextureIDs[image].ToString()); } } @@ -163,33 +170,33 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN public void RenderModel() { this.ReleaseBuffers(); - foreach (global::Pilz.S3DFileParser.Mesh mesh in this.obj3d.Meshes) + foreach (Mesh mesh in this.obj3d.Meshes) { - var nibo = new global::System.Collections.Generic.List(); + var nibo = new List(); global::System.Boolean enablecols = ((mesh.VertexColors.Count) > (0)); global::System.Boolean enablenorms = (((!(enablecols))) && ((mesh.Normals.Count) > (0))); - var verts = new global::System.Collections.Generic.List(); - var uvs = new global::System.Collections.Generic.List(); - var cols = new global::System.Collections.Generic.List(); - var norms = new global::System.Collections.Generic.List(); + var verts = new List(); + var uvs = new List(); + var cols = new List(); + var norms = new List(); global::System.UInt64 curvi = 0UL; this.IndicesBuffers.Add(mesh, nibo); - for (global::System.Int32 i = 0, loopTo = (mesh.Faces.Count) - (1); i <= loopTo; i++) + for (int i = 0, loopTo = (mesh.Faces.Count) - (1); i <= loopTo; i++) { { - var currentFace = mesh.Faces[i]; - var indices = new List(); - foreach (S3DFileParser.Point p in currentFace.Points) + var withBlock = mesh.Faces[i]; + var indices = new List(); + foreach (Pilz.S3DFileParser.Point p in withBlock.Points) { indices.Add((global::System.UInt32)curvi); curvi = (global::System.UInt64)(curvi + 1m); if (p.Vertex is object) { - verts.Add(new Vector3((Single)p.Vertex.X, (Single)p.Vertex.Y, (Single)p.Vertex.Z)); + verts.Add(new Vector3((float)p.Vertex.X, (float)p.Vertex.Y, (float)p.Vertex.Z)); } else { - verts.Add(new Vector3(0f, 0f, 0f)); + verts.Add(new Vector3(0, 0, 0)); } if (p.UV is object) @@ -198,7 +205,7 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN } else { - uvs.Add(new Vector2(0f, 0f)); + uvs.Add(new Vector2(0, 0)); } if (((enablecols) && p.VertexColor is object)) @@ -207,272 +214,272 @@ namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN } else { - cols.Add(new Vector4(1f, 1f, 1f, 1f)); + cols.Add(new Vector4(1, 1, 1, 1)); } if (((enablenorms) && p.Normal is object)) { - norms.Add(new global::OpenTK.Vector3(p.Normal.X, p.Normal.Y, p.Normal.Z)); + norms.Add(new Vector3(p.Normal.X, p.Normal.Y, p.Normal.Z)); } else { - norms.Add(new global::OpenTK.Vector3(1f, 1f, 1f)); + norms.Add(new Vector3(1, 1, 1)); } } nibo.Add(GL.GenBuffer()); GL.BindBuffer(BufferTarget.ElementArrayBuffer, nibo[i]); - GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)((Strings.Len(new uint())) * (indices.Count)), indices.ToArray(), global::OpenTK.Graphics.OpenGL.BufferUsageHint.StaticDraw); - if (currentFace.Material?.Image is object) + GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)((Strings.Len(new uint())) * (indices.Count)), indices.ToArray(), BufferUsageHint.StaticDraw); + if (withBlock.Material?.Image is object) { - if (!(this.dicTextureIDs.ContainsKey(currentFace.Material.Image))) + if (!(this.dicTextureIDs.ContainsKey(withBlock.Material.Image))) { - this.dicTextureIDs.Add(currentFace.Material.Image, global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.ContentPipe.LoadTexture((global::System.Drawing.Bitmap)currentFace.Material.Image)); + this.dicTextureIDs.Add(withBlock.Material.Image, ContentPipe.LoadTexture((Bitmap)withBlock.Material.Image)); } } - else if (currentFace.Material?.Color is object) + else if (withBlock.Material?.Color is object) { - if (!(this.dicColorIDs.ContainsKey((global::System.Drawing.Color)currentFace.Material.Color))) + if (!(this.dicColorIDs.ContainsKey((Color)withBlock.Material.Color))) { - this.dicColorIDs.Add((global::System.Drawing.Color)currentFace.Material.Color, global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.ContentPipe.LoadTexture((global::System.Drawing.Bitmap)this.ColorToTexture((global::System.Drawing.Color)currentFace.Material.Color))); + this.dicColorIDs.Add((Color)withBlock.Material.Color, ContentPipe.LoadTexture((Bitmap)ColorToTexture((Color)withBlock.Material.Color))); } } else if (!(this.dicTextureIDs.ContainsKey(this.emptyTexture))) { - this.dicTextureIDs.Add(this.emptyTexture, global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.ContentPipe.LoadTexture(this.emptyTexture)); + this.dicTextureIDs.Add(this.emptyTexture, ContentPipe.LoadTexture(this.emptyTexture)); } } } - global::System.Int32 nvbo = global::OpenTK.Graphics.OpenGL.GL.GenBuffer(); + int nvbo = GL.GenBuffer(); this.VertexBuffers.Add(mesh, nvbo); - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, nvbo); - global::OpenTK.Graphics.OpenGL.GL.BufferData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((global::OpenTK.Vector3.SizeInBytes) * (verts.Count)), verts.ToArray(), global::OpenTK.Graphics.OpenGL.BufferUsageHint.StaticDraw); - global::System.Int32 ntbo = global::OpenTK.Graphics.OpenGL.GL.GenBuffer(); + GL.BindBuffer(BufferTarget.ArrayBuffer, nvbo); + GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)((Vector3.SizeInBytes) * (verts.Count)), verts.ToArray(), BufferUsageHint.StaticDraw); + int ntbo = GL.GenBuffer(); this.UVBuffers.Add(mesh, ntbo); - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, ntbo); - global::OpenTK.Graphics.OpenGL.GL.BufferData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((global::OpenTK.Vector2.SizeInBytes) * (uvs.Count)), uvs.ToArray(), global::OpenTK.Graphics.OpenGL.BufferUsageHint.StaticDraw); + GL.BindBuffer(BufferTarget.ArrayBuffer, ntbo); + GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)((Vector2.SizeInBytes) * (uvs.Count)), uvs.ToArray(), BufferUsageHint.StaticDraw); if (enablecols) { - global::System.Int32 ncbo = global::OpenTK.Graphics.OpenGL.GL.GenBuffer(); + int ncbo = GL.GenBuffer(); this.VertexColorBuffers.Add(mesh, ncbo); - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, ncbo); - global::OpenTK.Graphics.OpenGL.GL.BufferData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((global::OpenTK.Vector4.SizeInBytes) * (cols.Count)), cols.ToArray(), global::OpenTK.Graphics.OpenGL.BufferUsageHint.StaticDraw); + GL.BindBuffer(BufferTarget.ArrayBuffer, ncbo); + GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)((Vector4.SizeInBytes) * (cols.Count)), cols.ToArray(), BufferUsageHint.StaticDraw); } if (enablenorms) { - global::System.Int32 nnbo = global::OpenTK.Graphics.OpenGL.GL.GenBuffer(); + int nnbo = GL.GenBuffer(); this.NormalBuffers.Add(mesh, nnbo); - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, nnbo); - global::OpenTK.Graphics.OpenGL.GL.BufferData(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, (global::System.IntPtr)((global::OpenTK.Vector3.SizeInBytes) * (norms.Count)), norms.ToArray(), global::OpenTK.Graphics.OpenGL.BufferUsageHint.StaticDraw); + GL.BindBuffer(BufferTarget.ArrayBuffer, nnbo); + GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)((Vector3.SizeInBytes) * (norms.Count)), norms.ToArray(), BufferUsageHint.StaticDraw); } } if (!(this.dicTextureIDs.ContainsKey(this.lineTexture))) { - this.dicTextureIDs.Add(this.lineTexture, global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.ContentPipe.LoadTexture(this.lineTexture)); + this.dicTextureIDs.Add(this.lineTexture, ContentPipe.LoadTexture(this.lineTexture)); } this.HasRendered = true; } - public void DrawModel(global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode mode) + public void DrawModel(RenderMode mode) { - this.DrawModel(mode, global::OpenTK.Vector3.Zero, global::OpenTK.Quaternion.Identity, new global::OpenTK.Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); + DrawModel(mode, Vector3.Zero, Quaternion.Identity, new Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); } - public void DrawModel(global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode mode, global::OpenTK.Vector3 pos, global::OpenTK.Quaternion rot) + public void DrawModel(RenderMode mode, Vector3 pos, Quaternion rot) { - this.DrawModel(mode, pos, rot, new global::OpenTK.Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); + DrawModel(mode, pos, rot, new Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); } - public void DrawModel(global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode mode, global::OpenTK.Vector3 pos, global::OpenTK.Quaternion rot, global::OpenTK.Vector3 scale) + public void DrawModel(RenderMode mode, Vector3 pos, Quaternion rot, Vector3 scale) { - if ((mode == global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.None)) + if (((mode) == (RenderMode.None))) return; if (!(this.HasRendered)) return; - global::OpenTK.Graphics.OpenGL.GL.PushMatrix(); - global::OpenTK.Graphics.OpenGL.GL.Translate(pos.X, pos.Y, pos.Z); - global::OpenTK.Graphics.OpenGL.GL.Rotate(rot.X, 1f, 0f, 0f); - global::OpenTK.Graphics.OpenGL.GL.Rotate(rot.Y, 0f, 1f, 0f); - global::OpenTK.Graphics.OpenGL.GL.Rotate(rot.Z, 0f, 0f, 1f); - global::OpenTK.Graphics.OpenGL.GL.Scale(scale); // GL.Scale(scale.X, scale.Y, scale.Z) - global::OpenTK.Graphics.OpenGL.GL.EnableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.VertexArray); - global::OpenTK.Graphics.OpenGL.GL.EnableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.TextureCoordArray); - foreach (global::Pilz.S3DFileParser.Mesh mesh in this.obj3d.Meshes) + GL.PushMatrix(); + GL.Translate(pos.X, pos.Y, pos.Z); + GL.Rotate(rot.X, 1, 0, 0); + GL.Rotate(rot.Y, 0, 1, 0); + GL.Rotate(rot.Z, 0, 0, 1); + GL.Scale(scale); // GL.Scale(scale.X, scale.Y, scale.Z) + GL.EnableClientState(ArrayCap.VertexArray); + GL.EnableClientState(ArrayCap.TextureCoordArray); + foreach (Mesh mesh in this.obj3d.Meshes) { if (this.VertexColorBuffers.ContainsKey(mesh)) { - global::OpenTK.Graphics.OpenGL.GL.EnableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.ColorArray); + GL.EnableClientState(ArrayCap.ColorArray); } else if (this.NormalBuffers.ContainsKey(mesh)) { - global::OpenTK.Graphics.OpenGL.GL.EnableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.NormalArray); + GL.EnableClientState(ArrayCap.NormalArray); } - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.VertexBuffers[mesh]); - global::OpenTK.Graphics.OpenGL.GL.VertexPointer(3, global::OpenTK.Graphics.OpenGL.VertexPointerType.Float, 0, global::System.IntPtr.Zero); - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.UVBuffers[mesh]); - global::OpenTK.Graphics.OpenGL.GL.TexCoordPointer(2, global::OpenTK.Graphics.OpenGL.TexCoordPointerType.Float, 0, global::System.IntPtr.Zero); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.VertexBuffers[mesh]); + GL.VertexPointer(3, VertexPointerType.Float, 0, IntPtr.Zero); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.UVBuffers[mesh]); + GL.TexCoordPointer(2, TexCoordPointerType.Float, 0, IntPtr.Zero); if (this.VertexColorBuffers.ContainsKey(mesh)) { - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.VertexColorBuffers[mesh]); - global::OpenTK.Graphics.OpenGL.GL.ColorPointer(4, global::OpenTK.Graphics.OpenGL.ColorPointerType.Float, 0, global::System.IntPtr.Zero); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.VertexColorBuffers[mesh]); + GL.ColorPointer(4, ColorPointerType.Float, 0, IntPtr.Zero); } else if (this.NormalBuffers.ContainsKey(mesh)) { - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.NormalBuffers[mesh]); - global::OpenTK.Graphics.OpenGL.GL.NormalPointer(global::OpenTK.Graphics.OpenGL.NormalPointerType.Float, 0, global::System.IntPtr.Zero); + GL.BindBuffer(BufferTarget.ArrayBuffer, this.NormalBuffers[mesh]); + GL.NormalPointer(NormalPointerType.Float, 0, IntPtr.Zero); } - for (global::System.Int32 i = 0, loopTo = (mesh.Faces.Count) - (1); i <= loopTo; i++) + for (int i = 0, loopTo = (mesh.Faces.Count) - (1); i <= loopTo; i++) { - var l = mesh.Faces[i]; - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ElementArrayBuffer, this.IndicesBuffers[mesh][i]); + Face l = mesh.Faces[i]; + GL.BindBuffer(BufferTarget.ElementArrayBuffer, this.IndicesBuffers[mesh][i]); global::System.Boolean isEmptyTexture = l.Material?.Image is null; global::System.Boolean isEmptyColor = l.Material?.Color is null; void setMaterialTextureOrColor() { - global::System.Int32 texID; + int texID; if (!(isEmptyTexture)) { texID = this.dicTextureIDs[l.Material.Image]; } else if (!(isEmptyColor)) { - texID = this.dicColorIDs[(global::System.Drawing.Color)l.Material.Color]; + texID = this.dicColorIDs[(Color)l.Material.Color]; } else { texID = this.dicTextureIDs[this.emptyTexture]; } - global::OpenTK.Graphics.OpenGL.GL.BindTexture(global::OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, texID); + GL.BindTexture(TextureTarget.Texture2D, texID); }; - if ((((mode & global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.Fill)) == global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.Fill)) + if ((((((mode) & (RenderMode.Fill)))) == (RenderMode.Fill))) { setMaterialTextureOrColor(); if (!(isEmptyTexture)) { - global::OpenTK.Graphics.OpenGL.GL.TexParameter(global::OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, global::OpenTK.Graphics.OpenGL.TextureParameterName.TextureWrapT, l.Material.Wrap.X); - global::OpenTK.Graphics.OpenGL.GL.TexParameter(global::OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, global::OpenTK.Graphics.OpenGL.TextureParameterName.TextureWrapS, l.Material.Wrap.Y); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, l.Material.Wrap.X); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, l.Material.Wrap.Y); } - global::OpenTK.Graphics.OpenGL.GL.PolygonMode(global::OpenTK.Graphics.OpenGL.MaterialFace.FrontAndBack, global::OpenTK.Graphics.OpenGL.PolygonMode.Fill); - global::OpenTK.Graphics.OpenGL.GL.DrawElements(global::OpenTK.Graphics.OpenGL.PrimitiveType.Triangles, l.Points.Count, global::OpenTK.Graphics.OpenGL.DrawElementsType.UnsignedInt, global::System.IntPtr.Zero); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); + GL.DrawElements(PrimitiveType.Triangles, l.Points.Count, DrawElementsType.UnsignedInt, IntPtr.Zero); } - if ((((mode & global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.Outline)) == global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.Outline)) + if ((((((mode) & (RenderMode.Outline)))) == (RenderMode.Outline))) { - if ((((mode & global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.Fill)) == global::Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN.RenderMode.Fill)) + if ((((((mode) & (RenderMode.Fill)))) == (RenderMode.Fill))) { - global::OpenTK.Graphics.OpenGL.GL.BindTexture(global::OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, this.dicTextureIDs[this.lineTexture]); + GL.BindTexture(TextureTarget.Texture2D, this.dicTextureIDs[this.lineTexture]); } else { setMaterialTextureOrColor(); if (!(isEmptyTexture)) { - global::OpenTK.Graphics.OpenGL.GL.TexParameter(global::OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, global::OpenTK.Graphics.OpenGL.TextureParameterName.TextureWrapT, l.Material.Wrap.X); - global::OpenTK.Graphics.OpenGL.GL.TexParameter(global::OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, global::OpenTK.Graphics.OpenGL.TextureParameterName.TextureWrapS, l.Material.Wrap.Y); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, l.Material.Wrap.X); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, l.Material.Wrap.Y); } } - global::OpenTK.Graphics.OpenGL.GL.PolygonMode(global::OpenTK.Graphics.OpenGL.MaterialFace.FrontAndBack, global::OpenTK.Graphics.OpenGL.PolygonMode.Line); - global::OpenTK.Graphics.OpenGL.GL.DrawElements(global::OpenTK.Graphics.OpenGL.PrimitiveType.Triangles, l.Points.Count, global::OpenTK.Graphics.OpenGL.DrawElementsType.UnsignedInt, global::System.IntPtr.Zero); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); + GL.DrawElements(PrimitiveType.Triangles, l.Points.Count, DrawElementsType.UnsignedInt, IntPtr.Zero); } } - global::OpenTK.Graphics.OpenGL.GL.PolygonMode(global::OpenTK.Graphics.OpenGL.MaterialFace.FrontAndBack, global::OpenTK.Graphics.OpenGL.PolygonMode.Fill); // Reset for RenderEngineOld + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); // Reset for RenderEngineOld if (this.VertexColorBuffers.ContainsKey(mesh)) { - global::OpenTK.Graphics.OpenGL.GL.DisableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.ColorArray); + GL.DisableClientState(ArrayCap.ColorArray); } else if (this.NormalBuffers.ContainsKey(mesh)) { - global::OpenTK.Graphics.OpenGL.GL.DisableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.NormalArray); + GL.DisableClientState(ArrayCap.NormalArray); } } - global::OpenTK.Graphics.OpenGL.GL.DisableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.VertexArray); - global::OpenTK.Graphics.OpenGL.GL.DisableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.TextureCoordArray); - global::OpenTK.Graphics.OpenGL.GL.PopMatrix(); + GL.DisableClientState(ArrayCap.VertexArray); + GL.DisableClientState(ArrayCap.TextureCoordArray); + GL.PopMatrix(); } public void DrawFacePicking() { - this.DrawFacePicking(global::OpenTK.Vector3.Zero, global::OpenTK.Quaternion.Identity, new global::OpenTK.Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); + DrawFacePicking(Vector3.Zero, Quaternion.Identity, new Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); } - public void DrawFacePicking(global::OpenTK.Vector3 pos, global::OpenTK.Quaternion rot) + public void DrawFacePicking(Vector3 pos, Quaternion rot) { - this.DrawFacePicking(pos, rot, new global::OpenTK.Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); + DrawFacePicking(pos, rot, new Vector3(this.ModelScaling, this.ModelScaling, this.ModelScaling)); } - public void DrawFacePicking(global::OpenTK.Vector3 pos, global::OpenTK.Quaternion rot, global::OpenTK.Vector3 scale) + public void DrawFacePicking(Vector3 pos, Quaternion rot, Vector3 scale) { if (!(this.HasRendered)) return; - global::OpenTK.Graphics.OpenGL.GL.PushMatrix(); - global::OpenTK.Graphics.OpenGL.GL.Translate(pos.X, pos.Y, pos.Z); - global::OpenTK.Graphics.OpenGL.GL.Rotate(rot.X, 1f, 0f, 0f); - global::OpenTK.Graphics.OpenGL.GL.Rotate(rot.Y, 0f, 1f, 0f); - global::OpenTK.Graphics.OpenGL.GL.Rotate(rot.Z, 0f, 0f, 1f); - global::OpenTK.Graphics.OpenGL.GL.Scale(scale); - global::OpenTK.Graphics.OpenGL.GL.EnableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.VertexArray); - for (global::System.Int32 iMesh = 0, loopTo = (this.obj3d.Meshes.Count) - (1); iMesh <= loopTo; iMesh++) + GL.PushMatrix(); + GL.Translate(pos.X, pos.Y, pos.Z); + GL.Rotate(rot.X, 1, 0, 0); + GL.Rotate(rot.Y, 0, 1, 0); + GL.Rotate(rot.Z, 0, 0, 1); + GL.Scale(scale); + GL.EnableClientState(ArrayCap.VertexArray); + for (int iMesh = 0, loopTo = (this.obj3d.Meshes.Count) - (1); iMesh <= loopTo; iMesh++) { - var mesh = this.obj3d.Meshes[iMesh]; - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ArrayBuffer, this.VertexBuffers[mesh]); - global::OpenTK.Graphics.OpenGL.GL.VertexPointer(3, global::OpenTK.Graphics.OpenGL.VertexPointerType.Float, 0, global::System.IntPtr.Zero); - for (global::System.Int32 iFace = 0, loopTo1 = (mesh.Faces.Count) - (1); iFace <= loopTo1; iFace++) + Mesh mesh = this.obj3d.Meshes[iMesh]; + GL.BindBuffer(BufferTarget.ArrayBuffer, this.VertexBuffers[mesh]); + GL.VertexPointer(3, VertexPointerType.Float, 0, IntPtr.Zero); + for (int iFace = 0, loopTo1 = (mesh.Faces.Count) - (1); iFace <= loopTo1; iFace++) { - var l = mesh.Faces[iFace]; - global::OpenTK.Graphics.OpenGL.GL.BindBuffer(global::OpenTK.Graphics.OpenGL.BufferTarget.ElementArrayBuffer, this.IndicesBuffers[mesh][iFace]); - global::System.Int32 colorCode = (((0x20000000) + ((((iMesh) << (16))))) + (iFace)); - global::OpenTK.Graphics.OpenGL.GL.Color4(global::System.Drawing.Color.FromArgb(colorCode)); // Color: "2f ff xx xx" -> where 'f' = mesh index and where 'x' is face index - global::OpenTK.Graphics.OpenGL.GL.PolygonMode(global::OpenTK.Graphics.OpenGL.MaterialFace.FrontAndBack, global::OpenTK.Graphics.OpenGL.PolygonMode.Fill); - global::OpenTK.Graphics.OpenGL.GL.DrawElements(global::OpenTK.Graphics.OpenGL.PrimitiveType.Triangles, l.Points.Count, global::OpenTK.Graphics.OpenGL.DrawElementsType.UnsignedInt, global::System.IntPtr.Zero); + Face l = mesh.Faces[iFace]; + GL.BindBuffer(BufferTarget.ElementArrayBuffer, this.IndicesBuffers[mesh][iFace]); + int colorCode = (((0x20000000) + ((((iMesh) << (16))))) + (iFace)); + GL.Color4(Color.FromArgb(colorCode)); // Color: "2f ff xx xx" -> where 'f' = mesh index and where 'x' is face index + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); + GL.DrawElements(PrimitiveType.Triangles, l.Points.Count, DrawElementsType.UnsignedInt, IntPtr.Zero); } - global::OpenTK.Graphics.OpenGL.GL.PolygonMode(global::OpenTK.Graphics.OpenGL.MaterialFace.FrontAndBack, global::OpenTK.Graphics.OpenGL.PolygonMode.Fill); + GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); } - global::OpenTK.Graphics.OpenGL.GL.DisableClientState(global::OpenTK.Graphics.OpenGL.ArrayCap.VertexArray); - global::OpenTK.Graphics.OpenGL.GL.PopMatrix(); + GL.DisableClientState(ArrayCap.VertexArray); + GL.PopMatrix(); } public void ReleaseBuffers() { if (!(this.HasRendered)) return; - foreach (global::System.Collections.Generic.KeyValuePair kvp in this.VertexBuffers) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(kvp.Value); + foreach (KeyValuePair kvp in this.VertexBuffers) + GL.DeleteBuffer(kvp.Value); this.VertexBuffers.Clear(); - foreach (global::System.Collections.Generic.KeyValuePair kvp in this.UVBuffers) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(kvp.Value); + foreach (KeyValuePair kvp in this.UVBuffers) + GL.DeleteBuffer(kvp.Value); this.UVBuffers.Clear(); - foreach (global::System.Collections.Generic.KeyValuePair kvp in this.VertexColorBuffers) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(kvp.Value); + foreach (KeyValuePair kvp in this.VertexColorBuffers) + GL.DeleteBuffer(kvp.Value); this.VertexColorBuffers.Clear(); - foreach (global::System.Collections.Generic.KeyValuePair kvp in this.NormalBuffers) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(kvp.Value); + foreach (KeyValuePair kvp in this.NormalBuffers) + GL.DeleteBuffer(kvp.Value); this.NormalBuffers.Clear(); - foreach (global::System.Collections.Generic.KeyValuePair> kvp in this.IndicesBuffers) + foreach (KeyValuePair> kvp in this.IndicesBuffers) { - foreach (global::System.Int32 i in kvp.Value) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(i); + foreach (int i in kvp.Value) + GL.DeleteBuffer(i); kvp.Value.Clear(); } this.IndicesBuffers.Clear(); - foreach (global::System.Collections.Generic.KeyValuePair kvp in this.dicTextureIDs) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(kvp.Value); + foreach (KeyValuePair kvp in this.dicTextureIDs) + GL.DeleteBuffer(kvp.Value); this.dicTextureIDs.Clear(); - foreach (global::System.Collections.Generic.KeyValuePair kvp in this.dicColorIDs) - global::OpenTK.Graphics.OpenGL.GL.DeleteBuffer(kvp.Value); + foreach (KeyValuePair kvp in this.dicColorIDs) + GL.DeleteBuffer(kvp.Value); this.dicColorIDs.Clear(); this.HasRendered = false; }