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