Spaces:
Sleeping
Sleeping
| static const std::string window_name = "HelloPangolinThreads"; | |
| void setup() { | |
| // create a window and bind its context to the main thread | |
| pangolin::CreateWindowAndBind(window_name, 640, 480); | |
| // enable depth | |
| glEnable(GL_DEPTH_TEST); | |
| // unset the current context from the main thread | |
| pangolin::GetBoundWindow()->RemoveCurrent(); | |
| } | |
| void run() { | |
| // fetch the context and bind it to this thread | |
| pangolin::BindToContext(window_name); | |
| // we manually need to restore the properties of the context | |
| glEnable(GL_DEPTH_TEST); | |
| // Define Projection and initial ModelView matrix | |
| pangolin::OpenGlRenderState s_cam( | |
| pangolin::ProjectionMatrix(640,480,420,420,320,240,0.2,100), | |
| pangolin::ModelViewLookAt(-2,2,-2, 0,0,0, pangolin::AxisY) | |
| ); | |
| // Create Interactive View in window | |
| pangolin::Handler3D handler(s_cam); | |
| pangolin::View& d_cam = pangolin::CreateDisplay() | |
| .SetBounds(0.0, 1.0, 0.0, 1.0, -640.0f/480.0f) | |
| .SetHandler(&handler); | |
| while( !pangolin::ShouldQuit() ) | |
| { | |
| // Clear screen and activate view to render into | |
| glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
| d_cam.Activate(s_cam); | |
| // Render OpenGL Cube | |
| pangolin::glDrawColouredCube(); | |
| // Swap frames and Process Events | |
| pangolin::FinishFrame(); | |
| } | |
| // unset the current context from the main thread | |
| pangolin::GetBoundWindow()->RemoveCurrent(); | |
| } | |
| int main( int /*argc*/, char** /*argv*/ ) | |
| { | |
| // create window and context in the main thread | |
| setup(); | |
| // use the context in a separate rendering thread | |
| std::thread render_loop; | |
| render_loop = std::thread(run); | |
| render_loop.join(); | |
| return 0; | |
| } | |