glReadPixels不起作用

lap*_*ots 1 c++ opengl

我正试图从像素中获取数据glReadPixels.它工作了一段时间.但现在它停止了工作,我不知道为什么.

我需要制作Flood fill算法.

glBegin(GL_POINTS);

    float target[3] = { 1.0, 1.0, 0.0 }; // target color
    float border[3] = { 1.0, 1.0, 1.0 }; // border color
    float clearp[3] = { 0.0, 0.0, 0.0 }; // clear color
    std::stack<pixel*> colored; // stack with pixels
    if (!stack.empty()) // stack contains first pixel
        colored.push(stack.top());

    while(!colored.empty()) {

        pixel *p = colored.top();
        glRasterPos2i(p->x, p->y); 
        glDrawPixels(1, 1, GL_RGB, GL_FLOAT, target);
        colored.pop();

        //up
        float pix[3];
        glReadPixels(p->x, p->y + 1, 1, 1, GL_RGB, GL_FLOAT, pix);
        if (!compare(pix,border) && compare(pix,clearp)) {
            pixel *pn = new pixel();
            pn->x = p->x;
            pn->y = p->y + 1;
            colored.push(pn);
        }
        //down
        glReadPixels(p->x, p->y - 1, 1, 1, GL_RGB, GL_FLOAT, pix);
        if (!compare(pix,border) && compare(pix,clearp)) {
            pixel *pn = new pixel();
            pn->x = p->x;
            pn->y = p->y - 1;
            colored.push(pn);
        }

        //left
        glReadPixels(p->x - 1, p->y, 1, 1, GL_RGB, GL_FLOAT, pix);
        if (!compare(pix,border) && compare(pix,clearp)) {
            pixel *pn = new pixel();
            pn->x = p->x - 1;
            pn->y = p->y;
            colored.push(pn);
        }

        //right
        glReadPixels(p->x + 1, p->y, 1, 1, GL_RGB, GL_FLOAT, pix);
        if (!compare(pix,border) && compare(pix,clearp)) {
            pixel *pn = new pixel();
            pn->x = p->x + 1;
            pn->y = p->y;
            colored.push(pn);
        }

    }
glEnd();
Run Code Online (Sandbox Code Playgroud)

但是数组pix不包含RGB颜色数据.它通常是这样的-1.0737418e+008

问题出在哪儿?它应该工作正常......

rad*_*al7 6

除了glBegin和之间的一组非常有限的函数之外,调用任何东西都是错误的glEnd.该列表主要是由相关的一个顶点的指定的属性的功能(例如,glVertex,glNormal,glColor,glTexCoord,等等).

因此,如果您的OpenGL实现遵循OpenGL规范,glReadPixels则应立即返回而不执行,因为在glBegin/glEnd组内调用.从你的电话周围删除那些,并glReadPixels应按预期工作.