方法
声明 [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包含为着色器提供的参数的数据块。
实例拥有对该数据的所有权,并负责释放它。