Spec-Zone.ru › GTK 3.24

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»:

Функция render() будет вызвана, когда GtkGLArea будет готов для отрисовки своего содержимого:

Если вам необходимо инициализировать состояние 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

a GtkGLArea

Возвращает

GdkGLContext.

[transfer none]

С: 3.16

gtk_gl_area_make_current ()

void
gtk_gl_area_make_current (GtkGLArea *area);

Устанавливает GdkGLContext, используемый area , в качестве текущего для GtkGLArea.

Эта функция вызывается автоматически перед выводом сигнала “render” и обычно не требует вызова кодом приложения.

Параметры

area

a GtkGLArea

С: 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

a GtkGLArea

С: 3.16

gtk_gl_area_attach_buffers ()

void
gtk_gl_area_attach_buffers (GtkGLArea *area);

Убеждается, что буфер кадра area становится текущим для рисования и чтения, и что все необходимые буферы для area созданы и связаны с буфером кадра.

Эта функция вызывается автоматически перед выводом сигнала “render” и обычно не требует вызова кодом приложения.

Параметры

area

a GtkGLArea

С: 3.16

gtk_gl_area_set_error ()

void
gtk_gl_area_set_error (GtkGLArea *area,
                       const GError *error);

Устанавливает ошибку в области, которая будет отображена вместо рендеринга GL. Это полезно в сигнале “create-context”, если создание контекста GL завершилось ошибкой.

Параметры

area

a GtkGLArea

error

новая GError, или NULL для сброса ошибки.

[allow-none]

С: 3.16

gtk_gl_area_get_error ()

GError *
gtk_gl_area_get_error (GtkGLArea *area);

Возвращает текущую ошибку, установленную для area .

Параметры

area

a GtkGLArea

Возвращает

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

a GtkGLArea

has_alpha

TRUE для добавления компонента альфа

С: 3.16

gtk_gl_area_get_has_alpha ()

gboolean
gtk_gl_area_get_has_alpha (GtkGLArea *area);

Возвращает, имеет ли область компонент альфа.

Параметры

area

a GtkGLArea

Возвращает

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

a GtkGLArea

has_depth_buffer

TRUE для добавления буфера глубины

С: 3.16

gtk_gl_area_get_has_depth_buffer ()

gboolean
gtk_gl_area_get_has_depth_buffer (GtkGLArea *area);

Возвращает, имеет ли область буфер глубины.

Параметры

area

a GtkGLArea

Возвращает

TRUE если area имеет буфер глубины, FALSE в противном случае

С: 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

a GtkGLArea

has_stencil_buffer

TRUE для добавления буфера трафарета

С версии: 3.16

gtk_gl_area_get_has_stencil_buffer ()

gboolean
gtk_gl_area_get_has_stencil_buffer (GtkGLArea *area);

Возвращает, имеет ли область буфер трафарета.

Параметры

area

a GtkGLArea

Возвращает

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

a GtkGLArea

auto_render

булево значение

С версии: 3.16

gtk_gl_area_get_auto_render ()

gboolean
gtk_gl_area_get_auto_render (GtkGLArea *area);

Возвращает, находится ли область в режиме автоматической отрисовки.

Параметры

area

a GtkGLArea

Возвращает

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

a GtkGLArea

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

a GtkGLArea

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

a GtkGLArea

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

a GtkGLArea

Возвращает

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 ()

замыкание класса для сигнала “render”

resize ()

замыкание класса для сигнала “resize”

create_context ()

замыкание класса для сигнала “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, используемый area

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API