From 38d6d37f2d982fa959e9e8a4a3f7e1ccfad7b5d4 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:44:46 -0500 Subject: Second Life viewer sources 1.13.2.12 --- linden/indra/newview/llbox.cpp | 124 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 linden/indra/newview/llbox.cpp (limited to 'linden/indra/newview/llbox.cpp') diff --git a/linden/indra/newview/llbox.cpp b/linden/indra/newview/llbox.cpp new file mode 100644 index 0000000..8f51c4f --- /dev/null +++ b/linden/indra/newview/llbox.cpp @@ -0,0 +1,124 @@ +/** + * @file llbox.cpp + * @brief Draws a box using display lists for speed. + * + * Copyright (c) 2001-2007, Linden Research, Inc. + * + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#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); +} -- cgit v1.1