类
GtkGLArea
说明 [src]
class Gtk.GLArea : Gtk.Widget
implements Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget {
/* No available fields */
}
GtkGLArea
是一款可使用 OpenGL 绘制的窗口小部件。
GtkGLArea
设置了自己的 GdkGLContext
,并创建一个自定义 GL 框架缓冲区以便窗口小部件将 GL 渲染到其上。它还确保渲染时此框架缓冲区为默认 GL 渲染目标。已完成的渲染将作为一个纹理整合到更大的 GTK 场景图中。
为进行绘制,您必须连接到 GtkGLArea::render
信号,或对 GtkGLArea
进行子类化并覆盖 GtkGLAreaClass.render 虚拟函数。
GtkGLArea
窗口小部件确保将 GdkGLContext
与窗口小部件的绘图区域关联起来,并在绘图区域的大小和位置发生变化时予以更新。
使用 GtkGLArea 绘图
在 GtkGLArea
中使用 OpenGL 命令进行绘制的最简单方法是创建窗口小部件实例并连接至 GtkGLArea::render
信号
当 GtkGLArea
准备好让您对其内容进行绘制时,将调用 render()
函数
框架缓冲区的初始内容为透明。
static gboolean
render (GtkGLArea *area, GdkGLContext *context)
{
// inside this function it's safe to use GL; the given
// GdkGLContext has been made current to the drawable
// surface used by the `GtkGLArea` and the viewport has
// already been set to be the size of the allocation
// we can start by clearing the buffer
glClearColor (0, 0, 0, 0);
glClear (GL_COLOR_BUFFER_BIT);
// draw your object
// draw_an_object ();
// we completed our drawing; the draw commands will be
// flushed at the end of the signal emission chain, and
// the buffers will be drawn on the window
return TRUE;
}
void setup_glarea (void)
{
// 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);
}
如果您需要初始化 OpenGL 状态(例如缓冲对象或着色器),则应该使用 GtkWidget::realize
信号;您可以使用 GtkWidget::unrealize
信号进行清理。由于 GdkGLContext
创建和初始化可能会失败,您需要使用 gtk_gl_area_get_error()
检查错误。
下面是安全初始化 GL 状态的示例。
static void
on_realize (GtkGLarea *area)
{
// We need to make the context current if we want to
// call GL API
gtk_gl_area_make_current (area);
// If there were errors during the initialization or
// when trying to make the context current, this
// function will return a GError for you to catch
if (gtk_gl_area_get_error (area) != NULL)
return;
// You can also use gtk_gl_area_set_error() in order
// to show eventual initialization errors on the
// GtkGLArea widget itself
GError *internal_error = NULL;
init_buffer_objects (&error);
if (error != NULL)
{
gtk_gl_area_set_error (area, error);
g_error_free (error);
return;
}
init_shaders (&error);
if (error != NULL)
{
gtk_gl_area_set_error (area, error);
g_error_free (error);
return;
}
}
如果您需要更改创建 GdkGLContext
的选项,应使用 GtkGLArea::create-context
信号。
实例方法
从 GtkAccessible (19) 继承的方法
gtk_accessible_announce
请求用户的屏幕阅读器播报给定的消息。
自:4.14
gtk_accessible_get_accessible_parent
检索无障碍对象的无障碍父对象。
自:4.10
gtk_accessible_get_accessible_role
检索无障碍对象的无障碍角色。
gtk_accessible_get_at_context
检索给定无障碍对象的实现。
自:4.10
gtk_accessible_get_bounds
查询此无障碍对象的坐标和尺寸。
自:4.10
gtk_accessible_get_first_accessible_child
检索无障碍对象的第一个无障碍子对象。
自:4.10
gtk_accessible_get_next_accessible_sibling
检索无障碍对象的下一个无障碍兄弟姐妹。
自:4.10
gtk_accessible_get_platform_state
查询平台状态,例如焦点。
自:4.10
gtk_accessible_reset_property
将无障碍属性重置为其默认值。
gtk_accessible_reset_relation
将无障碍关系重置为其默认值。
gtk_accessible_reset_state
将无障碍状态重置为其默认值。
gtk_accessible_set_accessible_parent
设置辅助功能对象的父项和兄弟项。
自:4.10
gtk_accessible_update_next_accessible_sibling
更新下一个辅助功能兄弟项。
自:4.10
gtk_accessible_update_property
更新辅助功能属性列表。
gtk_accessible_update_property_value
更新辅助功能属性数组。
gtk_accessible_update_relation
更新辅助功能关系列表。
gtk_accessible_update_relation_value
更新辅助功能关系数组。
gtk_accessible_update_state
更新辅助功能状态列表。
gtk_accessible_update_state_value
更新辅助功能状态数组。
从 GtkBuildable 继承的方法 (1)
属性
从 GtkWidget 继承的属性 (34)
Gtk.Widget:can-focus
该微件或其任何后代是否可以接受输入焦点。
Gtk.Widget:can-target
该微件是否可以接收指针事件。
Gtk.Widget:css-classes
应用于此微件的 css 类列表。
Gtk.Widget:css-name
此微件在 CSS 树中的名称。
Gtk.Widget:cursor
由 widget
使用的光标。
Gtk.Widget:focus-on-click
用鼠标单击时,该微件是否应获取焦点。
Gtk.Widget:focusable
此微件本身是否将接受输入焦点。
Gtk.Widget:halign
如果该微件获得额外的空间,则如何分配水平空间。
Gtk.Widget:has-default
该微件是否是默认微件。
Gtk.Widget:has-focus
该微件是否具有输入焦点。
Gtk.Widget:has-tooltip
启用或禁用在 widget
上发出的 GtkWidget::query-tooltip
信号。
Gtk.Widget:height-request
用于替代该微件的高度请求。
Gtk.Widget:hexpand
是否按水平方向扩展。
Gtk.Widget:hexpand-set
是否使用 hexpand
属性。
Gtk.Widget:layout-manager
用来计算小组件的首选大小并分配其子组件的 GtkLayoutManager
实例。
Gtk.Widget:margin-bottom
在微件底部的边距。
Gtk.Widget:margin-end
在微件结尾的边距,按水平方向。
Gtk.Widget:margin-start
在微件开始处的边距,按水平方向。
Gtk.Widget:margin-top
在微件顶部的边距。
Gtk.Widget:name
微件的名称。
Gtk.Widget:opacity
微件请求的不透明度。
Gtk.Widget:overflow
如何处理微件内容区域外部的内容。
Gtk.Widget:parent
此微件的父级微件。
Gtk.Widget:receives-default
当获取焦点时,该微件是否将接收默认操作。
Gtk.Widget:root
包含此小组件的小组件树的 GtkRoot
小组件。
Gtk.Widget:scale-factor
小组件的缩放比例。
Gtk.Widget:sensitive
该小组件能否响应输入。
Gtk.Widget:tooltip-markup
将提示文本设置为指定字符串,该字符串使用 Pango 标记进行标记。
Gtk.Widget:tooltip-text
将提示文本设置为指定的字符串。
Gtk.Widget:valign
如果小组件获取额外空间,则如何分配垂直空间。
Gtk.Widget:vexpand
是否垂直展开。
Gtk.Widget:vexpand-set
是否使用 vexpand
属性。
Gtk.Widget:visible
小组件是否可见。
Gtk.Widget:width-request
覆盖小组件的宽度请求。
从 GtkAccessible(1)继承的属性
信号
从 GtkWidget(13)继承的信号
GtkWidget::destroy
通知所有小组件引用持有者释放他们持有的引用。
GtkWidget::direction-changed
小组件的文本方向改变时发出。
GtkWidget::hide
widget
隐藏时发出。
GtkWidget::keynav-failed
键盘导航失败时发出。
GtkWidget::map
widget
准备映射时发出。
GtkWidget::mnemonic-activate
通过助记符激活小组件时发出。
GtkWidget::move-focus
焦点移动时发出。
GtkWidget::query-tooltip
小组件的提示准备显示时发出。
GtkWidget::realize
将 widget
与 GdkSurface
关联时发出。
GtkWidget::show
widget
显示时发出。
GtkWidget::state-flags-changed
小组件状态改变时发出。
GtkWidget::unmap
widget
准备取消映射时发出。
GtkWidget::unrealize
与 widget
关联的 GdkSurface
被销毁时发出。
从 GObject(1)继承的信号
GObject::notify
当对象的一个属性通过 g_object_set_property()、g_object_set() 等方式设置值时,会在对象上发出通知信号。
类结构
struct GtkGLAreaClass {
gboolean (* render) (
GtkGLArea* area,
GdkGLContext* context
);
void (* resize) (
GtkGLArea* area,
int width,
int height
);
GdkGLContext* (* create_context) (
GtkGLArea* area
);
}
GtkGLAreaClass
结构仅包含私有数据。
类成员
render: gboolean (* render) ( GtkGLArea* area, GdkGLContext* context )
GtkGLArea::render
信号的类闭包。resize: void (* resize) ( GtkGLArea* area, int width, int height )
GtkGLArea::resize
信号的类闭包。create_context: GdkGLContext* (* create_context) ( GtkGLArea* area )
GtkGLArea::create-context
信号的类闭包。