diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2014-12-28 03:56:32 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2014-12-29 05:08:09 +0100 |
commit | a320d1a5b4b7ce3b90372697fbe50242b78d082e (patch) | |
tree | 727b752af17e41adc52006dfe6d8aa33b6894ecf /src | |
parent | Vertex Shader: Zero OutputVertex to avoid denormals (diff) | |
download | yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.tar yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.tar.gz yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.tar.bz2 yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.tar.lz yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.tar.xz yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.tar.zst yuzu-a320d1a5b4b7ce3b90372697fbe50242b78d082e.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/video_core/clipper.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/video_core/clipper.cpp b/src/video_core/clipper.cpp index 0bcd0b895..e89b7a0c0 100644 --- a/src/video_core/clipper.cpp +++ b/src/video_core/clipper.cpp @@ -2,7 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include <vector> +#include <boost/container/static_vector.hpp> #include "clipper.h" #include "pica.h" @@ -98,18 +98,15 @@ static void InitScreenCoordinates(OutputVertex& vtx) } void ProcessTriangle(OutputVertex &v0, OutputVertex &v1, OutputVertex &v2) { + using boost::container::static_vector; // TODO (neobrain): // The list of output vertices has some fixed maximum size, // however I haven't taken the time to figure out what it is exactly. - // For now, we hence just assume a maximal size of 1000 vertices. - const size_t max_vertices = 1000; - std::vector<OutputVertex> buffer_vertices; - std::vector<OutputVertex*> output_list{ &v0, &v1, &v2 }; - - // Make sure to reserve space for all vertices. - // Without this, buffer reallocation would invalidate references. - buffer_vertices.reserve(max_vertices); + // For now, we hence just assume a maximal size of 256 vertices. + static const size_t MAX_VERTICES = 256; + static_vector<OutputVertex, MAX_VERTICES> buffer_vertices; + static_vector<OutputVertex*, MAX_VERTICES> output_list = { &v0, &v1, &v2 }; // Simple implementation of the Sutherland-Hodgman clipping algorithm. // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here) @@ -120,7 +117,7 @@ void ProcessTriangle(OutputVertex &v0, OutputVertex &v1, OutputVertex &v2) { ClippingEdge(ClippingEdge::POS_Z, float24::FromFloat32(+1.0)), ClippingEdge(ClippingEdge::NEG_Z, float24::FromFloat32(-1.0)) }) { - const std::vector<OutputVertex*> input_list = output_list; + const static_vector<OutputVertex*, MAX_VERTICES> input_list = output_list; output_list.clear(); const OutputVertex* reference_vertex = input_list.back(); |