Spec-Zone.ru › GTK 3.20

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

Свойства

gboolean авто-рендер Чтение/Запись
GdkGLContext * контекст Чтение
gboolean есть-альфа Чтение/Запись
gboolean есть-буфер-глубины Чтение/Запись
gboolean есть-буфер-маски Чтение/Запись

Сигналы

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” или создать подкласс GtkGLArea и переопределить виртуальную функцию GtkGLAreaClass.render().

Виджет 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

виджет GtkGLArea

Возвращаемое значение

GdkGLContext.

[передача нет]

С: 3.16

gtk_gl_area_make_current ()

void
gtk_gl_area_make_current (GtkGLArea *area);

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

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

Параметры

area

виджет 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

виджет GtkGLArea

С: 3.16

gtk_gl_area_attach_buffers ()

void
gtk_gl_area_attach_buffers (GtkGLArea *area);

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

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

Параметры

area

виджет GtkGLArea

С: 3.16

gtk_gl_area_set_error ()

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

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

Параметры

area

виджет GtkGLArea

error

новая ошибка GError, или NULL для отмены ошибки.

[allow-none]

С: 3.16

gtk_gl_area_get_error ()

GError *
gtk_gl_area_get_error (GtkGLArea *area);

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

Параметры

area

виджет GtkGLArea

Возвращаемое значение

GError или NULL.

[nullable][передача нет]

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

виджет GtkGLArea

has_alpha

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

С: 3.16

gtk_gl_area_get_has_alpha ()

gboolean
gtk_gl_area_get_has_alpha (GtkGLArea *area);

Возвращает, имеет ли виджет альфа-компонент.

Параметры

area

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

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

struct GtkGLArea

struct GtkGLArea;

A GtkWidget используемый для отрисовки с помощью OpenGL.

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

Since: 3.16

Подробное описание свойств

Свойство “auto-render”

  “auto-render”              gboolean

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

Если установлено в значение FALSE, данные из предыдущей отрисовки сохраняются и используются для отрисовки виджета в следующий раз, если окно не было переразмеренно. Для принудительной отрисовки необходимо вызвать gtk_gl_area_queue_render(). Этот режим полезен, когда сцена меняется редко, но её перерисовка занимает много времени.

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

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

Since: 3.16

Свойство “context”

  “context”                  GdkGLContext *

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

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

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

Since: 3.16

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

  “has-alpha”                gboolean

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

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

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

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

Since: 3.16

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

  “has-depth-buffer”         gboolean

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

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

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

Since: 3.16

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

  “has-stencil-buffer”       gboolean

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

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

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

Since: 3.16

Подробности сигналов

Сигнал “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.20/GtkGLArea.html

Spec-Zone.ru

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