summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/IndexGenerator.cpp
diff options
context:
space:
mode:
authorhrydgard <hrydgard@gmail.com>2008-12-25 21:44:56 +0000
committerhrydgard <hrydgard@gmail.com>2008-12-25 21:44:56 +0000
commit358333b94b9344b2e5a8897f6e82da160a4c85a9 (patch)
tree2dfd04695ed9b297d998a870b4948ba30ea50513 /Source/Core/VideoCommon/Src/IndexGenerator.cpp
parent17a601958cc73377bef9e7844e76b3ac8205427e (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.cpp129
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