GtkGLArea
GtkGLArea — Виджет для пользовательской отрисовки с OpenGL
Функции
| GtkWidget * | gtk_gl_area_new () |
| GdkGLContext * | gtk_gl_area_get_context () |
| void | gtk_gl_area_make_current () |
| void | gtk_gl_area_queue_render () |
| void | gtk_gl_area_attach_buffers () |
| void | gtk_gl_area_set_error () |
| GError * | gtk_gl_area_get_error () |
| void | gtk_gl_area_set_has_alpha () |
| gboolean | gtk_gl_area_get_has_alpha () |
| void | gtk_gl_area_set_has_depth_buffer () |
| gboolean | gtk_gl_area_get_has_depth_buffer () |
| void | gtk_gl_area_set_has_stencil_buffer () |
| gboolean | gtk_gl_area_get_has_stencil_buffer () |
| void | gtk_gl_area_set_auto_render () |
| gboolean | gtk_gl_area_get_auto_render () |
| void | gtk_gl_area_get_required_version () |
| void | gtk_gl_area_set_required_version () |
| void | gtk_gl_area_set_use_es () |
| gboolean | gtk_gl_area_get_use_es () |
Свойства
| gboolean | auto-render | Чтение / Запись |
| GdkGLContext * | context | Чтение |
| gboolean | has-alpha | Чтение / Запись |
| gboolean | has-depth-buffer | Чтение / Запись |
| gboolean | has-stencil-buffer | Чтение / Запись |
| gboolean | use-es | Чтение / Запись |
Сигналы
| GdkGLContext* | create-context | Выполняется последним |
| gboolean | render | Выполняется последним |
| void | resize | Выполняется последним |
Типы и значения
| struct | GtkGLArea |
| struct | GtkGLAreaClass |
Иерархия объектов
GObject
╰── GInitiallyUnowned
╰── GtkWidget
╰── GtkGLArea
Реализованные интерфейсы
GtkGLArea реализует AtkImplementorIface и GtkBuildable.
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkGLArea — это виджет, позволяющий рисовать с помощью OpenGL.
GtkGLArea настраивает собственный GdkGLContext для создаваемого окна и создаёт пользовательский буфер кадра GL, на который виджет будет выполнять отрисовку GL. Он также гарантирует, что этот буфер кадра является целевым буфером GL по умолчанию при отрисовке.
Для отрисовки необходимо подключиться к сигналу «render» или переопределить виртуальную функцию GtkGLAreaClass.render() в подклассе GtkGLArea.
Виджет GtkGLArea гарантирует, что GdkGLContext связан с областью рисования виджета и он обновляется при изменении размера и положения области рисования.
Рисование с помощью GtkGLArea
Самый простой способ рисования с помощью команд OpenGL в GtkGLArea — создать экземпляр виджета и подключиться к сигналу «render»:
Функция будет вызвана, когда GtkGLArea будет готов для отрисовки своего содержимого:render()
Если вам необходимо инициализировать состояние OpenGL, например, объекты буфера или шейдеры, используйте сигнал «realize»; для очистки используйте сигнал «unrealize». Поскольку создание и инициализация GdkGLContext могут завершиться ошибкой, вам нужно будет проверять ошибки, используя gtk_gl_area_get_error(). Пример безопасной инициализации состояния GL:
// create a GtkGLArea instance GtkWidget *gl_area = gtk_gl_area_new (); // connect to the "render" signal g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL);
Если вам необходимо изменить параметры создания GdkGLContext, используйте сигнал «create-context».
Функции
gtk_gl_area_new ()
GtkWidget *
gtk_gl_area_new (void); Создаёт новый виджет GtkGLArea.
Возвращает
новый GtkGLArea
С: 3.16
gtk_gl_area_get_context ()
GdkGLContext *
gtk_gl_area_get_context (GtkGLArea *area); Возвращает GdkGLContext, используемый area .
Параметры
area |
С: 3.16
gtk_gl_area_make_current ()
void
gtk_gl_area_make_current (GtkGLArea *area); Устанавливает GdkGLContext, используемый area , в качестве текущего для GtkGLArea.
Эта функция вызывается автоматически перед выводом сигнала “render” и обычно не требует вызова кодом приложения.
Параметры
area |
С: 3.16
gtk_gl_area_queue_render ()
void
gtk_gl_area_queue_render (GtkGLArea *area); Отмечает текущие данные рендеринга (если таковые имеются) как недействительные и ставит в очередь перерисовку виджета, обеспечивая, что сигнал “render” будет выведен во время рисования.
Это требуется только в случае, если функция gtk_gl_area_set_auto_render() была вызвана со значением FALSE. По умолчанию, сигнал “render” генерируется при каждой отрисовке.
Параметры
area |
С: 3.16
gtk_gl_area_attach_buffers ()
void
gtk_gl_area_attach_buffers (GtkGLArea *area); Убеждается, что буфер кадра area становится текущим для рисования и чтения, и что все необходимые буферы для area созданы и связаны с буфером кадра.
Эта функция вызывается автоматически перед выводом сигнала “render” и обычно не требует вызова кодом приложения.
Параметры
area |
С: 3.16
gtk_gl_area_set_error ()
void gtk_gl_area_set_error (GtkGLArea *area,const GError *error);
Устанавливает ошибку в области, которая будет отображена вместо рендеринга GL. Это полезно в сигнале “create-context”, если создание контекста GL завершилось ошибкой.
Параметры
area | ||
error | новая GError, или | [allow-none] |
С: 3.16
gtk_gl_area_get_error ()
GError *
gtk_gl_area_get_error (GtkGLArea *area); Возвращает текущую ошибку, установленную для area .
Параметры
area |
Возвращает
GError или NULL.
[nullable][transfer none]
С: 3.16
gtk_gl_area_set_has_alpha ()
void gtk_gl_area_set_has_alpha (GtkGLArea *area,gboolean has_alpha);
Если has_alpha имеет значение TRUE, выделенный виджетом буфер будет иметь компонент альфа-канала, а при рендеринге в окно результат будет наложен на то, что находится под виджетом.
Если has_alpha имеет значение FALSE, альфа-канал отсутствует, и буфер полностью заменит всё, что под виджетом.
Параметры
area | ||
has_alpha |
|
С: 3.16
gtk_gl_area_get_has_alpha ()
gboolean
gtk_gl_area_get_has_alpha (GtkGLArea *area); Возвращает, имеет ли область компонент альфа.
Параметры
area |
Возвращает
TRUE если area имеет компонент альфа, FALSE в противном случае
С: 3.16
gtk_gl_area_set_has_depth_buffer ()
void gtk_gl_area_set_has_depth_buffer (GtkGLArea *area,gboolean has_depth_buffer);
Если has_depth_buffer равно TRUE, виджет выделит и включит буфер глубины для целевого буфера кадра. В противном случае буфера глубины не будет.
Параметры
area | ||
has_depth_buffer |
|
С: 3.16
gtk_gl_area_set_has_stencil_buffer ()
void gtk_gl_area_set_has_stencil_buffer (GtkGLArea *area,gboolean has_stencil_buffer);
Если has_stencil_buffer равно TRUE, виджет выделит и включит буфер трафарета для целевого буфера кадра. В противном случае его не будет.
Параметры
area | ||
has_stencil_buffer |
|
С версии: 3.16
gtk_gl_area_get_has_stencil_buffer ()
gboolean
gtk_gl_area_get_has_stencil_buffer (GtkGLArea *area); Возвращает, имеет ли область буфер трафарета.
Параметры
area |
Возвращает
TRUE если у area есть буфер трафарета, FALSE в противном случае
С версии: 3.16
gtk_gl_area_set_auto_render ()
void gtk_gl_area_set_auto_render (GtkGLArea *area,gboolean auto_render);
Если auto_render равно TRUE, сигнал “render” будет генерироваться каждый раз, когда виджет рисуется. Это значение по умолчанию и полезно, если отрисовка виджета быстрая.
Если auto_render равно FALSE, данные предыдущей отрисовки сохраняются и используются для отрисовки виджета в следующий раз, если окно не было переразмеренно. Для принудительной отрисовки необходимо вызвать gtk_gl_area_queue_render(). Этот режим полезен, когда сцена меняется редко, но требует длительного перерисовки.
Параметры
area | ||
auto_render | булево значение |
С версии: 3.16
gtk_gl_area_get_auto_render ()
gboolean
gtk_gl_area_get_auto_render (GtkGLArea *area); Возвращает, находится ли область в режиме автоматической отрисовки.
Параметры
area |
Возвращает
TRUE если area выполняет автоматическую отрисовку, FALSE в противном случае
С версии: 3.16
gtk_gl_area_get_required_version ()
void gtk_gl_area_get_required_version (GtkGLArea *area,gint *major,gint *minor);
Получает требуемую версию OpenGL, установленную с помощью gtk_gl_area_set_required_version().
Параметры
area | ||
major | место для возврата требуемой основной версии. | [out] |
minor | место для возврата требуемой дополнительной версии. | [out] |
С версии: 3.16
gtk_gl_area_set_required-version ()
void gtk_gl_area_set_required_version (GtkGLArea *area,gint major,gint minor);
Устанавливает требуемую версию OpenGL для использования при создании контекста для виджета.
Эта функция должна быть вызвана до того, как область будет реализована.
Параметры
area | ||
major | основная версия | |
minor | дополнительная версия |
С версии: 3.16
gtk_gl_area_set_use_es ()
void gtk_gl_area_set_use_es (GtkGLArea *area,gboolean use_es);
Устанавливает, должен ли area создавать контекст OpenGL или OpenGL ES.
Перед отрисовкой с помощью любого из API следует проверить возможности GdkGLContext.
Параметры
area | ||
use_es | использовать ли OpenGL или OpenGL ES |
С версии: 3.22
gtk_gl_area_get_use_es ()
gboolean
gtk_gl_area_get_use_es (GtkGLArea *area); Получает значение, установленное с помощью gtk_gl_area_set_use_es().
Параметры
area |
Возвращает
TRUE если GtkGLArea должен создать контекст OpenGL ES и FALSE в противном случае
С версии: 3.22
Типы и значения
struct GtkGLArea
struct GtkGLArea;
A GtkWidget используемый для рисования с помощью OpenGL.
С версии: 3.16
struct GtkGLAreaClass
struct GtkGLAreaClass {
gboolean (* render) (GtkGLArea *area,
GdkGLContext *context);
void (* resize) (GtkGLArea *area,
int width,
int height);
GdkGLContext * (* create_context) (GtkGLArea *area);
};
Структура GtkGLAreaClass содержит только закрытые данные.
Члены
| замыкание класса для сигнала “render” | |
| замыкание класса для сигнала “resize” | |
| замыкание класса для сигнала “create-context” |
С версии: 3.16
Подробное описание свойств
Свойство “auto-render”
“auto-render” gboolean
Если установлено в TRUE, сигнал “render” будет испускаться каждый раз, когда виджет отрисовывается. Это значение по умолчанию и полезно, если отрисовка виджета быстрая.
Если установлено в FALSE, данные из предыдущей отрисовки сохраняются и будут использоваться для отрисовки виджета в следующий раз, если окно не изменено размером. Для принудительной отрисовки необходимо вызвать gtk_gl_area_queue_render(). Этот режим полезен, когда сцена изменяется редко, но её перерисовка занимает много времени.
Владелец: GtkGLArea
Флаги: Чтение / Запись
Значение по умолчанию: ИСТИНА
С: 3.16
Свойство “context”
“context” GdkGLContext *
Контекст GdkGLContext, используемый виджетом GtkGLArea.
Виджет GtkGLArea отвечает за создание экземпляра GdkGLContext. Если вам нужно отрисовывать с другими видами буферов (маска, глубина и т. д.), используйте буферы отрисовки.
Владелец: GtkGLArea
Флаги: Чтение
С: 3.16
Свойство “has-alpha”
“has-alpha” gboolean
Если установлено в TRUE, выделенный виджетом буфер будет иметь альфа-компонент, и при отрисовке в окно результат будет наложен поверх того, что находится под виджетом.
Если установлено в FALSE, альфа-компонента не будет, и буфер полностью заменит то, что находится под виджетом.
Владелец: GtkGLArea
Флаги: Чтение / Запись
Значение по умолчанию: ЛОЖЬ
С: 3.16
Свойство “has-depth-buffer”
“has-depth-buffer” gboolean
Если установлено в TRUE, виджет выделит и включит буфер глубины для целевого буфера кадра.
Владелец: GtkGLArea
Флаги: Чтение / Запись
Значение по умолчанию: ЛОЖЬ
С: 3.16
Свойство “has-stencil-buffer”
“has-stencil-buffer” gboolean
Если установлено в TRUE, виджет выделит и включит буфер маски для целевого буфера кадра.
Владелец: GtkGLArea
Флаги: Чтение / Запись
Значение по умолчанию: ЛОЖЬ
С: 3.16
Свойство “use-es”
“use-es” gboolean
Если установлено в TRUE, виджет попытается создать GdkGLContext с использованием OpenGL ES вместо OpenGL.
См. также: gdk_gl_context_set_use_es()
Владелец: GtkGLArea
Флаги: Чтение / Запись
Значение по умолчанию: ЛОЖЬ
С: 3.22
Подробное описание сигналов
Сигнал “create-context”
GdkGLContext* user_function (GtkGLArea *area, gpointer user_data)
Сигнал ::create-context испускается при реализации виджета и позволяет переопределить способ создания контекста GL. Это полезно, когда вы хотите повторно использовать существующий контекст GL или если хотите попробовать создать разные варианты GL.
Если создание контекста завершится неудачно, обработчик сигнала может использовать gtk_gl_area_set_error() для регистрации более подробной ошибки о причинах неудачи.
Параметры
area | виджет GtkGLArea, испустивший сигнал | |
error | место для хранения информации об ошибке при неудачном создании. | [allow-none] |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Возвращаемое значение
новый созданный GdkGLContext; виджет GtkGLArea возьмёт на себя владение возвращённым значением.
[transfer full]
Флаги: Выполнение последним
С: 3.16
Сигнал “render”
gboolean user_function (GtkGLArea *area, GdkGLContext *context, gpointer user_data)
Сигнал ::render испускается каждый раз, когда содержимое GtkGLArea должно быть перерисовано.
Переменная context связана с area перед вызовом этой функции, и буферы рисуются на окно по завершении испускания.
Параметры
area | виджет GtkGLArea, испустивший сигнал | |
context | контекст GdkGLContext, используемый | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Возвращаемое значение
TRUE для остановки вызова других обработчиков для события. FALSE для дальнейшей передачи события.
Флаги: Выполнение последним
С: 3.16
Сигнал “resize”
void user_function (GtkGLArea *area, int width, int height, gpointer user_data)
Сигнал ::resize испускается один раз при реализации виджета, а затем каждый раз, когда виджет изменяется во время реализации. Это полезно для поддержания состояния GL в соответствии с размером виджета, например, для свойств камеры, которые могут зависеть от соотношения ширины и высоты.
Контекст GL для области гарантированно будет текущим при испускании этого сигнала.
Обработчик по умолчанию настраивает область просмотра GL.
Параметры
area | виджет GtkGLArea, испустивший сигнал | |
width | ширина области просмотра | |
height | высота области просмотра | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнение последним
С: 3.16
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.24/GtkGLArea.html