Как напрямую писать в буфер отображения в GTK/GDK

У меня есть программа, которая отображает анимацию с фиксированной частотой кадров (скажем, 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 (который предлагается в качестве альтернативы некоторым устаревшим функциям), но это добавило бы еще больше стандартного кода (и я подозреваю дополнительные накладные расходы) для моей относительно простой проблемы.


person maep    schedule 03.01.2011    source источник
comment
Я подозреваю, что GTK без каких-либо вспомогательных библиотек не подходит для этой работы. Это набор инструментов пользовательского интерфейса, а не набор инструментов для рисования.   -  person ptomato    schedule 04.01.2011


Ответы (1)


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

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

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

person Raph Levien    schedule 08.01.2011