Advertisement
Guest User

Untitled

a guest
May 30th, 2012
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdlib.h>
  2. #include <iostream>
  3. #include <SFML/Window.hpp>
  4. #include <X11/Xlib.h>
  5. #include <GL/gl.h>
  6.  
  7. bool running = true;
  8.  
  9. class RenderTask
  10. {
  11. public:
  12.     RenderTask(sf::Window& window):window(window) {}
  13.     virtual ~RenderTask() {}
  14.    
  15.     void run()
  16.     {
  17.         window.setActive();
  18.         window.setVerticalSyncEnabled(true);
  19.        
  20.         sf::Clock clock;
  21.         while (running) {
  22.            
  23.             std::cout << clock.getElapsedTime().asMilliseconds() << std::endl;  
  24.             clock.restart();
  25.            
  26.             glClear(GL_COLOR_BUFFER_BIT);
  27.             window.display();
  28.         }
  29.     }
  30.    
  31. private:
  32.     sf::Window& window;
  33. };
  34.  
  35. int main()
  36. {
  37.     XInitThreads();
  38.    
  39.     Display* display = XOpenDisplay(NULL);
  40.     if (!display) {
  41.         return EXIT_FAILURE;
  42.     }
  43.    
  44.     Window window = XCreateSimpleWindow(display, DefaultRootWindow(display),
  45.             0, 0, 1024, 768,
  46.             0, 0, 0);
  47.     XStoreName(display, window, "X11 Test");
  48.    
  49.     XMapWindow(display, window);
  50.     XFlush(display);
  51.    
  52.     Atom wmDeleteWindow = XInternAtom(display, "WM_DELETE_WINDOW", True);
  53.     XSetWMProtocols(display, window, &wmDeleteWindow, 1);
  54.    
  55.     sf::Window sfmlWindow(window);
  56.     sfmlWindow.setActive(false);
  57.    
  58.     RenderTask renderTask(sfmlWindow);
  59.     sf::Thread renderThread(&RenderTask::run, &renderTask);
  60.     renderThread.launch();
  61.    
  62.     while (running) {
  63.        
  64.         while (running && XPending(display)) {
  65.             XEvent event;
  66.             XNextEvent(display, &event);
  67.             switch (event.type) {
  68.                 case ClientMessage:
  69.                     if ((Atom)event.xclient.data.l[0] == wmDeleteWindow) {
  70.                         running = false;
  71.                     }
  72.                     break;
  73.             }
  74.         }
  75.        
  76.     }
  77.    
  78.    
  79.     renderThread.wait();
  80.     sfmlWindow.close();
  81.     XCloseDisplay(display);
  82.    
  83.     return EXIT_SUCCESS;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement