方法

声明 [src]

void
gtk_snapshot_push_gl_shader (
  GtkSnapshot* snapshot,
  GskGLShader* shader,
  const graphene_rect_t* bounds,
  GBytes* take_args
)

描述 [src]

推送一个 GskGLShaderNode.

该节点使用给定的 GskGLShader 和均匀值。此外,还接受一个包含 n_children 其他节点的列表,这些节点将传递给 GskGLShaderNode.

take_args 参数是一个用于均匀参数的数据块,按照由 shader 定义的类型和偏移量定义。通常这是由 gsk_gl_shader_format_args()GskShaderArgsBuilder 生成的。

快照器将获得 take_args 的所有权,因此调用者不应在后面释放它。

如果渲染器不支持 GL 着色器,或者着色器编译过程中出现任何问题,那么节点将以粉色绘制。您应该使用 gsk_gl_shader_compile() 确保在使用之前,shader 对于渲染器可以正常工作。

如果着色器需要纹理(请参阅 gsk_gl_shader_get_n_textures()),那么预期您将按照需要的次数调用 gtk_snapshot_gl_shader_pop_texture()。每次调用都会生成一个节点,该节点作为子节点添加到 GskGLShaderNode 中,然后将其渲染到离屏并将作为纹理传递给着色器。

一旦所有纹理(如果有)都已弹出,您必须调用常规的 gtk_snapshot_pop()

如果您想使用现有的纹理作为着色器的输入而不是渲染新的纹理,请使用 gtk_snapshot_append_texture() 来推送一个纹理节点。这些将直接使用而不是重新渲染。

有关如何编写着色器的详细信息,请参阅 GskGLShader

自 4.16 起已弃用

GTK 的新以 Vulkan 为中心的渲染不支持此功能。使用 GtkGLArea 进行 OpenGL 渲染。

参数

shader

类型: GskGLShader

运行的代码。

数据由方法调用者所有。
bounds

类型: graphene_rect_t

要渲染到其内部的矩形。

数据由方法调用者所有。
take_args

类型: GBytes

包含为着色器提供的参数的数据块。

实例拥有对该数据的所有权,并负责释放它。