| 
									
										
										
										
											2017-06-22 16:32:47 -04:00
										 |  |  | #define _POSIX_C_SOURCE 199309L
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <time.h>
 | 
					
						
							|  |  |  | #include <inttypes.h>
 | 
					
						
							|  |  |  | #include <wayland-server.h>
 | 
					
						
							|  |  |  | #include <wlr/backend.h>
 | 
					
						
							|  |  |  | #include <wlr/session.h>
 | 
					
						
							|  |  |  | #include <wlr/render.h>
 | 
					
						
							|  |  |  | #include <wlr/render/gles2.h>
 | 
					
						
							|  |  |  | #include <wlr/types/wlr_output.h>
 | 
					
						
							|  |  |  | #include <xkbcommon/xkbcommon.h>
 | 
					
						
							|  |  |  | #include "shared.h"
 | 
					
						
							| 
									
										
										
										
											2017-06-28 18:51:58 -04:00
										 |  |  | #include "compositor.h"
 | 
					
						
							| 
									
										
										
										
											2017-06-22 16:32:47 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct sample_state { | 
					
						
							|  |  |  | 	struct wlr_renderer *renderer; | 
					
						
							| 
									
										
										
										
											2017-06-28 18:51:58 -04:00
										 |  |  | 	struct wl_compositor_state compositor; | 
					
						
							|  |  |  | 	struct wl_shell_state shell; | 
					
						
							| 
									
										
										
										
											2017-06-22 16:32:47 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void handle_output_frame(struct output_state *output, struct timespec *ts) { | 
					
						
							|  |  |  | 	struct compositor_state *state = output->compositor; | 
					
						
							|  |  |  | 	struct sample_state *sample = state->data; | 
					
						
							|  |  |  | 	struct wlr_output *wlr_output = output->output; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	wlr_renderer_begin(sample->renderer, wlr_output); | 
					
						
							|  |  |  | 	// TODO: render surfaces
 | 
					
						
							|  |  |  | 	wlr_renderer_end(sample->renderer); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main() { | 
					
						
							|  |  |  | 	struct sample_state state = { 0 }; | 
					
						
							|  |  |  | 	struct compositor_state compositor = { 0, | 
					
						
							|  |  |  | 		.data = &state, | 
					
						
							|  |  |  | 		.output_frame_cb = handle_output_frame, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	compositor_init(&compositor); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	state.renderer = wlr_gles2_renderer_init(); | 
					
						
							| 
									
										
										
										
											2017-06-23 15:10:52 -04:00
										 |  |  | 	wl_display_init_shm(compositor.display); | 
					
						
							| 
									
										
										
										
											2017-06-28 18:51:58 -04:00
										 |  |  | 	wl_compositor_init(compositor.display, &state.compositor); | 
					
						
							|  |  |  | 	wl_shell_init(compositor.display, &state.shell); | 
					
						
							| 
									
										
										
										
											2017-06-22 16:32:47 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	compositor_run(&compositor); | 
					
						
							|  |  |  | } |