diff options
| author | Tony Wasserka <neobrainx@gmail.com> | 2014-08-12 13:55:41 +0200 |
|---|---|---|
| committer | Tony Wasserka <neobrainx@gmail.com> | 2014-08-12 13:55:41 +0200 |
| commit | 36cabe35cc15a6590f5d18be695ae505a946cb06 (patch) | |
| tree | 241e6d8b36e6ab9921ef7afb71e7350e52862e2a /src/video_core/primitive_assembly.cpp | |
| parent | a3e029fad0610d9e045b79cdc545dec3e7327ff7 (diff) | |
| parent | 94d742fe172ba933af321bfb0e02889b40d0c179 (diff) | |
Merge pull request #37 from neobrain/pica
Initial work on Pica rendering.
Diffstat (limited to 'src/video_core/primitive_assembly.cpp')
| -rw-r--r-- | src/video_core/primitive_assembly.cpp | 51 |
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 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "clipper.h" +#include "pica.h" +#include "primitive_assembly.h" +#include "vertex_shader.h" + +namespace Pica { + +namespace PrimitiveAssembly { + +static OutputVertex buffer[2]; +static int buffer_index = 0; // TODO: reset this on emulation restart + +void SubmitVertex(OutputVertex& vtx) +{ + switch (registers.triangle_topology) { + case Regs::TriangleTopology::List: + case Regs::TriangleTopology::ListIndexed: + if (buffer_index < 2) { + buffer[buffer_index++] = vtx; + } else { + buffer_index = 0; + + Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); + } + break; + + case Regs::TriangleTopology::Fan: + if (buffer_index == 2) { + buffer_index = 0; + + Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); + + buffer[1] = vtx; + } else { + buffer[buffer_index++] = vtx; + } + break; + + default: + ERROR_LOG(GPU, "Unknown triangle mode %x:", (int)registers.triangle_topology.Value()); + break; + } +} + +} // namespace + +} // namespace |
