diff options
author | Tony Wasserka <NeoBrainX@gmail.com> | 2014-08-17 17:44:55 +0200 |
---|---|---|
committer | Tony Wasserka <NeoBrainX@gmail.com> | 2014-08-25 22:03:19 +0200 |
commit | 2f1c129f6407fe2d5c8c3e57c6717d5668570de5 (patch) | |
tree | 5d12dadd9ffe3b46b9b94a84b7688d6d3b8260fd /src/video_core/primitive_assembly.h | |
parent | Pica/Rasterizer: Add texturing support. (diff) | |
download | yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.tar yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.tar.gz yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.tar.bz2 yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.tar.lz yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.tar.xz yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.tar.zst yuzu-2f1c129f6407fe2d5c8c3e57c6717d5668570de5.zip |
Diffstat (limited to 'src/video_core/primitive_assembly.h')
-rw-r--r-- | src/video_core/primitive_assembly.h | 38 |
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 |