summaryrefslogtreecommitdiff
path: root/common/debug.cpp
diff options
context:
space:
mode:
authorleo2005-07-31 21:17:46 +0000
committerleo2005-07-31 21:17:46 +0000
commitca12e5a39a6121325602b0094ebf63895103502a (patch)
tree4fdc65ce3027177fb956b5ca6e37ceb7dac4b5d9 /common/debug.cpp
parentd27ac8d8a7678356c32a3c07e4c59217546bc6f3 (diff)
Functions to render debug primitives.
git-svn-id: http://svn.leocad.org/trunk@416 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common/debug.cpp')
-rw-r--r--common/debug.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/common/debug.cpp b/common/debug.cpp
new file mode 100644
index 0000000..437adbc
--- /dev/null
+++ b/common/debug.cpp
@@ -0,0 +1,100 @@
+#include "opengl.h"
+#include "debug.h"
+
+#ifdef LC_DEBUG
+
+#define LC_MAX_DEBUG_LINES 100
+
+typedef struct
+{
+ Point3 pt1;
+ Point3 pt2;
+ Vector3 color;
+} LC_DEBUG_LINE;
+
+static LC_DEBUG_LINE DebugLines[LC_MAX_DEBUG_LINES];
+static int NumDebugLines;
+
+void ClearDebugLines()
+{
+ NumDebugLines = 0;
+}
+
+void AddDebugLine(const Point3& pt1, const Point3& pt2, const Vector3& Color)
+{
+ if (NumDebugLines == LC_MAX_DEBUG_LINES-1)
+ return;
+
+ DebugLines[NumDebugLines].pt1 = pt1;
+ DebugLines[NumDebugLines].pt2 = pt2;
+ DebugLines[NumDebugLines].color = Color;
+ NumDebugLines++;
+}
+
+#define LC_MAX_DEBUG_QUADS 100
+
+typedef struct
+{
+ Point3 pt1;
+ Point3 pt2;
+ Point3 pt3;
+ Point3 pt4;
+ Vector4 color;
+} LC_DEBUG_QUAD;
+
+static LC_DEBUG_QUAD DebugQuads[LC_MAX_DEBUG_QUADS];
+static int NumDebugQuads;
+
+void ClearDebugQuads()
+{
+ NumDebugQuads = 0;
+}
+
+void AddDebugQuad(const Point3& pt1, const Point3& pt2, const Point3& pt3, const Point3& pt4, const Vector4& Color)
+{
+ if (NumDebugQuads == LC_MAX_DEBUG_QUADS-1)
+ return;
+
+ DebugQuads[NumDebugQuads].pt1 = pt1;
+ DebugQuads[NumDebugQuads].pt2 = pt2;
+ DebugQuads[NumDebugQuads].pt3 = pt3;
+ DebugQuads[NumDebugQuads].pt4 = pt4;
+ DebugQuads[NumDebugQuads].color = Color;
+ NumDebugQuads++;
+}
+
+void RenderDebugPrimitives()
+{
+ glBegin(GL_LINES);
+
+ for (int i = 0; i < NumDebugLines; i++)
+ {
+ glColor3fv((float*)&DebugLines[i].color);
+ glVertex3fv((float*)&DebugLines[i].pt1);
+ glVertex3fv((float*)&DebugLines[i].pt2);
+ }
+
+ glEnd();
+
+ glDepthMask(GL_FALSE);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+
+ glBegin(GL_QUADS);
+
+ for (i = 0; i < NumDebugQuads; i++)
+ {
+ glColor4fv((float*)&DebugQuads[i].color);
+ glVertex3fv((float*)&DebugQuads[i].pt1);
+ glVertex3fv((float*)&DebugQuads[i].pt2);
+ glVertex3fv((float*)&DebugQuads[i].pt3);
+ glVertex3fv((float*)&DebugQuads[i].pt4);
+ }
+
+ glEnd();
+
+ glDisable(GL_BLEND);
+ glDepthMask(GL_TRUE);
+}
+
+#endif // LC_DEBUG