Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <iostream>
- #include <SFML/Window.hpp>
- #include <X11/Xlib.h>
- #include <GL/gl.h>
- bool running = true;
- class RenderTask
- {
- public:
- RenderTask(sf::Window& window):window(window) {}
- virtual ~RenderTask() {}
- void run()
- {
- window.setActive();
- window.setVerticalSyncEnabled(true);
- sf::Clock clock;
- while (running) {
- std::cout << clock.getElapsedTime().asMilliseconds() << std::endl;
- clock.restart();
- glClear(GL_COLOR_BUFFER_BIT);
- window.display();
- }
- }
- private:
- sf::Window& window;
- };
- int main()
- {
- XInitThreads();
- Display* display = XOpenDisplay(NULL);
- if (!display) {
- return EXIT_FAILURE;
- }
- Window window = XCreateSimpleWindow(display, DefaultRootWindow(display),
- 0, 0, 1024, 768,
- 0, 0, 0);
- XStoreName(display, window, "X11 Test");
- XMapWindow(display, window);
- XFlush(display);
- Atom wmDeleteWindow = XInternAtom(display, "WM_DELETE_WINDOW", True);
- XSetWMProtocols(display, window, &wmDeleteWindow, 1);
- sf::Window sfmlWindow(window);
- sfmlWindow.setActive(false);
- RenderTask renderTask(sfmlWindow);
- sf::Thread renderThread(&RenderTask::run, &renderTask);
- renderThread.launch();
- while (running) {
- while (running && XPending(display)) {
- XEvent event;
- XNextEvent(display, &event);
- switch (event.type) {
- case ClientMessage:
- if ((Atom)event.xclient.data.l[0] == wmDeleteWindow) {
- running = false;
- }
- break;
- }
- }
- }
- renderThread.wait();
- sfmlWindow.close();
- XCloseDisplay(display);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement