使用OpenGL

时间:2017-03-28 11:01:08

标签: c++ opengl mfc glut glew

我正在尝试使用OpenGL(用于渲染)和DevIL(用于加载图像)渲染2D图像。但没有任何东西被渲染在检查错误时,我发现OpenGL在 wglMakeCurrent 调用时抛出无效操作

以下是我的初始化函数

void CImageMainView::InitializeOpenGL()
{
    m_pDC = new CClientDC(this);
    m_hDC = m_pDC->GetSafeHdc();

    SetupPixelFormat();
    m_hRC = ::wglCreateContext(m_hDC);

    BOOL ret = ::wglMakeCurrent(m_hDC, m_hRC);
    if(!ret){
        printf("Error making current context\n");
    }
    printf("wglMakeCurrent ");
    CheckGLError();
    GetOpenGLExtendedInformation();
    ::wglMakeCurrent(NULL, NULL);
    printf("wglMakeCurrent to null");
    CheckGLError();

    return;
}

SetupPixelFormat函数如下所示

void CImageMainView::SetupPixelFormat()
{
    static PIXELFORMATDESCRIPTOR pfd = 
    {
        sizeof(PIXELFORMATDESCRIPTOR),  // size of this pfd
        1,                              // version number
        PFD_DRAW_TO_WINDOW |            // support window
        PFD_SUPPORT_OPENGL |            // support OpenGL
        PFD_DOUBLEBUFFER,               // double buffered
        PFD_TYPE_RGBA,                  // RGBA type
        24,                             // 24-bit color depth
        0, 0, 0, 0, 0, 0,               // color bits ignored
        0,                              // no alpha buffer
        0,                              // shift bit ignored
        0,                              // no accumulation buffer
        0, 0, 0, 0,                     // accum bits ignored
        32,                             // 32-bit z-buffer
        0,                              // no stencil buffer
        0,                              // no auxiliary buffer
        PFD_MAIN_PLANE,                 // main layer
        0,                              // reserved
        0, 0, 0                         // layer masks ignored
    };

    m_PixelFormat = ::ChoosePixelFormat(m_hDC, &pfd);
    ::SetPixelFormat(m_hDC, m_PixelFormat, &pfd);

    return;
}

最后错误检查功能是

void CImageMainView::CheckGLError()
{

const GLenum err = glGetError();
printf("GLError: %s\n", gluErrorString(err));

}

我的应用程序中有另一个View,它使用OpenGL渲染3D内容。这可能是原因吗?

0 个答案:

没有答案