2016-05-10 2 views
0

У меня есть эти вызовы функций:Возникли проблемы с XPutImage

OSPImgBlit(&img->_obj, &win1->_obj, 0, 0, 0, 0, 640, 480); 
OSPRun(&win1->_obj, OSPWND_SWAP); 

для этих реализаций:

void OSPwnd_swap(OSPobj *obj, va_list arg) { 
    OSPwindow *wnd = (OSPwindow *) obj; 
    XdbeSwapInfo swpifo; 

    swpifo.swap_window = wnd->_wnd; 
    swpifo.swap_action = XdbeUndefined; 

    // XdbeSwapBuffers returns true on success, we return 0 on success. 
    if(XdbeSwapBuffers(wnd->_dpy->_dpy, &swpifo, 1)) { 
     OSPrint(1, "OSPwnd_swap : Window %d swapped " 
        "on connection %d", 
        wnd->_wnd, XConnectionNumber(wnd->_dpy->_dpy)); 
/*  XFlush(wnd->_dpy->_dpy); */ 
    } 
    else { 
     OSPrint(1, "OSPwnd_swap : Unable to swap window %d " 
        "on connection %d", 
        wnd->_wnd, XConnectionNumber(wnd->_dpy->_dpy)); 
    } 
} 

void OSPImgBlit(OSPobj *orig, OSPobj *dest, int x_orig, int y_orig, 
      int x_dest, int y_dest, unsigned int width, unsigned int height) { 
    OSPimage *orig_as_image = (OSPimage *) orig; 
    OSPwindow *orig_as_window = (OSPwindow *) orig; 
    OSPimage *dest_as_image = (OSPimage *) dest; 
    OSPwindow *dest_as_window = (OSPwindow *) dest; 

    enum { 
     image_to_image = 0, 
     image_to_window = 1, 
     window_to_image = 2, 
     window_to_window = 3 
    } mode = image_to_window; 

    switch(mode) { 
     case image_to_window: 
      XPutImage(dest_as_window->_dpy->_dpy, dest_as_window->_bbf, 
         dest_as_window->_gc, orig_as_image->_img, 
         x_orig, y_orig, x_dest, y_dest, width, height); 
     default:; 
    } 
} 

Весь код находится здесь: https://github.com/DJTECKING/OSPOOC.git

Мое приложение запускается правильно, но когда я пытаюсь чтобы закрыть окно, которое я создал, это случайное случайное случайное событие: - segfault - BadDrawable на X_PutI не маг - ничего (не работает кнопка закрытия на закрытие окна) - Правильно закрытое окно и приложение

Я думаю, что-то вроде я использую уже закрытое окно или освобожденного изображение, но и во всем коде я не понять, как это может произойти, любая идея?

Также XPutImage только близок к квадрату , пока я пытался скопировать все окно.

Еще один вопрос, который может быть разделен на эту тему, Я продолжаю сталкиваться с уродливыми эффектами разрыва, даже с расширением буфера Xdouble, не было ли это расширение, чтобы избежать этого?

Я не имею 10 репутации, так вот прямая ссылка на изображение: http://i.stack.imgur.com/AnlMo.png

ответ

0

Рвущие эффекты могут должному не Xdbe реализация MATE Нет разрывая эффектов под waylang на fedora22.

Segfault и BadDrawable обусловлены циклом обработки событий в OSPwnd: OSPDpyHdl. Он не останавливался, пока очередь событий не была пуста, события на закрывающем окне прибыли раньше, чем другие, как указатель мыши, вводят окно. Затем OSPDpyHdl удалял объекты перед их использованием для извлечения следующих событий. Эти события также не были обработаны до возвращения из OSPDpyHdl.

Частичный XPutImage был вызван тем, что пользователь не может получить доступ к таблице данных изображения по [x] [y] порядку , так как изображение является контурным в памяти. Итак, win -> _ data [y] обращается к каждой строке и выигрывает -> _ data [y] [x] каждый пиксель.

Проблема в том, что все изображения отправляются 60 раз в секунду, обременяя X-соединение и блокируя реактивность сервера.

Смежные вопросы