Spaces:
Sleeping
Sleeping
| using namespace pangolin; | |
| using namespace std; | |
| // Mesh size | |
| const int mesh_width=256; | |
| const int mesh_height=256; | |
| extern "C" void launch_kernel(float4* dVertexArray, uchar4* dColourArray, unsigned int width, unsigned int height, float time); | |
| int main( int /*argc*/, char* argv[] ) | |
| { | |
| // cudaGLSetGLDevice(0); | |
| pangolin::CreateWindowAndBind("Main",640,480); | |
| glewInit(); | |
| // 3D Mouse handler requires depth testing to be enabled | |
| glEnable(GL_DEPTH_TEST); | |
| // Create vertex and colour buffer objects and register them with CUDA | |
| GlBufferCudaPtr vertex_array( | |
| GlArrayBuffer, mesh_width*mesh_height, GL_FLOAT, 4, | |
| cudaGraphicsMapFlagsWriteDiscard, GL_STREAM_DRAW | |
| ); | |
| GlBufferCudaPtr colour_array( | |
| GlArrayBuffer, mesh_width*mesh_height, GL_UNSIGNED_BYTE, 4, | |
| cudaGraphicsMapFlagsWriteDiscard, GL_STREAM_DRAW | |
| ); | |
| // Define Camera Render Object (for view / scene browsing) | |
| pangolin::OpenGlRenderState s_cam( | |
| ProjectionMatrix(640,480,420,420,320,240,0.1,1000), | |
| ModelViewLookAt(-0,2,-2, 0,0,0, AxisY) | |
| ); | |
| const int UI_WIDTH = 180; | |
| // Add named OpenGL viewport to window and provide 3D Handler | |
| View& d_cam = pangolin::Display("cam") | |
| .SetBounds(0.0, 1.0, Attach::Pix(UI_WIDTH), 1.0, -640.0f/480.0f) | |
| .SetHandler(new Handler3D(s_cam)); | |
| // Add named Panel and bind to variables beginning 'ui' | |
| // A Panel is just a View with a default layout and input handling | |
| View& d_panel = pangolin::CreatePanel("ui") | |
| .SetBounds(0.0, 1.0, 0.0, Attach::Pix(UI_WIDTH)); | |
| // Default hooks for exiting (Esc) and fullscreen (tab). | |
| for(int frame=0; !pangolin::ShouldQuit(); ++frame) | |
| { | |
| static double time = 0; | |
| static Var<double> delta("ui.time delta", 0.001, 0, 0.005); | |
| glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
| d_cam.Activate(s_cam); | |
| glColor3f(1.0,1.0,1.0); | |
| { | |
| CudaScopedMappedPtr var(vertex_array); | |
| CudaScopedMappedPtr car(colour_array); | |
| launch_kernel((float4*)*var,(uchar4*)*car,mesh_width,mesh_height,time); | |
| time += delta; | |
| } | |
| pangolin::RenderVboCbo(vertex_array, colour_array); | |
| // Swap frames and Process Events | |
| pangolin::FinishFrame(); | |
| } | |
| return 0; | |
| } | |