shader_set_uniform_f_buffer

使用该函数,可以将着色器统一的值设置为存储在缓冲区中的浮点值的列表。

由于浮点数是使用 buffer_f32 数据类型在缓冲区中表示的,因此此函数要求将偏移量和计数给定范围内的数据格式化为该类型的连续值。

注意:调用函数shader_set() 之后,调用shader_reset() 之前,必须设置所有 uniform 。

语法:

shader_set_uniform_f_buffer(uniform, buffer, offset, count);

参数类型描述
handleShader Uniform Handleshader_get_uniform 返回的着色器统一的 uniform 句柄
bufferBuffer要从中读取值的缓冲区
offsetReal缓冲区中的偏移量(字节)
countReal要使用的 buffer_f32 类型的值数 (参见 缓冲区数据类型常量 )

 

返回:

N/A

 

例子:

/// Create Event
var _values = 4;
var _size = buffer_sizeof(buffer_f32);
buffer = buffer_create(_values * _size, buffer_fixed, 1);

buffer_write(buffer, buffer_f32, 1);
buffer_write(buffer, buffer_f32, 0.7);
buffer_write(buffer, buffer_f32, 0.9);
buffer_write(buffer, buffer_f32, 1);

uni_blend_colour = shader_get_uniform(shader_Colorize, "u_vBlendColour");


/// Draw Event
shader_set(shader_Colorize);
shader_set_uniform_f_buffer(uni_blend_colour, _buffer, 0, 4);
vertex_submit(global.vb_character, pr_trianglelist, -1);
shader_reset();


/// Clean Up event
buffer_delete(buffer);

上面的代码首先创建一个固定大小的新缓冲区 buffer,该缓冲区具有存储类型为 buffer_f32 的四个值 (_values) 的空间。这是在对象的创建事件中完成的。然后,将 0 到 1 之间的四个值按顺序 写入 表示混合色的 R、G、B 和 A 分量的缓冲区。之后,句柄被检索到在名为 "shader_Colorize" 的 着色器 中定义的 uniform vec4 u_vBlendColour; 句柄。接下来,在设置此着色器的绘制事件中,缓冲区中的四个值将传递给着色器使用 shader_set_uniform_f_buffer,并提交名为 vb_character顶点缓冲区 中的模型 (即 drawn)。之后,着色器将重置。最后,在清除事件中,删除缓冲区以避免内存泄漏。