summaryrefslogtreecommitdiffstats
path: root/src/video_core/primitive_assembly.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2014-08-25 22:12:10 +0200
committerbunnei <bunneidev@gmail.com>2014-08-25 22:12:10 +0200
commit97fd8fc38d4f9c288779cddb06538860124c6263 (patch)
treebc99e0fceaae732f9c8d4831fcdb8f661b49ccb8 /src/video_core/primitive_assembly.h
parentMerge pull request #75 from xsacha/qt5 (diff)
parentPica/Rasterizer: Clarify a TODO. (diff)
downloadyuzu-97fd8fc38d4f9c288779cddb06538860124c6263.tar
yuzu-97fd8fc38d4f9c288779cddb06538860124c6263.tar.gz
yuzu-97fd8fc38d4f9c288779cddb06538860124c6263.tar.bz2
yuzu-97fd8fc38d4f9c288779cddb06538860124c6263.tar.lz
yuzu-97fd8fc38d4f9c288779cddb06538860124c6263.tar.xz
yuzu-97fd8fc38d4f9c288779cddb06538860124c6263.tar.zst
yuzu-97fd8fc38d4f9c288779cddb06538860124c6263.zip
Diffstat (limited to 'src/video_core/primitive_assembly.h')
-rw-r--r--src/video_core/primitive_assembly.h38
1 files changed, 30 insertions, 8 deletions
diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h
index 2a2b0c170..ea2e2f61e 100644
--- a/src/video_core/primitive_assembly.h
+++ b/src/video_core/primitive_assembly.h
@@ -4,18 +4,40 @@
#pragma once
-namespace Pica {
+#include <functional>
-namespace VertexShader {
- struct OutputVertex;
-}
+#include "video_core/pica.h"
-namespace PrimitiveAssembly {
+#include "video_core/vertex_shader.h"
-using VertexShader::OutputVertex;
+namespace Pica {
-void SubmitVertex(OutputVertex& vtx);
+/*
+ * 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(VertexType& v0,
+ VertexType& v1,
+ VertexType& v2)>;
+
+ PrimitiveAssembler(Regs::TriangleTopology topology);
+
+ /*
+ * 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(VertexType& vtx, TriangleHandler triangle_handler);
+
+private:
+ Regs::TriangleTopology topology;
+
+ int buffer_index;
+ VertexType buffer[2];
+};
-} // namespace
} // namespace