【问题标题】:WxWidgets and modern opengl (3.3+)WxWidgets 和现代 opengl (3.3+)
【发布时间】:2017-04-29 22:13:50
【问题描述】:

有谁知道 WxWidgets 库是否与现代着色器风格的 openGL (3.3+) 配合得很好?我发现的所有东西似乎都在使用旧样式。我希望在我的应用程序中使用 QT 或 WxWidgets,但似乎让着色器的东西与小部件一起使用可能是一场噩梦。有人有这方面的经验吗?

【问题讨论】:

    标签: user-interface opengl wxwidgets


    【解决方案1】:

    在 wxWidgets >= 3.1 中使用 wxGLContext 和适当的核心上下文 wxGLContextAttrs 应该可以工作:

    wxGLContextAttrs cxtAttrs;
    cxtAttrs.CoreProfile().OGLVersion(3, 3).EndList();
    

    作为Ripi2 pointed out 来自pyramid sample

    //We create a wxGLContext in this constructor.
    //We do OGL initialization at OnSize().
    MyGLCanvas::MyGLCanvas(MyFrame* parent, const wxGLAttributes& canvasAttrs)
                           : wxGLCanvas(parent, canvasAttrs)
    {
        m_parent = parent;
    
        m_oglManager = NULL;
        m_winHeight = 0; // We have not been sized yet
    
        // Explicitly create a new rendering context instance for this canvas.
        wxGLContextAttrs ctxAttrs;
    #ifndef __WXMAC__
        // An impossible context, just to test IsOk()
        ctxAttrs.PlatformDefaults().OGLVersion(99, 2).EndList();
        m_oglContext = new wxGLContext(this, NULL, &ctxAttrs);
    
        if ( !m_oglContext->IsOK() )
        {
    #if wxUSE_LOGWINDOW
            wxLogMessage("Trying to set OpenGL 99.2 failed, as expected.");
    #endif // wxUSE_LOGWINDOW
            delete m_oglContext;
            ctxAttrs.Reset();
    #endif //__WXMAC__
            ctxAttrs.PlatformDefaults().CoreProfile().OGLVersion(3, 2).EndList();
            m_oglContext = new wxGLContext(this, NULL, &ctxAttrs);
    #ifndef __WXMAC__
        }
    #endif //__WXMAC__
    
        if ( !m_oglContext->IsOK() )
        {
            wxMessageBox("This sample needs an OpenGL 3.2 capable driver.\nThe app will end now.",
                         "OpenGL version error", wxOK | wxICON_INFORMATION, this);
            delete m_oglContext;
            m_oglContext = NULL;
        }
        else
        {
    #if wxUSE_LOGWINDOW
            wxLogMessage("OpenGL Core Profile 3.2 successfully set.");
    #endif // wxUSE_LOGWINDOW
        }
    
    }
    

    【讨论】:

    • 包含一个示例“金字塔”,它展示了如何将 OpenGL 3.2 与着色器一起使用。 OpenGL 3.2 是 Mac OS 接受的较低现代版本。
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多