diff --git a/Userland/Libraries/LibSoftGPU/Clipper.cpp b/Userland/Libraries/LibSoftGPU/Clipper.cpp index b8c79209e9..3fa5f4289d 100644 --- a/Userland/Libraries/LibSoftGPU/Clipper.cpp +++ b/Userland/Libraries/LibSoftGPU/Clipper.cpp @@ -76,6 +76,10 @@ FLATTEN static void clip_plane(Vector& input_list, Vector output_list.capacity()) + output_list.ensure_capacity(input_list_size * 2); + auto const* prev_vec = &input_list.data()[0]; auto is_prev_point_within_plane = point_within_plane(*prev_vec, clip_plane); @@ -84,10 +88,10 @@ FLATTEN static void clip_plane(Vector& input_list, Vector(curr_vec, clip_plane); if (is_curr_point_within_plane != is_prev_point_within_plane) - output_list.append(clip_intersection_point(*prev_vec, curr_vec, clip_plane)); + output_list.unchecked_append(clip_intersection_point(*prev_vec, curr_vec, clip_plane)); if (is_curr_point_within_plane) - output_list.append(curr_vec); + output_list.unchecked_append(curr_vec); prev_vec = &curr_vec; is_prev_point_within_plane = is_curr_point_within_plane; diff --git a/Userland/Libraries/LibSoftGPU/Device.cpp b/Userland/Libraries/LibSoftGPU/Device.cpp index aeea528f7e..749dc5180b 100644 --- a/Userland/Libraries/LibSoftGPU/Device.cpp +++ b/Userland/Libraries/LibSoftGPU/Device.cpp @@ -766,6 +766,9 @@ Device::Device(Gfx::IntSize size) { m_options.scissor_box = m_frame_buffer->rect(); m_options.viewport = m_frame_buffer->rect(); + + // Ensure we can always append 3 vertices unchecked + m_clipped_vertices.ensure_capacity(3); } GPU::DeviceInfo Device::info() const @@ -1112,9 +1115,9 @@ void Device::draw_primitives(GPU::PrimitiveType primitive_type, Vector 0)