X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmain.c;h=185c6b4b7bd609e35cfaaa8f28cd7e77fda2e87b;hb=bd63e587efd93c11a386a5fbebe21ea5adbbc4cb;hp=30833db0cf7854cc1749a2c789e71a8a71506020;hpb=b4491667ccc2012b19e4cc4780fae8538cfeb874;p=geometrycompositor.git diff --git a/source/main.c b/source/main.c index 30833db..185c6b4 100644 --- a/source/main.c +++ b/source/main.c @@ -271,13 +271,11 @@ unsigned create_2d_texture() return texture; } -int create_gl_resources(Compositor *compositor, CompositedScreen *screen) +int create_gl_resources(CompositedScreen *screen) { unsigned stride; int loc; - use_gl(compositor, screen); - screen->shaders[0] = compile_shader(GL_VERTEX_SHADER, vshader_src); screen->shaders[1] = compile_shader(GL_FRAGMENT_SHADER, fshader_src); screen->shaders[2] = compile_shader(GL_FRAGMENT_SHADER, masked_fshader_src); @@ -830,7 +828,9 @@ int initialize_screen(Compositor *compositor, unsigned number) if(!initialize_gl(compositor, screen)) return 0; - if(!create_gl_resources(compositor, screen)) + use_gl(compositor, screen); + + if(!create_gl_resources(screen)) return 0; xrr_res = XRRGetScreenResources(compositor->display, screen->root); @@ -1007,7 +1007,10 @@ void process_destroy_window_event(Compositor *compositor, XDestroyWindowEvent *e if((screen = find_screen_by_root(compositor, event->event))) if((window = find_window(screen, event->window))) + { + use_gl(compositor, screen); remove_window(compositor, screen, window, 1); + } } void process_map_event(Compositor *compositor, XMapEvent *event) @@ -1192,6 +1195,11 @@ void refresh_screen(Compositor *compositor, CompositedScreen *screen) unsigned i; int use_mask; + for(i=0; inwindows; ++i) + if(screen->windows[i].map_state==IsViewable) + XDamageSubtract(compositor->display, screen->windows[i].damage, None, None); + glXWaitX(); + use_gl(compositor, screen); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, screen->framebuffer); @@ -1222,8 +1230,6 @@ void refresh_screen(Compositor *compositor, CompositedScreen *screen) glActiveTexture(GL_TEXTURE0); } - XDamageSubtract(compositor->display, window->damage, None, None); - if(window->recreate_pixmap) create_window_pixmap(compositor, screen, window); if(window->recreate_mask)