rendering works
authorJacob Lifshay <programmerjake@gmail.com>
Wed, 23 Aug 2017 04:31:43 +0000 (21:31 -0700)
committerJacob Lifshay <programmerjake@gmail.com>
Wed, 23 Aug 2017 04:31:43 +0000 (21:31 -0700)
src/demo/demo.cpp
src/pipeline/pipeline.cpp
src/spirv_to_llvm/core_instructions.cpp
test-files/tri.vert
test-files/tri.vert.spv

index 20b5d470ce3f0a61753bc1c3bb7a34ec7fccb8f8..797309f3206778b383ed6dcf9829ee2766f02a52 100644 (file)
@@ -241,6 +241,26 @@ pipeline::Pipeline_layout_handle make_pipeline_layout()
     return pipeline::Pipeline_layout_handle::make(pipeline_layout_create_info);
 }
 
+template <typename Integer_type>
+util::optional<Integer_type> parse_unsigned_integer(util::string_view str, Integer_type max_value = std::numeric_limits<Integer_type>::max()) noexcept
+{
+    static_assert(std::is_unsigned<Integer_type>::value, "");
+    if(str.empty())
+        return {};
+    Integer_type retval = 0;
+    for(char ch : str)
+    {
+        if(ch < '0' || ch > '9')
+            return {};
+        unsigned ch_value = ch - '0';
+        if(retval > max_value / 10 || (retval == max_value / 10 && ch_value > max_value % 10))
+            return {};
+        retval *= 10;
+        retval += ch_value;
+    }
+    return retval;
+}
+
 int test_main(int argc, char **argv)
 {
     if(SDL_Init(0) < 0)
@@ -257,18 +277,26 @@ int test_main(int argc, char **argv)
     } shutdown_sdl;
     const char *vertex_shader_filename = "test-files/tri.vert.spv";
     const char *fragment_shader_filename = "test-files/tri.frag.spv";
+    const char *vertex_count_str = "633";
     if(argc > 1)
     {
-        if(argc != 3 || argv[1][0] == '-' || argv[2][0] == '-')
+        if(argc != 4 || argv[1][0] == '-' || argv[2][0] == '-' || argv[3][0] == '-')
         {
-            std::cerr << "usage: demo [<file.vert.spv> <file.frag.spv>]\n";
+            std::cerr << "usage: demo [<file.vert.spv> <file.frag.spv> <vertex count>]\n";
             return 1;
         }
         vertex_shader_filename = argv[1];
         fragment_shader_filename = argv[2];
+        vertex_count_str = argv[3];
     }
     try
     {
+        auto vertex_count = parse_unsigned_integer<std::uint64_t>(vertex_count_str);
+        if(!vertex_count)
+            throw std::runtime_error("invalid value for vertex count, must be a decimal integer");
+        constexpr auto max_vertex_count = 50000000;
+        if(*vertex_count > max_vertex_count)
+            throw std::runtime_error("vertex count is too large");
         auto vertex_shader = load_shader(vertex_shader_filename);
         auto fragment_shader = load_shader(fragment_shader_filename);
         auto pipeline_layout = make_pipeline_layout();
@@ -358,8 +386,9 @@ int test_main(int argc, char **argv)
             .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
             .primitiveRestartEnable = false,
         };
-        static constexpr std::size_t window_width = 640;
-        static constexpr std::size_t window_height = 480;
+        static constexpr std::size_t window_width = 1024;
+        static_assert(window_width % 4 == 0, "");
+        static constexpr std::size_t window_height = window_width * 3ULL / 4;
         static constexpr std::size_t viewport_count = 1;
         VkViewport viewports[viewport_count] = {
             {
@@ -492,14 +521,14 @@ int test_main(int argc, char **argv)
         image::Image color_attachment(image::Image_descriptor(image_create_info),
                                       image::allocate_memory_tag);
         VkClearColorValue clear_color;
-        // set clear_color to opaque red
-        clear_color.float32[0] = 1;
-        clear_color.float32[1] = 0;
-        clear_color.float32[2] = 0;
+        // set clear_color to opaque gray
+        clear_color.float32[0] = 0.25;
+        clear_color.float32[1] = 0.25;
+        clear_color.float32[2] = 0.25;
         clear_color.float32[3] = 1;
         color_attachment.clear(clear_color);
         constexpr std::uint32_t vertex_start_index = 0;
-        constexpr std::uint32_t vertex_end_index = 3;
+        std::uint32_t vertex_end_index = *vertex_count;
         constexpr std::uint32_t instance_id = 0;
         graphics_pipeline->run(vertex_start_index, vertex_end_index, instance_id, color_attachment);
         typedef std::uint32_t Pixel_type;
@@ -543,7 +572,8 @@ int test_main(int argc, char **argv)
                                      rgba(0, 0, 0xFF, 0),
                                      rgba(0, 0, 0, 0xFF)));
         if(!surface)
-            throw std::runtime_error(std::string("SDL_CreateRGBSurfaceFrom failed: ") + SDL_GetError());
+            throw std::runtime_error(std::string("SDL_CreateRGBSurfaceFrom failed: ")
+                                     + SDL_GetError());
         const char *output_file = "output.bmp";
         if(SDL_SaveBMP(surface.get(), output_file) < 0)
             throw std::runtime_error(std::string("SDL_SaveBMP failed: ") + SDL_GetError());
index 1f20c3260934189eb56e61a18f7c1047cc8de025..9c7cd938d5a20653348e2ab02f3dc5764cf66477 100644 (file)
@@ -755,21 +755,24 @@ void Graphics_pipeline::run(std::uint32_t vertex_start_index,
                 min_y = clipped_scissor_rect_min.y;
             if(end_y > clipped_scissor_rect_end.y)
                 end_y = clipped_scissor_rect_end.y;
-            constexpr int scale = 1 << 8;
+            constexpr int log2_scale = 16;
+            constexpr auto scale = 1LL << log2_scale;
+            typedef std::int64_t Edge_equation_integer_type;
             struct Edge_equation
             {
-                std::int32_t a;
-                std::int32_t b;
-                std::int32_t c;
-                std::int32_t padding;
+                Edge_equation_integer_type a;
+                Edge_equation_integer_type b;
+                Edge_equation_integer_type c;
+                Edge_equation_integer_type padding;
                 constexpr Edge_equation() noexcept : a(), b(), c(), padding()
                 {
                 }
-                constexpr Edge_equation(std::int32_t a, std::int32_t b, std::int32_t c) noexcept
-                    : a(a),
-                      b(b),
-                      c(c),
-                      padding()
+                constexpr Edge_equation(Edge_equation_integer_type a,
+                                        Edge_equation_integer_type b,
+                                        Edge_equation_integer_type c) noexcept : a(a),
+                                                                                 b(b),
+                                                                                 c(c),
+                                                                                 padding()
                 {
                 }
                 constexpr bool inside(std::int32_t x, std::int32_t y) const noexcept
@@ -778,36 +781,49 @@ void Graphics_pipeline::run(std::uint32_t vertex_start_index,
                 }
             };
             Edge_equation edge_equations[triangle_vertex_count];
+            bool skip_triangle = false;
             for(std::size_t start_vertex_index = 0, end_vertex_index = 1, other_vertex_index = 2;
                 start_vertex_index < triangle_vertex_count;
                 start_vertex_index++)
             {
-                float x1 = framebuffer_coordinates[start_vertex_index].x;
-                float y1 = framebuffer_coordinates[start_vertex_index].y;
-                float x2 = framebuffer_coordinates[end_vertex_index].x;
-                float y2 = framebuffer_coordinates[end_vertex_index].y;
-                [[gnu::unused]] float x3 = framebuffer_coordinates[other_vertex_index].x;
-                [[gnu::unused]] float y3 = framebuffer_coordinates[other_vertex_index].y;
-                std::int32_t a;
-                std::int32_t b;
-                std::int32_t c;
+                float x1_float = framebuffer_coordinates[start_vertex_index].x;
+                float y1_float = framebuffer_coordinates[start_vertex_index].y;
+                float x2_float = framebuffer_coordinates[end_vertex_index].x;
+                float y2_float = framebuffer_coordinates[end_vertex_index].y;
+                [[gnu::unused]] float x3_float = framebuffer_coordinates[other_vertex_index].x;
+                [[gnu::unused]] float y3_float = framebuffer_coordinates[other_vertex_index].y;
+                auto x1_fixed = static_cast<Edge_equation_integer_type>(x1_float * scale);
+                auto y1_fixed = static_cast<Edge_equation_integer_type>(y1_float * scale);
+                auto x2_fixed = static_cast<Edge_equation_integer_type>(x2_float * scale);
+                auto y2_fixed = static_cast<Edge_equation_integer_type>(y2_float * scale);
+                [[gnu::unused]] auto x3_fixed =
+                    static_cast<Edge_equation_integer_type>(x3_float * scale);
+                [[gnu::unused]] auto y3_fixed =
+                    static_cast<Edge_equation_integer_type>(y3_float * scale);
+                Edge_equation_integer_type a;
+                Edge_equation_integer_type b;
+                Edge_equation_integer_type c;
                 {
                     // solve a * x1 + b * y1 + c == 0 &&
                     // a * x2 + b * y2 + c == 0 &&
-                    // max(abs(a), abs(b)) == scale &&
                     // a * x3 + b * y3 + c >= 0
-                    float divisor = std::fmax(std::fabs(x2 - x1), std::fabs(y1 - y2));
-                    float factor = scale / divisor;
-                    float a_float = (y1 - y2) * factor;
-                    float b_float = (x2 - x1) * factor;
-                    float c_float = (x1 * y2 - x2 * y1) * factor;
+                    if(x1_fixed == x2_fixed && y1_fixed == y2_fixed)
+                    {
+                        // rounded to a zero-area triangle
+                        skip_triangle = true;
+                        break;
+                    }
+                    Edge_equation_integer_type a_fixed = (y1_fixed - y2_fixed) * scale;
+                    Edge_equation_integer_type b_fixed = (x2_fixed - x1_fixed) * scale;
+                    Edge_equation_integer_type c_fixed =
+                        (x1_fixed * y2_fixed - x2_fixed * y1_fixed);
 
                     // offset to end up checking at pixel center instead of top-left pixel corner
-                    c_float += 0.5f * (a_float + b_float);
+                    c_fixed += (a_fixed + b_fixed) / 2;
 
-                    a = a_float;
-                    b = b_float;
-                    c = c_float;
+                    a = a_fixed;
+                    b = b_fixed;
+                    c = c_fixed;
                     if(orientation > 0)
                     {
                         // fix sign
@@ -820,6 +836,7 @@ void Graphics_pipeline::run(std::uint32_t vertex_start_index,
                 if(a < 0 || (a == 0 && b < 0))
                 {
                     // not a top-left edge, fixup c
+                    // effectively changes the '>=' to '>' in Edge_equation::inside
                     c--;
                 }
 
@@ -829,6 +846,8 @@ void Graphics_pipeline::run(std::uint32_t vertex_start_index,
                 if(++other_vertex_index >= triangle_vertex_count)
                     other_vertex_index = 0;
             }
+            if(skip_triangle)
+                continue;
             auto fs = this->fragment_shader_function;
             for(std::int32_t y = min_y; y < end_y; y++)
             {
@@ -840,10 +859,13 @@ void Graphics_pipeline::run(std::uint32_t vertex_start_index,
                         inside &= edge_equation.inside(x, y);
                     }
                     if(inside)
-                        fs(reinterpret_cast<Pixel_type *>(
+                    {
+                        auto *pixel = reinterpret_cast<Pixel_type *>(
                             color_attachment_memory
                             + (static_cast<std::size_t>(x) * color_attachment_pixel_size
-                               + static_cast<std::size_t>(y) * color_attachment_stride)));
+                               + static_cast<std::size_t>(y) * color_attachment_stride));
+                        fs(pixel);
+                    }
                 }
             }
         };
index 1a75d6b958b60b39ba9384f8e8cb50f06cf3d6b2..739f04ae5a92651dfbd3631f1717bc7537722a03 100644 (file)
@@ -846,6 +846,30 @@ void Spirv_to_llvm::handle_instruction_op_constant_composite(Op_constant_composi
                 type, ::LLVMConstVector(constituents.data(), constituents.size()));
             break;
         }
+        else if(auto *array_type = dynamic_cast<Array_type_descriptor *>(type.get()))
+        {
+            if(instruction.constituents.size() != array_type->get_element_count())
+                throw Parser_error(instruction_start_index,
+                                   instruction_start_index,
+                                   "wrong number of constituents for type");
+            std::vector<::LLVMValueRef> constituents;
+            constituents.reserve(instruction.constituents.size());
+            for(Id_ref constituent : instruction.constituents)
+            {
+                auto &constituent_state = get_id_state(constituent);
+                if(!constituent_state.constant)
+                    throw Parser_error(instruction_start_index,
+                                       instruction_start_index,
+                                       "constituent must be a constant or OpUndef");
+                constituents.push_back(constituent_state.constant->get_or_make_value());
+            }
+            state.constant = std::make_shared<Simple_constant_descriptor>(
+                type,
+                ::LLVMConstArray(array_type->get_element_type()->get_or_make_type().type,
+                                 constituents.data(),
+                                 constituents.size()));
+            break;
+        }
         else
         {
             throw Parser_error(instruction_start_index,
@@ -1551,12 +1575,11 @@ void Spirv_to_llvm::handle_instruction_op_access_chain(Op_access_chain instructi
                                        instruction_start_index,
                                        "unimplemented composite type for OpAccessChain");
                 }
-                void operator()(Array_type_descriptor &)
+                void operator()(Array_type_descriptor &type)
                 {
-#warning finish
-                    throw Parser_error(instruction_start_index,
-                                       instruction_start_index,
-                                       "unimplemented composite type for OpAccessChain");
+                    auto &index_value = this_->get_id_state(index).value.value();
+                    llvm_indexes.push_back(index_value.value);
+                    current_type = type.get_element_type();
                 }
                 void operator()(Pointer_type_descriptor &)
                 {
@@ -2451,11 +2474,26 @@ void Spirv_to_llvm::handle_instruction_op_s_negate(Op_s_negate instruction,
 void Spirv_to_llvm::handle_instruction_op_f_negate(Op_f_negate instruction,
                                                    std::size_t instruction_start_index)
 {
-#warning finish
-    throw Parser_error(instruction_start_index,
-                       instruction_start_index,
-                       "instruction not implemented: "
-                           + std::string(get_enumerant_name(instruction.get_operation())));
+    switch(stage)
+    {
+    case Stage::calculate_types:
+        break;
+    case Stage::generate_code:
+    {
+        auto &state = get_id_state(instruction.result);
+        if(!state.decorations.empty())
+            throw Parser_error(instruction_start_index,
+                               instruction_start_index,
+                               "decorations on instruction not implemented: "
+                                   + std::string(get_enumerant_name(instruction.get_operation())));
+        auto result_type = get_type(instruction.result_type, instruction_start_index);
+        auto &arg = get_id_state(instruction.operand).value.value();
+        state.value =
+            Value(::LLVMBuildFNeg(builder.get(), arg.value, get_name(instruction.result).c_str()),
+                  result_type);
+        break;
+    }
+    }
 }
 
 void Spirv_to_llvm::handle_instruction_op_i_add(Op_i_add instruction,
@@ -2567,11 +2605,27 @@ void Spirv_to_llvm::handle_instruction_op_f_div(Op_f_div instruction,
 void Spirv_to_llvm::handle_instruction_op_u_mod(Op_u_mod instruction,
                                                 std::size_t instruction_start_index)
 {
-#warning finish
-    throw Parser_error(instruction_start_index,
-                       instruction_start_index,
-                       "instruction not implemented: "
-                           + std::string(get_enumerant_name(instruction.get_operation())));
+    switch(stage)
+    {
+    case Stage::calculate_types:
+        break;
+    case Stage::generate_code:
+    {
+        auto &state = get_id_state(instruction.result);
+        if(!state.decorations.empty())
+            throw Parser_error(instruction_start_index,
+                               instruction_start_index,
+                               "decorations on instruction not implemented: "
+                                   + std::string(get_enumerant_name(instruction.get_operation())));
+        auto result_type = get_type(instruction.result_type, instruction_start_index);
+        state.value = Value(::LLVMBuildURem(builder.get(),
+                                            get_id_state(instruction.operand_1).value.value().value,
+                                            get_id_state(instruction.operand_2).value.value().value,
+                                            get_name(instruction.result).c_str()),
+                            result_type);
+        break;
+    }
+    }
 }
 
 void Spirv_to_llvm::handle_instruction_op_s_rem(Op_s_rem instruction,
index eea2ca9917dafaa6aa76555c6be08b27688d940a..4635b2ef0adb59076f4924b6ac0bc7c8d28b390b 100644 (file)
@@ -2,5 +2,641 @@
 
 void main()
 {
-    gl_Position = vec4(gl_VertexIndex * 0.25, gl_VertexIndex % 2 * 0.5, 0.0, 1.0);
+    const int vertex_count = 633;
+    const vec4 vertices[vertex_count] = vec4[](
+        vec4(0.262847, -0.208541, 0.0, 1),
+        vec4(0.266826, -0.211157, 0.0, 1),
+        vec4(0.264865, -0.212128, 0.0, 1),
+        vec4(0.262847, -0.208541, 0.0, 1),
+        vec4(0.268003, -0.208243, 0.0, 1),
+        vec4(0.266826, -0.211157, 0.0, 1),
+        vec4(0.259485, -0.202265, 0.0, 1),
+        vec4(0.268003, -0.208243, 0.0, 1),
+        vec4(0.262847, -0.208541, 0.0, 1),
+        vec4(0.259485, -0.202265, 0.0, 1),
+        vec4(0.268395, -0.203386, 0.0, 1),
+        vec4(0.268003, -0.208243, 0.0, 1),
+        vec4(0.259485, -0.202265, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.268395, -0.203386, 0.0, 1),
+        vec4(0.254777, -0.193298, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.259485, -0.202265, 0.0, 1),
+        vec4(0.246595, -0.178354, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.254777, -0.193298, 0.0, 1),
+        vec4(0.238861, -0.164904, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.246595, -0.178354, 0.0, 1),
+        vec4(0.231576, -0.152949, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.238861, -0.164904, 0.0, 1),
+        vec4(0.225019, -0.142898, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.231576, -0.152949, 0.0, 1),
+        vec4(0.219471, -0.135165, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.225019, -0.142898, 0.0, 1),
+        vec4(0.214932, -0.129747, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.219471, -0.135165, 0.0, 1),
+        vec4(0.211093, -0.125787, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.214932, -0.129747, 0.0, 1),
+        vec4(0.207646, -0.122425, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.211093, -0.125787, 0.0, 1),
+        vec4(0.207646, -0.122425, 0.0, 1),
+        vec4(0.319337, -0.125376, 0.0, 1),
+        vec4(0.268395, -0.125376, 0.0, 1),
+        vec4(0.207646, -0.122425, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.319337, -0.125376, 0.0, 1),
+        vec4(0.204592, -0.119660, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.207646, -0.122425, 0.0, 1),
+        vec4(0.202042, -0.117381, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.204592, -0.119660, 0.0, 1),
+        vec4(0.200109, -0.115476, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.202042, -0.117381, 0.0, 1),
+        vec4(0.198792, -0.113944, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.200109, -0.115476, 0.0, 1),
+        vec4(0.197951, -0.112449, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.198792, -0.113944, 0.0, 1),
+        vec4(0.197447, -0.110656, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.197951, -0.112449, 0.0, 1),
+        vec4(0.197279, -0.108564, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.197447, -0.110656, 0.0, 1),
+        vec4(0.197503, -0.106845, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.197279, -0.108564, 0.0, 1),
+        vec4(0.198175, -0.105276, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.197503, -0.106845, 0.0, 1),
+        vec4(0.199296, -0.103856, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.198175, -0.105276, 0.0, 1),
+        vec4(0.226028, -0.103856, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.199296, -0.103856, 0.0, 1),
+        vec4(0.226028, 0.098565, 0.0, 1),
+        vec4(0.268395, -0.103856, 0.0, 1),
+        vec4(0.226028, -0.103856, 0.0, 1),
+        vec4(0.268395, -0.103856, 0.0, 1),
+        vec4(0.319337, -0.103856, 0.0, 1),
+        vec4(0.226028, -0.103856, 0.0, 1),
+        vec4(0.226028, 0.098565, 0.0, 1),
+        vec4(0.268395, 0.088477, 0.0, 1),
+        vec4(0.268395, -0.103856, 0.0, 1),
+        vec4(0.226028, 0.098565, 0.0, 1),
+        vec4(0.269068, 0.107643, 0.0, 1),
+        vec4(0.268395, 0.088477, 0.0, 1),
+        vec4(0.231016, 0.146013, 0.0, 1),
+        vec4(0.269068, 0.107643, 0.0, 1),
+        vec4(0.226028, 0.098565, 0.0, 1),
+        vec4(0.231016, 0.146013, 0.0, 1),
+        vec4(0.271085, 0.122999, 0.0, 1),
+        vec4(0.269068, 0.107643, 0.0, 1),
+        vec4(0.231016, 0.146013, 0.0, 1),
+        vec4(0.274448, 0.134543, 0.0, 1),
+        vec4(0.271085, 0.122999, 0.0, 1),
+        vec4(0.315021, 0.138541, 0.0, 1),
+        vec4(0.331442, 0.132862, 0.0, 1),
+        vec4(0.324885, 0.125464, 0.0, 1),
+        vec4(0.315021, 0.138541, 0.0, 1),
+        vec4(0.313957, 0.161256, 0.0, 1),
+        vec4(0.331442, 0.132862, 0.0, 1),
+        vec4(0.231016, 0.146013, 0.0, 1),
+        vec4(0.279379, 0.142576, 0.0, 1),
+        vec4(0.274448, 0.134543, 0.0, 1),
+        vec4(0.304934, 0.146386, 0.0, 1),
+        vec4(0.313957, 0.161256, 0.0, 1),
+        vec4(0.315021, 0.138541, 0.0, 1),
+        vec4(0.231016, 0.146013, 0.0, 1),
+        vec4(0.286104, 0.147395, 0.0, 1),
+        vec4(0.279379, 0.142576, 0.0, 1),
+        vec4(0.245979, 0.174482, 0.0, 1),
+        vec4(0.286104, 0.147395, 0.0, 1),
+        vec4(0.231016, 0.146013, 0.0, 1),
+        vec4(0.294622, 0.149002, 0.0, 1),
+        vec4(0.313957, 0.161256, 0.0, 1),
+        vec4(0.304934, 0.146386, 0.0, 1),
+        vec4(0.245979, 0.174482, 0.0, 1),
+        vec4(0.294622, 0.149002, 0.0, 1),
+        vec4(0.286104, 0.147395, 0.0, 1),
+        vec4(0.245979, 0.174482, 0.0, 1),
+        vec4(0.313957, 0.161256, 0.0, 1),
+        vec4(0.294622, 0.149002, 0.0, 1),
+        vec4(0.245979, 0.174482, 0.0, 1),
+        vec4(0.293782, 0.178293, 0.0, 1),
+        vec4(0.313957, 0.161256, 0.0, 1),
+        vec4(0.270917, 0.183971, 0.0, 1),
+        vec4(0.293782, 0.178293, 0.0, 1),
+        vec4(0.245979, 0.174482, 0.0, 1),
+        vec4(0.071158, -0.128851, 0.0, 1),
+        vec4(0.100720, -0.130719, 0.0, 1),
+        vec4(0.089848, -0.131429, 0.0, 1),
+        vec4(0.071158, -0.128851, 0.0, 1),
+        vec4(0.111143, -0.128589, 0.0, 1),
+        vec4(0.100720, -0.130719, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.111143, -0.128589, 0.0, 1),
+        vec4(0.071158, -0.128851, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.121119, -0.125040, 0.0, 1),
+        vec4(0.111143, -0.128589, 0.0, 1),
+        vec4(0.142582, -0.121640, 0.0, 1),
+        vec4(0.152390, -0.125376, 0.0, 1),
+        vec4(0.146842, -0.125376, 0.0, 1),
+        vec4(0.142582, -0.121640, 0.0, 1),
+        vec4(0.154407, -0.033917, 0.0, 1),
+        vec4(0.152390, -0.125376, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.129581, -0.121491, 0.0, 1),
+        vec4(0.121119, -0.125040, 0.0, 1),
+        vec4(0.139893, -0.119398, 0.0, 1),
+        vec4(0.154407, -0.033917, 0.0, 1),
+        vec4(0.142582, -0.121640, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.135465, -0.119361, 0.0, 1),
+        vec4(0.129581, -0.121491, 0.0, 1),
+        vec4(0.040672, -0.108228, 0.0, 1),
+        vec4(0.080629, -0.115214, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.080629, -0.115214, 0.0, 1),
+        vec4(0.091361, -0.116634, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.091361, -0.116634, 0.0, 1),
+        vec4(0.135465, -0.119361, 0.0, 1),
+        vec4(0.054766, -0.121117, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.154407, -0.033917, 0.0, 1),
+        vec4(0.139893, -0.119398, 0.0, 1),
+        vec4(0.091361, -0.116634, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.135465, -0.119361, 0.0, 1),
+        vec4(0.091361, -0.116634, 0.0, 1),
+        vec4(0.104811, -0.114542, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.104811, -0.114542, 0.0, 1),
+        vec4(0.116243, -0.108265, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.116243, -0.108265, 0.0, 1),
+        vec4(0.125658, -0.097804, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.125658, -0.097804, 0.0, 1),
+        vec4(0.133616, -0.082337, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.133616, -0.082337, 0.0, 1),
+        vec4(0.154407, -0.033917, 0.0, 1),
+        vec4(0.138772, -0.118651, 0.0, 1),
+        vec4(0.040672, -0.108228, 0.0, 1),
+        vec4(0.071298, -0.110955, 0.0, 1),
+        vec4(0.080629, -0.115214, 0.0, 1),
+        vec4(0.040672, -0.108228, 0.0, 1),
+        vec4(0.063368, -0.103856, 0.0, 1),
+        vec4(0.071298, -0.110955, 0.0, 1),
+        vec4(0.029884, -0.091303, 0.0, 1),
+        vec4(0.063368, -0.103856, 0.0, 1),
+        vec4(0.040672, -0.108228, 0.0, 1),
+        vec4(0.029884, -0.091303, 0.0, 1),
+        vec4(0.057344, -0.094516, 0.0, 1),
+        vec4(0.063368, -0.103856, 0.0, 1),
+        vec4(0.029884, -0.091303, 0.0, 1),
+        vec4(0.053729, -0.083532, 0.0, 1),
+        vec4(0.057344, -0.094516, 0.0, 1),
+        vec4(0.023411, -0.071465, 0.0, 1),
+        vec4(0.053729, -0.083532, 0.0, 1),
+        vec4(0.029884, -0.091303, 0.0, 1),
+        vec4(0.023411, -0.071465, 0.0, 1),
+        vec4(0.052524, -0.070904, 0.0, 1),
+        vec4(0.053729, -0.083532, 0.0, 1),
+        vec4(0.140677, -0.061041, 0.0, 1),
+        vec4(0.154407, -0.033917, 0.0, 1),
+        vec4(0.133616, -0.082337, 0.0, 1),
+        vec4(0.021253, -0.048712, 0.0, 1),
+        vec4(0.052524, -0.070904, 0.0, 1),
+        vec4(0.023411, -0.071465, 0.0, 1),
+        vec4(0.021253, -0.048712, 0.0, 1),
+        vec4(0.054934, -0.052971, 0.0, 1),
+        vec4(0.052524, -0.070904, 0.0, 1),
+        vec4(0.146842, -0.033917, 0.0, 1),
+        vec4(0.154407, -0.033917, 0.0, 1),
+        vec4(0.140677, -0.061041, 0.0, 1),
+        vec4(0.021253, -0.048712, 0.0, 1),
+        vec4(0.062163, -0.037728, 0.0, 1),
+        vec4(0.054934, -0.052971, 0.0, 1),
+        vec4(0.022738, -0.030554, 0.0, 1),
+        vec4(0.062163, -0.037728, 0.0, 1),
+        vec4(0.021253, -0.048712, 0.0, 1),
+        vec4(0.022738, -0.030554, 0.0, 1),
+        vec4(0.074212, -0.025174, 0.0, 1),
+        vec4(0.062163, -0.037728, 0.0, 1),
+        vec4(0.027194, -0.013742, 0.0, 1),
+        vec4(0.074212, -0.025174, 0.0, 1),
+        vec4(0.022738, -0.030554, 0.0, 1),
+        vec4(0.027194, -0.013742, 0.0, 1),
+        vec4(0.128684, 0.017865, 0.0, 1),
+        vec4(0.074212, -0.025174, 0.0, 1),
+        vec4(0.034619, 0.001725, 0.0, 1),
+        vec4(0.128684, 0.017865, 0.0, 1),
+        vec4(0.027194, -0.013742, 0.0, 1),
+        vec4(0.045631, 0.016744, 0.0, 1),
+        vec4(0.128684, 0.017865, 0.0, 1),
+        vec4(0.034619, 0.001725, 0.0, 1),
+        vec4(0.060846, 0.032212, 0.0, 1),
+        vec4(0.128684, 0.017865, 0.0, 1),
+        vec4(0.045631, 0.016744, 0.0, 1),
+        vec4(0.060846, 0.032212, 0.0, 1),
+        vec4(0.142386, 0.030007, 0.0, 1),
+        vec4(0.128684, 0.017865, 0.0, 1),
+        vec4(0.060846, 0.032212, 0.0, 1),
+        vec4(0.153230, 0.042224, 0.0, 1),
+        vec4(0.142386, 0.030007, 0.0, 1),
+        vec4(0.080265, 0.048127, 0.0, 1),
+        vec4(0.153230, 0.042224, 0.0, 1),
+        vec4(0.060846, 0.032212, 0.0, 1),
+        vec4(0.080265, 0.048127, 0.0, 1),
+        vec4(0.161216, 0.054516, 0.0, 1),
+        vec4(0.153230, 0.042224, 0.0, 1),
+        vec4(0.109518, 0.070320, 0.0, 1),
+        vec4(0.161216, 0.054516, 0.0, 1),
+        vec4(0.080265, 0.048127, 0.0, 1),
+        vec4(0.109518, 0.070320, 0.0, 1),
+        vec4(0.166680, 0.067555, 0.0, 1),
+        vec4(0.161216, 0.054516, 0.0, 1),
+        vec4(0.109518, 0.070320, 0.0, 1),
+        vec4(0.169959, 0.082014, 0.0, 1),
+        vec4(0.166680, 0.067555, 0.0, 1),
+        vec4(0.124089, 0.084891, 0.0, 1),
+        vec4(0.169959, 0.082014, 0.0, 1),
+        vec4(0.109518, 0.070320, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.029828, 0.075027, 0.0, 1),
+        vec4(0.021758, 0.075027, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.035544, 0.103347, 0.0, 1),
+        vec4(0.029828, 0.075027, 0.0, 1),
+        vec4(0.124089, 0.084891, 0.0, 1),
+        vec4(0.171051, 0.097892, 0.0, 1),
+        vec4(0.169959, 0.082014, 0.0, 1),
+        vec4(0.132831, 0.101703, 0.0, 1),
+        vec4(0.171051, 0.097892, 0.0, 1),
+        vec4(0.124089, 0.084891, 0.0, 1),
+        vec4(0.132831, 0.101703, 0.0, 1),
+        vec4(0.168726, 0.120159, 0.0, 1),
+        vec4(0.171051, 0.097892, 0.0, 1),
+        vec4(0.135745, 0.120757, 0.0, 1),
+        vec4(0.168726, 0.120159, 0.0, 1),
+        vec4(0.132831, 0.101703, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.041932, 0.125539, 0.0, 1),
+        vec4(0.035544, 0.103347, 0.0, 1),
+        vec4(0.135745, 0.120757, 0.0, 1),
+        vec4(0.161749, 0.140334, 0.0, 1),
+        vec4(0.168726, 0.120159, 0.0, 1),
+        vec4(0.134484, 0.134543, 0.0, 1),
+        vec4(0.161749, 0.140334, 0.0, 1),
+        vec4(0.135745, 0.120757, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.048994, 0.141604, 0.0, 1),
+        vec4(0.041932, 0.125539, 0.0, 1),
+        vec4(0.130702, 0.146312, 0.0, 1),
+        vec4(0.161749, 0.140334, 0.0, 1),
+        vec4(0.134484, 0.134543, 0.0, 1),
+        vec4(0.130702, 0.146312, 0.0, 1),
+        vec4(0.150120, 0.158417, 0.0, 1),
+        vec4(0.161749, 0.140334, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.061155, 0.156922, 0.0, 1),
+        vec4(0.048994, 0.141604, 0.0, 1),
+        vec4(0.124397, 0.156063, 0.0, 1),
+        vec4(0.150120, 0.158417, 0.0, 1),
+        vec4(0.130702, 0.146312, 0.0, 1),
+        vec4(0.115963, 0.163348, 0.0, 1),
+        vec4(0.150120, 0.158417, 0.0, 1),
+        vec4(0.124397, 0.156063, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.035264, 0.172763, 0.0, 1),
+        vec4(0.061155, 0.156922, 0.0, 1),
+        vec4(0.035264, 0.172763, 0.0, 1),
+        vec4(0.039915, 0.171867, 0.0, 1),
+        vec4(0.061155, 0.156922, 0.0, 1),
+        vec4(0.039915, 0.171867, 0.0, 1),
+        vec4(0.076118, 0.166113, 0.0, 1),
+        vec4(0.061155, 0.156922, 0.0, 1),
+        vec4(0.115963, 0.163348, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.150120, 0.158417, 0.0, 1),
+        vec4(0.105791, 0.167719, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.115963, 0.163348, 0.0, 1),
+        vec4(0.039915, 0.171867, 0.0, 1),
+        vec4(0.093883, 0.169177, 0.0, 1),
+        vec4(0.076118, 0.166113, 0.0, 1),
+        vec4(0.093883, 0.169177, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.105791, 0.167719, 0.0, 1),
+        vec4(0.039915, 0.171867, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.093883, 0.169177, 0.0, 1),
+        vec4(0.045071, 0.172539, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.039915, 0.171867, 0.0, 1),
+        vec4(0.053813, 0.174557, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.045071, 0.172539, 0.0, 1),
+        vec4(0.053813, 0.174557, 0.0, 1),
+        vec4(0.118513, 0.181132, 0.0, 1),
+        vec4(0.135241, 0.172614, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.031397, 0.175453, 0.0, 1),
+        vec4(0.035264, 0.172763, 0.0, 1),
+        vec4(0.066142, 0.177919, 0.0, 1),
+        vec4(0.118513, 0.181132, 0.0, 1),
+        vec4(0.053813, 0.174557, 0.0, 1),
+        vec4(0.021758, 0.179936, 0.0, 1),
+        vec4(0.028314, 0.179936, 0.0, 1),
+        vec4(0.031397, 0.175453, 0.0, 1),
+        vec4(0.079312, 0.181281, 0.0, 1),
+        vec4(0.118513, 0.181132, 0.0, 1),
+        vec4(0.066142, 0.177919, 0.0, 1),
+        vec4(0.079312, 0.181281, 0.0, 1),
+        vec4(0.099935, 0.183971, 0.0, 1),
+        vec4(0.118513, 0.181132, 0.0, 1),
+        vec4(0.090576, 0.183299, 0.0, 1),
+        vec4(0.099935, 0.183971, 0.0, 1),
+        vec4(0.079312, 0.181281, 0.0, 1),
+        vec4(-0.131375, -0.127057, 0.0, 1),
+        vec4(-0.078668, -0.128701, 0.0, 1),
+        vec4(-0.102318, -0.132101, 0.0, 1),
+        vec4(-0.131375, -0.127057, 0.0, 1),
+        vec4(-0.058830, -0.118502, 0.0, 1),
+        vec4(-0.078668, -0.128701, 0.0, 1),
+        vec4(-0.156678, -0.111926, 0.0, 1),
+        vec4(-0.058830, -0.118502, 0.0, 1),
+        vec4(-0.131375, -0.127057, 0.0, 1),
+        vec4(-0.156678, -0.111926, 0.0, 1),
+        vec4(-0.042802, -0.101503, 0.0, 1),
+        vec4(-0.058830, -0.118502, 0.0, 1),
+        vec4(-0.178226, -0.086708, 0.0, 1),
+        vec4(-0.143060, -0.099298, 0.0, 1),
+        vec4(-0.156678, -0.111926, 0.0, 1),
+        vec4(-0.143060, -0.099298, 0.0, 1),
+        vec4(-0.116945, -0.107891, 0.0, 1),
+        vec4(-0.156678, -0.111926, 0.0, 1),
+        vec4(-0.116945, -0.107891, 0.0, 1),
+        vec4(-0.042802, -0.101503, 0.0, 1),
+        vec4(-0.156678, -0.111926, 0.0, 1),
+        vec4(-0.102878, -0.106023, 0.0, 1),
+        vec4(-0.042802, -0.101503, 0.0, 1),
+        vec4(-0.116945, -0.107891, 0.0, 1),
+        vec4(-0.091614, -0.100419, 0.0, 1),
+        vec4(-0.042802, -0.101503, 0.0, 1),
+        vec4(-0.102878, -0.106023, 0.0, 1),
+        vec4(-0.091614, -0.100419, 0.0, 1),
+        vec4(-0.030417, -0.077629, 0.0, 1),
+        vec4(-0.042802, -0.101503, 0.0, 1),
+        vec4(-0.083152, -0.091079, 0.0, 1),
+        vec4(-0.030417, -0.077629, 0.0, 1),
+        vec4(-0.091614, -0.100419, 0.0, 1),
+        vec4(-0.178226, -0.086708, 0.0, 1),
+        vec4(-0.160881, -0.073519, 0.0, 1),
+        vec4(-0.143060, -0.099298, 0.0, 1),
+        vec4(-0.076707, -0.076882, 0.0, 1),
+        vec4(-0.030417, -0.077629, 0.0, 1),
+        vec4(-0.083152, -0.091079, 0.0, 1),
+        vec4(-0.194618, -0.053195, 0.0, 1),
+        vec4(-0.160881, -0.073519, 0.0, 1),
+        vec4(-0.178226, -0.086708, 0.0, 1),
+        vec4(-0.076707, -0.076882, 0.0, 1),
+        vec4(-0.021506, -0.046806, 0.0, 1),
+        vec4(-0.030417, -0.077629, 0.0, 1),
+        vec4(-0.071495, -0.056707, 0.0, 1),
+        vec4(-0.021506, -0.046806, 0.0, 1),
+        vec4(-0.076707, -0.076882, 0.0, 1),
+        vec4(-0.194618, -0.053195, 0.0, 1),
+        vec4(-0.170408, -0.030554, 0.0, 1),
+        vec4(-0.160881, -0.073519, 0.0, 1),
+        vec4(-0.067516, -0.030554, 0.0, 1),
+        vec4(-0.021506, -0.046806, 0.0, 1),
+        vec4(-0.071495, -0.056707, 0.0, 1),
+        vec4(-0.204453, -0.013182, 0.0, 1),
+        vec4(-0.170408, -0.030554, 0.0, 1),
+        vec4(-0.194618, -0.053195, 0.0, 1),
+        vec4(-0.067516, -0.030554, 0.0, 1),
+        vec4(-0.016070, -0.009035, 0.0, 1),
+        vec4(-0.021506, -0.046806, 0.0, 1),
+        vec4(-0.204453, -0.013182, 0.0, 1),
+        vec4(-0.067516, -0.030554, 0.0, 1),
+        vec4(-0.170408, -0.030554, 0.0, 1),
+        vec4(-0.204453, -0.013182, 0.0, 1),
+        vec4(-0.016070, -0.009035, 0.0, 1),
+        vec4(-0.067516, -0.030554, 0.0, 1),
+        vec4(-0.207731, 0.033333, 0.0, 1),
+        vec4(-0.171417, -0.009035, 0.0, 1),
+        vec4(-0.204453, -0.013182, 0.0, 1),
+        vec4(-0.171417, -0.009035, 0.0, 1),
+        vec4(-0.016070, -0.009035, 0.0, 1),
+        vec4(-0.204453, -0.013182, 0.0, 1),
+        vec4(-0.207731, 0.033333, 0.0, 1),
+        vec4(-0.170016, 0.017903, 0.0, 1),
+        vec4(-0.171417, -0.009035, 0.0, 1),
+        vec4(-0.207731, 0.033333, 0.0, 1),
+        vec4(-0.167157, 0.042224, 0.0, 1),
+        vec4(-0.170016, 0.017903, 0.0, 1),
+        vec4(-0.204901, 0.076335, 0.0, 1),
+        vec4(-0.167157, 0.042224, 0.0, 1),
+        vec4(-0.207731, 0.033333, 0.0, 1),
+        vec4(-0.204901, 0.076335, 0.0, 1),
+        vec4(-0.162842, 0.063931, 0.0, 1),
+        vec4(-0.167157, 0.042224, 0.0, 1),
+        vec4(-0.204901, 0.076335, 0.0, 1),
+        vec4(-0.157294, 0.082612, 0.0, 1),
+        vec4(-0.162842, 0.063931, 0.0, 1),
+        vec4(-0.026634, 0.090046, 0.0, 1),
+        vec4(-0.006487, 0.071665, 0.0, 1),
+        vec4(-0.014557, 0.066957, 0.0, 1),
+        vec4(-0.026634, 0.090046, 0.0, 1),
+        vec4(-0.018256, 0.105140, 0.0, 1),
+        vec4(-0.006487, 0.071665, 0.0, 1),
+        vec4(-0.196411, 0.112986, 0.0, 1),
+        vec4(-0.157294, 0.082612, 0.0, 1),
+        vec4(-0.204901, 0.076335, 0.0, 1),
+        vec4(-0.196411, 0.112986, 0.0, 1),
+        vec4(-0.150737, 0.097855, 0.0, 1),
+        vec4(-0.157294, 0.082612, 0.0, 1),
+        vec4(-0.038655, 0.108204, 0.0, 1),
+        vec4(-0.018256, 0.105140, 0.0, 1),
+        vec4(-0.026634, 0.090046, 0.0, 1),
+        vec4(-0.196411, 0.112986, 0.0, 1),
+        vec4(-0.143172, 0.109661, 0.0, 1),
+        vec4(-0.150737, 0.097855, 0.0, 1),
+        vec4(-0.038655, 0.108204, 0.0, 1),
+        vec4(-0.032715, 0.132937, 0.0, 1),
+        vec4(-0.018256, 0.105140, 0.0, 1),
+        vec4(-0.050620, 0.121429, 0.0, 1),
+        vec4(-0.032715, 0.132937, 0.0, 1),
+        vec4(-0.038655, 0.108204, 0.0, 1),
+        vec4(-0.196411, 0.112986, 0.0, 1),
+        vec4(-0.135074, 0.118777, 0.0, 1),
+        vec4(-0.143172, 0.109661, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.135074, 0.118777, 0.0, 1),
+        vec4(-0.196411, 0.112986, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.126920, 0.125950, 0.0, 1),
+        vec4(-0.135074, 0.118777, 0.0, 1),
+        vec4(-0.063257, 0.130396, 0.0, 1),
+        vec4(-0.032715, 0.132937, 0.0, 1),
+        vec4(-0.050620, 0.121429, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.118710, 0.131181, 0.0, 1),
+        vec4(-0.126920, 0.125950, 0.0, 1),
+        vec4(-0.077295, 0.135776, 0.0, 1),
+        vec4(-0.032715, 0.132937, 0.0, 1),
+        vec4(-0.063257, 0.130396, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.110332, 0.134730, 0.0, 1),
+        vec4(-0.118710, 0.131181, 0.0, 1),
+        vec4(-0.077295, 0.135776, 0.0, 1),
+        vec4(-0.049863, 0.155054, 0.0, 1),
+        vec4(-0.032715, 0.132937, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.101673, 0.136859, 0.0, 1),
+        vec4(-0.110332, 0.134730, 0.0, 1),
+        vec4(-0.092735, 0.137569, 0.0, 1),
+        vec4(-0.049863, 0.155054, 0.0, 1),
+        vec4(-0.077295, 0.135776, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.092735, 0.137569, 0.0, 1),
+        vec4(-0.101673, 0.136859, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.049863, 0.155054, 0.0, 1),
+        vec4(-0.092735, 0.137569, 0.0, 1),
+        vec4(-0.163291, 0.165889, 0.0, 1),
+        vec4(-0.049863, 0.155054, 0.0, 1),
+        vec4(-0.182261, 0.143285, 0.0, 1),
+        vec4(-0.163291, 0.165889, 0.0, 1),
+        vec4(-0.069253, 0.171119, 0.0, 1),
+        vec4(-0.049863, 0.155054, 0.0, 1),
+        vec4(-0.140342, 0.179451, 0.0, 1),
+        vec4(-0.069253, 0.171119, 0.0, 1),
+        vec4(-0.163291, 0.165889, 0.0, 1),
+        vec4(-0.140342, 0.179451, 0.0, 1),
+        vec4(-0.090437, 0.180758, 0.0, 1),
+        vec4(-0.069253, 0.171119, 0.0, 1),
+        vec4(-0.113414, 0.183971, 0.0, 1),
+        vec4(-0.090437, 0.180758, 0.0, 1),
+        vec4(-0.140342, 0.179451, 0.0, 1),
+        vec4(-0.518424, -0.153621, 0.0, 1),
+        vec4(-0.491860, -0.209513, 0.0, 1),
+        vec4(-0.515398, -0.267945, 0.0, 1),
+        vec4(-0.491860, -0.209513, 0.0, 1),
+        vec4(-0.482866, -0.224233, 0.0, 1),
+        vec4(-0.515398, -0.267945, 0.0, 1),
+        vec4(-0.482866, -0.224233, 0.0, 1),
+        vec4(-0.470172, -0.232826, 0.0, 1),
+        vec4(-0.515398, -0.267945, 0.0, 1),
+        vec4(-0.470172, -0.232826, 0.0, 1),
+        vec4(-0.451259, -0.237982, 0.0, 1),
+        vec4(-0.515398, -0.267945, 0.0, 1),
+        vec4(-0.451259, -0.237982, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.515398, -0.267945, 0.0, 1),
+        vec4(-0.451259, -0.237982, 0.0, 1),
+        vec4(-0.426124, -0.239700, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.426124, -0.239700, 0.0, 1),
+        vec4(-0.398888, -0.239700, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.398888, -0.239700, 0.0, 1),
+        vec4(-0.347442, -0.239700, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.347442, -0.239700, 0.0, 1),
+        vec4(-0.320206, -0.239700, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.320206, -0.239700, 0.0, 1),
+        vec4(-0.294791, -0.238019, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.294791, -0.238019, 0.0, 1),
+        vec4(-0.275709, -0.232975, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.275709, -0.232975, 0.0, 1),
+        vec4(-0.262960, -0.224569, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.262960, -0.224569, 0.0, 1),
+        vec4(-0.254021, -0.209961, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.254021, -0.209961, 0.0, 1),
+        vec4(-0.227906, -0.153621, 0.0, 1),
+        vec4(-0.230932, -0.267945, 0.0, 1),
+        vec4(-0.398888, 0.096547, 0.0, 1),
+        vec4(-0.347442, -0.239700, 0.0, 1),
+        vec4(-0.398888, -0.239700, 0.0, 1),
+        vec4(-0.398888, 0.096547, 0.0, 1),
+        vec4(-0.347442, 0.103945, 0.0, 1),
+        vec4(-0.347442, -0.239700, 0.0, 1),
+        vec4(-0.246372, -0.186312, 0.0, 1),
+        vec4(-0.227906, -0.153621, 0.0, 1),
+        vec4(-0.254021, -0.209961, 0.0, 1),
+        vec4(-0.518424, -0.153621, 0.0, 1),
+        vec4(-0.499678, -0.185976, 0.0, 1),
+        vec4(-0.491860, -0.209513, 0.0, 1),
+        vec4(-0.240011, -0.153621, 0.0, 1),
+        vec4(-0.227906, -0.153621, 0.0, 1),
+        vec4(-0.246372, -0.186312, 0.0, 1),
+        vec4(-0.518424, -0.153621, 0.0, 1),
+        vec4(-0.506319, -0.153621, 0.0, 1),
+        vec4(-0.499678, -0.185976, 0.0, 1),
+        vec4(-0.399785, 0.121691, 0.0, 1),
+        vec4(-0.347442, 0.103945, 0.0, 1),
+        vec4(-0.398888, 0.096547, 0.0, 1),
+        vec4(-0.399785, 0.121691, 0.0, 1),
+        vec4(-0.346489, 0.125689, 0.0, 1),
+        vec4(-0.347442, 0.103945, 0.0, 1),
+        vec4(-0.402475, 0.139736, 0.0, 1),
+        vec4(-0.346489, 0.125689, 0.0, 1),
+        vec4(-0.399785, 0.121691, 0.0, 1),
+        vec4(-0.402475, 0.139736, 0.0, 1),
+        vec4(-0.343631, 0.141604, 0.0, 1),
+        vec4(-0.346489, 0.125689, 0.0, 1),
+        vec4(-0.406958, 0.150683, 0.0, 1),
+        vec4(-0.343631, 0.141604, 0.0, 1),
+        vec4(-0.402475, 0.139736, 0.0, 1),
+        vec4(-0.406958, 0.150683, 0.0, 1),
+        vec4(-0.338868, 0.151692, 0.0, 1),
+        vec4(-0.343631, 0.141604, 0.0, 1),
+        vec4(-0.414916, 0.157146, 0.0, 1),
+        vec4(-0.338868, 0.151692, 0.0, 1),
+        vec4(-0.406958, 0.150683, 0.0, 1),
+        vec4(-0.414916, 0.157146, 0.0, 1),
+        vec4(-0.330630, 0.157894, 0.0, 1),
+        vec4(-0.338868, 0.151692, 0.0, 1),
+        vec4(-0.428029, 0.161742, 0.0, 1),
+        vec4(-0.330630, 0.157894, 0.0, 1),
+        vec4(-0.414916, 0.157146, 0.0, 1),
+        vec4(-0.428029, 0.161742, 0.0, 1),
+        vec4(-0.317348, 0.162153, 0.0, 1),
+        vec4(-0.330630, 0.157894, 0.0, 1),
+        vec4(-0.446299, 0.164469, 0.0, 1),
+        vec4(-0.317348, 0.162153, 0.0, 1),
+        vec4(-0.428029, 0.161742, 0.0, 1),
+        vec4(-0.446299, 0.164469, 0.0, 1),
+        vec4(-0.299022, 0.164469, 0.0, 1),
+        vec4(-0.317348, 0.162153, 0.0, 1),
+        vec4(-0.446299, 0.177246, 0.0, 1),
+        vec4(-0.299022, 0.164469, 0.0, 1),
+        vec4(-0.446299, 0.164469, 0.0, 1),
+        vec4(-0.446299, 0.177246, 0.0, 1),
+        vec4(-0.299022, 0.177246, 0.0, 1),
+        vec4(-0.299022, 0.164469, 0.0, 1)
+    );
+    gl_Position = vertices[uint(gl_VertexIndex) % vertex_count];
 }
index f786d0985abbc4e397bad2fae183aab8803e8a60..ea84248060c58320c30a483a85030023296d26a0 100644 (file)
Binary files a/test-files/tri.vert.spv and b/test-files/tri.vert.spv differ