diff options
Diffstat (limited to 'src/video_core/primitive_assembly.cpp')
| -rw-r--r-- | src/video_core/primitive_assembly.cpp | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index 68ea3c08a..343edb191 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp | |||
| @@ -10,62 +10,61 @@ | |||
| 10 | 10 | ||
| 11 | namespace Pica { | 11 | namespace Pica { |
| 12 | 12 | ||
| 13 | template<typename VertexType> | 13 | template <typename VertexType> |
| 14 | PrimitiveAssembler<VertexType>::PrimitiveAssembler(Regs::TriangleTopology topology) | 14 | PrimitiveAssembler<VertexType>::PrimitiveAssembler(Regs::TriangleTopology topology) |
| 15 | : topology(topology), buffer_index(0) { | 15 | : topology(topology), buffer_index(0) { |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | template<typename VertexType> | 18 | template <typename VertexType> |
| 19 | void PrimitiveAssembler<VertexType>::SubmitVertex(VertexType& vtx, TriangleHandler triangle_handler) | 19 | void PrimitiveAssembler<VertexType>::SubmitVertex(VertexType& vtx, |
| 20 | { | 20 | TriangleHandler triangle_handler) { |
| 21 | switch (topology) { | 21 | switch (topology) { |
| 22 | // TODO: Figure out what's different with TriangleTopology::Shader. | 22 | // TODO: Figure out what's different with TriangleTopology::Shader. |
| 23 | case Regs::TriangleTopology::List: | 23 | case Regs::TriangleTopology::List: |
| 24 | case Regs::TriangleTopology::Shader: | 24 | case Regs::TriangleTopology::Shader: |
| 25 | if (buffer_index < 2) { | 25 | if (buffer_index < 2) { |
| 26 | buffer[buffer_index++] = vtx; | 26 | buffer[buffer_index++] = vtx; |
| 27 | } else { | 27 | } else { |
| 28 | buffer_index = 0; | 28 | buffer_index = 0; |
| 29 | 29 | ||
| 30 | triangle_handler(buffer[0], buffer[1], vtx); | 30 | triangle_handler(buffer[0], buffer[1], vtx); |
| 31 | } | 31 | } |
| 32 | break; | 32 | break; |
| 33 | 33 | ||
| 34 | case Regs::TriangleTopology::Strip: | 34 | case Regs::TriangleTopology::Strip: |
| 35 | case Regs::TriangleTopology::Fan: | 35 | case Regs::TriangleTopology::Fan: |
| 36 | if (strip_ready) | 36 | if (strip_ready) |
| 37 | triangle_handler(buffer[0], buffer[1], vtx); | 37 | triangle_handler(buffer[0], buffer[1], vtx); |
| 38 | 38 | ||
| 39 | buffer[buffer_index] = vtx; | 39 | buffer[buffer_index] = vtx; |
| 40 | 40 | ||
| 41 | strip_ready |= (buffer_index == 1); | 41 | strip_ready |= (buffer_index == 1); |
| 42 | 42 | ||
| 43 | if (topology == Regs::TriangleTopology::Strip) | 43 | if (topology == Regs::TriangleTopology::Strip) |
| 44 | buffer_index = !buffer_index; | 44 | buffer_index = !buffer_index; |
| 45 | else if (topology == Regs::TriangleTopology::Fan) | 45 | else if (topology == Regs::TriangleTopology::Fan) |
| 46 | buffer_index = 1; | 46 | buffer_index = 1; |
| 47 | break; | 47 | break; |
| 48 | 48 | ||
| 49 | default: | 49 | default: |
| 50 | LOG_ERROR(HW_GPU, "Unknown triangle topology %x:", (int)topology); | 50 | LOG_ERROR(HW_GPU, "Unknown triangle topology %x:", (int)topology); |
| 51 | break; | 51 | break; |
| 52 | } | 52 | } |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | template<typename VertexType> | 55 | template <typename VertexType> |
| 56 | void PrimitiveAssembler<VertexType>::Reset() { | 56 | void PrimitiveAssembler<VertexType>::Reset() { |
| 57 | buffer_index = 0; | 57 | buffer_index = 0; |
| 58 | strip_ready = false; | 58 | strip_ready = false; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | template<typename VertexType> | 61 | template <typename VertexType> |
| 62 | void PrimitiveAssembler<VertexType>::Reconfigure(Regs::TriangleTopology topology) { | 62 | void PrimitiveAssembler<VertexType>::Reconfigure(Regs::TriangleTopology topology) { |
| 63 | Reset(); | 63 | Reset(); |
| 64 | this->topology = topology; | 64 | this->topology = topology; |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | // explicitly instantiate use cases | 67 | // explicitly instantiate use cases |
| 68 | template | 68 | template struct PrimitiveAssembler<Shader::OutputVertex>; |
| 69 | struct PrimitiveAssembler<Shader::OutputVertex>; | ||
| 70 | 69 | ||
| 71 | } // namespace | 70 | } // namespace |