diff options
| author | hrydgard <hrydgard@gmail.com> | 2008-12-25 21:44:56 +0000 |
|---|---|---|
| committer | hrydgard <hrydgard@gmail.com> | 2008-12-25 21:44:56 +0000 |
| commit | 358333b94b9344b2e5a8897f6e82da160a4c85a9 (patch) | |
| tree | 2dfd04695ed9b297d998a870b4948ba30ea50513 /Source/Core/VideoCommon/Src/IndexGenerator.cpp | |
| parent | 17a601958cc73377bef9e7844e76b3ac8205427e (diff) | |
and more boring moving and cleanup ...
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1661 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/VideoCommon/Src/IndexGenerator.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/Src/IndexGenerator.cpp | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/Src/IndexGenerator.cpp b/Source/Core/VideoCommon/Src/IndexGenerator.cpp new file mode 100644 index 0000000000..01ff44a5c0 --- /dev/null +++ b/Source/Core/VideoCommon/Src/IndexGenerator.cpp @@ -0,0 +1,129 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "IndexGenerator.h" + +/* +* +QUAD simulator + +0 2 4 6 +1 3 5 7 +021231 243453 +*/ + + +void IndexGenerator::Start(unsigned short *startptr) +{ + ptr=startptr; + index=0; + numPrims=0; +} + +void IndexGenerator::AddList(int numVerts) +{ + int numTris = numVerts/3; + if (numTris<=0) return; + for (int i=0; i<numTris; i++) + { + *ptr++ = index+i*3; + *ptr++ = index+i*3+1; + *ptr++ = index+i*3+2; + } + index += numVerts; + numPrims += numTris; +} + +void IndexGenerator::AddStrip(int numVerts) +{ + int numTris = numVerts-2; + if (numTris<=0) return; + bool wind = false; + for (int i=0; i<numTris; i++) + { + *ptr++ = index+i; + *ptr++ = index+i+(wind?2:1); + *ptr++ = index+i+(wind?1:2); + wind = !wind; + } + index += numVerts; + numPrims += numTris; +} + +void IndexGenerator::AddLineList(int numVerts) +{ + int numLines= numVerts/2; + if (numLines<=0) return; + for (int i=0; i<numLines; i++) + { + *ptr++ = index+i*2; + *ptr++ = index+i*2+1; + } + index += numVerts; + numPrims += numLines; +} + +void IndexGenerator::AddLineStrip(int numVerts) +{ + int numLines = numVerts-1; + if (numLines<=0) return; + for (int i=0; i<numLines; i++) + { + *ptr++ = index+i; + *ptr++ = index+i+1; + } + index += numVerts; + numPrims += numLines; +} + + +void IndexGenerator::AddFan(int numVerts) +{ + int numTris = numVerts-2; + if (numTris<=0) return; + for (int i=0; i<numTris; i++) + { + *ptr++ = index; + *ptr++ = index+i+1; + *ptr++ = index+i+2; + } + index += numVerts; + numPrims += numTris; +} + +void IndexGenerator::AddQuads(int numVerts) +{ + int numTris = (numVerts/4)*2; + if (numTris<=0) return; + for (int i=0; i<numTris/2; i++) + { + *ptr++=index+i*4; + *ptr++=index+i*4+1; + *ptr++=index+i*4+3; + *ptr++=index+i*4+1; + *ptr++=index+i*4+2; + *ptr++=index+i*4+3; + } + index += numVerts; + numPrims += numTris; +} + + +void IndexGenerator::AddPointList(int numVerts) +{ + index += numVerts; +}
\ No newline at end of file |
