summaryrefslogtreecommitdiff
path: root/src/video_core/primitive_assembly.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/primitive_assembly.cpp')
-rw-r--r--src/video_core/primitive_assembly.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp
new file mode 100644
index 000000000..2354ffb99
--- /dev/null
+++ b/src/video_core/primitive_assembly.cpp
@@ -0,0 +1,51 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2
3// Refer to the license.txt file included.
4
5#include "clipper.h"
6#include "pica.h"
7#include "primitive_assembly.h"
8#include "vertex_shader.h"
9
10namespace Pica {
11
12namespace PrimitiveAssembly {
13
14static OutputVertex buffer[2];
15static int buffer_index = 0; // TODO: reset this on emulation restart
16
17void SubmitVertex(OutputVertex& vtx)
18{
19 switch (registers.triangle_topology) {
20 case Regs::TriangleTopology::List:
21 case Regs::TriangleTopology::ListIndexed:
22 if (buffer_index < 2) {
23 buffer[buffer_index++] = vtx;
24 } else {
25 buffer_index = 0;
26
27 Clipper::ProcessTriangle(buffer[0], buffer[1], vtx);
28 }
29 break;
30
31 case Regs::TriangleTopology::Fan:
32 if (buffer_index == 2) {
33 buffer_index = 0;
34
35 Clipper::ProcessTriangle(buffer[0], buffer[1], vtx);
36
37 buffer[1] = vtx;
38 } else {
39 buffer[buffer_index++] = vtx;
40 }
41 break;
42
43 default:
44 ERROR_LOG(GPU, "Unknown triangle mode %x:", (int)registers.triangle_topology.Value());
45 break;
46 }
47}
48
49} // namespace
50
51} // namespace