glReadPixels () возвращает странные числа (все нули или все -1.07374e + 08) - PullRequest
0 голосов
/ 10 июля 2019

Я не могу залить заливку эллипса, который я только что создал, потому что glReadPixels возвращает странные числа (либо все 0, либо все -1.07374e + 08, в зависимости от того, является ли пиксель с плавающей точкой [3] глобальной или локальной переменной).

Я попытался изменить месторасположение пикселя [3], а также изменить алгоритм заливки, чтобы он работал рекурсивно вместо очереди, оба из которых не работали.

`

void FFill(int xin, int yin, float colorin[3]) {
    float pixel[3], clearc[3];
    glReadPixels(xin, yin, 1.0, 1.0, GL_RGB, GL_FLOAT, clearc);
    glVertex2i(xin, yin);
    std::queue<vector<int>> q;
    vector<int> n = { xin, yin };
    q.push(n);
    while (!q.empty())
    {
        n = q.front();
        q.pop();
        n[0] -= 1;
        glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
        if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
        {
            glVertex2i(n[0], n[1]);
            q.push(n);
        }
        n[0] += 2;
        glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
        if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
        {
            glVertex2i(n[0], n[1]);
            q.push(n);
        }
        n[1] -= 1;
        glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
        if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
        {
            glVertex2i(n[0], n[1]);
            q.push(n);
        }
        n[1] += 2;
        glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
        if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
        {
            glVertex2i(n[0], n[1]);
            q.push(n);
        }
        n.clear();
    }
}

`

Итак, когда я запускаю этот код, я ожидаю, что он заполнит эллипс, но вместо этого он просто заполняет очередь, пока не выйдет из строя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...