View difference between Paste ID: tRyDhkUd and 66xLYAzt
SHOW: | | - or go back to the newest paste.
1
#include <stdlib.h>
2-
#include <SFML/Graphics.hpp>
2+
3-
#include <SFML/OpenGL.hpp>
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-
	RenderTask(sf::RenderWindow& window):window(window) {}
11+
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-
	sf::RenderWindow& window; 
31+
32
	sf::Window& window; 
33
}; 
34-
int main(int argc, char **argv) 
34+
35-
{ 
35+
int main()
36
{
37
	XInitThreads(); 
38-
	sf::RenderWindow window(sf::VideoMode(1024, 768), "Test", sf::Style::Close, sf::ContextSettings(32)); 
38+
39-
	window.setActive(false); 
39+
	Display* display = XOpenDisplay(NULL); 
40
	if (!display) {
41-
	RenderTask renderTask(window); 
41+
		return EXIT_FAILURE; 
42
	}
43
	
44
	Window window = XCreateSimpleWindow(display, DefaultRootWindow(display), 
45
			0, 0, 1024, 768, 
46
			0, 0, 0); 
47-
		sf::Event event;
47+
	XStoreName(display, window, "X11 Test"); 
48-
		while (window.pollEvent(event)) {
48+
49-
			if (event.type == sf::Event::Closed)
49+
	XMapWindow(display, window); 
50-
				running = false; 
50+
	XFlush(display); 
51
	
52
	Atom wmDeleteWindow = XInternAtom(display, "WM_DELETE_WINDOW", True); 
53-
		sf::sleep(sf::milliseconds(10));
53+
	XSetWMProtocols(display, window, &wmDeleteWindow, 1); 
54
	
55
	sf::Window sfmlWindow(window);
56
	sfmlWindow.setActive(false);
57-
	window.close();
57+
58
	RenderTask renderTask(sfmlWindow); 
59-
	return 0;
59+
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
}