Как напрямую писать для отображения буфера в GTK / GDK - PullRequest
8 голосов
/ 03 января 2011

У меня есть программа, которая отображает анимацию с фиксированной частотой кадров (скажем, 30 кадров в секунду) в окне.

В настоящее время я использую SDL, но, к сожалению, в ней отсутствует интеграция с рабочим столом (например, перетаскивание), и теперьвместо этого я хочу использовать GTK.

, что я хочу сделать (при условии, что окно имеет двойную буферизацию):

1 obtain off-screen buffer
2 render my stuff to buffer
3 tell the toolkit to swap buffers
4 update window
5 repeat

Я не хочу использовать какие-либо функции, кроме базовых GDK /GTK призывает создавать и управлять окном и получать входные события.

В FAQ они предлагают использовать GdkRGB.Тем не менее, в официальной документации для GdkRGB они используют функцию gdk_draw_rgb_image(), которая устарела, на самом деле большинство функций GdkRGB.

В качестве альтернативы они предлагают использовать OpenGL.Проблема в том, что требуется некоторая необычная библиотека, например GtkGLArea, которая не является частью GTK (я не хочу зависеть от каких-либо библиотек, которые не установлены по умолчанию).Кроме того, в моей системе поддержка OpenGL в драйвере ... ограничена.

Я рассмотрел Cairo (который предлагается в качестве альтернативы для некоторых устаревших функций), но это добавило бы еще больше стандартного кода (и яподозреваю дополнительные издержки) для моей относительно простой проблемы.

1 Ответ

4 голосов
/ 08 января 2011

Лично я бы сказал, что GdkRGB - разумный выбор для вас. Это было разработано, чтобы быть простым, и его область в значительной степени в точности соответствует тому, что вы описываете. Использование устаревшего кода - это шанс - он может быть хорошим выбором, если вы хотите, чтобы что-то работало сейчас, но если вы хотите, чтобы ваш код развивался и сохранялся в будущем, вам следует рассмотреть альтернативы.

Из них Каир, вероятно, ваш лучший выбор. Там только немного больше шаблонного - вы должны взглянуть на http://cairographics.org/samples/, который имеет несколько довольно небольших и простых для понимания примеров. Одним из потенциальных преимуществ Cairo является то, что он с большей вероятностью будет ускорен аппаратно.

[правовая оговорка: я являюсь первоначальным автором GdkRGB. Печально видеть, что это устарело сейчас, но я полагаю, что оно хорошо послужило своей цели]

...