OpenGL多重采样的初始化问题

OpenGL多重采样的初始化问题

首先,OpenGL中多边形反走样需要开启多重采样才能正常的反走样,否则设置无效
以下代码只需在窗口尺寸发生变化时,执行一次即可:

    glEnable(GL_POINT_SMOOTH);
    glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
    glEnable(GL_LINE_SMOOTH);
    glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
    glEnable(GL_POLYGON_SMOOTH);
    glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);        // 基于源象素alpha通道值的半透明混合函数
// 设置像素格式
int COpenGLDlg::SetWindowPixelFormat(HWND hWnd,HDC hDC)
{
    static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR),
        1,
        PFD_DRAW_TO_WINDOW |
        PFD_SUPPORT_OPENGL |
        PFD_DOUBLEBUFFER,
        PFD_TYPE_RGBA,
        24, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0,
        32, 0, 0,
        PFD_MAIN_PLANE,
        0, 0, 0, 0
    };
    int pixelformat = 14;//全屏多重采样需要的pixelformat(注意,由于本代码是嵌入到了mfc的dlg中,故而无法检测多重采样支持(该检测持需要wgl初始化之后才能检测,可是一旦初始化,则无法返回重新设置,建议采用一个检测dlg专门检测,主dlg显示内容或者采用多进程的方式检测)
    BOOL ret = SetPixelFormat(hDC, pixelformat, &pfd);
    if (ret == FALSE){//多重采样失败
        if (!(pixelformat = ChoosePixelFormat(hDC, &pfd)))//普通环境运行
        {
            MessageBox("ChoosePixelFormat failed!");
            return -1;
        }
        if (!SetPixelFormat(hDC, pixelformat, &pfd))
        {
            TRACE("SetPixelFormat failed! %d", GetLastError());
            return -2;
        }
    }

    if (!(m_hGLContext = wglCreateContext(hDC)))
    {//为OpenGL准备环境
        MessageBox("CreateContext failed!");
        return -3;
    }

    if (!wglMakeCurrent(hDC, m_hGLContext))
    {//绑定上下文
        MessageBox("MakeCurrent failed!");
        return -4;
    }
    return 0;
}

注意,只要这里int pixelformat = 14;的像素点格式能够支持,则后面多边形反走样即可开启
之前查了很多资料,都没有提到要开启多重采样
而开启多重采样的代码又无法整合到MFC里面去(需要销毁窗口,重建hDC)
现在想到了这个变通的办法,希望对大家有帮助。

OpenGL多重采样的初始化问题_第1张图片

你可能感兴趣的:(OpenGL)