Skip to content

Commit 66f2a4f

Browse files
committed
Optimised OpenGL too
1 parent f937ce0 commit 66f2a4f

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

src/MetalView.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,8 +693,7 @@ class MetalView: MTKView {
693693
maxRange = range.z
694694
}
695695

696-
// var vertices = [String: [String: [Vertex]]]()
697-
var vertices = VertexListsByTypeAndSubtype()
696+
let vertices = VertexListsByTypeAndSubtype()
698697
var edgeVertices = [Vertex]()
699698
var selectionEdgeVertices = [Vertex]()
700699
var selectionFaceVertices = [Vertex]()

src/OpenGLView.swift

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ import Cocoa
1818
import OpenGL.GL3
1919
import GLKit
2020

21+
class TriangleList {
22+
var triangles = ContiguousArray<GLfloat>()
23+
}
24+
25+
class TriangleListsBySubtype {
26+
var triangleListOfSubtype = [String: TriangleList]()
27+
}
28+
29+
class TriangleListsByTypeAndSubtype {
30+
var triangleListOfType = [String: TriangleListsBySubtype]()
31+
}
32+
2133
class OpenGLView: NSOpenGLView {
2234

2335
var controller: Controller?
@@ -72,7 +84,7 @@ class OpenGLView: NSOpenGLView {
7284
let selectionFacesColour: Array<GLfloat> = [1.0, 1.0, 0.0, 1.0]
7385
let selectionEdgesColour: Array<GLfloat> = [1.0, 0.0, 0.0, 1.0]
7486

75-
var faceTriangles = [String: [String: ContiguousArray<GLfloat>]]()
87+
var faceTriangles = TriangleListsByTypeAndSubtype()
7688
var edges: ContiguousArray<GLfloat> = ContiguousArray<GLfloat>()
7789
var boundingBox: ContiguousArray<GLfloat> = ContiguousArray<GLfloat>()
7890
var selectionFaces: ContiguousArray<GLfloat> = ContiguousArray<GLfloat>()
@@ -352,9 +364,9 @@ class OpenGLView: NSOpenGLView {
352364
func new() {
353365
Swift.print("OpenGLView()")
354366

355-
for faceType in faceTriangles {
356-
for faceSubtype in faceType.value {
357-
faceTriangles[faceType.key]![faceSubtype.key]!.removeAll()
367+
for faceType in faceTriangles.triangleListOfType {
368+
for faceSubtype in faceType.value.triangleListOfSubtype {
369+
faceTriangles.triangleListOfType[faceType.key]!.triangleListOfSubtype[faceSubtype.key]!.triangles.removeAll()
358370
}
359371
}
360372
edges.removeAll()
@@ -1030,9 +1042,9 @@ class OpenGLView: NSOpenGLView {
10301042
maxRange = range.z
10311043
}
10321044

1033-
for faceType in faceTriangles {
1034-
for faceSubtype in faceType.value {
1035-
faceTriangles[faceType.key]![faceSubtype.key]!.removeAll(keepingCapacity: true)
1045+
for faceType in faceTriangles.triangleListOfType {
1046+
for faceSubtype in faceType.value.triangleListOfSubtype {
1047+
faceTriangles.triangleListOfType[faceType.key]!.triangleListOfSubtype[faceSubtype.key]!.triangles.removeAll(keepingCapacity: true)
10361048
}
10371049
}
10381050
edges.removeAll(keepingCapacity: true)
@@ -1068,8 +1080,8 @@ class OpenGLView: NSOpenGLView {
10681080
boundingBox.append(contentsOf: boundingBoxVertices)
10691081

10701082
for object in dataStorage!.objects {
1071-
if !faceTriangles.keys.contains(object.type) {
1072-
faceTriangles[object.type] = [String: ContiguousArray<GLfloat>]()
1083+
if !faceTriangles.triangleListOfType.keys.contains(object.type) {
1084+
faceTriangles.triangleListOfType[object.type] = TriangleListsBySubtype()
10731085
}
10741086

10751087
if dataStorage!.selection.contains(object.id) {
@@ -1101,8 +1113,8 @@ class OpenGLView: NSOpenGLView {
11011113
(object.edgesBuffer[3*vertexIndex+2]-midCoordinates.z)/maxRange])
11021114
}
11031115
for triangleBufferType in object.triangleBuffersByType.keys {
1104-
if !faceTriangles[object.type]!.keys.contains(triangleBufferType) {
1105-
faceTriangles[object.type]![triangleBufferType] = ContiguousArray<GLfloat>()
1116+
if !faceTriangles.triangleListOfType[object.type]!.triangleListOfSubtype.keys.contains(triangleBufferType) {
1117+
faceTriangles.triangleListOfType[object.type]!.triangleListOfSubtype[triangleBufferType] = TriangleList()
11061118
}
11071119
let numberOfVertices = object.triangleBuffersByType[triangleBufferType]!.count/6
11081120
var temporaryBuffer = ContiguousArray<GLfloat>()
@@ -1115,7 +1127,7 @@ class OpenGLView: NSOpenGLView {
11151127
currentTriangleBuffer[6*vertexIndex+4],
11161128
currentTriangleBuffer[6*vertexIndex+5]])
11171129
}
1118-
faceTriangles[object.type]![triangleBufferType]!.append(contentsOf: temporaryBuffer)
1130+
faceTriangles.triangleListOfType[object.type]!.triangleListOfSubtype[triangleBufferType]!.triangles.append(contentsOf: temporaryBuffer)
11191131
}
11201132
}
11211133
}
@@ -1125,11 +1137,11 @@ class OpenGLView: NSOpenGLView {
11251137
Swift.print("There's a previous OpenGL error")
11261138
}
11271139

1128-
for faceType in faceTriangles {
1129-
for faceSubtype in faceType.value {
1140+
for faceType in faceTriangles.triangleListOfType {
1141+
for faceSubtype in faceType.value.triangleListOfSubtype {
11301142
glBindBuffer(GLenum(GL_ARRAY_BUFFER), vboFaces[faceType.key]![faceSubtype.key]!)
1131-
faceSubtype.value.withUnsafeBufferPointer { pointer in
1132-
glBufferData(GLenum(GL_ARRAY_BUFFER), faceSubtype.value.count*MemoryLayout<GLfloat>.size, pointer.baseAddress, GLenum(GL_STATIC_DRAW))
1143+
faceSubtype.value.triangles.withUnsafeBufferPointer { pointer in
1144+
glBufferData(GLenum(GL_ARRAY_BUFFER), faceSubtype.value.triangles.count*MemoryLayout<GLfloat>.size, pointer.baseAddress, GLenum(GL_STATIC_DRAW))
11331145
}
11341146
if glGetError() != GLenum(GL_NO_ERROR) {
11351147
Swift.print("Loading \(faceType.key) \(faceSubtype.key) into memory: some error occurred!")
@@ -1170,9 +1182,9 @@ class OpenGLView: NSOpenGLView {
11701182
}
11711183

11721184
Swift.print("Loaded triangles: ", separator: "", terminator: "")
1173-
for faceType in faceTriangles {
1174-
for faceSubtype in faceType.value {
1175-
Swift.print("\(faceSubtype.value.count/18) from \(faceType.key) \(faceSubtype.key)", separator: "", terminator: ", ")
1185+
for faceType in faceTriangles.triangleListOfType {
1186+
for faceSubtype in faceType.value.triangleListOfSubtype {
1187+
Swift.print("\(faceSubtype.value.triangles.count/18) from \(faceType.key) \(faceSubtype.key)", separator: "", terminator: ", ")
11761188
}
11771189
}
11781190
Swift.print("and \(selectionFaces.count/18) from selected objects.")

0 commit comments

Comments
 (0)