summaryrefslogtreecommitdiff
path: root/indra/newview/llbox.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llbox.cpp
Print done when done.
Diffstat (limited to 'indra/newview/llbox.cpp')
-rw-r--r--indra/newview/llbox.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/indra/newview/llbox.cpp b/indra/newview/llbox.cpp
new file mode 100644
index 0000000000..3d5a6b6fea
--- /dev/null
+++ b/indra/newview/llbox.cpp
@@ -0,0 +1,105 @@
+/**
+ * @file llbox.cpp
+ * @brief Draws a box using display lists for speed.
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llbox.h"
+
+#include "llgl.h"
+#include "llglheaders.h"
+
+LLBox gBox;
+
+// These routines support multiple textures on a box
+void LLBox::prerender()
+{
+ F32 size = 1.f;
+
+ mTriangleCount = 6 * 2;
+
+ mVertex[0][0] = mVertex[1][0] = mVertex[2][0] = mVertex[3][0] = -size / 2;
+ mVertex[4][0] = mVertex[5][0] = mVertex[6][0] = mVertex[7][0] = size / 2;
+ mVertex[0][1] = mVertex[1][1] = mVertex[4][1] = mVertex[5][1] = -size / 2;
+ mVertex[2][1] = mVertex[3][1] = mVertex[6][1] = mVertex[7][1] = size / 2;
+ mVertex[0][2] = mVertex[3][2] = mVertex[4][2] = mVertex[7][2] = -size / 2;
+ mVertex[1][2] = mVertex[2][2] = mVertex[5][2] = mVertex[6][2] = size / 2;
+}
+
+// These routines support multiple textures on a box
+void LLBox::cleanupGL()
+{
+ // No GL state, a noop.
+}
+
+void LLBox::renderface(S32 which_face)
+{
+ static F32 normals[6][3] =
+ {
+ {-1.0f, 0.0f, 0.0f},
+ { 0.0f, 1.0f, 0.0f},
+ { 1.0f, 0.0f, 0.0f},
+ { 0.0f, -1.0f, 0.0f},
+ { 0.0f, 0.0f, 1.0f},
+ { 0.0f, 0.0f, -1.0f}
+ };
+ static S32 faces[6][4] =
+ {
+ {0, 1, 2, 3},
+ {3, 2, 6, 7},
+ {7, 6, 5, 4},
+ {4, 5, 1, 0},
+ {5, 6, 2, 1},
+ {7, 4, 0, 3}
+ };
+
+ glBegin(GL_QUADS);
+ glNormal3fv(&normals[which_face][0]);
+ glTexCoord2f(1,0);
+ glVertex3fv(&mVertex[ faces[which_face][0] ][0]);
+ glTexCoord2f(1,1);
+ glVertex3fv(&mVertex[ faces[which_face][1] ][0]);
+ glTexCoord2f(0,1);
+ glVertex3fv(&mVertex[ faces[which_face][2] ][0]);
+ glTexCoord2f(0,0);
+ glVertex3fv(&mVertex[ faces[which_face][3] ][0]);
+ glEnd();
+}
+
+void LLBox::render()
+{
+ // This is a flattend representation of the box as render here
+ // .
+ // (-++) (+++) /|\t
+ // +------------+ | (texture coordinates)
+ // |2 1| |
+ // | 4 | (*) --->s
+ // | TOP |
+ // | |
+ // (-++) (--+)|3 0|(+-+) (+++) (-++)
+ // +------------+------------+------------+------------+
+ // |2 1|2 1|2 1|2 1|
+ // | 0 | 1 | 2 | 3 |
+ // | BACK | RIGHT | FRONT | LEFT |
+ // | | | | |
+ // |3 0|3 0|3 0|3 0|
+ // +------------+------------+------------+------------+
+ // (-+-) (---)|2 1|(+--) (++-) (-+-)
+ // | 5 |
+ // | BOTTOM |
+ // | |
+ // |3 0|
+ // +------------+
+ // (-+-) (++-)
+
+ renderface(5);
+ renderface(4);
+ renderface(3);
+ renderface(2);
+ renderface(1);
+ renderface(0);
+}