void TextureView::erode_validity_mask(void) { std::vector<bool> eroded_validity_mask(validity_mask); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { if (x == 0 || x == width - 1 || y == 0 || y == height - 1) { validity_mask[x + y * width] = false; continue; } bool invalid = !validity_mask[x + y * width]; for (int j = -1; j <= 1 && !invalid; ++j) { for (int i = -1; i <= 1 && !invalid; ++i) { int nx = x + i; int ny = y + j; if (0 <= nx && nx < width && 0 <= ny && ny < height && !validity_mask[nx + ny * width]) { eroded_validity_mask[x + y * width] = false; invalid = true; } } } } } validity_mask.swap(eroded_validity_mask); }
void TextureView::erode_validity_mask(void) { std::vector<bool> eroded_validity_mask(validity_mask); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { if (x == 0 || x == width - 1 || y == 0 || y == height - 1) { validity_mask[x + y * width] = false; continue; } if (validity_mask[x + y * width]) continue; for (int j = -1; j <= 1; ++j) { for (int i = -1; i <= 1; ++i) { int const nx = x + i; int const ny = y + j; eroded_validity_mask[nx + ny * width] = false; } } } } validity_mask.swap(eroded_validity_mask); }