surface_depth_disable

此函数禁用在禁用后创建的所有表面的自动深度缓冲区生成。通常情况下,所有表面都有深度缓冲区,因此如果绘制3D对象到这些表面,它将按深度对它们进行正确排序为了在渲染到表面和渲染到后缓冲区之间保持函数奇偶校验,然而,分配深度缓冲区实际上使表面所需的内存量加倍,这可能是过度的和不必要的开销尤其是如果您的游戏非常耗费内存,并且2D游戏通常不需要这些内容。

若要使用此函数,请在创建表面之前调用它,然后可以在创建表面之后再次启用它(如果需要)。禁用深度缓冲区时创建的所有表面在绘制到时将不再使用深度缓冲区,这将产生在具有同等深度的物体被吸引到表面上。下图说明了实践中的情况:

Surface depth buffer example在上图中,我们使用3D中的顶点缓冲区绘制矩形和三角形。的红色三角形的坐标将其置于绿色矩形的后面,但绘制三角形的代码在矩形的代码之后被称为,并且当启用深度缓冲区时,三角形仍然绘制在矩形的后面因为3D深度受到尊重。但是,当我们禁用表面的深度缓冲区时,只遵循代码顺序,因此在矩形上绘制三角形。

注意 为了在使用表面时正确保留 3D 深度,您不仅应该启用深度缓冲区,还应该启用 z 写入和 z 测试。有关详细信息,请参阅函数 gpu_set_ztestenablegpu_set_zwriteenable

注意 如果您的游戏是 100% 2D 或者您知道不需要表面深度缓冲区,那么只需在游戏开始时调用此函数一次就可以了。游戏禁用缓冲区。

 

语法:

surface_depth_disable(disable);

参数类型描述
disableBoolean如果设置为true,则将对创建的表面禁用深度缓冲区。

 

返回:

N/A

 

例子:

var _depth_setting = surface_get_depth_disable();
surface_depth_disable(false);
surface_with_depth = surface_create(room_width, room_height);
surface_depth_disable(true);
surface_without_depth = surface_create(room_width, room_height);
surface_depth_disable(_depth_setting);

上述代码将当前深度缓冲区设置存储在变量中,然后创建两个表面,一个启用了深度缓冲,另一个不启用,然后再次恢复原始设置。