Linux图形界面开发

 

wxWidgets opengl

#include <iostream>
#include <string>
#include <cassert>
#include <cmath>

#include <wx/wx.h>
#include <wx/glcanvas.h>
#include <wx/notebook.h>
#include <wx/treectrl.h>

class GL_Window : public wxGLCanvas
{
public:

    GL_Window(wxWindow* parent,
        wxWindowID id,
        const int* attribList)
        : wxGLCanvas(parent, id, attribList)
        {
         
            m_glRC = new wxGLContext(this);
            SetCurrent(*m_glRC);
        }

    virtual ~GL_Window()
    {
    }

    void draw()
    {
      
        SetCurrent(*m_glRC);
     
        glClearColor(m_ClearColor.Red(), m_ClearColor.Green(), m_ClearColor.Blue(), m_ClearColor.Alpha());
        glClear(GL_COLOR_BUFFER_BIT);
       

        SwapBuffers();
    }

    void OnIdle(wxIdleEvent& event) {
        draw();
        event.RequestMore();
    }

    void OnSize(wxSizeEvent& event)
    {
      
    }

public:
    void setClearColor(const wxColor& color)
    {
        m_ClearColor = color;
    }
private:
    wxColor m_ClearColor;
  
    wxGLContext* m_glRC;
    DECLARE_EVENT_TABLE()
};

class MyApp : public wxApp
{
    virtual bool OnInit();
};


bool MyApp::OnInit()
{
    wxFrame* frame = new wxFrame((wxFrame*)NULL, -1,
        _("Hello GL World"), wxPoint(50, 50), wxSize(450, 340));

    wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
  
    int gl_attrib[20] =
    { WX_GL_RGBA, WX_GL_MIN_RED, 1, WX_GL_MIN_GREEN, 1,
    WX_GL_MIN_BLUE, 1, WX_GL_DEPTH_SIZE, 1,
    WX_GL_DOUBLEBUFFER,
    0 };

    wxPanel* pane1 = new wxPanel(frame, wxID_ANY);
    wxPanel* pane2 = new wxPanel(frame, wxID_ANY);
   
  
   
    sizer->Add(pane1, 1, wxEXPAND | wxALL);
    sizer->Add(pane2, 1, wxEXPAND | wxALL);

    GL_Window* MyGLCanvas1 = new GL_Window(pane1, wxID_ANY, gl_attrib);
    wxBoxSizer* sizer1 = new wxBoxSizer(wxHORIZONTAL);
    sizer1->Add(MyGLCanvas1,1,  wxEXPAND | wxALL);
    MyGLCanvas1->setClearColor(*wxBLUE);
    pane1->SetSizer(sizer1);

    GL_Window* MyGLCanvas2 = new GL_Window(pane2, wxID_ANY, gl_attrib);
    wxBoxSizer* sizer2 = new wxBoxSizer(wxHORIZONTAL);
    sizer2->Add(MyGLCanvas2, 1, wxEXPAND | wxALL);
    MyGLCanvas2->setClearColor(*wxRED);
    pane2->SetSizer(sizer2);

  
    frame->SetSizer(sizer);
    frame->SetSize(1024, 800);
    frame->Show(true);
    return true;
}

BEGIN_EVENT_TABLE(GL_Window, wxGLCanvas)
EVT_IDLE(GL_Window::OnIdle)
EVT_SIZE(GL_Window::OnSize)
END_EVENT_TABLE()

int main()
{
    MyApp* app = new MyApp;
    wxApp::SetInstance(app);

    wxEntry();
}

 

posted on 2020-09-15 15:55  客户端开发  阅读(524)  评论(0)    收藏  举报

导航