Spec-Zone.ru › GTK 3.22

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 авто-рендер Чтение/Запись
GdkGLContext * контекст Чтение
gboolean есть-альфа Чтение/Запись
gboolean есть-буфер-глубины Чтение/Запись
gboolean есть-буфер-шаблонов Чтение/Запись
gboolean использовать-es Чтение/Запись

Сигналы

GdkGLContext* создание-контекста Выполнить в конце
gboolean рендер Выполнить в конце
void изменение-размера Выполнить в конце

Типы и значения

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.

Returns

вновь созданный GtkGLArea.

[transfer full]

Since: 3.16

gtk_gl_area_get_context ()

GdkGLContext *
gtk_gl_area_get_context (GtkGLArea *area);

Извлекает GdkGLContext, используемый area .

Parameters

area

a GtkGLArea

Returns

the GdkGLContext.

[transfer none]

Since: 3.16

gtk_gl_area_make_current ()

void
gtk_gl_area_make_current (GtkGLArea *area);

Обеспечивает, что GdkGLContext, используемый area, связан с GtkGLArea.

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

Parameters

area

a GtkGLArea

Since: 3.16

gtk_gl_area_queue_render ()

void
gtk_gl_area_queue_render (GtkGLArea *area);

Помечает текущие отображаемые данные (если таковые имеются) как недействительные и ставит в очередь перерисовку виджета, гарантируя, что сигнал “render” будет генерироваться во время отрисовки.

Это необходимо только тогда, когда gtk_gl_area_set_auto_render() был вызван со значением FALSE. Поведение по умолчанию — генерировать “render” при каждой отрисовке.

Parameters

area

a GtkGLArea

Since: 3.16

gtk_gl_area_attach_buffers ()

void
gtk_gl_area_attach_buffers (GtkGLArea *area);

Обеспечивает, что объект фреймбуфера area станет текущей целью отрисовки и чтения, и что все необходимые буферы для area созданы и привязаны к фреймбуферу.

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

Parameters

area

a GtkGLArea

Since: 3.16

gtk_gl_area_set_error ()

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

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

Parameters

area

a GtkGLArea

error

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

[allow-none]

Since: 3.16

gtk_gl_area_get_error ()

GError *
gtk_gl_area_get_error (GtkGLArea *area);

Получает текущую ошибку, установленную в area .

Parameters

area

a GtkGLArea

Returns

the GError or NULL.

[nullable][transfer none]

Since: 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, альфа-канала не будет, и буфер полностью заменит все, что находится под виджетом.

Parameters

area

a GtkGLArea

has_alpha

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

Since: 3.16

gtk_gl_area_get_has_alpha ()

gboolean
gtk_gl_area_get_has_alpha (GtkGLArea *area);

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

Parameters

area

a GtkGLArea

Returns

TRUE, если area имеет компонент альфа, FALSE в противном случае

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

boolean

С: 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(). Этот режим полезен, когда сцена изменяется редко, но перерисовка занимает много времени.

Флаги: Чтение/Запись

Значение по умолчанию: TRUE

С: 3.16

Свойство “context”

  “context”                  GdkGLContext *

Контекст GdkGLContext, используемый виджетом GtkGLArea.

Виджет GtkGLArea отвечает за создание экземпляра GdkGLContext. Если вам нужно отображать буферы другого типа (глубина, маска и т. д.), используйте буферы отрисовки.

Флаги: Чтение

С: 3.16

Свойство “has-alpha”

  “has-alpha”                gboolean

Если установлено в TRUE, выделенный виджетом буфер будет иметь компонент альфа-канала, а при отрисовке на окно результат будет наложен поверх того, что находится под виджетом.

Если установлено в FALSE, альфа-канала не будет, и буфер полностью заменит всё, что находится под виджетом.

Флаги: Чтение/Запись

Значение по умолчанию: FALSE

С: 3.16

Свойство “has-depth-buffer”

  “has-depth-buffer”         gboolean

Если установлено в TRUE, виджет выделит и включит буфер глубины для целевого буфера кадра.

Флаги: Чтение/Запись

Значение по умолчанию: FALSE

С: 3.16

Свойство “has-stencil-buffer”

  “has-stencil-buffer”       gboolean

Если установлено в TRUE, виджет выделит и включит буфер маски для целевого буфера кадра.

Флаги: Чтение/Запись

Значение по умолчанию: FALSE

С: 3.16

Свойство “use-es”

  “use-es”                   gboolean

Если установлено в TRUE, виджет попытается создать GdkGLContext с использованием OpenGL ES вместо OpenGL.

См. также: gdk_gl_context_set_use_es()

Флаги: Чтение/Запись

Значение по умолчанию: FALSE

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

Флаги: Run Last

С: 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, чтобы продолжить распространение события.

Флаги: Run Last

С: 3.16

Сигнал “resize”

void
user_function (GtkGLArea *area,
               gint       width,
               gint       height,
               gpointer   user_data)

Сигнал ::resize испускается один раз при реализации виджета, а затем каждый раз, когда виджет изменяется при реализации. Это полезно для поддержания состояния GL в соответствии с размером виджета, например, для свойств камеры, которые могут зависеть от соотношения ширины и высоты.

Гарантируется, что контекст GL для области будет текущим при испускании этого сигнала.

Обработчик по умолчанию настраивает область обзора GL.

Параметры

area

объект GtkGLArea, испустивший сигнал

width

ширина области обзора

height

высота области обзора

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Run Last

С: 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.22/GtkGLArea.html

Spec-Zone.ru

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