Angel 3.2
A 2D Game Prototyping Engine
DrawUtil.cpp
1 
2 // Copyright (C) 2008-2013, Shane Liesegang
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of the copyright holder nor the names of any
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
29 
30 #include "stdafx.h"
31 #include "../Util/DrawUtil.h"
32 
33 #include "../Infrastructure/Common.h"
34 #include "../Infrastructure/Log.h"
35 
36 void DrawCross( const Vector2& point, float size )
37 {
38  size *= 0.5f;
39  Vector2 north(point + Vector2::UnitY * size );
40  Vector2 south(point - Vector2::UnitY * size );
41  Vector2 east(point + Vector2::UnitX * size );
42  Vector2 west(point - Vector2::UnitX * size );
43 
44  float points[] = {
45  north.X, north.Y,
46  south.X, south.Y,
47  east.X, east.Y,
48  west.X, west.Y,
49  };
50  glEnableClientState(GL_VERTEX_ARRAY);
51  glVertexPointer(2, GL_FLOAT, 0, points);
52  glDrawArrays(GL_LINES, 0, 4);
53 }
54 
55 void DrawPoint( const Vector2& point, float size )
56 {
57  size *= 0.5f;
58  Vector2 north(point + Vector2::UnitY * size );
59  Vector2 south(point - Vector2::UnitY * size );
60  Vector2 east(point + Vector2::UnitX * size );
61  Vector2 west(point - Vector2::UnitX * size );
62 
63  float points[] = {
64  north.X, north.Y,
65  east.X, east.Y,
66  south.X, south.Y,
67  west.X, west.Y,
68  };
69  glEnableClientState(GL_VERTEX_ARRAY);
70  glVertexPointer(2, GL_FLOAT, 0, points);
71  glDrawArrays(GL_LINE_LOOP, 0, 4);
72 }
73 
74 void DrawLine( const Vector2& vFrom, const Vector2& vTo )
75 {
76  float points[] = {
77  vFrom.X, vFrom.Y,
78  vTo.X, vTo.Y
79  };
80  glEnableClientState(GL_VERTEX_ARRAY);
81  glVertexPointer(2, GL_FLOAT, 0, points);
82  glDrawArrays(GL_LINES, 0, 2);
83 }
84 
85 bool HandleGLErrors()
86 {
87  bool errorFound = false;
88  GLenum errorCode;
89  const GLubyte *errorString;
90  do
91  {
92  errorCode = glGetError();
93  if (errorCode != GL_NO_ERROR)
94  {
95  errorFound = true;
96  errorString = gluErrorString(errorCode);
97  sysLog.Printf("OpenGL Error: %s", errorString);
98  }
99  } while (errorCode != GL_NO_ERROR);
100 
101  return errorFound;
102 }