Spec-Zone.ru › GTK 4.0

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_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-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 реализует GtkAccessible, GtkBuildable и GtkConstraintTarget.

Файлы заголовков

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

Если вам нужно изменить параметры создания GdkGLContext, используйте сигнал “create-context”.

Функции

gtk_gl_area_new ()

GtkWidget *
gtk_gl_area_new (void);

Создает новый виджет GtkGLArea.

Возвращает

новый GtkGLArea

gtk_gl_area_get_context ()

GdkGLContext *
gtk_gl_area_get_context (GtkGLArea *area);

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

Параметры

area

a GtkGLArea

Возвращает

the GdkGLContext.

[transfer none]

gtk_gl_area_make_current ()

void
gtk_gl_area_make_current (GtkGLArea *area);

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

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

Параметры

area

a GtkGLArea

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

gtk_gl_area_attach_buffers ()

void
gtk_gl_area_attach_buffers (GtkGLArea *area);

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

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

Параметры

area

a GtkGLArea

gtk_gl_area_set_error ()

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

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

Параметры

area

a GtkGLArea

error

a new GError, or NULL to unset the error.

[allow-none]

gtk_gl_area_get_error ()

GError *
gtk_gl_area_get_error (GtkGLArea *area);

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

Параметры

area

a GtkGLArea

Возвращает

the GError or NULL.

[nullable][transfer none]

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 to add a depth buffer

gtk_gl_area_get_has_depth_buffer ()

gboolean
gtk_gl_area_get_has_depth_buffer (GtkGLArea *area);

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

Параметры

area

a GtkGLArea

Возвращает

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

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 to add a stencil buffer

gtk_gl_area_get_has_stencil_buffer ()

gboolean
gtk_gl_area_get_has_stencil_buffer (GtkGLArea *area);

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

Параметры

area

a GtkGLArea

Возвращает

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

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

a boolean

gtk_gl_area_get_auto_render ()

gboolean
gtk_gl_area_get_auto_render (GtkGLArea *area);

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

Параметры

area

a GtkGLArea

Возвращает

TRUE если area выполняет автоматическую отрисовку, FALSE в противном случае

gtk_gl_area_get_required_version ()

void
gtk_gl_area_get_required_version (GtkGLArea *area,
                                  int *major,
                                  int *minor);

Возвращает требуемую версию OpenGL, установленную с помощью gtk_gl_area_set_required_version().

Параметры

area

a GtkGLArea

major

место для возвращаемой требуемой основной версии.

[out]

minor

место для возвращаемой требуемой дополнительной версии.

[out]

gtk_gl_area_set_required-version ()

void
gtk_gl_area_set_required_version (GtkGLArea *area,
                                  int major,
                                  int minor);

Устанавливает требуемую версию OpenGL для использования при создании контекста для виджета.

Эта функция должна быть вызвана до реализации области.

Параметры

area

a GtkGLArea

major

основная версия

minor

дополнительная версия

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

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 в противном случае

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

struct GtkGLArea

struct GtkGLArea;

A GtkWidget для рисования с помощью OpenGL.

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”

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

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

  “auto-render”              gboolean

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

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

Владелец: GtkGLArea

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

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

Свойство “context”

  “context”                  GdkGLContext *

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

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

Владелец: GtkGLArea

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

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

  “has-depth-buffer”         gboolean

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

Владелец: GtkGLArea

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

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

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

  “has-stencil-buffer”       gboolean

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

Владелец: GtkGLArea

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

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

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

  “use-es”                   gboolean

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

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

Владелец: GtkGLArea

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

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

Подробные сведения о сигналах

Сигнал “create-context”

GdkGLContext*
user_function (GtkGLArea *area,
               gpointer   user_data)

Сигнал ::create-context генерируется при реализации виджета и позволяет переопределить создание контекста OpenGL. Это полезно, если нужно повторно использовать существующий контекст OpenGL или при попытке создания различных вариантов OpenGL.

Если создание контекста завершилось неудачно, обработчик сигнала может использовать gtk_gl_area_set_error(), чтобы получить более подробную информацию об ошибке.

Параметры

area

объект GtkGLArea, который сгенерировал сигнал

error

место для хранения информации об ошибке при неудачном выполнении.

[allow-none]

user_data

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

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

новый созданный GdkGLContext; виджет GtkGLArea принимает владение возвращённым значением.

[transfer full]

Флаги: Run Last

Сигнал “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

Сигнал “resize”

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

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

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

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

Параметры

area

объект GtkGLArea, который сгенерировал сигнал

width

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

height

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

user_data

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

Флаги: Run Last

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkGLArea.html

Spec-Zone.ru

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