Mercurial > projects > openmelee
diff render/render.d @ 27:d63faa81a5e4
removed Dog, added derelict and glfw
author | zzzzrrr <mason.green@gmail.com> |
---|---|
date | Mon, 30 Mar 2009 12:41:29 -0400 |
parents | 88cca12cc8b9 |
children | 1cc6b8c0acd2 |
line wrap: on
line diff
--- a/render/render.d Fri Mar 27 19:26:01 2009 -0400 +++ b/render/render.d Mon Mar 30 12:41:29 2009 -0400 @@ -30,12 +30,7 @@ */ module openmelee.render.render; -import tango.math.Math : PI; - -import xf.dog.Dog; -import xf.omg.core.LinearAlgebra; -import xf.hybrid.Event; -import xf.hybrid.Font; +import tango.math.Math : PI, cos, sin; import blaze.bzWorld : bzWorld; import blaze.dynamics.bzBody : bzBody; @@ -51,6 +46,11 @@ import openmelee.ships.ship : Ship, State; import openmelee.melee.melee : Settings; +import openmelee.ai.human : Human; + +import derelict.opengl.gl; +import derelict.opengl.glu; +import openmelee.glfw.glfw; // Cursor scale factor const CURSORSIZE = 0.05f; @@ -65,6 +65,8 @@ const MIN_DIMENSION = 0.1; const MAX_CIRCLE_RES = 32; +Human human; + /// Color for drawing. Each value has the range [0,1]. struct Color { static Color opCall(float r, float g, float b) @@ -81,28 +83,69 @@ float b = 0; } +void key(int a, int b) { + human.onKey(a, b); +} + class Render { float zoom = 40; - vec2 viewCenter; + bzVec2 viewCenter; bzWorld world; - vec2i screenSize; + bzVec2 screenSize; bool scaling = false; bool full = false; Settings settings; Ship ship1, ship2; - this(bzWorld world, Ship s1, Ship s2, Settings settings) { + this(bzWorld world, Ship s1, Ship s2, Human h, Settings settings) { + + human = h; this.settings = settings; ship1 = s1; ship2 = s2; this.world = world; - viewCenter = vec2(10, 10); - screenSize = vec2i.zero; + viewCenter = bzVec2(10, 10); + screenSize = bzVec2(800, 600); + + DerelictGL.load(); + DerelictGLU.load(); + DerelictGLFW.load(); + glfwInit(); + + // Open window + int width = cast(int) screenSize.x; + int height = cast(int) screenSize.y; + int ok = glfwOpenWindow(width, height, 8, 8, 8, 8, 8, 0, GLFW_WINDOW); + + if(!ok) { + assert(0, "error loading window"); + } + + glfwSetWindowTitle("OpenMelee"); + glfwEnable(GLFW_STICKY_KEYS); + + } + + ~this() { + glfwTerminate(); + } + + void update() { + // Limit the fps + glfwSwapInterval(1); + draw(); + glfwSwapBuffers(); + } + + void keys() { + GLFWkeyfun cbfun; + cbfun = &key; + glfwSetKeyCallback(cbfun); } - void drawCircle(GL gl, vec2 center, float radius, bool water = false, float theta = float.nan) + void drawCircle(bzVec2 center, float radius, bool water = false, float theta = float.nan) { int segs = cast(int)(radius) + 20; if (segs > MAX_CIRCLE_RES) segs = MAX_CIRCLE_RES; @@ -110,114 +153,123 @@ auto realTheta = (theta <>= 0 ? theta : 0); if (water) { - gl.immediate(GL_TRIANGLE_FAN, + glBegin(GL_TRIANGLE_FAN); { - gl.Vertex2fv(center.ptr); + glVertex2f(center.x, center.y); for (int n = 0; n <= segs; n++) { double rads = n * coef; - gl.Vertex2f(radius * cos(rads + realTheta) + center.x, radius * sin(rads + realTheta) + center.y); + glVertex2f(radius * cos(rads + realTheta) + center.x, radius * sin(rads + realTheta) + center.y); } - }); + } + glEnd(); } - gl.immediate(GL_LINE_STRIP, + glBegin(GL_LINE_STRIP); { for (int n = 0; n <= segs; n++) { double rads = n * coef; - gl.Vertex2f(radius * cos(rads + realTheta) + center.x, radius * sin(rads + realTheta) + center.y); + glVertex2f(radius * cos(rads + realTheta) + center.x, radius * sin(rads + realTheta) + center.y); } if (theta <>= 0) - gl.Vertex2fv(center.ptr); - }); + glVertex2f(center.x, center.y); + } + glEnd(); } - void drawSolidCircle(GL gl, vec2 center, float radius, vec2 axis, Color color) + void drawSolidCircle(bzVec2 center, float radius, bzVec2 axis, Color color) { const k_segments = 25.0f; const k_increment = 2.0f * PI / k_segments; float theta = 0.0f; - gl.Enable(GL_BLEND); - gl.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl.Color4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f); - gl.Begin(GL_TRIANGLE_FAN); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f); + glBegin(GL_TRIANGLE_FAN); for (int i = 0; i < k_segments; ++i) { - vec2 v = center + radius * vec2(cos(theta), sin(theta)); - gl.Vertex2f(v.x, v.y); + bzVec2 v = center + radius * bzVec2(cos(theta), sin(theta)); + glVertex2f(v.x, v.y); theta += k_increment; } - gl.End(); - gl.Disable(GL_BLEND); + glEnd(); + glDisable(GL_BLEND); theta = 0.0f; - gl.Color4f(color.r, color.g, color.b, 1.0f); - gl.Begin(GL_LINE_LOOP); + glColor4f(color.r, color.g, color.b, 1.0f); + glBegin(GL_LINE_LOOP); for (int i = 0; i < k_segments; ++i) { - vec2 v = center + radius * vec2(cos(theta), sin(theta)); - gl.Vertex2f(v.x, v.y); + bzVec2 v = center + radius * bzVec2(cos(theta), sin(theta)); + glVertex2f(v.x, v.y); theta += k_increment; } - gl.End(); + glEnd(); - vec2 p = center + radius * axis; - gl.Begin(GL_LINES); - gl.Vertex2f(center.x, center.y); - gl.Vertex2f(p.x, p.y); - gl.End(); + bzVec2 p = center + radius * axis; + glBegin(GL_LINES); + glVertex2f(center.x, center.y); + glVertex2f(p.x, p.y); + glEnd(); } - void drawPolygon(GL gl, vec2[] glVerts, Color color) + void drawPolygon(bzVec2[] glVerts, Color color) { - gl.Color3f(color.r, color.g, color.b); - gl.immediate(GL_LINE_LOOP, + glColor3f(color.r, color.g, color.b); + glBegin(GL_LINE_LOOP); { - foreach (v; glVerts) - gl.Vertex2fv(v.ptr); - }); + foreach (v; glVerts) { + glVertex2f(v.x, v.y); + } + } + glEnd(); } - void drawSolidPolygon(GL gl, vec2[] vertices, Color color) + void drawSolidPolygon(bzVec2[] vertices, Color color) { - gl.Enable(GL_BLEND); - gl.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl.Color4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f); - gl.Begin(GL_TRIANGLE_FAN); - for (int i = 0; i < vertices.length; ++i) { - gl.Vertex2f(vertices[i].x, vertices[i].y); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f); + glBegin(GL_TRIANGLE_FAN); + { + for (int i = 0; i < vertices.length; ++i) { + glVertex2f(vertices[i].x, vertices[i].y); + } } - gl.End(); - gl.Disable(GL_BLEND); + glEnd(); + glDisable(GL_BLEND); - gl.Color4f(color.r, color.g, color.b, 1.0f); - gl.Begin(GL_LINE_LOOP); - for (int i = 0; i < vertices.length; ++i) { - gl.Vertex2f(vertices[i].x, vertices[i].y); + glColor4f(color.r, color.g, color.b, 1.0f); + glBegin(GL_LINE_LOOP); + { + for (int i = 0; i < vertices.length; ++i) { + glVertex2f(vertices[i].x, vertices[i].y); + } } - gl.End(); + glEnd(); } - void drawPoint(GL gl, vec2 p, float size, Color color) + void drawPoint(bzVec2 p, float size, Color color) { - gl.Color3f(color.r, color.g, color.b); - gl.PointSize(size); - gl.Begin(GL_POINTS); - gl.Vertex2f(p.x, p.y); - gl.End(); - gl.PointSize(1.0f); + glColor3f(color.r, color.g, color.b); + glPointSize(size); + glBegin(GL_POINTS); + glVertex2f(p.x, p.y); + glEnd(); + glPointSize(1.0f); } - void drawSegment(GL gl, vec2 begin, vec2 end, Color color) + void drawSegment(bzVec2 begin, bzVec2 end, Color color) { - gl.Color3f(color.r, color.g, color.b); - gl.immediate(GL_LINES, + glColor3f(color.r, color.g, color.b); + glBegin(GL_LINES); { - gl.Vertex2fv(begin.ptr); - gl.Vertex2fv(end.ptr); - }); + glVertex2f(begin.x, begin.y); + glVertex2f(end.x, end.y); + } + glEnd(); } // TODO: handle inequal radii correctly - void connectCircles(GL gl, vec2 center1, float radius1, vec2 center2, float radius2) + void connectCircles(bzVec2 center1, float radius1, bzVec2 center2, float radius2) { auto d = center2 - center1; if (!d.length) @@ -225,58 +277,60 @@ d *= (d.length - radius1) / d.length; center1 += d; center2 -= d; - gl.immediate(GL_LINES, + glBegin(GL_LINES); { - gl.Vertex2fv(center1.ptr); - gl.Vertex2fv(center2.ptr); - }); + glVertex2f(center1.x, center1.y); + glVertex2f(center2.x, center2.y); + } + glEnd(); } - void drawXForm(GL gl, bzXForm xf) + void drawXForm(bzXForm xf) { bzVec2 p1 = xf.position, p2; const k_axisScale = 0.4f; - gl.Begin(GL_LINES); + glBegin(GL_LINES); { - gl.Color3f(1.0f, 0.0f, 0.0f); - gl.Vertex2f(p1.x, p1.y); + glColor3f(1.0f, 0.0f, 0.0f); + glVertex2f(p1.x, p1.y); p2 = p1 + k_axisScale * xf.R.col1; - gl.Vertex2f(p2.x, p2.y); + glVertex2f(p2.x, p2.y); - gl.Color3f(0.0f, 1.0f, 0.0f); - gl.Vertex2f(p1.x, p1.y); + glColor3f(0.0f, 1.0f, 0.0f); + glVertex2f(p1.x, p1.y); p2 = p1 + k_axisScale * xf.R.col2; - gl.Vertex2f(p2.x, p2.y); + glVertex2f(p2.x, p2.y); } - gl.End(); + glEnd(); } - void drawSpring(GL gl, vec2 a, vec2 b, uint zigs) + void drawSpring(bzVec2 a, bzVec2 b, uint zigs) { zigs++; // Portion of length dedicated to connectors const float connPart = 0.2; - vec2 inc = (b - a) / (zigs); + bzVec2 inc = (b - a) / (zigs); // One step from a to b - vec2 zigLen = inc * (1 - connPart); + bzVec2 zigLen = inc * (1 - connPart); // Length of a connector - vec2 connLen = inc * (connPart / 2) * zigs; + bzVec2 connLen = inc * (connPart / 2) * zigs; // Width of a zig - vec2 zigWidth = (b - a).rotatedHalfPi.normalized; - gl.immediate(GL_LINE_STRIP, + bzVec2 zigWidth = (b - a).rotate(PI/2); + zigWidth.normalize; + glBegin(GL_LINE_STRIP); { - gl.Vertex2fv(a.ptr); + glVertex2f(a.x, a.y); a += connLen; - gl.Vertex2fv(a.ptr); + glVertex2f(a.x, a.y); bool dir = true; a += zigWidth / 2 + zigLen / 2; for (int i = 0; i < zigs; i++) { - gl.Vertex2fv(a.ptr); + glVertex2f(a.x, a.y); a += zigLen; if (dir) { a -= zigWidth; @@ -286,12 +340,13 @@ dir = !dir; } - gl.Vertex2fv((b - connLen).ptr); - gl.Vertex2fv(b.ptr); - }); + glVertex2f((b - connLen).x, (b - connLen).y); + glVertex2f(b.x, b.y); + } + glEnd(); } - void drawShape(GL gl, bzShape shape, bzXForm xf, Color color, bool core) + void drawShape(bzShape shape, bzXForm xf, Color color, bool core) { Color coreColor = Color(0.9f, 0.6f, 0.6f); @@ -299,36 +354,30 @@ case bzShapeType.CIRCLE: auto circle = cast(bzCircle)shape; - vec2 center = vec2.from(bzMul(xf, circle.localPosition)); + bzVec2 center = bzMul(xf, circle.localPosition); float radius = circle.radius; - vec2 axis = vec2.from(xf.R.col1); + bzVec2 axis = xf.R.col1; - gl.drawSolidCircle(center, radius, axis, color); + drawSolidCircle(center, radius, axis, color); if (core) { - gl.Color3f(coreColor.r, coreColor.g, coreColor.b); - gl.drawCircle(center, radius - k_toiSlop); + glColor3f(coreColor.r, coreColor.g, coreColor.b); + drawCircle(center, radius - k_toiSlop); } break; case bzShapeType.POLYGON: { bzPolygon poly = cast(bzPolygon)shape; bzVec2[] vertices = poly.worldVertices; - vec2[] verts; - verts.length = vertices.length; - foreach (int i, v; vertices) { - verts[i] = vec2.from(v); - } - - gl.drawSolidPolygon(verts, color); + drawSolidPolygon(vertices, color); if (core) { bzVec2[] localCoreVertices = poly.coreVertices; - verts.length = localCoreVertices.length; + vertices.length = localCoreVertices.length; for (int i = 0; i < localCoreVertices.length; ++i) { - verts[i] = vec2.from(bzMul(xf, localCoreVertices[i])); + vertices[i] = bzMul(xf, localCoreVertices[i]); } - gl.drawPolygon(verts, coreColor); + drawPolygon(vertices, coreColor); } } break; @@ -337,50 +386,48 @@ { bzEdge edge = cast(bzEdge)shape; - vec2 p1 = vec2.from(bzMul(xf, edge.vertex1)); - vec2 p2 = vec2.from(bzMul(xf, edge.vertex2)); - gl.drawSegment(p1, p2, color); + bzVec2 p1 = bzMul(xf, edge.vertex1); + bzVec2 p2 = bzMul(xf, edge.vertex2); + drawSegment(p1, p2, color); if (core) { - p1 = vec2.from(bzMul(xf, edge.coreVertex1)); - p2 = vec2.from(bzMul(xf, edge.coreVertex2)); - gl.drawSegment(p1, p2, coreColor); + p1 = bzMul(xf, edge.coreVertex1); + p2 = bzMul(xf, edge.coreVertex2); + drawSegment(p1, p2, coreColor); } } break; } } - void draw(vec2i screenSize, GL gl) - { + void draw() { + if(ship2) { - vec2 point1 = vec2.from(ship1.rBody.position); - vec2 point2 = vec2.from(ship2.rBody.position); - vec2 range = point1 - point2; + bzVec2 point1 = ship1.rBody.position; + bzVec2 point2 = ship2.rBody.position; + bzVec2 range = point1 - point2; zoom = bzClamp(1000/range.length, 2, 60); viewCenter = point1 - (range * 0.5f); } else { - viewCenter = vec2.from(ship1.rBody.position); + viewCenter = ship1.rBody.position; zoom = 10; } - - this.screenSize = screenSize; - - gl.LoadIdentity(); - gl.MatrixMode(GL_PROJECTION); - gl.LoadIdentity(); + + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); float left = -screenSize.x / zoom; float right = screenSize.x / zoom; float bottom = -screenSize.y / zoom; float top = screenSize.y / zoom; - gl.gluOrtho2D(left, right, bottom, top); - gl.Translatef(-viewCenter.x, -viewCenter.y, 0); - gl.MatrixMode(GL_MODELVIEW); - gl.Disable(GL_DEPTH_TEST); - gl.LoadIdentity(); - gl.Clear(GL_COLOR_BUFFER_BIT); + gluOrtho2D(left, right, bottom, top); + glTranslatef(-viewCenter.x, -viewCenter.y, 0); + glMatrixMode(GL_MODELVIEW); + glDisable(GL_DEPTH_TEST); + glLoadIdentity(); + glClear(GL_COLOR_BUFFER_BIT); // Draw dynamic bodies if (settings.drawShapes) { @@ -389,15 +436,15 @@ bzShape s = shape; bzXForm xf = b.xf; if (b.isStatic) { - gl.drawShape(s, xf, Color(0.5f, 0.9f, 0.5f), settings.drawCoreShapes); + drawShape(s, xf, Color(0.5f, 0.9f, 0.5f), settings.drawCoreShapes); }else if (b.isSleeping) { - gl.drawShape(s, xf, Color(0.5f, 0.5f, 0.9f), settings.drawCoreShapes); + drawShape(s, xf, Color(0.5f, 0.5f, 0.9f), settings.drawCoreShapes); }else { - gl.drawShape(s, xf, Color(0.9f, 0.9f, 0.9f), settings.drawCoreShapes); + drawShape(s, xf, Color(0.9f, 0.9f, 0.9f), settings.drawCoreShapes); } - gl.LoadIdentity(); - gl.Flush(); + glLoadIdentity(); + glFlush(); } } } @@ -418,18 +465,18 @@ if (distance) { color = Color(.5, .5, 0); // Endpoints - vec2 a = vec2.from(distance.anchor1); - vec2 b = vec2.from(distance.anchor2); + bzVec2 a = bzVec2.from(distance.anchor1); + bzVec2 b = bzVec2.from(distance.anchor2); // Circles gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); // Connecting line gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); }else if (pulley) { - auto a = vec2.from(pulley.anchor1); - auto b = vec2.from(pulley.groundAnchor1); - auto c = vec2.from(pulley.groundAnchor2); - auto d = vec2.from(pulley.anchor2); + auto a = bzVec2.from(pulley.anchor1); + auto b = bzVec2.from(pulley.groundAnchor1); + auto c = bzVec2.from(pulley.groundAnchor2); + auto d = bzVec2.from(pulley.anchor2); gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); @@ -438,27 +485,27 @@ gl.drawCircle(d, HINGE_RADIUS); gl.connectCircles(c, HINGE_RADIUS, d, HINGE_RADIUS); }else if (revolute) { - auto a = vec2.from(revolute.rBody1.position); - auto b = vec2.from(revolute.anchor1); - auto c = vec2.from(revolute.rBody2.position); + auto a = bzVec2.from(revolute.rBody1.position); + auto b = bzVec2.from(revolute.anchor1); + auto c = bzVec2.from(revolute.rBody2.position); gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); gl.drawCircle(c, HINGE_RADIUS); gl.connectCircles(b, HINGE_RADIUS, c, HINGE_RADIUS); }else if (prismatic) { - auto a = vec2.from(prismatic.rBody1.position); - auto b = vec2.from(prismatic.anchor1); - auto c = vec2.from(prismatic.rBody2.position); + auto a = bzVec2.from(prismatic.rBody1.position); + auto b = bzVec2.from(prismatic.anchor1); + auto c = bzVec2.from(prismatic.rBody2.position); gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); gl.drawCircle(c, HINGE_RADIUS); gl.connectCircles(b, HINGE_RADIUS, c, HINGE_RADIUS); }else if (line) { - auto a = vec2.from(line.rBody1.position); - auto b = vec2.from(line.anchor1); - auto c = vec2.from(line.rBody2.position); + auto a = bzVec2.from(line.rBody1.position); + auto b = bzVec2.from(line.anchor1); + auto c = bzVec2.from(line.rBody2.position); gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); @@ -480,8 +527,8 @@ if (bungee1) { gl.Color3f(.5, .5, 0); // Endpoints - vec2 a = vec2.from(bungee1.rBody.position); - vec2 b = vec2.from(bungee1.anchor); + bzVec2 a = bzVec2.from(bungee1.rBody.position); + bzVec2 b = bzVec2.from(bungee1.anchor); // Circles gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); @@ -489,8 +536,8 @@ gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); }else { uint zigs = 10; - auto anchor1 = vec2.from(spring1.anchor); - auto anchor2 = vec2.from(spring1.rBody.position); + auto anchor1 = bzVec2.from(spring1.anchor); + auto anchor2 = bzVec2.from(spring1.rBody.position); gl.drawSpring(anchor1, anchor2, zigs); } } @@ -500,8 +547,8 @@ if (bungee2) { gl.Color3f(.5, .5, 0); // Endpoints - vec2 a = vec2.from(bungee2.rBody.position); - vec2 b = vec2.from(bungee2.otherBody.position); + bzVec2 a = bzVec2.from(bungee2.rBody.position); + bzVec2 b = bzVec2.from(bungee2.otherBody.position); // Circles gl.drawCircle(a, HINGE_RADIUS); gl.drawCircle(b, HINGE_RADIUS); @@ -509,16 +556,16 @@ gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS); }else { uint zigs = 10; - auto anchor1 = vec2.from(spring2.otherBody.position); - auto anchor2 = vec2.from(spring2.rBody.position); + auto anchor1 = bzVec2.from(spring2.otherBody.position); + auto anchor2 = bzVec2.from(spring2.rBody.position); gl.drawSpring(anchor1, anchor2, zigs); } } if(buoyancy) { float plane = buoyancy.planeOffset; - vec2 p1 = vec2(-50, plane); - vec2 p2 = vec2(50, plane); + bzVec2 p1 = bzVec2(-50, plane); + bzVec2 p2 = bzVec2(50, plane); gl.drawSegment(p1, p2, color); } } @@ -531,12 +578,12 @@ bzVec2 worldLower = bp.m_worldAABB.lowerBound; bzVec2 worldUpper = bp.m_worldAABB.upperBound; Color color = Color(0.3f, 0.9f, 0.9f); - vec2 vs[4]; - vs[0] = vec2(worldLower.x, worldLower.y); - vs[1] = vec2(worldUpper.x, worldLower.y); - vs[2] = vec2(worldUpper.x, worldUpper.y); - vs[3] = vec2(worldLower.x, worldUpper.y); - drawPolygon(gl, vs, color); + bzVec2 vs[4]; + vs[0] = bzVec2(worldLower.x, worldLower.y); + vs[1] = bzVec2(worldUpper.x, worldLower.y); + vs[2] = bzVec2(worldUpper.x, worldUpper.y); + vs[3] = bzVec2(worldLower.x, worldUpper.y); + drawPolygon(vs, color); // Draw axis aligned bounding boxes (bzAABB) if (settings.drawAABBs) { @@ -556,12 +603,12 @@ b.upperBound.x = worldLower.x + invQ.x * bp.m_bounds[0][p.upperBounds[0]].value; b.upperBound.y = worldLower.y + invQ.y * bp.m_bounds[1][p.upperBounds[1]].value; - vs[0] = vec2(b.lowerBound.x, b.lowerBound.y); - vs[1] = vec2(b.upperBound.x, b.lowerBound.y); - vs[2] = vec2(b.upperBound.x, b.upperBound.y); - vs[3] = vec2(b.lowerBound.x, b.upperBound.y); + vs[0] = bzVec2(b.lowerBound.x, b.lowerBound.y); + vs[1] = bzVec2(b.upperBound.x, b.lowerBound.y); + vs[2] = bzVec2(b.upperBound.x, b.upperBound.y); + vs[3] = bzVec2(b.lowerBound.x, b.upperBound.y); - drawPolygon(gl, vs, color); + drawPolygon(vs, color); } } }