| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Copyright 2014 Citra Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #pragma once
- #include <functional>
- #include "video_core/regs_pipeline.h"
- namespace Pica {
- /*
- * Utility class to build triangles from a series of vertices,
- * according to a given triangle topology.
- */
- template <typename VertexType>
- struct PrimitiveAssembler {
- using TriangleHandler =
- std::function<void(const VertexType& v0, const VertexType& v1, const VertexType& v2)>;
- PrimitiveAssembler(
- PipelineRegs::TriangleTopology topology = PipelineRegs::TriangleTopology::List);
- /*
- * Queues a vertex, builds primitives from the vertex queue according to the given
- * triangle topology, and calls triangle_handler for each generated primitive.
- * NOTE: We could specify the triangle handler in the constructor, but this way we can
- * keep event and handler code next to each other.
- */
- void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler);
- /**
- * Resets the internal state of the PrimitiveAssembler.
- */
- void Reset();
- /**
- * Reconfigures the PrimitiveAssembler to use a different triangle topology.
- */
- void Reconfigure(PipelineRegs::TriangleTopology topology);
- private:
- PipelineRegs::TriangleTopology topology;
- int buffer_index;
- VertexType buffer[2];
- bool strip_ready = false;
- };
- } // namespace
|