Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}