2023-01-05 20:25:55 +08:00
/**************************************************************************/
/* rendering_server.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
2018-01-05 07:50:27 +08:00
2020-03-28 02:21:27 +08:00
# ifndef RENDERING_SERVER_H
# define RENDERING_SERVER_H
2014-02-10 09:10:30 +08:00
2020-11-08 06:33:38 +08:00
# include "core/io/image.h"
2020-05-26 01:20:45 +08:00
# include "core/math/geometry_3d.h"
2018-09-12 00:13:45 +08:00
# include "core/math/transform_2d.h"
2020-11-08 06:33:38 +08:00
# include "core/object/class_db.h"
# include "core/templates/rid.h"
# include "core/variant/typed_array.h"
# include "core/variant/variant.h"
2020-03-04 09:51:12 +08:00
# include "servers/display_server.h"
2020-09-17 12:11:39 +08:00
# include "servers/rendering/rendering_device.h"
2014-02-10 09:10:30 +08:00
2022-08-06 02:35:08 +08:00
template < typename T >
class TypedArray ;
2020-03-28 02:21:27 +08:00
class RenderingServer : public Object {
GDCLASS ( RenderingServer , Object ) ;
2014-02-10 09:10:30 +08:00
2020-03-28 02:21:27 +08:00
static RenderingServer * singleton ;
2014-02-10 09:10:30 +08:00
2022-05-02 22:28:25 +08:00
int mm_policy = 0 ;
2020-06-15 01:06:48 +08:00
bool render_loop_enabled = true ;
2014-02-10 09:10:30 +08:00
2020-12-02 09:40:47 +08:00
Array _get_array_from_surface ( uint32_t p_format , Vector < uint8_t > p_vertex_data , Vector < uint8_t > p_attrib_data , Vector < uint8_t > p_skin_data , int p_vertex_len , Vector < uint8_t > p_index_data , int p_index_len ) const ;
2016-11-10 10:55:06 +08:00
2021-11-28 08:12:10 +08:00
const Vector2 SMALL_VEC2 = Vector2 ( CMP_EPSILON , CMP_EPSILON ) ;
const Vector3 SMALL_VEC3 = Vector3 ( CMP_EPSILON , CMP_EPSILON , CMP_EPSILON ) ;
2023-04-25 06:21:32 +08:00
virtual TypedArray < StringName > _global_shader_parameter_get_list ( ) const ;
2016-03-09 07:00:52 +08:00
protected :
2014-02-10 09:10:30 +08:00
RID _make_test_cube ( ) ;
2015-04-21 06:38:02 +08:00
void _free_internal_rids ( ) ;
2014-02-10 09:10:30 +08:00
RID test_texture ;
2014-05-29 21:56:39 +08:00
RID white_texture ;
2015-04-21 06:38:02 +08:00
RID test_material ;
2016-03-09 07:00:52 +08:00
2020-12-02 09:40:47 +08:00
Error _surface_set_data ( Array p_arrays , uint32_t p_format , uint32_t * p_offsets , uint32_t p_vertex_stride , uint32_t p_attrib_stride , uint32_t p_skin_stride , Vector < uint8_t > & r_vertex_array , Vector < uint8_t > & r_attrib_array , Vector < uint8_t > & r_skin_array , int p_vertex_array_len , Vector < uint8_t > & r_index_array , int p_index_array_len , AABB & r_aabb , Vector < AABB > & r_bone_aabb ) ;
2016-10-19 22:14:41 +08:00
2020-03-28 02:21:27 +08:00
static RenderingServer * ( * create_func ) ( ) ;
2016-03-09 07:00:52 +08:00
static void _bind_methods ( ) ;
2017-03-05 23:44:50 +08:00
public :
2020-03-28 02:21:27 +08:00
static RenderingServer * get_singleton ( ) ;
static RenderingServer * create ( ) ;
2014-02-10 09:10:30 +08:00
enum {
NO_INDEX_ARRAY = - 1 ,
ARRAY_WEIGHTS_SIZE = 4 ,
2015-01-13 21:49:26 +08:00
CANVAS_ITEM_Z_MIN = - 4096 ,
CANVAS_ITEM_Z_MAX = 4096 ,
2016-12-08 20:48:38 +08:00
MAX_GLOW_LEVELS = 7 ,
2014-02-10 09:10:30 +08:00
MAX_CURSORS = 8 ,
2021-07-13 07:32:05 +08:00
MAX_2D_DIRECTIONAL_LIGHTS = 8 ,
MAX_MESH_SURFACES = 256
2014-02-10 09:10:30 +08:00
} ;
2016-03-09 07:00:52 +08:00
2014-02-10 09:10:30 +08:00
/* TEXTURE API */
2019-06-12 02:43:37 +08:00
enum TextureLayeredType {
TEXTURE_LAYERED_2D_ARRAY ,
TEXTURE_LAYERED_CUBEMAP ,
TEXTURE_LAYERED_CUBEMAP_ARRAY ,
2016-03-09 07:00:52 +08:00
} ;
2019-06-12 02:43:37 +08:00
enum CubeMapLayer {
CUBEMAP_LAYER_LEFT ,
CUBEMAP_LAYER_RIGHT ,
CUBEMAP_LAYER_BOTTOM ,
CUBEMAP_LAYER_TOP ,
CUBEMAP_LAYER_FRONT ,
CUBEMAP_LAYER_BACK
2018-06-26 19:59:26 +08:00
} ;
2019-06-12 02:43:37 +08:00
virtual RID texture_2d_create ( const Ref < Image > & p_image ) = 0 ;
2020-03-17 14:33:00 +08:00
virtual RID texture_2d_layered_create ( const Vector < Ref < Image > > & p_layers , TextureLayeredType p_layered_type ) = 0 ;
2020-09-09 23:40:51 +08:00
virtual RID texture_3d_create ( Image : : Format , int p_width , int p_height , int p_depth , bool p_mipmaps , const Vector < Ref < Image > > & p_data ) = 0 ; //all slices, then all the mipmaps, must be coherent
2019-06-25 03:13:06 +08:00
virtual RID texture_proxy_create ( RID p_base ) = 0 ;
2016-03-09 07:00:52 +08:00
2019-06-12 02:43:37 +08:00
virtual void texture_2d_update ( RID p_texture , const Ref < Image > & p_image , int p_layer = 0 ) = 0 ;
2020-09-09 23:40:51 +08:00
virtual void texture_3d_update ( RID p_texture , const Vector < Ref < Image > > & p_data ) = 0 ;
2019-06-25 03:13:06 +08:00
virtual void texture_proxy_update ( RID p_texture , RID p_proxy_to ) = 0 ;
2019-06-12 02:43:37 +08:00
2021-11-28 08:12:10 +08:00
// These two APIs can be used together or in combination with the others.
2019-06-12 02:43:37 +08:00
virtual RID texture_2d_placeholder_create ( ) = 0 ;
2020-05-01 20:34:23 +08:00
virtual RID texture_2d_layered_placeholder_create ( TextureLayeredType p_layered_type ) = 0 ;
2019-06-12 02:43:37 +08:00
virtual RID texture_3d_placeholder_create ( ) = 0 ;
2014-02-10 09:10:30 +08:00
2019-06-12 02:43:37 +08:00
virtual Ref < Image > texture_2d_get ( RID p_texture ) const = 0 ;
virtual Ref < Image > texture_2d_layer_get ( RID p_texture , int p_layer ) const = 0 ;
2020-09-09 23:40:51 +08:00
virtual Vector < Ref < Image > > texture_3d_get ( RID p_texture ) const = 0 ;
2019-06-12 02:43:37 +08:00
virtual void texture_replace ( RID p_texture , RID p_by_texture ) = 0 ;
virtual void texture_set_size_override ( RID p_texture , int p_width , int p_height ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void texture_set_path ( RID p_texture , const String & p_path ) = 0 ;
virtual String texture_get_path ( RID p_texture ) const = 0 ;
2016-05-04 23:36:51 +08:00
typedef void ( * TextureDetectCallback ) ( void * ) ;
2017-02-06 11:38:39 +08:00
virtual void texture_set_detect_3d_callback ( RID p_texture , TextureDetectCallback p_callback , void * p_userdata ) = 0 ;
2017-06-17 08:47:28 +08:00
virtual void texture_set_detect_normal_callback ( RID p_texture , TextureDetectCallback p_callback , void * p_userdata ) = 0 ;
2017-02-06 11:38:39 +08:00
2019-06-12 02:43:37 +08:00
enum TextureDetectRoughnessChannel {
2021-01-02 13:27:12 +08:00
TEXTURE_DETECT_ROUGHNESS_R ,
TEXTURE_DETECT_ROUGHNESS_G ,
TEXTURE_DETECT_ROUGHNESS_B ,
TEXTURE_DETECT_ROUGHNESS_A ,
TEXTURE_DETECT_ROUGHNESS_GRAY ,
2019-06-12 02:43:37 +08:00
} ;
typedef void ( * TextureDetectRoughnessCallback ) ( void * , const String & , TextureDetectRoughnessChannel ) ;
virtual void texture_set_detect_roughness_callback ( RID p_texture , TextureDetectRoughnessCallback p_callback , void * p_userdata ) = 0 ;
2015-10-21 20:50:44 +08:00
struct TextureInfo {
RID texture ;
2018-06-26 19:59:26 +08:00
uint32_t width ;
uint32_t height ;
uint32_t depth ;
2015-10-21 20:50:44 +08:00
Image : : Format format ;
int bytes ;
String path ;
} ;
virtual void texture_debug_usage ( List < TextureInfo > * r_info ) = 0 ;
2017-10-20 06:24:49 +08:00
Array _texture_debug_usage_bind ( ) ;
2014-02-10 09:10:30 +08:00
2018-07-16 22:43:26 +08:00
virtual void texture_set_force_redraw_if_visible ( RID p_texture , bool p_enable ) = 0 ;
2017-12-05 02:55:20 +08:00
2023-03-10 17:41:55 +08:00
virtual RID texture_get_rd_texture ( RID p_texture , bool p_srgb = false ) const = 0 ;
2023-03-10 18:24:25 +08:00
virtual uint64_t texture_get_native_handle ( RID p_texture , bool p_srgb = false ) const = 0 ;
2022-11-02 01:50:36 +08:00
2014-02-10 09:10:30 +08:00
/* SHADER API */
enum ShaderMode {
2016-10-04 03:33:42 +08:00
SHADER_SPATIAL ,
2014-02-10 09:10:30 +08:00
SHADER_CANVAS_ITEM ,
2017-01-02 09:16:52 +08:00
SHADER_PARTICLES ,
2019-09-15 17:58:38 +08:00
SHADER_SKY ,
2021-10-03 19:28:55 +08:00
SHADER_FOG ,
2016-10-11 05:31:01 +08:00
SHADER_MAX
2014-02-10 09:10:30 +08:00
} ;
2017-04-07 10:36:37 +08:00
virtual RID shader_create ( ) = 0 ;
2014-02-10 09:10:30 +08:00
2014-12-21 22:42:44 +08:00
virtual void shader_set_code ( RID p_shader , const String & p_code ) = 0 ;
2022-06-29 17:31:18 +08:00
virtual void shader_set_path_hint ( RID p_shader , const String & p_path ) = 0 ;
2014-12-21 22:42:44 +08:00
virtual String shader_get_code ( RID p_shader ) const = 0 ;
2022-08-27 17:22:43 +08:00
virtual void get_shader_parameter_list ( RID p_shader , List < PropertyInfo > * p_param_list ) const = 0 ;
virtual Variant shader_get_parameter_default ( RID p_shader , const StringName & p_param ) const = 0 ;
2014-12-21 22:42:44 +08:00
2022-08-27 17:22:43 +08:00
virtual void shader_set_default_texture_parameter ( RID p_shader , const StringName & p_name , RID p_texture , int p_index = 0 ) = 0 ;
virtual RID shader_get_default_texture_parameter ( RID p_shader , const StringName & p_name , int p_index = 0 ) const = 0 ;
2014-02-10 09:10:30 +08:00
2021-01-06 07:01:50 +08:00
struct ShaderNativeSourceCode {
struct Version {
struct Stage {
String name ;
String code ;
} ;
Vector < Stage > stages ;
} ;
Vector < Version > versions ;
} ;
virtual ShaderNativeSourceCode shader_get_native_source_code ( RID p_shader ) const = 0 ;
2014-02-10 09:10:30 +08:00
/* COMMON MATERIAL API */
2017-09-01 23:56:52 +08:00
enum {
MATERIAL_RENDER_PRIORITY_MIN = - 128 ,
MATERIAL_RENDER_PRIORITY_MAX = 127 ,
} ;
2020-04-20 17:48:00 +08:00
2014-02-10 09:10:30 +08:00
virtual RID material_create ( ) = 0 ;
virtual void material_set_shader ( RID p_shader_material , RID p_shader ) = 0 ;
virtual void material_set_param ( RID p_material , const StringName & p_param , const Variant & p_value ) = 0 ;
virtual Variant material_get_param ( RID p_material , const StringName & p_param ) const = 0 ;
2017-09-01 23:56:52 +08:00
virtual void material_set_render_priority ( RID p_material , int priority ) = 0 ;
2017-07-08 23:34:05 +08:00
virtual void material_set_next_pass ( RID p_material , RID p_next_material ) = 0 ;
2014-02-10 09:10:30 +08:00
/* MESH API */
enum ArrayType {
2020-12-02 09:40:47 +08:00
ARRAY_VERTEX = 0 , // RG32F or RGB32F (depending on 2D bit)
2021-11-28 08:12:10 +08:00
ARRAY_NORMAL = 1 , // A2B10G10R10, A is ignored.
ARRAY_TANGENT = 2 , // A2B10G10R10, A flips sign of binormal.
2021-07-01 10:17:47 +08:00
ARRAY_COLOR = 3 , // RGBA8
2020-12-02 09:40:47 +08:00
ARRAY_TEX_UV = 4 , // RG32F
ARRAY_TEX_UV2 = 5 , // RG32F
2021-11-28 08:12:10 +08:00
ARRAY_CUSTOM0 = 6 , // Depends on ArrayCustomFormat.
2020-12-02 09:40:47 +08:00
ARRAY_CUSTOM1 = 7 ,
ARRAY_CUSTOM2 = 8 ,
ARRAY_CUSTOM3 = 9 ,
ARRAY_BONES = 10 , // RGBA16UI (x2 if 8 weights)
ARRAY_WEIGHTS = 11 , // RGBA16UNORM (x2 if 8 weights)
2021-11-28 08:12:10 +08:00
ARRAY_INDEX = 12 , // 16 or 32 bits depending on length > 0xFFFF.
2020-12-02 09:40:47 +08:00
ARRAY_MAX = 13
} ;
enum {
ARRAY_CUSTOM_COUNT = ARRAY_BONES - ARRAY_CUSTOM0
} ;
enum ArrayCustomFormat {
ARRAY_CUSTOM_RGBA8_UNORM ,
ARRAY_CUSTOM_RGBA8_SNORM ,
ARRAY_CUSTOM_RG_HALF ,
ARRAY_CUSTOM_RGBA_HALF ,
ARRAY_CUSTOM_R_FLOAT ,
ARRAY_CUSTOM_RG_FLOAT ,
ARRAY_CUSTOM_RGB_FLOAT ,
ARRAY_CUSTOM_RGBA_FLOAT ,
ARRAY_CUSTOM_MAX
2016-03-09 07:00:52 +08:00
} ;
2014-02-10 09:10:30 +08:00
enum ArrayFormat {
/* ARRAY FORMAT FLAGS */
2022-06-25 02:22:26 +08:00
ARRAY_FORMAT_VERTEX = 1 < < ARRAY_VERTEX ,
2014-02-10 09:10:30 +08:00
ARRAY_FORMAT_NORMAL = 1 < < ARRAY_NORMAL ,
ARRAY_FORMAT_TANGENT = 1 < < ARRAY_TANGENT ,
ARRAY_FORMAT_COLOR = 1 < < ARRAY_COLOR ,
ARRAY_FORMAT_TEX_UV = 1 < < ARRAY_TEX_UV ,
ARRAY_FORMAT_TEX_UV2 = 1 < < ARRAY_TEX_UV2 ,
2020-12-02 09:40:47 +08:00
ARRAY_FORMAT_CUSTOM0 = 1 < < ARRAY_CUSTOM0 ,
ARRAY_FORMAT_CUSTOM1 = 1 < < ARRAY_CUSTOM1 ,
ARRAY_FORMAT_CUSTOM2 = 1 < < ARRAY_CUSTOM2 ,
ARRAY_FORMAT_CUSTOM3 = 1 < < ARRAY_CUSTOM3 ,
2014-02-10 09:10:30 +08:00
ARRAY_FORMAT_BONES = 1 < < ARRAY_BONES ,
ARRAY_FORMAT_WEIGHTS = 1 < < ARRAY_WEIGHTS ,
ARRAY_FORMAT_INDEX = 1 < < ARRAY_INDEX ,
2017-03-05 23:44:50 +08:00
2022-02-08 20:38:19 +08:00
ARRAY_FORMAT_BLEND_SHAPE_MASK = ARRAY_FORMAT_VERTEX | ARRAY_FORMAT_NORMAL | ARRAY_FORMAT_TANGENT ,
2020-12-02 09:40:47 +08:00
ARRAY_FORMAT_CUSTOM_BASE = ( ARRAY_INDEX + 1 ) ,
ARRAY_FORMAT_CUSTOM_BITS = 3 ,
2022-06-25 02:22:26 +08:00
ARRAY_FORMAT_CUSTOM_MASK = 0x7 ,
2020-12-02 09:40:47 +08:00
ARRAY_FORMAT_CUSTOM0_SHIFT = ( ARRAY_FORMAT_CUSTOM_BASE + 0 ) ,
ARRAY_FORMAT_CUSTOM1_SHIFT = ( ARRAY_FORMAT_CUSTOM_BASE + ARRAY_FORMAT_CUSTOM_BITS ) ,
ARRAY_FORMAT_CUSTOM2_SHIFT = ( ARRAY_FORMAT_CUSTOM_BASE + ARRAY_FORMAT_CUSTOM_BITS * 2 ) ,
ARRAY_FORMAT_CUSTOM3_SHIFT = ( ARRAY_FORMAT_CUSTOM_BASE + ARRAY_FORMAT_CUSTOM_BITS * 3 ) ,
ARRAY_COMPRESS_FLAGS_BASE = ( ARRAY_INDEX + 1 + 12 ) ,
ARRAY_FLAG_USE_2D_VERTICES = 1 < < ( ARRAY_COMPRESS_FLAGS_BASE + 0 ) ,
ARRAY_FLAG_USE_DYNAMIC_UPDATE = 1 < < ( ARRAY_COMPRESS_FLAGS_BASE + 1 ) ,
ARRAY_FLAG_USE_8_BONE_WEIGHTS = 1 < < ( ARRAY_COMPRESS_FLAGS_BASE + 2 ) ,
2022-06-25 02:22:26 +08:00
ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY = 1 < < ( ARRAY_INDEX + 1 + 15 ) ,
2016-03-09 07:00:52 +08:00
} ;
2014-02-10 09:10:30 +08:00
enum PrimitiveType {
2019-06-16 10:45:24 +08:00
PRIMITIVE_POINTS ,
PRIMITIVE_LINES ,
2019-08-19 06:40:52 +08:00
PRIMITIVE_LINE_STRIP ,
2019-06-16 10:45:24 +08:00
PRIMITIVE_TRIANGLES ,
2019-08-19 06:40:52 +08:00
PRIMITIVE_TRIANGLE_STRIP ,
2019-06-16 10:45:24 +08:00
PRIMITIVE_MAX ,
2016-03-09 07:00:52 +08:00
} ;
2014-02-10 09:10:30 +08:00
2019-08-19 06:40:52 +08:00
struct SurfaceData {
PrimitiveType primitive = PRIMITIVE_MAX ;
uint32_t format = 0 ;
2021-11-28 08:12:10 +08:00
Vector < uint8_t > vertex_data ; // Vertex, Normal, Tangent (change with skinning, blendshape).
Vector < uint8_t > attribute_data ; // Color, UV, UV2, Custom0-3.
Vector < uint8_t > skin_data ; // Bone index, Bone weight.
2019-08-19 06:40:52 +08:00
uint32_t vertex_count = 0 ;
2020-02-18 05:06:54 +08:00
Vector < uint8_t > index_data ;
2019-08-19 06:40:52 +08:00
uint32_t index_count = 0 ;
AABB aabb ;
struct LOD {
2021-09-07 23:44:50 +08:00
float edge_length = 0.0f ;
2020-02-18 05:06:54 +08:00
Vector < uint8_t > index_data ;
2019-08-19 06:40:52 +08:00
} ;
Vector < LOD > lods ;
Vector < AABB > bone_aabbs ;
2020-12-02 09:40:47 +08:00
Vector < uint8_t > blend_shape_data ;
2019-08-19 06:40:52 +08:00
RID material ;
} ;
2020-12-16 22:07:08 +08:00
virtual RID mesh_create_from_surfaces ( const Vector < SurfaceData > & p_surfaces , int p_blend_shape_count = 0 ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual RID mesh_create ( ) = 0 ;
2020-12-16 22:07:08 +08:00
virtual void mesh_set_blend_shape_count ( RID p_mesh , int p_blend_shape_count ) = 0 ;
2023-01-08 03:37:21 +08:00
virtual uint32_t mesh_surface_get_format_offset ( BitField < ArrayFormat > p_format , int p_vertex_len , int p_array_index ) const ;
virtual uint32_t mesh_surface_get_format_vertex_stride ( BitField < ArrayFormat > p_format , int p_vertex_len ) const ;
virtual uint32_t mesh_surface_get_format_attribute_stride ( BitField < ArrayFormat > p_format , int p_vertex_len ) const ;
virtual uint32_t mesh_surface_get_format_skin_stride ( BitField < ArrayFormat > p_format , int p_vertex_len ) const ;
2020-12-02 09:40:47 +08:00
2017-11-21 08:36:32 +08:00
/// Returns stride
2020-12-02 09:40:47 +08:00
virtual void mesh_surface_make_offsets_from_format ( uint32_t p_format , int p_vertex_len , int p_index_len , uint32_t * r_offsets , uint32_t & r_vertex_element_size , uint32_t & r_attrib_element_size , uint32_t & r_skin_element_size ) const ;
virtual Error mesh_create_surface_data_from_arrays ( SurfaceData * r_surface_data , PrimitiveType p_primitive , const Array & p_arrays , const Array & p_blend_shapes = Array ( ) , const Dictionary & p_lods = Dictionary ( ) , uint32_t p_compress_format = 0 ) ;
2019-08-19 06:40:52 +08:00
Array mesh_create_arrays_from_surface_data ( const SurfaceData & p_data ) const ;
Array mesh_surface_get_arrays ( RID p_mesh , int p_surface ) const ;
2022-08-06 02:35:08 +08:00
TypedArray < Array > mesh_surface_get_blend_shape_arrays ( RID p_mesh , int p_surface ) const ;
2019-08-19 06:40:52 +08:00
Dictionary mesh_surface_get_lods ( RID p_mesh , int p_surface ) const ;
2023-01-08 03:37:21 +08:00
virtual void mesh_add_surface_from_arrays ( RID p_mesh , PrimitiveType p_primitive , const Array & p_arrays , const Array & p_blend_shapes = Array ( ) , const Dictionary & p_lods = Dictionary ( ) , BitField < ArrayFormat > p_compress_format = 0 ) ;
2019-08-19 06:40:52 +08:00
virtual void mesh_add_surface ( RID p_mesh , const SurfaceData & p_surface ) = 0 ;
2014-02-10 09:10:30 +08:00
2017-01-12 19:34:00 +08:00
virtual int mesh_get_blend_shape_count ( RID p_mesh ) const = 0 ;
2014-02-10 09:10:30 +08:00
2017-01-12 19:34:00 +08:00
enum BlendShapeMode {
BLEND_SHAPE_MODE_NORMALIZED ,
BLEND_SHAPE_MODE_RELATIVE ,
2014-02-10 09:10:30 +08:00
} ;
2017-01-12 19:34:00 +08:00
virtual void mesh_set_blend_shape_mode ( RID p_mesh , BlendShapeMode p_mode ) = 0 ;
virtual BlendShapeMode mesh_get_blend_shape_mode ( RID p_mesh ) const = 0 ;
2014-02-10 09:10:30 +08:00
2021-06-30 09:55:11 +08:00
virtual void mesh_surface_update_vertex_region ( RID p_mesh , int p_surface , int p_offset , const Vector < uint8_t > & p_data ) = 0 ;
virtual void mesh_surface_update_attribute_region ( RID p_mesh , int p_surface , int p_offset , const Vector < uint8_t > & p_data ) = 0 ;
virtual void mesh_surface_update_skin_region ( RID p_mesh , int p_surface , int p_offset , const Vector < uint8_t > & p_data ) = 0 ;
2017-11-15 04:25:42 +08:00
2016-10-04 03:33:42 +08:00
virtual void mesh_surface_set_material ( RID p_mesh , int p_surface , RID p_material ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual RID mesh_surface_get_material ( RID p_mesh , int p_surface ) const = 0 ;
2019-08-19 06:40:52 +08:00
virtual SurfaceData mesh_get_surface ( RID p_mesh , int p_surface ) const = 0 ;
2016-10-04 03:33:42 +08:00
2014-02-10 09:10:30 +08:00
virtual int mesh_get_surface_count ( RID p_mesh ) const = 0 ;
2014-05-05 09:50:23 +08:00
2017-11-17 10:09:00 +08:00
virtual void mesh_set_custom_aabb ( RID p_mesh , const AABB & p_aabb ) = 0 ;
virtual AABB mesh_get_custom_aabb ( RID p_mesh ) const = 0 ;
2014-05-05 09:50:23 +08:00
2021-01-25 23:20:11 +08:00
virtual void mesh_set_shadow_mesh ( RID p_mesh , RID p_shadow_mesh ) = 0 ;
2015-09-21 00:03:46 +08:00
virtual void mesh_clear ( RID p_mesh ) = 0 ;
2014-02-10 09:10:30 +08:00
/* MULTIMESH API */
virtual RID multimesh_create ( ) = 0 ;
2016-10-04 03:33:42 +08:00
enum MultimeshTransformFormat {
MULTIMESH_TRANSFORM_2D ,
MULTIMESH_TRANSFORM_3D ,
} ;
2021-02-10 00:19:03 +08:00
virtual void multimesh_allocate_data ( RID p_multimesh , int p_instances , MultimeshTransformFormat p_transform_format , bool p_use_colors = false , bool p_use_custom_data = false ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual int multimesh_get_instance_count ( RID p_multimesh ) const = 0 ;
virtual void multimesh_set_mesh ( RID p_multimesh , RID p_mesh ) = 0 ;
2020-10-17 13:08:21 +08:00
virtual void multimesh_instance_set_transform ( RID p_multimesh , int p_index , const Transform3D & p_transform ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void multimesh_instance_set_transform_2d ( RID p_multimesh , int p_index , const Transform2D & p_transform ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void multimesh_instance_set_color ( RID p_multimesh , int p_index , const Color & p_color ) = 0 ;
2018-07-07 07:21:13 +08:00
virtual void multimesh_instance_set_custom_data ( RID p_multimesh , int p_index , const Color & p_color ) = 0 ;
2014-02-10 09:10:30 +08:00
2017-01-11 11:52:51 +08:00
virtual RID multimesh_get_mesh ( RID p_multimesh ) const = 0 ;
2017-11-17 10:09:00 +08:00
virtual AABB multimesh_get_aabb ( RID p_multimesh ) const = 0 ;
2014-02-10 09:10:30 +08:00
2020-10-17 13:08:21 +08:00
virtual Transform3D multimesh_instance_get_transform ( RID p_multimesh , int p_index ) const = 0 ;
2014-02-10 09:10:30 +08:00
virtual Transform2D multimesh_instance_get_transform_2d ( RID p_multimesh , int p_index ) const = 0 ;
virtual Color multimesh_instance_get_color ( RID p_multimesh , int p_index ) const = 0 ;
2018-07-07 07:21:13 +08:00
virtual Color multimesh_instance_get_custom_data ( RID p_multimesh , int p_index ) const = 0 ;
2020-02-18 05:06:54 +08:00
virtual void multimesh_set_buffer ( RID p_multimesh , const Vector < float > & p_buffer ) = 0 ;
virtual Vector < float > multimesh_get_buffer ( RID p_multimesh ) const = 0 ;
2014-02-10 09:10:30 +08:00
virtual void multimesh_set_visible_instances ( RID p_multimesh , int p_visible ) = 0 ;
virtual int multimesh_get_visible_instances ( RID p_multimesh ) const = 0 ;
2016-10-04 03:33:42 +08:00
/* SKELETON API */
2014-05-29 21:56:39 +08:00
2016-10-04 03:33:42 +08:00
virtual RID skeleton_create ( ) = 0 ;
2021-02-10 00:19:03 +08:00
virtual void skeleton_allocate_data ( RID p_skeleton , int p_bones , bool p_2d_skeleton = false ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual int skeleton_get_bone_count ( RID p_skeleton ) const = 0 ;
2020-10-17 13:08:21 +08:00
virtual void skeleton_bone_set_transform ( RID p_skeleton , int p_bone , const Transform3D & p_transform ) = 0 ;
virtual Transform3D skeleton_bone_get_transform ( RID p_skeleton , int p_bone ) const = 0 ;
2017-01-11 11:52:51 +08:00
virtual void skeleton_bone_set_transform_2d ( RID p_skeleton , int p_bone , const Transform2D & p_transform ) = 0 ;
virtual Transform2D skeleton_bone_get_transform_2d ( RID p_skeleton , int p_bone ) const = 0 ;
2018-05-04 04:29:15 +08:00
virtual void skeleton_set_base_transform_2d ( RID p_skeleton , const Transform2D & p_base_transform ) = 0 ;
2014-02-10 09:10:30 +08:00
/* Light API */
2016-03-09 07:00:52 +08:00
2014-02-10 09:10:30 +08:00
enum LightType {
LIGHT_DIRECTIONAL ,
LIGHT_OMNI ,
LIGHT_SPOT
} ;
enum LightParam {
LIGHT_PARAM_ENERGY ,
2017-11-20 08:45:42 +08:00
LIGHT_PARAM_INDIRECT_ENERGY ,
2021-07-09 16:28:33 +08:00
LIGHT_PARAM_VOLUMETRIC_FOG_ENERGY ,
2016-10-04 03:33:42 +08:00
LIGHT_PARAM_SPECULAR ,
LIGHT_PARAM_RANGE ,
2020-04-10 02:11:15 +08:00
LIGHT_PARAM_SIZE ,
2014-02-10 09:10:30 +08:00
LIGHT_PARAM_ATTENUATION ,
2016-10-04 03:33:42 +08:00
LIGHT_PARAM_SPOT_ANGLE ,
2016-10-27 22:50:26 +08:00
LIGHT_PARAM_SPOT_ATTENUATION ,
2016-10-04 03:33:42 +08:00
LIGHT_PARAM_SHADOW_MAX_DISTANCE ,
LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET ,
LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET ,
LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET ,
2019-09-08 01:38:17 +08:00
LIGHT_PARAM_SHADOW_FADE_START ,
2016-10-04 03:33:42 +08:00
LIGHT_PARAM_SHADOW_NORMAL_BIAS ,
2016-10-27 22:50:26 +08:00
LIGHT_PARAM_SHADOW_BIAS ,
2020-04-08 09:51:52 +08:00
LIGHT_PARAM_SHADOW_PANCAKE_SIZE ,
2022-06-10 18:47:06 +08:00
LIGHT_PARAM_SHADOW_OPACITY ,
2020-04-10 17:30:36 +08:00
LIGHT_PARAM_SHADOW_BLUR ,
2020-04-08 09:51:52 +08:00
LIGHT_PARAM_TRANSMITTANCE_BIAS ,
2022-08-01 07:20:24 +08:00
LIGHT_PARAM_INTENSITY ,
2014-02-10 09:10:30 +08:00
LIGHT_PARAM_MAX
} ;
2017-11-10 10:34:01 +08:00
virtual RID directional_light_create ( ) = 0 ;
virtual RID omni_light_create ( ) = 0 ;
virtual RID spot_light_create ( ) = 0 ;
2014-02-10 09:10:30 +08:00
2016-10-04 03:33:42 +08:00
virtual void light_set_color ( RID p_light , const Color & p_color ) = 0 ;
virtual void light_set_param ( RID p_light , LightParam p_param , float p_value ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void light_set_shadow ( RID p_light , bool p_enabled ) = 0 ;
virtual void light_set_projector ( RID p_light , RID p_texture ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void light_set_negative ( RID p_light , bool p_enable ) = 0 ;
virtual void light_set_cull_mask ( RID p_light , uint32_t p_mask ) = 0 ;
2022-02-25 05:55:14 +08:00
virtual void light_set_distance_fade ( RID p_light , bool p_enabled , float p_begin , float p_shadow , float p_length ) = 0 ;
2017-08-20 07:06:40 +08:00
virtual void light_set_reverse_cull_face_mode ( RID p_light , bool p_enabled ) = 0 ;
2020-06-25 21:33:28 +08:00
enum LightBakeMode {
LIGHT_BAKE_DISABLED ,
LIGHT_BAKE_STATIC ,
2021-11-27 00:47:37 +08:00
LIGHT_BAKE_DYNAMIC ,
2020-06-25 21:33:28 +08:00
} ;
virtual void light_set_bake_mode ( RID p_light , LightBakeMode p_bake_mode ) = 0 ;
virtual void light_set_max_sdfgi_cascade ( RID p_light , uint32_t p_cascade ) = 0 ;
2014-02-10 09:10:30 +08:00
2021-11-28 08:12:10 +08:00
// Omni light
2014-02-10 09:10:30 +08:00
enum LightOmniShadowMode {
LIGHT_OMNI_SHADOW_DUAL_PARABOLOID ,
2016-11-10 10:55:06 +08:00
LIGHT_OMNI_SHADOW_CUBE ,
2014-02-10 09:10:30 +08:00
} ;
virtual void light_omni_set_shadow_mode ( RID p_light , LightOmniShadowMode p_mode ) = 0 ;
2016-11-10 10:55:06 +08:00
2021-11-28 08:12:10 +08:00
// Directional light
2014-02-10 09:10:30 +08:00
enum LightDirectionalShadowMode {
LIGHT_DIRECTIONAL_SHADOW_ORTHOGONAL ,
2014-05-05 09:50:23 +08:00
LIGHT_DIRECTIONAL_SHADOW_PARALLEL_2_SPLITS ,
2020-07-01 20:18:13 +08:00
LIGHT_DIRECTIONAL_SHADOW_PARALLEL_4_SPLITS ,
2014-02-10 09:10:30 +08:00
} ;
2021-10-20 06:40:46 +08:00
enum LightDirectionalSkyMode {
LIGHT_DIRECTIONAL_SKY_MODE_LIGHT_AND_SKY ,
LIGHT_DIRECTIONAL_SKY_MODE_LIGHT_ONLY ,
LIGHT_DIRECTIONAL_SKY_MODE_SKY_ONLY ,
} ;
2014-02-10 09:10:30 +08:00
virtual void light_directional_set_shadow_mode ( RID p_light , LightDirectionalShadowMode p_mode ) = 0 ;
2016-11-11 23:27:52 +08:00
virtual void light_directional_set_blend_splits ( RID p_light , bool p_enable ) = 0 ;
2021-10-20 06:40:46 +08:00
virtual void light_directional_set_sky_mode ( RID p_light , LightDirectionalSkyMode p_mode ) = 0 ;
2014-02-10 09:10:30 +08:00
2022-09-12 17:44:48 +08:00
// Shadow atlas
virtual RID shadow_atlas_create ( ) = 0 ;
virtual void shadow_atlas_set_size ( RID p_atlas , int p_size , bool p_use_16_bits = true ) = 0 ;
virtual void shadow_atlas_set_quadrant_subdivision ( RID p_atlas , int p_quadrant , int p_subdivision ) = 0 ;
2022-02-04 23:41:08 +08:00
virtual void directional_shadow_atlas_set_size ( int p_size , bool p_16_bits = true ) = 0 ;
2021-07-01 10:17:47 +08:00
enum ShadowQuality {
SHADOW_QUALITY_HARD ,
2021-10-19 22:52:57 +08:00
SHADOW_QUALITY_SOFT_VERY_LOW ,
2021-07-01 10:17:47 +08:00
SHADOW_QUALITY_SOFT_LOW ,
SHADOW_QUALITY_SOFT_MEDIUM ,
SHADOW_QUALITY_SOFT_HIGH ,
SHADOW_QUALITY_SOFT_ULTRA ,
SHADOW_QUALITY_MAX
} ;
2022-05-01 07:40:30 +08:00
virtual void positional_soft_shadow_filter_set_quality ( ShadowQuality p_quality ) = 0 ;
virtual void directional_soft_shadow_filter_set_quality ( ShadowQuality p_quality ) = 0 ;
2021-07-20 03:41:55 +08:00
enum LightProjectorFilter {
LIGHT_PROJECTOR_FILTER_NEAREST ,
LIGHT_PROJECTOR_FILTER_LINEAR ,
2021-08-12 06:44:24 +08:00
LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS ,
2021-07-20 03:41:55 +08:00
LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS ,
2021-08-12 06:44:24 +08:00
LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC ,
2021-07-20 03:41:55 +08:00
LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC ,
} ;
virtual void light_projectors_set_filter ( LightProjectorFilter p_filter ) = 0 ;
2016-10-04 03:33:42 +08:00
/* PROBE API */
2014-02-10 09:10:30 +08:00
2016-10-04 03:33:42 +08:00
virtual RID reflection_probe_create ( ) = 0 ;
2014-02-10 09:10:30 +08:00
2016-11-20 00:23:37 +08:00
enum ReflectionProbeUpdateMode {
REFLECTION_PROBE_UPDATE_ONCE ,
REFLECTION_PROBE_UPDATE_ALWAYS ,
2014-02-10 09:10:30 +08:00
} ;
2016-11-20 00:23:37 +08:00
virtual void reflection_probe_set_update_mode ( RID p_probe , ReflectionProbeUpdateMode p_mode ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void reflection_probe_set_intensity ( RID p_probe , float p_intensity ) = 0 ;
2020-06-25 21:33:28 +08:00
enum ReflectionProbeAmbientMode {
REFLECTION_PROBE_AMBIENT_DISABLED ,
REFLECTION_PROBE_AMBIENT_ENVIRONMENT ,
2020-07-01 20:18:13 +08:00
REFLECTION_PROBE_AMBIENT_COLOR ,
2020-06-25 21:33:28 +08:00
} ;
virtual void reflection_probe_set_ambient_mode ( RID p_probe , ReflectionProbeAmbientMode p_mode ) = 0 ;
virtual void reflection_probe_set_ambient_color ( RID p_probe , const Color & p_color ) = 0 ;
virtual void reflection_probe_set_ambient_energy ( RID p_probe , float p_energy ) = 0 ;
2016-11-20 00:23:37 +08:00
virtual void reflection_probe_set_max_distance ( RID p_probe , float p_distance ) = 0 ;
2022-07-12 15:43:01 +08:00
virtual void reflection_probe_set_size ( RID p_probe , const Vector3 & p_size ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void reflection_probe_set_origin_offset ( RID p_probe , const Vector3 & p_offset ) = 0 ;
2016-11-20 00:23:37 +08:00
virtual void reflection_probe_set_as_interior ( RID p_probe , bool p_enable ) = 0 ;
virtual void reflection_probe_set_enable_box_projection ( RID p_probe , bool p_enable ) = 0 ;
virtual void reflection_probe_set_enable_shadows ( RID p_probe , bool p_enable ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void reflection_probe_set_cull_mask ( RID p_probe , uint32_t p_layers ) = 0 ;
2018-09-29 03:40:20 +08:00
virtual void reflection_probe_set_resolution ( RID p_probe , int p_resolution ) = 0 ;
2021-12-29 07:10:41 +08:00
virtual void reflection_probe_set_mesh_lod_threshold ( RID p_probe , float p_pixels ) = 0 ;
2016-03-09 07:00:52 +08:00
2020-04-14 11:05:21 +08:00
/* DECAL API */
enum DecalTexture {
DECAL_TEXTURE_ALBEDO ,
DECAL_TEXTURE_NORMAL ,
DECAL_TEXTURE_ORM ,
DECAL_TEXTURE_EMISSION ,
DECAL_TEXTURE_MAX
} ;
virtual RID decal_create ( ) = 0 ;
2022-07-12 15:43:01 +08:00
virtual void decal_set_size ( RID p_decal , const Vector3 & p_size ) = 0 ;
2020-04-14 11:05:21 +08:00
virtual void decal_set_texture ( RID p_decal , DecalTexture p_type , RID p_texture ) = 0 ;
virtual void decal_set_emission_energy ( RID p_decal , float p_energy ) = 0 ;
virtual void decal_set_albedo_mix ( RID p_decal , float p_mix ) = 0 ;
virtual void decal_set_modulate ( RID p_decal , const Color & p_modulate ) = 0 ;
virtual void decal_set_cull_mask ( RID p_decal , uint32_t p_layers ) = 0 ;
virtual void decal_set_distance_fade ( RID p_decal , bool p_enabled , float p_begin , float p_length ) = 0 ;
virtual void decal_set_fade ( RID p_decal , float p_above , float p_below ) = 0 ;
virtual void decal_set_normal_fade ( RID p_decal , float p_fade ) = 0 ;
2021-07-20 03:41:55 +08:00
enum DecalFilter {
DECAL_FILTER_NEAREST ,
DECAL_FILTER_LINEAR ,
2021-08-12 06:44:24 +08:00
DECAL_FILTER_NEAREST_MIPMAPS ,
2021-07-20 03:41:55 +08:00
DECAL_FILTER_LINEAR_MIPMAPS ,
2021-08-12 06:44:24 +08:00
DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC ,
2021-07-20 03:41:55 +08:00
DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC ,
} ;
virtual void decals_set_filter ( DecalFilter p_quality ) = 0 ;
2021-06-05 06:47:26 +08:00
/* VOXEL GI API */
2014-05-29 21:56:39 +08:00
2021-06-05 06:47:26 +08:00
virtual RID voxel_gi_create ( ) = 0 ;
2014-06-11 21:41:03 +08:00
2021-06-05 06:47:26 +08:00
virtual void voxel_gi_allocate_data ( RID p_voxel_gi , const Transform3D & p_to_cell_xform , const AABB & p_aabb , const Vector3i & p_octree_size , const Vector < uint8_t > & p_octree_cells , const Vector < uint8_t > & p_data_cells , const Vector < uint8_t > & p_distance_field , const Vector < int > & p_level_counts ) = 0 ;
2014-06-11 21:41:03 +08:00
2021-06-05 06:47:26 +08:00
virtual AABB voxel_gi_get_bounds ( RID p_voxel_gi ) const = 0 ;
virtual Vector3i voxel_gi_get_octree_size ( RID p_voxel_gi ) const = 0 ;
virtual Vector < uint8_t > voxel_gi_get_octree_cells ( RID p_voxel_gi ) const = 0 ;
virtual Vector < uint8_t > voxel_gi_get_data_cells ( RID p_voxel_gi ) const = 0 ;
virtual Vector < uint8_t > voxel_gi_get_distance_field ( RID p_voxel_gi ) const = 0 ;
virtual Vector < int > voxel_gi_get_level_counts ( RID p_voxel_gi ) const = 0 ;
virtual Transform3D voxel_gi_get_to_cell_xform ( RID p_voxel_gi ) const = 0 ;
2014-06-11 21:41:03 +08:00
2021-06-05 06:47:26 +08:00
virtual void voxel_gi_set_dynamic_range ( RID p_voxel_gi , float p_range ) = 0 ;
virtual void voxel_gi_set_propagation ( RID p_voxel_gi , float p_range ) = 0 ;
virtual void voxel_gi_set_energy ( RID p_voxel_gi , float p_energy ) = 0 ;
2022-08-01 07:20:24 +08:00
virtual void voxel_gi_set_baked_exposure_normalization ( RID p_voxel_gi , float p_baked_exposure ) = 0 ;
2021-06-05 06:47:26 +08:00
virtual void voxel_gi_set_bias ( RID p_voxel_gi , float p_bias ) = 0 ;
virtual void voxel_gi_set_normal_bias ( RID p_voxel_gi , float p_range ) = 0 ;
virtual void voxel_gi_set_interior ( RID p_voxel_gi , bool p_enable ) = 0 ;
virtual void voxel_gi_set_use_two_bounces ( RID p_voxel_gi , bool p_enable ) = 0 ;
2016-01-31 20:56:53 +08:00
2021-06-05 06:47:26 +08:00
enum VoxelGIQuality {
VOXEL_GI_QUALITY_LOW ,
VOXEL_GI_QUALITY_HIGH ,
2020-06-25 21:33:28 +08:00
} ;
2021-06-05 06:47:26 +08:00
virtual void voxel_gi_set_quality ( VoxelGIQuality ) = 0 ;
2020-06-25 21:33:28 +08:00
2020-05-01 20:34:23 +08:00
/* LIGHTMAP */
2017-12-14 19:59:46 +08:00
2020-05-01 20:34:23 +08:00
virtual RID lightmap_create ( ) = 0 ;
virtual void lightmap_set_textures ( RID p_lightmap , RID p_light , bool p_uses_spherical_haromics ) = 0 ;
virtual void lightmap_set_probe_bounds ( RID p_lightmap , const AABB & p_bounds ) = 0 ;
virtual void lightmap_set_probe_interior ( RID p_lightmap , bool p_interior ) = 0 ;
virtual void lightmap_set_probe_capture_data ( RID p_lightmap , const PackedVector3Array & p_points , const PackedColorArray & p_point_sh , const PackedInt32Array & p_tetrahedra , const PackedInt32Array & p_bsp_tree ) = 0 ;
2022-08-01 07:20:24 +08:00
virtual void lightmap_set_baked_exposure_normalization ( RID p_lightmap , float p_exposure ) = 0 ;
2020-05-01 20:34:23 +08:00
virtual PackedVector3Array lightmap_get_probe_capture_points ( RID p_lightmap ) const = 0 ;
virtual PackedColorArray lightmap_get_probe_capture_sh ( RID p_lightmap ) const = 0 ;
virtual PackedInt32Array lightmap_get_probe_capture_tetrahedra ( RID p_lightmap ) const = 0 ;
virtual PackedInt32Array lightmap_get_probe_capture_bsp_tree ( RID p_lightmap ) const = 0 ;
virtual void lightmap_set_probe_capture_update_speed ( float p_speed ) = 0 ;
2017-12-14 19:59:46 +08:00
2016-12-30 19:35:54 +08:00
/* PARTICLES API */
virtual RID particles_create ( ) = 0 ;
2021-05-11 00:12:44 +08:00
enum ParticlesMode {
PARTICLES_MODE_2D ,
PARTICLES_MODE_3D
} ;
virtual void particles_set_mode ( RID p_particles , ParticlesMode p_mode ) = 0 ;
2020-09-06 20:18:10 +08:00
virtual void particles_set_emitting ( RID p_particles , bool p_enable ) = 0 ;
2017-12-23 12:08:50 +08:00
virtual bool particles_get_emitting ( RID p_particles ) = 0 ;
2016-12-30 19:35:54 +08:00
virtual void particles_set_amount ( RID p_particles , int p_amount ) = 0 ;
2021-02-02 10:16:37 +08:00
virtual void particles_set_lifetime ( RID p_particles , double p_lifetime ) = 0 ;
2017-06-25 19:01:15 +08:00
virtual void particles_set_one_shot ( RID p_particles , bool p_one_shot ) = 0 ;
2021-02-02 10:16:37 +08:00
virtual void particles_set_pre_process_time ( RID p_particles , double p_time ) = 0 ;
2016-12-30 19:35:54 +08:00
virtual void particles_set_explosiveness_ratio ( RID p_particles , float p_ratio ) = 0 ;
virtual void particles_set_randomness_ratio ( RID p_particles , float p_ratio ) = 0 ;
2017-11-17 10:09:00 +08:00
virtual void particles_set_custom_aabb ( RID p_particles , const AABB & p_aabb ) = 0 ;
2021-02-02 10:16:37 +08:00
virtual void particles_set_speed_scale ( RID p_particles , double p_scale ) = 0 ;
2016-12-30 19:35:54 +08:00
virtual void particles_set_use_local_coordinates ( RID p_particles , bool p_enable ) = 0 ;
virtual void particles_set_process_material ( RID p_particles , RID p_material ) = 0 ;
2017-04-07 10:36:37 +08:00
virtual void particles_set_fixed_fps ( RID p_particles , int p_fps ) = 0 ;
2021-04-27 23:43:49 +08:00
virtual void particles_set_interpolate ( RID p_particles , bool p_enable ) = 0 ;
2017-04-07 10:36:37 +08:00
virtual void particles_set_fractional_delta ( RID p_particles , bool p_enable ) = 0 ;
2020-10-08 08:29:49 +08:00
virtual void particles_set_collision_base_size ( RID p_particles , float p_size ) = 0 ;
2021-04-27 23:43:49 +08:00
enum ParticlesTransformAlign {
PARTICLES_TRANSFORM_ALIGN_DISABLED ,
PARTICLES_TRANSFORM_ALIGN_Z_BILLBOARD ,
PARTICLES_TRANSFORM_ALIGN_Y_TO_VELOCITY ,
PARTICLES_TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY ,
} ;
virtual void particles_set_transform_align ( RID p_particles , ParticlesTransformAlign p_transform_align ) = 0 ;
virtual void particles_set_trails ( RID p_particles , bool p_enable , float p_length_sec ) = 0 ;
2020-10-17 13:08:21 +08:00
virtual void particles_set_trail_bind_poses ( RID p_particles , const Vector < Transform3D > & p_bind_poses ) = 0 ;
2021-04-27 23:43:49 +08:00
2019-11-09 16:51:17 +08:00
virtual bool particles_is_inactive ( RID p_particles ) = 0 ;
virtual void particles_request_process ( RID p_particles ) = 0 ;
2017-06-25 19:01:15 +08:00
virtual void particles_restart ( RID p_particles ) = 0 ;
2016-01-31 20:56:53 +08:00
2020-09-06 20:18:10 +08:00
virtual void particles_set_subemitter ( RID p_particles , RID p_subemitter_particles ) = 0 ;
enum ParticlesEmitFlags {
PARTICLES_EMIT_FLAG_POSITION = 1 ,
PARTICLES_EMIT_FLAG_ROTATION_SCALE = 2 ,
PARTICLES_EMIT_FLAG_VELOCITY = 4 ,
PARTICLES_EMIT_FLAG_COLOR = 8 ,
PARTICLES_EMIT_FLAG_CUSTOM = 16
} ;
2020-10-17 13:08:21 +08:00
virtual void particles_emit ( RID p_particles , const Transform3D & p_transform , const Vector3 & p_velocity , const Color & p_color , const Color & p_custom , uint32_t p_emit_flags ) = 0 ;
2020-09-06 20:18:10 +08:00
2016-12-30 19:35:54 +08:00
enum ParticlesDrawOrder {
PARTICLES_DRAW_ORDER_INDEX ,
PARTICLES_DRAW_ORDER_LIFETIME ,
2021-05-20 22:25:06 +08:00
PARTICLES_DRAW_ORDER_REVERSE_LIFETIME ,
2016-12-30 19:35:54 +08:00
PARTICLES_DRAW_ORDER_VIEW_DEPTH ,
} ;
2014-10-28 09:54:32 +08:00
2016-12-30 19:35:54 +08:00
virtual void particles_set_draw_order ( RID p_particles , ParticlesDrawOrder p_order ) = 0 ;
2014-10-28 09:54:32 +08:00
2016-12-30 19:35:54 +08:00
virtual void particles_set_draw_passes ( RID p_particles , int p_count ) = 0 ;
virtual void particles_set_draw_pass_mesh ( RID p_particles , int p_pass , RID p_mesh ) = 0 ;
2014-10-28 09:54:32 +08:00
2017-11-17 10:09:00 +08:00
virtual AABB particles_get_current_aabb ( RID p_particles ) = 0 ;
2014-05-29 21:56:39 +08:00
2021-11-28 08:12:10 +08:00
virtual void particles_set_emission_transform ( RID p_particles , const Transform3D & p_transform ) = 0 ; // This is only used for 2D, in 3D it's automatic.
2017-06-22 03:25:45 +08:00
2020-10-08 08:29:49 +08:00
/* PARTICLES COLLISION API */
virtual RID particles_collision_create ( ) = 0 ;
enum ParticlesCollisionType {
PARTICLES_COLLISION_TYPE_SPHERE_ATTRACT ,
PARTICLES_COLLISION_TYPE_BOX_ATTRACT ,
PARTICLES_COLLISION_TYPE_VECTOR_FIELD_ATTRACT ,
PARTICLES_COLLISION_TYPE_SPHERE_COLLIDE ,
PARTICLES_COLLISION_TYPE_BOX_COLLIDE ,
PARTICLES_COLLISION_TYPE_SDF_COLLIDE ,
PARTICLES_COLLISION_TYPE_HEIGHTFIELD_COLLIDE ,
} ;
virtual void particles_collision_set_collision_type ( RID p_particles_collision , ParticlesCollisionType p_type ) = 0 ;
virtual void particles_collision_set_cull_mask ( RID p_particles_collision , uint32_t p_cull_mask ) = 0 ;
2021-11-28 08:12:10 +08:00
virtual void particles_collision_set_sphere_radius ( RID p_particles_collision , real_t p_radius ) = 0 ; // For spheres.
virtual void particles_collision_set_box_extents ( RID p_particles_collision , const Vector3 & p_extents ) = 0 ; // For non-spheres.
2021-08-12 22:07:47 +08:00
virtual void particles_collision_set_attractor_strength ( RID p_particles_collision , real_t p_strength ) = 0 ;
virtual void particles_collision_set_attractor_directionality ( RID p_particles_collision , real_t p_directionality ) = 0 ;
virtual void particles_collision_set_attractor_attenuation ( RID p_particles_collision , real_t p_curve ) = 0 ;
2021-11-28 08:12:10 +08:00
virtual void particles_collision_set_field_texture ( RID p_particles_collision , RID p_texture ) = 0 ; // For SDF and vector field, heightfield is dynamic.
2020-10-08 08:29:49 +08:00
2021-11-28 08:12:10 +08:00
virtual void particles_collision_height_field_update ( RID p_particles_collision ) = 0 ; // For SDF and vector field.
2020-10-08 08:29:49 +08:00
2021-11-28 08:12:10 +08:00
enum ParticlesCollisionHeightfieldResolution { // Longest axis resolution.
2020-10-08 08:29:49 +08:00
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_256 ,
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_512 ,
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_1024 ,
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_2048 ,
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_4096 ,
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_8192 ,
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_MAX ,
} ;
2021-11-28 08:12:10 +08:00
virtual void particles_collision_set_height_field_resolution ( RID p_particles_collision , ParticlesCollisionHeightfieldResolution p_resolution ) = 0 ; // For SDF and vector field.
2020-10-08 08:29:49 +08:00
2021-10-03 19:28:55 +08:00
/* FOG VOLUME API */
virtual RID fog_volume_create ( ) = 0 ;
enum FogVolumeShape {
FOG_VOLUME_SHAPE_ELLIPSOID ,
2022-05-21 18:17:49 +08:00
FOG_VOLUME_SHAPE_CONE ,
FOG_VOLUME_SHAPE_CYLINDER ,
2021-10-03 19:28:55 +08:00
FOG_VOLUME_SHAPE_BOX ,
FOG_VOLUME_SHAPE_WORLD ,
2022-05-21 18:17:49 +08:00
FOG_VOLUME_SHAPE_MAX ,
2021-10-03 19:28:55 +08:00
} ;
virtual void fog_volume_set_shape ( RID p_fog_volume , FogVolumeShape p_shape ) = 0 ;
2022-07-12 15:43:01 +08:00
virtual void fog_volume_set_size ( RID p_fog_volume , const Vector3 & p_size ) = 0 ;
2021-10-03 19:28:55 +08:00
virtual void fog_volume_set_material ( RID p_fog_volume , RID p_material ) = 0 ;
2021-06-17 02:43:02 +08:00
/* VISIBILITY NOTIFIER API */
virtual RID visibility_notifier_create ( ) = 0 ;
virtual void visibility_notifier_set_aabb ( RID p_notifier , const AABB & p_aabb ) = 0 ;
virtual void visibility_notifier_set_callbacks ( RID p_notifier , const Callable & p_enter_callbable , const Callable & p_exit_callable ) = 0 ;
/* OCCLUDER API */
virtual RID occluder_create ( ) = 0 ;
virtual void occluder_set_mesh ( RID p_occluder , const PackedVector3Array & p_vertices , const PackedInt32Array & p_indices ) = 0 ;
2014-02-10 09:10:30 +08:00
/* CAMERA API */
2016-03-09 07:00:52 +08:00
2014-02-10 09:10:30 +08:00
virtual RID camera_create ( ) = 0 ;
virtual void camera_set_perspective ( RID p_camera , float p_fovy_degrees , float p_z_near , float p_z_far ) = 0 ;
virtual void camera_set_orthogonal ( RID p_camera , float p_size , float p_z_near , float p_z_far ) = 0 ;
2019-02-20 00:17:02 +08:00
virtual void camera_set_frustum ( RID p_camera , float p_size , Vector2 p_offset , float p_z_near , float p_z_far ) = 0 ;
2020-10-17 13:08:21 +08:00
virtual void camera_set_transform ( RID p_camera , const Transform3D & p_transform ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void camera_set_cull_mask ( RID p_camera , uint32_t p_layers ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void camera_set_environment ( RID p_camera , RID p_env ) = 0 ;
2022-08-01 07:20:24 +08:00
virtual void camera_set_camera_attributes ( RID p_camera , RID p_camera_attributes ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void camera_set_use_vertical_aspect ( RID p_camera , bool p_enable ) = 0 ;
2021-07-01 10:17:47 +08:00
/* VIEWPORT API */
2014-02-10 09:10:30 +08:00
2020-10-24 23:15:43 +08:00
enum CanvasItemTextureFilter {
2021-11-28 08:12:10 +08:00
CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , // Uses canvas item setting for draw command, uses global setting for canvas item.
2020-10-24 23:15:43 +08:00
CANVAS_ITEM_TEXTURE_FILTER_NEAREST ,
CANVAS_ITEM_TEXTURE_FILTER_LINEAR ,
CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS ,
CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS ,
CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC ,
CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC ,
CANVAS_ITEM_TEXTURE_FILTER_MAX
} ;
enum CanvasItemTextureRepeat {
2021-11-28 08:12:10 +08:00
CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT , // Uses canvas item setting for draw command, uses global setting for canvas item.
2020-10-24 23:15:43 +08:00
CANVAS_ITEM_TEXTURE_REPEAT_DISABLED ,
CANVAS_ITEM_TEXTURE_REPEAT_ENABLED ,
CANVAS_ITEM_TEXTURE_REPEAT_MIRROR ,
CANVAS_ITEM_TEXTURE_REPEAT_MAX ,
} ;
2014-02-10 09:10:30 +08:00
virtual RID viewport_create ( ) = 0 ;
2021-11-24 05:16:03 +08:00
enum ViewportScaling3DMode {
VIEWPORT_SCALING_3D_MODE_BILINEAR ,
VIEWPORT_SCALING_3D_MODE_FSR ,
2023-01-13 09:54:15 +08:00
VIEWPORT_SCALING_3D_MODE_MAX ,
VIEWPORT_SCALING_3D_MODE_OFF = 255 , // for internal use only
2021-11-24 05:16:03 +08:00
} ;
2020-04-08 22:47:36 +08:00
virtual void viewport_set_use_xr ( RID p_viewport , bool p_use_xr ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void viewport_set_size ( RID p_viewport , int p_width , int p_height ) = 0 ;
virtual void viewport_set_active ( RID p_viewport , bool p_active ) = 0 ;
2016-10-05 12:26:35 +08:00
virtual void viewport_set_parent_viewport ( RID p_viewport , RID p_parent_viewport ) = 0 ;
2021-09-03 02:07:04 +08:00
virtual void viewport_set_canvas_cull_mask ( RID p_viewport , uint32_t p_canvas_cull_mask ) = 0 ;
2016-10-04 03:33:42 +08:00
2020-03-04 09:51:12 +08:00
virtual void viewport_attach_to_screen ( RID p_viewport , const Rect2 & p_rect = Rect2 ( ) , DisplayServer : : WindowID p_screen = DisplayServer : : MAIN_WINDOW_ID ) = 0 ;
2019-05-09 02:25:34 +08:00
virtual void viewport_set_render_direct_to_screen ( RID p_viewport , bool p_enable ) = 0 ;
2014-02-10 09:10:30 +08:00
2021-11-24 05:16:03 +08:00
virtual void viewport_set_scaling_3d_mode ( RID p_viewport , ViewportScaling3DMode p_scaling_3d_mode ) = 0 ;
virtual void viewport_set_scaling_3d_scale ( RID p_viewport , float p_scaling_3d_scale ) = 0 ;
virtual void viewport_set_fsr_sharpness ( RID p_viewport , float p_fsr_sharpness ) = 0 ;
2022-06-12 07:49:59 +08:00
virtual void viewport_set_texture_mipmap_bias ( RID p_viewport , float p_texture_mipmap_bias ) = 0 ;
2021-11-24 05:16:03 +08:00
2016-10-04 03:33:42 +08:00
enum ViewportUpdateMode {
VIEWPORT_UPDATE_DISABLED ,
2021-11-28 08:12:10 +08:00
VIEWPORT_UPDATE_ONCE , // Then goes to disabled, must be manually updated.
VIEWPORT_UPDATE_WHEN_VISIBLE , // Default
2020-03-15 00:06:39 +08:00
VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE ,
2016-10-04 03:33:42 +08:00
VIEWPORT_UPDATE_ALWAYS
2014-02-10 09:10:30 +08:00
} ;
2016-10-04 03:33:42 +08:00
virtual void viewport_set_update_mode ( RID p_viewport , ViewportUpdateMode p_mode ) = 0 ;
2014-04-15 09:43:44 +08:00
2016-10-04 03:33:42 +08:00
enum ViewportClearMode {
VIEWPORT_CLEAR_ALWAYS ,
2016-10-05 12:26:35 +08:00
VIEWPORT_CLEAR_NEVER ,
2016-10-04 03:33:42 +08:00
VIEWPORT_CLEAR_ONLY_NEXT_FRAME
2014-02-10 09:10:30 +08:00
} ;
2016-03-09 07:00:52 +08:00
2016-10-04 03:33:42 +08:00
virtual void viewport_set_clear_mode ( RID p_viewport , ViewportClearMode p_clear_mode ) = 0 ;
2023-03-31 08:28:53 +08:00
virtual RID viewport_get_render_target ( RID p_viewport ) const = 0 ;
2016-10-04 03:33:42 +08:00
virtual RID viewport_get_texture ( RID p_viewport ) const = 0 ;
2016-03-09 07:00:52 +08:00
2023-01-30 08:04:39 +08:00
enum ViewportEnvironmentMode {
VIEWPORT_ENVIRONMENT_DISABLED ,
VIEWPORT_ENVIRONMENT_ENABLED ,
VIEWPORT_ENVIRONMENT_INHERIT ,
VIEWPORT_ENVIRONMENT_MAX ,
} ;
virtual void viewport_set_environment_mode ( RID p_viewport , ViewportEnvironmentMode p_mode ) = 0 ;
2021-06-30 00:36:32 +08:00
virtual void viewport_set_disable_3d ( RID p_viewport , bool p_disable ) = 0 ;
2021-07-01 10:17:47 +08:00
virtual void viewport_set_disable_2d ( RID p_viewport , bool p_disable ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void viewport_attach_camera ( RID p_viewport , RID p_camera ) = 0 ;
virtual void viewport_set_scenario ( RID p_viewport , RID p_scenario ) = 0 ;
virtual void viewport_attach_canvas ( RID p_viewport , RID p_canvas ) = 0 ;
virtual void viewport_remove_canvas ( RID p_viewport , RID p_canvas ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void viewport_set_canvas_transform ( RID p_viewport , RID p_canvas , const Transform2D & p_offset ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void viewport_set_transparent_background ( RID p_viewport , bool p_enabled ) = 0 ;
2020-10-30 05:09:16 +08:00
virtual void viewport_set_snap_2d_transforms_to_pixel ( RID p_viewport , bool p_enabled ) = 0 ;
virtual void viewport_set_snap_2d_vertices_to_pixel ( RID p_viewport , bool p_enabled ) = 0 ;
2014-02-10 09:10:30 +08:00
2020-10-24 23:15:43 +08:00
virtual void viewport_set_default_canvas_item_texture_filter ( RID p_viewport , CanvasItemTextureFilter p_filter ) = 0 ;
virtual void viewport_set_default_canvas_item_texture_repeat ( RID p_viewport , CanvasItemTextureRepeat p_repeat ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void viewport_set_global_canvas_transform ( RID p_viewport , const Transform2D & p_transform ) = 0 ;
2018-10-31 04:53:00 +08:00
virtual void viewport_set_canvas_stacking ( RID p_viewport , RID p_canvas , int p_layer , int p_sublayer ) = 0 ;
2014-02-10 09:10:30 +08:00
2020-11-26 20:50:21 +08:00
enum ViewportSDFOversize {
VIEWPORT_SDF_OVERSIZE_100_PERCENT ,
VIEWPORT_SDF_OVERSIZE_120_PERCENT ,
VIEWPORT_SDF_OVERSIZE_150_PERCENT ,
VIEWPORT_SDF_OVERSIZE_200_PERCENT ,
VIEWPORT_SDF_OVERSIZE_MAX
} ;
enum ViewportSDFScale {
VIEWPORT_SDF_SCALE_100_PERCENT ,
VIEWPORT_SDF_SCALE_50_PERCENT ,
VIEWPORT_SDF_SCALE_25_PERCENT ,
VIEWPORT_SDF_SCALE_MAX
} ;
virtual void viewport_set_sdf_oversize_and_scale ( RID p_viewport , ViewportSDFOversize p_oversize , ViewportSDFScale p_scale ) = 0 ;
2022-05-01 07:40:30 +08:00
virtual void viewport_set_positional_shadow_atlas_size ( RID p_viewport , int p_size , bool p_16_bits = true ) = 0 ;
virtual void viewport_set_positional_shadow_atlas_quadrant_subdivision ( RID p_viewport , int p_quadrant , int p_subdiv ) = 0 ;
2016-11-10 10:55:06 +08:00
2017-01-02 09:16:52 +08:00
enum ViewportMSAA {
VIEWPORT_MSAA_DISABLED ,
VIEWPORT_MSAA_2X ,
VIEWPORT_MSAA_4X ,
VIEWPORT_MSAA_8X ,
2020-04-13 02:33:57 +08:00
VIEWPORT_MSAA_MAX ,
2017-01-02 09:16:52 +08:00
} ;
2014-02-10 09:10:30 +08:00
2022-08-13 07:02:32 +08:00
virtual void viewport_set_msaa_3d ( RID p_viewport , ViewportMSAA p_msaa ) = 0 ;
virtual void viewport_set_msaa_2d ( RID p_viewport , ViewportMSAA p_msaa ) = 0 ;
2017-06-09 11:23:50 +08:00
2020-04-12 12:49:10 +08:00
enum ViewportScreenSpaceAA {
VIEWPORT_SCREEN_SPACE_AA_DISABLED ,
VIEWPORT_SCREEN_SPACE_AA_FXAA ,
2020-04-20 17:48:00 +08:00
VIEWPORT_SCREEN_SPACE_AA_MAX ,
2020-04-12 12:49:10 +08:00
} ;
2020-04-20 17:48:00 +08:00
2020-04-12 12:49:10 +08:00
virtual void viewport_set_screen_space_aa ( RID p_viewport , ViewportScreenSpaceAA p_mode ) = 0 ;
2022-04-04 22:10:22 +08:00
virtual void viewport_set_use_taa ( RID p_viewport , bool p_use_taa ) = 0 ;
2020-04-21 05:34:47 +08:00
virtual void viewport_set_use_debanding ( RID p_viewport , bool p_use_debanding ) = 0 ;
2021-12-29 07:10:41 +08:00
virtual void viewport_set_mesh_lod_threshold ( RID p_viewport , float p_pixels ) = 0 ;
2020-12-18 02:56:59 +08:00
2022-04-04 22:10:22 +08:00
virtual void viewport_set_use_occlusion_culling ( RID p_viewport , bool p_use_occlusion_culling ) = 0 ;
2021-04-21 00:40:24 +08:00
virtual void viewport_set_occlusion_rays_per_thread ( int p_rays_per_thread ) = 0 ;
enum ViewportOcclusionCullingBuildQuality {
VIEWPORT_OCCLUSION_BUILD_QUALITY_LOW = 0 ,
VIEWPORT_OCCLUSION_BUILD_QUALITY_MEDIUM = 1 ,
VIEWPORT_OCCLUSION_BUILD_QUALITY_HIGH = 2 ,
} ;
virtual void viewport_set_occlusion_culling_build_quality ( ViewportOcclusionCullingBuildQuality p_quality ) = 0 ;
2017-06-12 02:52:03 +08:00
enum ViewportRenderInfo {
VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME ,
2021-07-03 07:14:19 +08:00
VIEWPORT_RENDER_INFO_PRIMITIVES_IN_FRAME ,
2017-06-12 02:52:03 +08:00
VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME ,
2020-04-20 17:48:00 +08:00
VIEWPORT_RENDER_INFO_MAX ,
2017-06-12 02:52:03 +08:00
} ;
2021-07-03 07:14:19 +08:00
enum ViewportRenderInfoType {
VIEWPORT_RENDER_INFO_TYPE_VISIBLE ,
VIEWPORT_RENDER_INFO_TYPE_SHADOW ,
VIEWPORT_RENDER_INFO_TYPE_MAX
} ;
virtual int viewport_get_render_info ( RID p_viewport , ViewportRenderInfoType p_type , ViewportRenderInfo p_info ) = 0 ;
2017-06-12 02:52:03 +08:00
enum ViewportDebugDraw {
VIEWPORT_DEBUG_DRAW_DISABLED ,
VIEWPORT_DEBUG_DRAW_UNSHADED ,
2019-09-07 09:51:27 +08:00
VIEWPORT_DEBUG_DRAW_LIGHTING ,
2017-06-12 02:52:03 +08:00
VIEWPORT_DEBUG_DRAW_OVERDRAW ,
VIEWPORT_DEBUG_DRAW_WIREFRAME ,
2020-01-27 07:09:40 +08:00
VIEWPORT_DEBUG_DRAW_NORMAL_BUFFER ,
2021-06-05 06:47:26 +08:00
VIEWPORT_DEBUG_DRAW_VOXEL_GI_ALBEDO ,
VIEWPORT_DEBUG_DRAW_VOXEL_GI_LIGHTING ,
VIEWPORT_DEBUG_DRAW_VOXEL_GI_EMISSION ,
2019-10-04 04:39:08 +08:00
VIEWPORT_DEBUG_DRAW_SHADOW_ATLAS ,
VIEWPORT_DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS ,
2020-01-12 09:26:52 +08:00
VIEWPORT_DEBUG_DRAW_SCENE_LUMINANCE ,
2020-01-25 18:18:55 +08:00
VIEWPORT_DEBUG_DRAW_SSAO ,
2021-08-03 15:07:32 +08:00
VIEWPORT_DEBUG_DRAW_SSIL ,
2020-04-08 09:51:52 +08:00
VIEWPORT_DEBUG_DRAW_PSSM_SPLITS ,
2020-04-14 11:05:21 +08:00
VIEWPORT_DEBUG_DRAW_DECAL_ATLAS ,
2020-06-25 21:33:28 +08:00
VIEWPORT_DEBUG_DRAW_SDFGI ,
VIEWPORT_DEBUG_DRAW_SDFGI_PROBES ,
VIEWPORT_DEBUG_DRAW_GI_BUFFER ,
2020-12-18 02:56:59 +08:00
VIEWPORT_DEBUG_DRAW_DISABLE_LOD ,
2021-01-18 00:25:38 +08:00
VIEWPORT_DEBUG_DRAW_CLUSTER_OMNI_LIGHTS ,
VIEWPORT_DEBUG_DRAW_CLUSTER_SPOT_LIGHTS ,
VIEWPORT_DEBUG_DRAW_CLUSTER_DECALS ,
VIEWPORT_DEBUG_DRAW_CLUSTER_REFLECTION_PROBES ,
2021-04-21 00:40:24 +08:00
VIEWPORT_DEBUG_DRAW_OCCLUDERS ,
2022-04-04 22:10:22 +08:00
VIEWPORT_DEBUG_DRAW_MOTION_VECTORS ,
2017-06-12 02:52:03 +08:00
} ;
virtual void viewport_set_debug_draw ( RID p_viewport , ViewportDebugDraw p_draw ) = 0 ;
2020-04-11 01:18:42 +08:00
virtual void viewport_set_measure_render_time ( RID p_viewport , bool p_enable ) = 0 ;
2021-02-02 10:16:37 +08:00
virtual double viewport_get_measured_render_time_cpu ( RID p_viewport ) const = 0 ;
virtual double viewport_get_measured_render_time_gpu ( RID p_viewport ) const = 0 ;
2020-04-11 01:18:42 +08:00
Implement Running Godot as Movie Writer
* Allows running the game in "movie writer" mode.
* It ensures entirely stable framerate, so your run can be saved stable and with proper sound (which is impossible if your CPU/GPU can't sustain doing this in real-time).
* If disabling vsync, it can save movies faster than the game is run, but if you want to control the interaction it can get difficult.
* Implements a simple, default MJPEG writer.
This new features has two main use cases, which have high demand:
* Saving game videos in high quality and ensuring the frame rate is *completely* stable, always.
* Using Godot as a tool to make movies and animations (which is ideal if you want interaction, or creating them procedurally. No other software is as good for this).
**Note**: This feature **IS NOT** for capturing real-time footage. Use something like OBS, SimpleScreenRecorder or FRAPS to achieve that, as they do a much better job at intercepting the compositor than Godot can probably do using Vulkan or OpenGL natively. If your game runs near real-time when capturing, you can still use this feature but it will play no sound (sound will be saved directly).
Usage:
$ godot --write-movie movie.avi [scene_file.tscn]
Missing:
* Options for configuring video writing via GLOBAL_DEF
* UI Menu for launching with this mode from the editor.
* Add to list of command line options.
* Add a feature tag to override configurations when movie writing (fantastic for saving videos with highest quality settings).
2022-06-17 06:55:19 +08:00
virtual RID viewport_find_from_screen_attachment ( DisplayServer : : WindowID p_id = DisplayServer : : MAIN_WINDOW_ID ) const = 0 ;
2022-02-11 19:33:54 +08:00
enum ViewportVRSMode {
VIEWPORT_VRS_DISABLED ,
VIEWPORT_VRS_TEXTURE ,
VIEWPORT_VRS_XR ,
VIEWPORT_VRS_MAX ,
} ;
virtual void viewport_set_vrs_mode ( RID p_viewport , ViewportVRSMode p_mode ) = 0 ;
virtual void viewport_set_vrs_texture ( RID p_viewport , RID p_texture ) = 0 ;
2019-08-27 04:43:58 +08:00
/* SKY API */
enum SkyMode {
2020-07-11 08:07:30 +08:00
SKY_MODE_AUTOMATIC ,
2019-08-27 04:43:58 +08:00
SKY_MODE_QUALITY ,
2020-07-11 08:07:30 +08:00
SKY_MODE_INCREMENTAL ,
2019-08-27 04:43:58 +08:00
SKY_MODE_REALTIME
} ;
virtual RID sky_create ( ) = 0 ;
virtual void sky_set_radiance_size ( RID p_sky , int p_radiance_size ) = 0 ;
virtual void sky_set_mode ( RID p_sky , SkyMode p_mode ) = 0 ;
2020-03-20 08:32:19 +08:00
virtual void sky_set_material ( RID p_sky , RID p_material ) = 0 ;
2020-05-01 20:34:23 +08:00
virtual Ref < Image > sky_bake_panorama ( RID p_sky , float p_energy , bool p_bake_irradiance , const Size2i & p_size ) = 0 ;
2019-08-27 04:43:58 +08:00
2014-02-10 09:10:30 +08:00
/* ENVIRONMENT API */
virtual RID environment_create ( ) = 0 ;
enum EnvironmentBG {
2016-10-21 18:27:13 +08:00
ENV_BG_CLEAR_COLOR ,
2014-02-10 09:10:30 +08:00
ENV_BG_COLOR ,
2017-05-26 00:53:59 +08:00
ENV_BG_SKY ,
2015-03-16 11:47:37 +08:00
ENV_BG_CANVAS ,
2016-10-21 18:27:13 +08:00
ENV_BG_KEEP ,
2017-08-20 22:17:24 +08:00
ENV_BG_CAMERA_FEED ,
2014-02-10 09:10:30 +08:00
ENV_BG_MAX
} ;
2019-08-27 04:43:58 +08:00
enum EnvironmentAmbientSource {
ENV_AMBIENT_SOURCE_BG ,
ENV_AMBIENT_SOURCE_DISABLED ,
ENV_AMBIENT_SOURCE_COLOR ,
ENV_AMBIENT_SOURCE_SKY ,
} ;
enum EnvironmentReflectionSource {
ENV_REFLECTION_SOURCE_BG ,
ENV_REFLECTION_SOURCE_DISABLED ,
ENV_REFLECTION_SOURCE_SKY ,
} ;
2014-02-10 09:10:30 +08:00
virtual void environment_set_background ( RID p_env , EnvironmentBG p_bg ) = 0 ;
2017-05-26 00:53:59 +08:00
virtual void environment_set_sky ( RID p_env , RID p_sky ) = 0 ;
2017-09-30 05:56:05 +08:00
virtual void environment_set_sky_custom_fov ( RID p_env , float p_scale ) = 0 ;
2018-12-15 13:27:03 +08:00
virtual void environment_set_sky_orientation ( RID p_env , const Basis & p_orientation ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void environment_set_bg_color ( RID p_env , const Color & p_color ) = 0 ;
2022-08-01 07:20:24 +08:00
virtual void environment_set_bg_energy ( RID p_env , float p_multiplier , float p_exposure_value ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void environment_set_canvas_max_layer ( RID p_env , int p_max_layer ) = 0 ;
2021-10-07 21:01:14 +08:00
virtual void environment_set_ambient_light ( RID p_env , const Color & p_color , EnvironmentAmbientSource p_ambient = ENV_AMBIENT_SOURCE_BG , float p_energy = 1.0 , float p_sky_contribution = 0.0 , EnvironmentReflectionSource p_reflection_source = ENV_REFLECTION_SOURCE_BG ) = 0 ;
2014-02-10 09:10:30 +08:00
2016-10-04 03:33:42 +08:00
enum EnvironmentGlowBlendMode {
2020-02-12 16:59:06 +08:00
ENV_GLOW_BLEND_MODE_ADDITIVE ,
ENV_GLOW_BLEND_MODE_SCREEN ,
ENV_GLOW_BLEND_MODE_SOFTLIGHT ,
ENV_GLOW_BLEND_MODE_REPLACE ,
ENV_GLOW_BLEND_MODE_MIX ,
2014-05-29 21:56:39 +08:00
} ;
2020-04-20 17:48:00 +08:00
2022-01-20 23:47:25 +08:00
virtual void environment_set_glow ( RID p_env , bool p_enable , Vector < float > p_levels , float p_intensity , float p_strength , float p_mix , float p_bloom_threshold , EnvironmentGlowBlendMode p_blend_mode , float p_hdr_bleed_threshold , float p_hdr_bleed_scale , float p_hdr_luminance_cap , float p_glow_map_strength , RID p_glow_map ) = 0 ;
2020-03-30 21:46:03 +08:00
virtual void environment_glow_set_use_bicubic_upscale ( bool p_enable ) = 0 ;
2014-06-28 10:21:45 +08:00
2016-10-04 03:33:42 +08:00
enum EnvironmentToneMapper {
ENV_TONE_MAPPER_LINEAR ,
2018-08-26 18:29:20 +08:00
ENV_TONE_MAPPER_REINHARD ,
2016-10-30 07:48:09 +08:00
ENV_TONE_MAPPER_FILMIC ,
2016-12-08 04:49:52 +08:00
ENV_TONE_MAPPER_ACES
2014-02-10 09:10:30 +08:00
} ;
2022-08-01 07:20:24 +08:00
virtual void environment_set_tonemap ( RID p_env , EnvironmentToneMapper p_tone_mapper , float p_exposure , float p_white ) = 0 ;
2020-11-23 09:51:31 +08:00
virtual void environment_set_adjustment ( RID p_env , bool p_enable , float p_brightness , float p_contrast , float p_saturation , bool p_use_1d_color_correction , RID p_color_correction ) = 0 ;
2014-02-10 09:10:30 +08:00
2020-04-02 10:24:52 +08:00
virtual void environment_set_ssr ( RID p_env , bool p_enable , int p_max_steps , float p_fade_in , float p_fade_out , float p_depth_tolerance ) = 0 ;
enum EnvironmentSSRRoughnessQuality {
2022-02-28 08:06:26 +08:00
ENV_SSR_ROUGHNESS_QUALITY_DISABLED ,
ENV_SSR_ROUGHNESS_QUALITY_LOW ,
ENV_SSR_ROUGHNESS_QUALITY_MEDIUM ,
ENV_SSR_ROUGHNESS_QUALITY_HIGH ,
2020-04-02 10:24:52 +08:00
} ;
virtual void environment_set_ssr_roughness_quality ( EnvironmentSSRRoughnessQuality p_quality ) = 0 ;
2017-10-23 00:52:31 +08:00
2020-12-08 13:37:09 +08:00
virtual void environment_set_ssao ( RID p_env , bool p_enable , float p_radius , float p_intensity , float p_power , float p_detail , float p_horizon , float p_sharpness , float p_light_affect , float p_ao_channel_affect ) = 0 ;
2020-01-25 18:18:55 +08:00
enum EnvironmentSSAOQuality {
2020-12-08 13:37:09 +08:00
ENV_SSAO_QUALITY_VERY_LOW ,
2020-01-25 18:18:55 +08:00
ENV_SSAO_QUALITY_LOW ,
ENV_SSAO_QUALITY_MEDIUM ,
ENV_SSAO_QUALITY_HIGH ,
ENV_SSAO_QUALITY_ULTRA ,
} ;
2020-12-08 13:37:09 +08:00
virtual void environment_set_ssao_quality ( EnvironmentSSAOQuality p_quality , bool p_half_size , float p_adaptive_target , int p_blur_passes , float p_fadeout_from , float p_fadeout_to ) = 0 ;
2021-08-03 15:07:32 +08:00
virtual void environment_set_ssil ( RID p_env , bool p_enable , float p_radius , float p_intensity , float p_sharpness , float p_normal_rejection ) = 0 ;
enum EnvironmentSSILQuality {
ENV_SSIL_QUALITY_VERY_LOW ,
ENV_SSIL_QUALITY_LOW ,
ENV_SSIL_QUALITY_MEDIUM ,
ENV_SSIL_QUALITY_HIGH ,
ENV_SSIL_QUALITY_ULTRA ,
} ;
virtual void environment_set_ssil_quality ( EnvironmentSSILQuality p_quality , bool p_half_size , float p_adaptive_target , int p_blur_passes , float p_fadeout_from , float p_fadeout_to ) = 0 ;
2014-02-10 09:10:30 +08:00
2020-06-25 21:33:28 +08:00
enum EnvironmentSDFGIYScale {
2021-05-24 01:10:26 +08:00
ENV_SDFGI_Y_SCALE_50_PERCENT ,
2020-06-25 21:33:28 +08:00
ENV_SDFGI_Y_SCALE_75_PERCENT ,
2021-05-24 01:10:26 +08:00
ENV_SDFGI_Y_SCALE_100_PERCENT ,
2020-06-25 21:33:28 +08:00
} ;
2022-01-14 02:46:14 +08:00
virtual void environment_set_sdfgi ( RID p_env , bool p_enable , int p_cascades , float p_min_cell_size , EnvironmentSDFGIYScale p_y_scale , bool p_use_occlusion , float p_bounce_feedback , bool p_read_sky , float p_energy , float p_normal_bias , float p_probe_bias ) = 0 ;
2020-06-25 21:33:28 +08:00
enum EnvironmentSDFGIRayCount {
2021-01-23 07:50:24 +08:00
ENV_SDFGI_RAY_COUNT_4 ,
2020-06-25 21:33:28 +08:00
ENV_SDFGI_RAY_COUNT_8 ,
ENV_SDFGI_RAY_COUNT_16 ,
ENV_SDFGI_RAY_COUNT_32 ,
ENV_SDFGI_RAY_COUNT_64 ,
ENV_SDFGI_RAY_COUNT_96 ,
ENV_SDFGI_RAY_COUNT_128 ,
ENV_SDFGI_RAY_COUNT_MAX ,
} ;
virtual void environment_set_sdfgi_ray_count ( EnvironmentSDFGIRayCount p_ray_count ) = 0 ;
enum EnvironmentSDFGIFramesToConverge {
ENV_SDFGI_CONVERGE_IN_5_FRAMES ,
ENV_SDFGI_CONVERGE_IN_10_FRAMES ,
ENV_SDFGI_CONVERGE_IN_15_FRAMES ,
ENV_SDFGI_CONVERGE_IN_20_FRAMES ,
ENV_SDFGI_CONVERGE_IN_25_FRAMES ,
ENV_SDFGI_CONVERGE_IN_30_FRAMES ,
ENV_SDFGI_CONVERGE_MAX
} ;
virtual void environment_set_sdfgi_frames_to_converge ( EnvironmentSDFGIFramesToConverge p_frames ) = 0 ;
2021-01-23 07:50:24 +08:00
enum EnvironmentSDFGIFramesToUpdateLight {
ENV_SDFGI_UPDATE_LIGHT_IN_1_FRAME ,
ENV_SDFGI_UPDATE_LIGHT_IN_2_FRAMES ,
ENV_SDFGI_UPDATE_LIGHT_IN_4_FRAMES ,
ENV_SDFGI_UPDATE_LIGHT_IN_8_FRAMES ,
ENV_SDFGI_UPDATE_LIGHT_IN_16_FRAMES ,
ENV_SDFGI_UPDATE_LIGHT_MAX ,
} ;
virtual void environment_set_sdfgi_frames_to_update_light ( EnvironmentSDFGIFramesToUpdateLight p_update ) = 0 ;
2022-02-24 06:54:06 +08:00
virtual void environment_set_fog ( RID p_env , bool p_enable , const Color & p_light_color , float p_light_energy , float p_sun_scatter , float p_density , float p_height , float p_height_density , float p_aerial_perspective , float p_sky_affect ) = 0 ;
2017-06-07 10:16:17 +08:00
2022-02-24 06:54:06 +08:00
virtual void environment_set_volumetric_fog ( RID p_env , bool p_enable , float p_density , const Color & p_albedo , const Color & p_emission , float p_emission_energy , float p_anisotropy , float p_length , float p_detail_spread , float p_gi_inject , bool p_temporal_reprojection , float p_temporal_reprojection_amount , float p_ambient_inject , float p_sky_affect ) = 0 ;
2020-08-13 09:21:01 +08:00
virtual void environment_set_volumetric_fog_volume_size ( int p_size , int p_depth ) = 0 ;
virtual void environment_set_volumetric_fog_filter_active ( bool p_enable ) = 0 ;
2020-05-01 20:34:23 +08:00
virtual Ref < Image > environment_bake_panorama ( RID p_env , bool p_bake_irradiance , const Size2i & p_size ) = 0 ;
2020-06-25 21:33:28 +08:00
virtual void screen_space_roughness_limiter_set_active ( bool p_enable , float p_amount , float p_limit ) = 0 ;
2020-01-27 07:09:40 +08:00
2020-04-04 10:42:26 +08:00
enum SubSurfaceScatteringQuality {
SUB_SURFACE_SCATTERING_QUALITY_DISABLED ,
SUB_SURFACE_SCATTERING_QUALITY_LOW ,
SUB_SURFACE_SCATTERING_QUALITY_MEDIUM ,
SUB_SURFACE_SCATTERING_QUALITY_HIGH ,
} ;
virtual void sub_surface_scattering_set_quality ( SubSurfaceScatteringQuality p_quality ) = 0 ;
virtual void sub_surface_scattering_set_scale ( float p_scale , float p_depth_scale ) = 0 ;
2020-01-14 02:37:24 +08:00
/* CAMERA EFFECTS */
2022-08-01 07:20:24 +08:00
virtual RID camera_attributes_create ( ) = 0 ;
2020-01-14 02:37:24 +08:00
enum DOFBlurQuality {
2020-01-16 08:23:21 +08:00
DOF_BLUR_QUALITY_VERY_LOW ,
2020-01-14 02:37:24 +08:00
DOF_BLUR_QUALITY_LOW ,
DOF_BLUR_QUALITY_MEDIUM ,
DOF_BLUR_QUALITY_HIGH ,
} ;
2022-08-01 07:20:24 +08:00
virtual void camera_attributes_set_dof_blur_quality ( DOFBlurQuality p_quality , bool p_use_jitter ) = 0 ;
2020-01-16 08:23:21 +08:00
enum DOFBokehShape {
DOF_BOKEH_BOX ,
DOF_BOKEH_HEXAGON ,
DOF_BOKEH_CIRCLE
} ;
2022-08-01 07:20:24 +08:00
virtual void camera_attributes_set_dof_blur_bokeh_shape ( DOFBokehShape p_shape ) = 0 ;
2020-01-16 08:23:21 +08:00
2022-08-01 07:20:24 +08:00
virtual void camera_attributes_set_dof_blur ( RID p_camera_attributes , bool p_far_enable , float p_far_distance , float p_far_transition , bool p_near_enable , float p_near_distance , float p_near_transition , float p_amount ) = 0 ;
virtual void camera_attributes_set_exposure ( RID p_camera_attributes , float p_multiplier , float p_exposure_normalization ) = 0 ;
virtual void camera_attributes_set_auto_exposure ( RID p_camera_attributes , bool p_enable , float p_min_sensitivity , float p_max_sensitivity , float p_speed , float p_scale ) = 0 ;
2020-01-14 02:37:24 +08:00
2014-02-10 09:10:30 +08:00
/* SCENARIO API */
2016-03-09 07:00:52 +08:00
virtual RID scenario_create ( ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void scenario_set_environment ( RID p_scenario , RID p_environment ) = 0 ;
2014-10-12 13:13:22 +08:00
virtual void scenario_set_fallback_environment ( RID p_scenario , RID p_environment ) = 0 ;
2022-08-01 07:20:24 +08:00
virtual void scenario_set_camera_attributes ( RID p_scenario , RID p_camera_attributes ) = 0 ;
2014-02-10 09:10:30 +08:00
/* INSTANCING API */
2016-03-09 07:00:52 +08:00
2014-02-10 09:10:30 +08:00
enum InstanceType {
INSTANCE_NONE ,
INSTANCE_MESH ,
INSTANCE_MULTIMESH ,
INSTANCE_PARTICLES ,
2020-10-08 08:29:49 +08:00
INSTANCE_PARTICLES_COLLISION ,
2014-02-10 09:10:30 +08:00
INSTANCE_LIGHT ,
2016-10-04 03:33:42 +08:00
INSTANCE_REFLECTION_PROBE ,
2020-04-14 11:05:21 +08:00
INSTANCE_DECAL ,
2021-06-05 06:47:26 +08:00
INSTANCE_VOXEL_GI ,
2020-05-01 20:34:23 +08:00
INSTANCE_LIGHTMAP ,
2021-04-21 00:40:24 +08:00
INSTANCE_OCCLUDER ,
2021-06-17 02:43:02 +08:00
INSTANCE_VISIBLITY_NOTIFIER ,
2021-10-03 19:28:55 +08:00
INSTANCE_FOG_VOLUME ,
2016-10-19 22:14:41 +08:00
INSTANCE_MAX ,
2014-10-28 09:54:32 +08:00
2021-06-30 09:55:11 +08:00
INSTANCE_GEOMETRY_MASK = ( 1 < < INSTANCE_MESH ) | ( 1 < < INSTANCE_MULTIMESH ) | ( 1 < < INSTANCE_PARTICLES )
2014-02-10 09:10:30 +08:00
} ;
2016-03-09 07:00:52 +08:00
2014-02-10 09:10:30 +08:00
virtual RID instance_create2 ( RID p_base , RID p_scenario ) ;
2020-01-22 04:32:27 +08:00
virtual RID instance_create ( ) = 0 ;
2014-02-10 09:10:30 +08:00
2020-01-22 04:32:27 +08:00
virtual void instance_set_base ( RID p_instance , RID p_base ) = 0 ;
virtual void instance_set_scenario ( RID p_instance , RID p_scenario ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void instance_set_layer_mask ( RID p_instance , uint32_t p_mask ) = 0 ;
2022-12-13 12:13:16 +08:00
virtual void instance_set_pivot_data ( RID p_instance , float p_sorting_offset , bool p_use_aabb_center ) = 0 ;
2020-10-17 13:08:21 +08:00
virtual void instance_set_transform ( RID p_instance , const Transform3D & p_transform ) = 0 ;
2019-05-09 17:21:49 +08:00
virtual void instance_attach_object_instance_id ( RID p_instance , ObjectID p_id ) = 0 ;
2017-01-12 19:34:00 +08:00
virtual void instance_set_blend_shape_weight ( RID p_instance , int p_shape , float p_weight ) = 0 ;
2021-04-14 11:45:16 +08:00
virtual void instance_set_surface_override_material ( RID p_instance , int p_surface , RID p_material ) = 0 ;
2017-01-04 12:16:14 +08:00
virtual void instance_set_visible ( RID p_instance , bool p_visible ) = 0 ;
2016-05-28 01:18:40 +08:00
2017-11-21 03:54:26 +08:00
virtual void instance_set_custom_aabb ( RID p_instance , AABB aabb ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void instance_attach_skeleton ( RID p_instance , RID p_skeleton ) = 0 ;
virtual void instance_set_extra_visibility_margin ( RID p_instance , real_t p_margin ) = 0 ;
2021-05-10 00:23:20 +08:00
virtual void instance_set_visibility_parent ( RID p_instance , RID p_parent_instance ) = 0 ;
2014-02-10 09:10:30 +08:00
2021-10-03 19:28:55 +08:00
virtual void instance_set_ignore_culling ( RID p_instance , bool p_enabled ) = 0 ;
2021-11-28 08:12:10 +08:00
// Don't use these in a game!
2017-11-17 10:09:00 +08:00
virtual Vector < ObjectID > instances_cull_aabb ( const AABB & p_aabb , RID p_scenario = RID ( ) ) const = 0 ;
2016-10-04 03:33:42 +08:00
virtual Vector < ObjectID > instances_cull_ray ( const Vector3 & p_from , const Vector3 & p_to , RID p_scenario = RID ( ) ) const = 0 ;
virtual Vector < ObjectID > instances_cull_convex ( const Vector < Plane > & p_convex , RID p_scenario = RID ( ) ) const = 0 ;
2014-02-10 09:10:30 +08:00
2022-08-08 06:52:20 +08:00
PackedInt64Array _instances_cull_aabb_bind ( const AABB & p_aabb , RID p_scenario = RID ( ) ) const ;
PackedInt64Array _instances_cull_ray_bind ( const Vector3 & p_from , const Vector3 & p_to , RID p_scenario = RID ( ) ) const ;
2022-09-01 01:24:04 +08:00
PackedInt64Array _instances_cull_convex_bind ( const TypedArray < Plane > & p_convex , RID p_scenario = RID ( ) ) const ;
Added all missing VisualServer bindings
- Added bindings for multimesh, immediate, skeleton, light, reflection probe, gi probe, lightmap, particles, camera, environment, scenario, instance
- Removed draw and sync, were duplicates of force_* equivalents
- Bumped binders max arguments from 11 to 13
- Wrote some wrappers as not all methods were variant-friendly
2018-01-20 23:18:51 +08:00
2014-02-10 09:10:30 +08:00
enum InstanceFlags {
2014-06-11 21:41:03 +08:00
INSTANCE_FLAG_USE_BAKED_LIGHT ,
2019-10-11 10:14:56 +08:00
INSTANCE_FLAG_USE_DYNAMIC_GI ,
2018-07-27 19:58:56 +08:00
INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE ,
2021-04-21 00:40:24 +08:00
INSTANCE_FLAG_IGNORE_OCCLUSION_CULLING ,
2014-02-10 09:10:30 +08:00
INSTANCE_FLAG_MAX
} ;
2016-03-08 07:00:55 +08:00
enum ShadowCastingSetting {
SHADOW_CASTING_SETTING_OFF ,
SHADOW_CASTING_SETTING_ON ,
SHADOW_CASTING_SETTING_DOUBLE_SIDED ,
SHADOW_CASTING_SETTING_SHADOWS_ONLY ,
} ;
2021-07-21 02:17:34 +08:00
enum VisibilityRangeFadeMode {
VISIBILITY_RANGE_FADE_DISABLED ,
VISIBILITY_RANGE_FADE_SELF ,
VISIBILITY_RANGE_FADE_DEPENDENCIES ,
} ;
2014-02-10 09:10:30 +08:00
virtual void instance_geometry_set_flag ( RID p_instance , InstanceFlags p_flags , bool p_enabled ) = 0 ;
2016-03-08 07:00:55 +08:00
virtual void instance_geometry_set_cast_shadows_setting ( RID p_instance , ShadowCastingSetting p_shadow_casting_setting ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void instance_geometry_set_material_override ( RID p_instance , RID p_material ) = 0 ;
2021-09-26 02:40:26 +08:00
virtual void instance_geometry_set_material_overlay ( RID p_instance , RID p_material ) = 0 ;
2021-07-21 02:17:34 +08:00
virtual void instance_geometry_set_visibility_range ( RID p_instance , float p_min , float p_max , float p_min_margin , float p_max_margin , VisibilityRangeFadeMode p_fade_mode ) = 0 ;
2020-05-01 20:34:23 +08:00
virtual void instance_geometry_set_lightmap ( RID p_instance , RID p_lightmap , const Rect2 & p_lightmap_uv_scale , int p_lightmap_slice ) = 0 ;
2020-12-18 02:56:59 +08:00
virtual void instance_geometry_set_lod_bias ( RID p_instance , float p_lod_bias ) = 0 ;
2021-07-21 02:17:34 +08:00
virtual void instance_geometry_set_transparency ( RID p_instance , float p_transparency ) = 0 ;
2014-02-10 09:10:30 +08:00
2022-08-27 17:22:43 +08:00
virtual void instance_geometry_set_shader_parameter ( RID p_instance , const StringName & , const Variant & p_value ) = 0 ;
virtual Variant instance_geometry_get_shader_parameter ( RID p_instance , const StringName & ) const = 0 ;
virtual Variant instance_geometry_get_shader_parameter_default_value ( RID p_instance , const StringName & ) const = 0 ;
virtual void instance_geometry_get_shader_parameter_list ( RID p_instance , List < PropertyInfo > * p_parameters ) const = 0 ;
2020-04-17 10:52:00 +08:00
2020-05-01 20:34:23 +08:00
/* Bake 3D objects */
enum BakeChannels {
BAKE_CHANNEL_ALBEDO_ALPHA ,
BAKE_CHANNEL_NORMAL ,
BAKE_CHANNEL_ORM ,
BAKE_CHANNEL_EMISSION
} ;
2022-09-01 01:24:04 +08:00
virtual TypedArray < Image > bake_render_uv2 ( RID p_base , const TypedArray < RID > & p_material_overrides , const Size2i & p_image_size ) = 0 ;
2020-05-01 20:34:23 +08:00
2014-02-10 09:10:30 +08:00
/* CANVAS (2D) */
virtual RID canvas_create ( ) = 0 ;
virtual void canvas_set_item_mirroring ( RID p_canvas , RID p_item , const Point2 & p_mirroring ) = 0 ;
2015-02-19 06:39:44 +08:00
virtual void canvas_set_modulate ( RID p_canvas , const Color & p_color ) = 0 ;
2019-04-05 21:24:54 +08:00
virtual void canvas_set_parent ( RID p_canvas , RID p_parent , float p_scale ) = 0 ;
virtual void canvas_set_disable_scale ( bool p_disable ) = 0 ;
2014-02-10 09:10:30 +08:00
2021-07-01 10:17:47 +08:00
/* CANVAS TEXTURE */
2020-10-24 23:15:43 +08:00
virtual RID canvas_texture_create ( ) = 0 ;
enum CanvasTextureChannel {
CANVAS_TEXTURE_CHANNEL_DIFFUSE ,
CANVAS_TEXTURE_CHANNEL_NORMAL ,
CANVAS_TEXTURE_CHANNEL_SPECULAR ,
} ;
virtual void canvas_texture_set_channel ( RID p_canvas_texture , CanvasTextureChannel p_channel , RID p_texture ) = 0 ;
virtual void canvas_texture_set_shading_parameters ( RID p_canvas_texture , const Color & p_base_color , float p_shininess ) = 0 ;
2021-11-28 08:12:10 +08:00
// Takes effect only for new draw commands.
2020-10-24 23:15:43 +08:00
virtual void canvas_texture_set_texture_filter ( RID p_canvas_texture , CanvasItemTextureFilter p_filter ) = 0 ;
virtual void canvas_texture_set_texture_repeat ( RID p_canvas_texture , CanvasItemTextureRepeat p_repeat ) = 0 ;
2021-07-01 10:17:47 +08:00
/* CANVAS ITEM */
2014-02-10 09:10:30 +08:00
virtual RID canvas_item_create ( ) = 0 ;
virtual void canvas_item_set_parent ( RID p_item , RID p_parent ) = 0 ;
2020-10-24 23:15:43 +08:00
virtual void canvas_item_set_default_texture_filter ( RID p_item , CanvasItemTextureFilter p_filter ) = 0 ;
virtual void canvas_item_set_default_texture_repeat ( RID p_item , CanvasItemTextureRepeat p_repeat ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void canvas_item_set_visible ( RID p_item , bool p_visible ) = 0 ;
2015-02-19 06:39:44 +08:00
virtual void canvas_item_set_light_mask ( RID p_item , int p_mask ) = 0 ;
2018-08-30 03:48:32 +08:00
virtual void canvas_item_set_update_when_visible ( RID p_item , bool p_update ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void canvas_item_set_transform ( RID p_item , const Transform2D & p_transform ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void canvas_item_set_clip ( RID p_item , bool p_clip ) = 0 ;
2015-03-21 11:43:33 +08:00
virtual void canvas_item_set_distance_field_mode ( RID p_item , bool p_enable ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void canvas_item_set_custom_rect ( RID p_item , bool p_custom_rect , const Rect2 & p_rect = Rect2 ( ) ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void canvas_item_set_modulate ( RID p_item , const Color & p_color ) = 0 ;
virtual void canvas_item_set_self_modulate ( RID p_item , const Color & p_color ) = 0 ;
2021-09-03 02:07:04 +08:00
virtual void canvas_item_set_visibility_layer ( RID p_item , uint32_t p_visibility_layer ) = 0 ;
2014-02-10 09:10:30 +08:00
2016-10-04 03:33:42 +08:00
virtual void canvas_item_set_draw_behind_parent ( RID p_item , bool p_enable ) = 0 ;
2014-02-10 09:10:30 +08:00
2016-10-04 03:33:42 +08:00
enum NinePatchAxisMode {
NINE_PATCH_STRETCH ,
NINE_PATCH_TILE ,
NINE_PATCH_TILE_FIT ,
} ;
2014-02-10 09:10:30 +08:00
2023-01-14 13:28:55 +08:00
virtual void canvas_item_add_line ( RID p_item , const Point2 & p_from , const Point2 & p_to , const Color & p_color , float p_width = - 1.0 , bool p_antialiased = false ) = 0 ;
2023-01-19 20:38:15 +08:00
virtual void canvas_item_add_polyline ( RID p_item , const Vector < Point2 > & p_points , const Vector < Color > & p_colors , float p_width = - 1.0 , bool p_antialiased = false ) = 0 ;
2023-01-14 13:28:55 +08:00
virtual void canvas_item_add_multiline ( RID p_item , const Vector < Point2 > & p_points , const Vector < Color > & p_colors , float p_width = - 1.0 ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void canvas_item_add_rect ( RID p_item , const Rect2 & p_rect , const Color & p_color ) = 0 ;
virtual void canvas_item_add_circle ( RID p_item , const Point2 & p_pos , float p_radius , const Color & p_color ) = 0 ;
2020-10-24 23:15:43 +08:00
virtual void canvas_item_add_texture_rect ( RID p_item , const Rect2 & p_rect , RID p_texture , bool p_tile = false , const Color & p_modulate = Color ( 1 , 1 , 1 ) , bool p_transpose = false ) = 0 ;
virtual void canvas_item_add_texture_rect_region ( RID p_item , const Rect2 & p_rect , RID p_texture , const Rect2 & p_src_rect , const Color & p_modulate = Color ( 1 , 1 , 1 ) , bool p_transpose = false , bool p_clip_uv = false ) = 0 ;
2022-12-18 04:47:33 +08:00
virtual void canvas_item_add_msdf_texture_rect_region ( RID p_item , const Rect2 & p_rect , RID p_texture , const Rect2 & p_src_rect , const Color & p_modulate = Color ( 1 , 1 , 1 ) , int p_outline_size = 0 , float p_px_range = 1.0 , float p_scale = 1.0 ) = 0 ;
2022-08-12 19:03:28 +08:00
virtual void canvas_item_add_lcd_texture_rect_region ( RID p_item , const Rect2 & p_rect , RID p_texture , const Rect2 & p_src_rect , const Color & p_modulate = Color ( 1 , 1 , 1 ) ) = 0 ;
2020-10-24 23:15:43 +08:00
virtual void canvas_item_add_nine_patch ( RID p_item , const Rect2 & p_rect , const Rect2 & p_source , RID p_texture , const Vector2 & p_topleft , const Vector2 & p_bottomright , NinePatchAxisMode p_x_axis_mode = NINE_PATCH_STRETCH , NinePatchAxisMode p_y_axis_mode = NINE_PATCH_STRETCH , bool p_draw_center = true , const Color & p_modulate = Color ( 1 , 1 , 1 ) ) = 0 ;
2023-01-14 13:28:55 +08:00
virtual void canvas_item_add_primitive ( RID p_item , const Vector < Point2 > & p_points , const Vector < Color > & p_colors , const Vector < Point2 > & p_uvs , RID p_texture ) = 0 ;
2020-10-24 23:15:43 +08:00
virtual void canvas_item_add_polygon ( RID p_item , const Vector < Point2 > & p_points , const Vector < Color > & p_colors , const Vector < Point2 > & p_uvs = Vector < Point2 > ( ) , RID p_texture = RID ( ) ) = 0 ;
virtual void canvas_item_add_triangle_array ( RID p_item , const Vector < int > & p_indices , const Vector < Point2 > & p_points , const Vector < Color > & p_colors , const Vector < Point2 > & p_uvs = Vector < Point2 > ( ) , const Vector < int > & p_bones = Vector < int > ( ) , const Vector < float > & p_weights = Vector < float > ( ) , RID p_texture = RID ( ) , int p_count = - 1 ) = 0 ;
virtual void canvas_item_add_mesh ( RID p_item , const RID & p_mesh , const Transform2D & p_transform = Transform2D ( ) , const Color & p_modulate = Color ( 1 , 1 , 1 ) , RID p_texture = RID ( ) ) = 0 ;
virtual void canvas_item_add_multimesh ( RID p_item , RID p_mesh , RID p_texture = RID ( ) ) = 0 ;
virtual void canvas_item_add_particles ( RID p_item , RID p_particles , RID p_texture ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void canvas_item_add_set_transform ( RID p_item , const Transform2D & p_transform ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void canvas_item_add_clip_ignore ( RID p_item , bool p_ignore ) = 0 ;
2021-06-17 22:30:20 +08:00
virtual void canvas_item_add_animation_slice ( RID p_item , double p_animation_length , double p_slice_begin , double p_slice_end , double p_offset ) = 0 ;
2021-07-01 10:17:47 +08:00
2014-10-03 11:10:51 +08:00
virtual void canvas_item_set_sort_children_by_y ( RID p_item , bool p_enable ) = 0 ;
2017-12-30 06:06:03 +08:00
virtual void canvas_item_set_z_index ( RID p_item , int p_z ) = 0 ;
2015-01-13 21:49:26 +08:00
virtual void canvas_item_set_z_as_relative_to_parent ( RID p_item , bool p_enable ) = 0 ;
2015-03-12 12:05:50 +08:00
virtual void canvas_item_set_copy_to_backbuffer ( RID p_item , bool p_enable , const Rect2 & p_rect ) = 0 ;
2017-03-05 23:44:50 +08:00
2018-02-22 04:23:27 +08:00
virtual void canvas_item_attach_skeleton ( RID p_item , RID p_skeleton ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void canvas_item_clear ( RID p_item ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void canvas_item_set_draw_index ( RID p_item , int p_index ) = 0 ;
2017-03-05 23:44:50 +08:00
2015-03-02 11:54:10 +08:00
virtual void canvas_item_set_material ( RID p_item , RID p_material ) = 0 ;
2017-03-05 23:44:50 +08:00
2015-03-02 11:54:10 +08:00
virtual void canvas_item_set_use_parent_material ( RID p_item , bool p_enable ) = 0 ;
2017-03-05 23:44:50 +08:00
2021-06-16 04:33:24 +08:00
virtual void canvas_item_set_visibility_notifier ( RID p_item , bool p_enable , const Rect2 & p_area , const Callable & p_enter_callbable , const Callable & p_exit_callable ) = 0 ;
2020-10-29 02:34:27 +08:00
enum CanvasGroupMode {
CANVAS_GROUP_MODE_DISABLED ,
2022-10-13 03:45:47 +08:00
CANVAS_GROUP_MODE_CLIP_ONLY ,
CANVAS_GROUP_MODE_CLIP_AND_DRAW ,
2020-10-29 02:34:27 +08:00
CANVAS_GROUP_MODE_TRANSPARENT ,
} ;
virtual void canvas_item_set_canvas_group_mode ( RID p_item , CanvasGroupMode p_mode , float p_clear_margin = 5.0 , bool p_fit_empty = false , float p_fit_margin = 0.0 , bool p_blur_mipmaps = false ) = 0 ;
2021-07-01 10:17:47 +08:00
/* CANVAS LIGHT */
2015-01-22 22:07:16 +08:00
virtual RID canvas_light_create ( ) = 0 ;
2020-11-04 03:51:53 +08:00
enum CanvasLightMode {
CANVAS_LIGHT_MODE_POINT ,
CANVAS_LIGHT_MODE_DIRECTIONAL ,
} ;
virtual void canvas_light_set_mode ( RID p_light , CanvasLightMode p_mode ) = 0 ;
2015-01-22 22:07:16 +08:00
virtual void canvas_light_attach_to_canvas ( RID p_light , RID p_canvas ) = 0 ;
virtual void canvas_light_set_enabled ( RID p_light , bool p_enabled ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void canvas_light_set_transform ( RID p_light , const Transform2D & p_transform ) = 0 ;
2015-01-22 22:07:16 +08:00
virtual void canvas_light_set_color ( RID p_light , const Color & p_color ) = 0 ;
virtual void canvas_light_set_height ( RID p_light , float p_height ) = 0 ;
2015-04-03 12:43:37 +08:00
virtual void canvas_light_set_energy ( RID p_light , float p_energy ) = 0 ;
2015-01-22 22:07:16 +08:00
virtual void canvas_light_set_z_range ( RID p_light , int p_min_z , int p_max_z ) = 0 ;
2015-02-19 06:39:44 +08:00
virtual void canvas_light_set_layer_range ( RID p_light , int p_min_layer , int p_max_layer ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void canvas_light_set_item_cull_mask ( RID p_light , int p_mask ) = 0 ;
virtual void canvas_light_set_item_shadow_cull_mask ( RID p_light , int p_mask ) = 0 ;
2015-01-22 22:07:16 +08:00
2020-11-04 03:51:53 +08:00
virtual void canvas_light_set_directional_distance ( RID p_light , float p_distance ) = 0 ;
virtual void canvas_light_set_texture_scale ( RID p_light , float p_scale ) = 0 ;
virtual void canvas_light_set_texture ( RID p_light , RID p_texture ) = 0 ;
virtual void canvas_light_set_texture_offset ( RID p_light , const Vector2 & p_offset ) = 0 ;
enum CanvasLightBlendMode {
CANVAS_LIGHT_BLEND_MODE_ADD ,
CANVAS_LIGHT_BLEND_MODE_SUB ,
CANVAS_LIGHT_BLEND_MODE_MIX ,
2015-04-03 12:43:37 +08:00
} ;
2020-11-04 03:51:53 +08:00
virtual void canvas_light_set_blend_mode ( RID p_light , CanvasLightBlendMode p_mode ) = 0 ;
2016-10-04 03:33:42 +08:00
enum CanvasLightShadowFilter {
CANVAS_LIGHT_FILTER_NONE ,
CANVAS_LIGHT_FILTER_PCF5 ,
CANVAS_LIGHT_FILTER_PCF13 ,
2019-07-07 12:49:40 +08:00
CANVAS_LIGHT_FILTER_MAX
2016-10-04 03:33:42 +08:00
} ;
2015-01-22 22:07:16 +08:00
virtual void canvas_light_set_shadow_enabled ( RID p_light , bool p_enabled ) = 0 ;
2016-10-04 03:33:42 +08:00
virtual void canvas_light_set_shadow_filter ( RID p_light , CanvasLightShadowFilter p_filter ) = 0 ;
2015-06-25 05:15:43 +08:00
virtual void canvas_light_set_shadow_color ( RID p_light , const Color & p_color ) = 0 ;
2017-06-13 12:23:04 +08:00
virtual void canvas_light_set_shadow_smooth ( RID p_light , float p_smooth ) = 0 ;
2015-03-02 11:54:10 +08:00
2021-07-01 10:17:47 +08:00
/* CANVAS LIGHT OCCLUDER */
2015-01-22 22:07:16 +08:00
virtual RID canvas_light_occluder_create ( ) = 0 ;
virtual void canvas_light_occluder_attach_to_canvas ( RID p_occluder , RID p_canvas ) = 0 ;
virtual void canvas_light_occluder_set_enabled ( RID p_occluder , bool p_enabled ) = 0 ;
2015-03-02 11:54:10 +08:00
virtual void canvas_light_occluder_set_polygon ( RID p_occluder , RID p_polygon ) = 0 ;
2020-11-26 20:50:21 +08:00
virtual void canvas_light_occluder_set_as_sdf_collision ( RID p_occluder , bool p_enable ) = 0 ;
2017-01-11 11:52:51 +08:00
virtual void canvas_light_occluder_set_transform ( RID p_occluder , const Transform2D & p_xform ) = 0 ;
2015-03-02 11:54:10 +08:00
virtual void canvas_light_occluder_set_light_mask ( RID p_occluder , int p_mask ) = 0 ;
2015-01-22 22:07:16 +08:00
2021-07-01 10:17:47 +08:00
/* CANVAS LIGHT OCCLUDER POLYGON */
2015-03-02 11:54:10 +08:00
virtual RID canvas_occluder_polygon_create ( ) = 0 ;
2020-02-18 05:06:54 +08:00
virtual void canvas_occluder_polygon_set_shape ( RID p_occluder_polygon , const Vector < Vector2 > & p_shape , bool p_closed ) = 0 ;
2016-10-04 03:33:42 +08:00
2015-03-02 11:54:10 +08:00
enum CanvasOccluderPolygonCullMode {
CANVAS_OCCLUDER_POLYGON_CULL_DISABLED ,
CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE ,
CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE ,
} ;
2020-04-20 17:48:00 +08:00
2015-03-02 11:54:10 +08:00
virtual void canvas_occluder_polygon_set_cull_mode ( RID p_occluder_polygon , CanvasOccluderPolygonCullMode p_mode ) = 0 ;
2015-01-22 22:07:16 +08:00
2020-10-24 23:15:43 +08:00
virtual void canvas_set_shadow_texture_size ( int p_size ) = 0 ;
2022-04-04 00:56:43 +08:00
/* GLOBAL SHADER UNIFORMS */
2020-04-17 10:52:00 +08:00
2022-08-27 17:22:43 +08:00
enum GlobalShaderParameterType {
2020-04-17 10:52:00 +08:00
GLOBAL_VAR_TYPE_BOOL ,
GLOBAL_VAR_TYPE_BVEC2 ,
GLOBAL_VAR_TYPE_BVEC3 ,
GLOBAL_VAR_TYPE_BVEC4 ,
GLOBAL_VAR_TYPE_INT ,
GLOBAL_VAR_TYPE_IVEC2 ,
GLOBAL_VAR_TYPE_IVEC3 ,
GLOBAL_VAR_TYPE_IVEC4 ,
GLOBAL_VAR_TYPE_RECT2I ,
GLOBAL_VAR_TYPE_UINT ,
GLOBAL_VAR_TYPE_UVEC2 ,
GLOBAL_VAR_TYPE_UVEC3 ,
GLOBAL_VAR_TYPE_UVEC4 ,
GLOBAL_VAR_TYPE_FLOAT ,
GLOBAL_VAR_TYPE_VEC2 ,
GLOBAL_VAR_TYPE_VEC3 ,
GLOBAL_VAR_TYPE_VEC4 ,
GLOBAL_VAR_TYPE_COLOR ,
GLOBAL_VAR_TYPE_RECT2 ,
GLOBAL_VAR_TYPE_MAT2 ,
GLOBAL_VAR_TYPE_MAT3 ,
GLOBAL_VAR_TYPE_MAT4 ,
GLOBAL_VAR_TYPE_TRANSFORM_2D ,
GLOBAL_VAR_TYPE_TRANSFORM ,
GLOBAL_VAR_TYPE_SAMPLER2D ,
GLOBAL_VAR_TYPE_SAMPLER2DARRAY ,
GLOBAL_VAR_TYPE_SAMPLER3D ,
GLOBAL_VAR_TYPE_SAMPLERCUBE ,
GLOBAL_VAR_TYPE_MAX
} ;
2022-08-27 17:22:43 +08:00
virtual void global_shader_parameter_add ( const StringName & p_name , GlobalShaderParameterType p_type , const Variant & p_value ) = 0 ;
virtual void global_shader_parameter_remove ( const StringName & p_name ) = 0 ;
virtual Vector < StringName > global_shader_parameter_get_list ( ) const = 0 ;
2020-04-17 10:52:00 +08:00
2022-08-27 17:22:43 +08:00
virtual void global_shader_parameter_set ( const StringName & p_name , const Variant & p_value ) = 0 ;
virtual void global_shader_parameter_set_override ( const StringName & p_name , const Variant & p_value ) = 0 ;
2020-04-17 10:52:00 +08:00
2022-08-27 17:22:43 +08:00
virtual Variant global_shader_parameter_get ( const StringName & p_name ) const = 0 ;
virtual GlobalShaderParameterType global_shader_parameter_get_type ( const StringName & p_name ) const = 0 ;
2020-04-17 10:52:00 +08:00
2022-08-27 17:22:43 +08:00
virtual void global_shader_parameters_load_settings ( bool p_load_textures ) = 0 ;
virtual void global_shader_parameters_clear ( ) = 0 ;
2020-04-17 10:52:00 +08:00
2022-08-27 17:22:43 +08:00
static int global_shader_uniform_type_get_shader_datatype ( GlobalShaderParameterType p_type ) ;
2020-04-17 10:52:00 +08:00
2014-02-10 09:10:30 +08:00
/* FREE */
2021-11-28 08:12:10 +08:00
virtual void free ( RID p_rid ) = 0 ; // Free RIDs associated with the rendering server.
2014-02-10 09:10:30 +08:00
/* EVENT QUEUING */
2021-11-05 13:59:38 +08:00
virtual void request_frame_drawn_callback ( const Callable & p_callable ) = 0 ;
2018-05-09 14:11:43 +08:00
virtual void draw ( bool p_swap_buffers = true , double frame_step = 0.0 ) = 0 ;
2015-06-07 09:06:58 +08:00
virtual void sync ( ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual bool has_changed ( ) const = 0 ;
2022-05-28 19:09:23 +08:00
virtual void init ( ) ;
2014-02-10 09:10:30 +08:00
virtual void finish ( ) = 0 ;
/* STATUS INFORMATION */
2021-07-03 07:14:19 +08:00
enum RenderingInfo {
RENDERING_INFO_TOTAL_OBJECTS_IN_FRAME ,
RENDERING_INFO_TOTAL_PRIMITIVES_IN_FRAME ,
RENDERING_INFO_TOTAL_DRAW_CALLS_IN_FRAME ,
RENDERING_INFO_TEXTURE_MEM_USED ,
RENDERING_INFO_BUFFER_MEM_USED ,
RENDERING_INFO_VIDEO_MEM_USED ,
RENDERING_INFO_MAX
2014-02-10 09:10:30 +08:00
} ;
2021-07-03 07:14:19 +08:00
virtual uint64_t get_rendering_info ( RenderingInfo p_info ) = 0 ;
2019-09-14 02:08:05 +08:00
virtual String get_video_adapter_name ( ) const = 0 ;
virtual String get_video_adapter_vendor ( ) const = 0 ;
2021-12-11 00:01:51 +08:00
virtual RenderingDevice : : DeviceType get_video_adapter_type ( ) const = 0 ;
2021-07-31 21:39:46 +08:00
virtual String get_video_adapter_api_version ( ) const = 0 ;
2014-05-29 21:56:39 +08:00
2019-09-21 04:58:06 +08:00
struct FrameProfileArea {
String name ;
2021-02-02 10:16:37 +08:00
double gpu_msec ;
double cpu_msec ;
2019-09-21 04:58:06 +08:00
} ;
virtual void set_frame_profiling_enabled ( bool p_enable ) = 0 ;
virtual Vector < FrameProfileArea > get_frame_profile ( ) = 0 ;
virtual uint64_t get_frame_profile_frame ( ) = 0 ;
2021-02-02 10:16:37 +08:00
virtual double get_frame_setup_time_cpu ( ) const = 0 ;
2020-12-24 11:13:52 +08:00
2021-01-23 07:50:24 +08:00
virtual void gi_set_use_half_resolution ( bool p_enable ) = 0 ;
2014-02-10 09:10:30 +08:00
/* TESTING */
2016-03-09 07:00:52 +08:00
2014-02-10 09:10:30 +08:00
virtual RID get_test_cube ( ) = 0 ;
virtual RID get_test_texture ( ) ;
2014-05-29 21:56:39 +08:00
virtual RID get_white_texture ( ) ;
2014-02-10 09:10:30 +08:00
2020-06-25 21:33:28 +08:00
virtual void sdfgi_set_debug_probe_select ( const Vector3 & p_position , const Vector3 & p_dir ) = 0 ;
2021-08-10 06:15:17 +08:00
virtual RID make_sphere_mesh ( int p_lats , int p_lons , real_t p_radius ) ;
2014-02-10 09:10:30 +08:00
2020-05-26 01:20:45 +08:00
virtual void mesh_add_surface_from_mesh_data ( RID p_mesh , const Geometry3D : : MeshData & p_mesh_data ) ;
2020-02-18 05:06:54 +08:00
virtual void mesh_add_surface_from_planes ( RID p_mesh , const Vector < Plane > & p_planes ) ;
2014-02-10 09:10:30 +08:00
2022-01-19 23:09:52 +08:00
virtual void set_boot_image ( const Ref < Image > & p_image , const Color & p_color , bool p_scale , bool p_use_filter = true ) = 0 ;
2023-01-12 02:14:43 +08:00
virtual Color get_default_clear_color ( ) = 0 ;
2014-02-10 09:10:30 +08:00
virtual void set_default_clear_color ( const Color & p_color ) = 0 ;
enum Features {
FEATURE_SHADERS ,
FEATURE_MULTITHREADED ,
} ;
virtual bool has_feature ( Features p_feature ) const = 0 ;
2017-02-06 11:38:39 +08:00
virtual bool has_os_feature ( const String & p_feature ) const = 0 ;
2017-06-12 02:52:03 +08:00
virtual void set_debug_generate_wireframes ( bool p_generate ) = 0 ;
2021-06-19 23:44:59 +08:00
virtual void call_set_vsync_mode ( DisplayServer : : VSyncMode p_mode , DisplayServer : : WindowID p_window ) = 0 ;
2017-12-17 04:09:25 +08:00
2018-09-29 07:32:40 +08:00
virtual bool is_low_end ( ) const = 0 ;
2021-01-23 07:50:24 +08:00
virtual void set_print_gpu_profile ( bool p_enable ) = 0 ;
2022-08-22 06:16:56 +08:00
virtual Size2i get_maximum_viewport_size ( ) const = 0 ;
2021-08-29 10:52:19 +08:00
RenderingDevice * get_rendering_device ( ) const ;
2020-09-17 12:11:39 +08:00
RenderingDevice * create_local_rendering_device ( ) const ;
2020-06-15 01:06:48 +08:00
bool is_render_loop_enabled ( ) const ;
void set_render_loop_enabled ( bool p_enabled ) ;
2020-03-28 02:21:27 +08:00
RenderingServer ( ) ;
virtual ~ RenderingServer ( ) ;
2021-07-01 10:17:47 +08:00
private :
2021-11-28 08:12:10 +08:00
// Binder helpers
2021-07-01 10:17:47 +08:00
RID _texture_2d_layered_create ( const TypedArray < Image > & p_layers , TextureLayeredType p_layered_type ) ;
RID _texture_3d_create ( Image : : Format p_format , int p_width , int p_height , int p_depth , bool p_mipmaps , const TypedArray < Image > & p_data ) ;
void _texture_3d_update ( RID p_texture , const TypedArray < Image > & p_data ) ;
TypedArray < Image > _texture_3d_get ( RID p_texture ) const ;
2022-08-27 17:22:43 +08:00
TypedArray < Dictionary > _shader_get_shader_parameter_list ( RID p_shader ) const ;
2021-07-01 10:17:47 +08:00
RID _mesh_create_from_surfaces ( const TypedArray < Dictionary > & p_surfaces , int p_blend_shape_count ) ;
void _mesh_add_surface ( RID p_mesh , const Dictionary & p_surface ) ;
Dictionary _mesh_get_surface ( RID p_mesh , int p_idx ) ;
2022-08-27 17:22:43 +08:00
TypedArray < Dictionary > _instance_geometry_get_shader_parameter_list ( RID p_instance ) const ;
2021-07-01 10:17:47 +08:00
TypedArray < Image > _bake_render_uv2 ( RID p_base , const TypedArray < RID > & p_material_overrides , const Size2i & p_image_size ) ;
void _particles_set_trail_bind_poses ( RID p_particles , const TypedArray < Transform3D > & p_bind_poses ) ;
2014-02-10 09:10:30 +08:00
} ;
2021-11-28 08:12:10 +08:00
// Make variant understand the enums.
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : TextureLayeredType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CubeMapLayer ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ShaderMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ArrayType ) ;
2023-01-08 03:37:21 +08:00
VARIANT_BITFIELD_CAST ( RenderingServer : : ArrayFormat ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ArrayCustomFormat ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : PrimitiveType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : BlendShapeMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : MultimeshTransformFormat ) ;
VARIANT_ENUM_CAST ( RenderingServer : : LightType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : LightParam ) ;
2020-06-25 21:33:28 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : LightBakeMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : LightOmniShadowMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : LightDirectionalShadowMode ) ;
2021-10-20 06:40:46 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : LightDirectionalSkyMode ) ;
2021-07-20 03:41:55 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : LightProjectorFilter ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ReflectionProbeUpdateMode ) ;
2020-06-25 21:33:28 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ReflectionProbeAmbientMode ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : VoxelGIQuality ) ;
2020-04-14 11:05:21 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : DecalTexture ) ;
2021-07-20 03:41:55 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : DecalFilter ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesTransformAlign ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesDrawOrder ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesEmitFlags ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesCollisionType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesCollisionHeightfieldResolution ) ;
2021-10-03 19:28:55 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : FogVolumeShape ) ;
2021-11-24 05:16:03 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportScaling3DMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportUpdateMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ViewportClearMode ) ;
2023-01-30 08:04:39 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportEnvironmentMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportMSAA ) ;
2020-04-20 17:48:00 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportScreenSpaceAA ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportRenderInfo ) ;
2021-07-03 07:14:19 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportRenderInfoType ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportDebugDraw ) ;
2021-04-21 00:40:24 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportOcclusionCullingBuildQuality ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportSDFOversize ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ViewportSDFScale ) ;
2022-02-11 19:33:54 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportVRSMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : SkyMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentBG ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentAmbientSource ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentReflectionSource ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentGlowBlendMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentToneMapper ) ;
2020-04-20 17:48:00 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSSRRoughnessQuality ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSSAOQuality ) ;
2022-01-06 09:35:49 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSSILQuality ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSDFGIFramesToConverge ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSDFGIRayCount ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSDFGIFramesToUpdateLight ) ;
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSDFGIYScale ) ;
2020-04-20 17:48:00 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : SubSurfaceScatteringQuality ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : DOFBlurQuality ) ;
VARIANT_ENUM_CAST ( RenderingServer : : DOFBokehShape ) ;
2020-04-20 17:48:00 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : ShadowQuality ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : InstanceType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : InstanceFlags ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ShadowCastingSetting ) ;
2021-07-21 02:17:34 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : VisibilityRangeFadeMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : NinePatchAxisMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasItemTextureFilter ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasItemTextureRepeat ) ;
2020-11-04 22:38:26 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : CanvasGroupMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : CanvasLightMode ) ;
2020-11-04 03:51:53 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : CanvasLightBlendMode ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : CanvasLightShadowFilter ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasOccluderPolygonCullMode ) ;
2022-08-27 17:22:43 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : GlobalShaderParameterType ) ;
2021-07-03 07:14:19 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : RenderingInfo ) ;
2020-03-28 02:21:27 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : Features ) ;
2021-07-01 10:17:47 +08:00
VARIANT_ENUM_CAST ( RenderingServer : : CanvasTextureChannel ) ;
VARIANT_ENUM_CAST ( RenderingServer : : BakeChannels ) ;
2020-03-28 02:21:27 +08:00
2020-04-20 17:48:00 +08:00
// Alias to make it easier to use.
2020-03-28 02:21:27 +08:00
# define RS RenderingServer
2014-02-10 09:10:30 +08:00
2020-04-20 17:48:00 +08:00
# endif // RENDERING_SERVER_H