59 int2 closest_seed_texel = int2(0);
60 float minimum_squared_distance = std::numeric_limits<float>::max();
61 for (int j = -1; j <= 1; j++) {
62 for (int i = -1; i <= 1; i++) {
63 int2 offset = int2(i, j) * step_size;
67 int2 fallback = JUMP_FLOODING_NON_FLOODED_VALUE;
68 int2 jump_flooding_value = input.load_pixel_fallback(texel + offset, fallback);
71 if (jump_flooding_value == JUMP_FLOODING_NON_FLOODED_VALUE) {
77 int2 closest_seed_texel_to_neighbor = jump_flooding_value;
80 float squared_distance = math::distance_squared(float2(closest_seed_texel_to_neighbor),
83 if (squared_distance < minimum_squared_distance) {
84 minimum_squared_distance = squared_distance;
85 closest_seed_texel = closest_seed_texel_to_neighbor;
93 bool flooding_happened = minimum_squared_distance != std::numeric_limits<float>::max();
96 output.store_pixel(texel, jump_flooding_value);
122 Result *result_to_flood = &initial_flooded_result;
125 Result *result_after_flooding = &intermediate_result;
135 while (step_size != 0) {
137 std::swap(result_to_flood, result_after_flooding);
143 result_after_flooding->
release();
144 output.steal_data(*result_to_flood);