2014-02-10 02:10:30 +01:00
/*************************************************************************/
2020-03-28 13:19:05 +01:00
/* rendering_server.h */
2014-02-10 02:10:30 +01:00
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
2017-08-27 14:16:55 +02:00
/* https://godotengine.org */
2014-02-10 02:10:30 +01:00
/*************************************************************************/
2020-01-01 11:16:22 +01:00
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
2014-02-10 02:10:30 +01:00
/* */
/* 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 00:50:27 +01:00
2020-03-27 19:21:27 +01:00
# ifndef RENDERING_SERVER_H
# define RENDERING_SERVER_H
2014-02-10 02:10:30 +01:00
2018-09-11 18:13:45 +02:00
# include "core/image.h"
2020-05-25 19:20:45 +02:00
# include "core/math/geometry_3d.h"
2018-09-11 18:13:45 +02:00
# include "core/math/transform_2d.h"
# include "core/object.h"
# include "core/rid.h"
2020-05-01 14:34:23 +02:00
# include "core/typed_array.h"
2018-09-11 18:13:45 +02:00
# include "core/variant.h"
2020-03-04 02:51:12 +01:00
# include "servers/display_server.h"
2020-04-17 04:52:00 +02:00
# include "servers/rendering/shader_language.h"
2014-02-10 02:10:30 +01:00
2020-03-27 19:21:27 +01:00
class RenderingServer : public Object {
GDCLASS ( RenderingServer , Object ) ;
2014-02-10 02:10:30 +01:00
2020-03-27 19:21:27 +01:00
static RenderingServer * singleton ;
2014-02-10 02:10:30 +01:00
int mm_policy ;
2020-06-14 19:06:48 +02:00
bool render_loop_enabled = true ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
void _camera_set_orthogonal ( RID p_camera , float p_size , float p_z_near , float p_z_far ) ;
void _canvas_item_add_style_box ( RID p_item , const Rect2 & p_rect , const Rect2 & p_source , RID p_texture , const Vector < float > & p_margins , const Color & p_modulate = Color ( 1 , 1 , 1 ) ) ;
2020-02-17 22:06:54 +01:00
Array _get_array_from_surface ( uint32_t p_format , Vector < uint8_t > p_vertex_data , int p_vertex_len , Vector < uint8_t > p_index_data , int p_index_len ) const ;
2016-11-10 03:55:06 +01:00
2016-03-09 00:00:52 +01:00
protected :
2014-02-10 02:10:30 +01:00
RID _make_test_cube ( ) ;
2015-04-21 00:38:02 +02:00
void _free_internal_rids ( ) ;
2014-02-10 02:10:30 +01:00
RID test_texture ;
2014-05-29 15:56:39 +02:00
RID white_texture ;
2015-04-21 00:38:02 +02:00
RID test_material ;
2016-03-09 00:00:52 +01:00
2020-02-17 22:06:54 +01:00
Error _surface_set_data ( Array p_arrays , uint32_t p_format , uint32_t * p_offsets , uint32_t p_stride , Vector < uint8_t > & r_vertex_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 16:14:41 +02:00
2020-03-27 19:21:27 +01:00
static RenderingServer * ( * create_func ) ( ) ;
2016-03-09 00:00:52 +01:00
static void _bind_methods ( ) ;
2017-03-05 16:44:50 +01:00
public :
2020-03-27 19:21:27 +01:00
static RenderingServer * get_singleton ( ) ;
static RenderingServer * create ( ) ;
2014-02-10 02:10:30 +01:00
enum {
2017-03-05 16:44:50 +01:00
NO_INDEX_ARRAY = - 1 ,
ARRAY_WEIGHTS_SIZE = 4 ,
CANVAS_ITEM_Z_MIN = - 4096 ,
CANVAS_ITEM_Z_MAX = 4096 ,
MAX_GLOW_LEVELS = 7 ,
2014-02-10 02:10:30 +01:00
MAX_CURSORS = 8 ,
} ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
/* TEXTURE API */
2019-06-11 20:43:37 +02:00
enum TextureLayeredType {
TEXTURE_LAYERED_2D_ARRAY ,
TEXTURE_LAYERED_CUBEMAP ,
TEXTURE_LAYERED_CUBEMAP_ARRAY ,
2016-03-09 00:00:52 +01:00
} ;
2019-06-11 20:43:37 +02:00
enum CubeMapLayer {
CUBEMAP_LAYER_LEFT ,
CUBEMAP_LAYER_RIGHT ,
CUBEMAP_LAYER_BOTTOM ,
CUBEMAP_LAYER_TOP ,
CUBEMAP_LAYER_FRONT ,
CUBEMAP_LAYER_BACK
2018-06-26 13:59:26 +02:00
} ;
2019-06-11 20:43:37 +02:00
virtual RID texture_2d_create ( const Ref < Image > & p_image ) = 0 ;
2020-03-17 07:33:00 +01:00
virtual RID texture_2d_layered_create ( const Vector < Ref < Image > > & p_layers , TextureLayeredType p_layered_type ) = 0 ;
2020-09-09 17:40:51 +02: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-24 21:13:06 +02:00
virtual RID texture_proxy_create ( RID p_base ) = 0 ;
2016-03-09 00:00:52 +01:00
2019-06-11 20:43:37 +02:00
virtual void texture_2d_update_immediate ( RID p_texture , const Ref < Image > & p_image , int p_layer = 0 ) = 0 ; //mostly used for video and streaming
virtual void texture_2d_update ( RID p_texture , const Ref < Image > & p_image , int p_layer = 0 ) = 0 ;
2020-09-09 17:40:51 +02:00
virtual void texture_3d_update ( RID p_texture , const Vector < Ref < Image > > & p_data ) = 0 ;
2019-06-24 21:13:06 +02:00
virtual void texture_proxy_update ( RID p_texture , RID p_proxy_to ) = 0 ;
2019-06-11 20:43:37 +02:00
//these two APIs can be used together or in combination with the others.
virtual RID texture_2d_placeholder_create ( ) = 0 ;
2020-05-01 14:34:23 +02:00
virtual RID texture_2d_layered_placeholder_create ( TextureLayeredType p_layered_type ) = 0 ;
2019-06-11 20:43:37 +02:00
virtual RID texture_3d_placeholder_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2019-06-11 20:43:37 +02: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 17:40:51 +02:00
virtual Vector < Ref < Image > > texture_3d_get ( RID p_texture ) const = 0 ;
2019-06-11 20:43:37 +02: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 ;
// FIXME: Disabled during Vulkan refactoring, should be ported.
#if 0
2017-08-20 16:17:24 +02:00
virtual void texture_bind ( RID p_texture , uint32_t p_texture_no ) = 0 ;
2019-06-11 20:43:37 +02:00
# endif
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void texture_set_path ( RID p_texture , const String & p_path ) = 0 ;
virtual String texture_get_path ( RID p_texture ) const = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
typedef void ( * TextureDetectCallback ) ( void * ) ;
2016-05-04 17:36:51 +02:00
2017-03-05 16:44:50 +01:00
virtual void texture_set_detect_3d_callback ( RID p_texture , TextureDetectCallback p_callback , void * p_userdata ) = 0 ;
2017-06-17 02:47:28 +02:00
virtual void texture_set_detect_normal_callback ( RID p_texture , TextureDetectCallback p_callback , void * p_userdata ) = 0 ;
2017-02-06 04:38:39 +01:00
2019-06-11 20:43:37 +02:00
enum TextureDetectRoughnessChannel {
TEXTURE_DETECT_ROUGNHESS_R ,
TEXTURE_DETECT_ROUGNHESS_G ,
TEXTURE_DETECT_ROUGNHESS_B ,
TEXTURE_DETECT_ROUGNHESS_A ,
TEXTURE_DETECT_ROUGNHESS_GRAY ,
} ;
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 14:50:44 +02:00
struct TextureInfo {
RID texture ;
2018-06-26 13:59:26 +02:00
uint32_t width ;
uint32_t height ;
uint32_t depth ;
2015-10-21 14:50:44 +02:00
Image : : Format format ;
int bytes ;
String path ;
} ;
2017-03-05 16:44:50 +01:00
virtual void texture_debug_usage ( List < TextureInfo > * r_info ) = 0 ;
2017-10-20 00:24:49 +02:00
Array _texture_debug_usage_bind ( ) ;
2014-02-10 02:10:30 +01:00
2018-07-16 16:43:26 +02:00
virtual void texture_set_force_redraw_if_visible ( RID p_texture , bool p_enable ) = 0 ;
2017-12-04 19:55:20 +01:00
2014-02-10 02:10:30 +01:00
/* SHADER API */
enum ShaderMode {
2016-10-03 21:33:42 +02:00
SHADER_SPATIAL ,
2014-02-10 02:10:30 +01:00
SHADER_CANVAS_ITEM ,
2017-01-02 02:16:52 +01:00
SHADER_PARTICLES ,
2019-09-15 11:58:38 +02:00
SHADER_SKY ,
2016-10-10 23:31:01 +02:00
SHADER_MAX
2014-02-10 02:10:30 +01:00
} ;
2017-04-07 04:36:37 +02:00
virtual RID shader_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void shader_set_code ( RID p_shader , const String & p_code ) = 0 ;
virtual String shader_get_code ( RID p_shader ) const = 0 ;
virtual void shader_get_param_list ( RID p_shader , List < PropertyInfo > * p_param_list ) const = 0 ;
2017-10-20 00:24:49 +02:00
Array _shader_get_param_list_bind ( RID p_shader ) const ;
2019-07-12 15:12:48 +02:00
virtual Variant shader_get_param_default ( RID p_shader , const StringName & p_param ) const = 0 ;
2014-12-21 15:42:44 +01:00
2017-03-05 16:44:50 +01:00
virtual void shader_set_default_texture_param ( RID p_shader , const StringName & p_name , RID p_texture ) = 0 ;
virtual RID shader_get_default_texture_param ( RID p_shader , const StringName & p_name ) const = 0 ;
2014-02-10 02:10:30 +01:00
/* COMMON MATERIAL API */
2017-09-01 17:56:52 +02:00
enum {
MATERIAL_RENDER_PRIORITY_MIN = - 128 ,
MATERIAL_RENDER_PRIORITY_MAX = 127 ,
} ;
2020-04-20 11:48:00 +02:00
2017-03-05 16:44:50 +01:00
virtual RID material_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void material_set_shader ( RID p_shader_material , RID p_shader ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
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 ;
2014-02-10 02:10:30 +01:00
2017-09-01 17:56:52 +02:00
virtual void material_set_render_priority ( RID p_material , int priority ) = 0 ;
2017-07-08 17:34:05 +02:00
virtual void material_set_next_pass ( RID p_material , RID p_next_material ) = 0 ;
2014-02-10 02:10:30 +01:00
/* MESH API */
enum ArrayType {
2017-03-05 16:44:50 +01:00
ARRAY_VERTEX = 0 ,
ARRAY_NORMAL = 1 ,
ARRAY_TANGENT = 2 ,
ARRAY_COLOR = 3 ,
ARRAY_TEX_UV = 4 ,
ARRAY_TEX_UV2 = 5 ,
ARRAY_BONES = 6 ,
ARRAY_WEIGHTS = 7 ,
ARRAY_INDEX = 8 ,
ARRAY_MAX = 9
2016-03-09 00:00:52 +01:00
} ;
2014-02-10 02:10:30 +01:00
enum ArrayFormat {
/* ARRAY FORMAT FLAGS */
2017-03-05 16:44:50 +01:00
ARRAY_FORMAT_VERTEX = 1 < < ARRAY_VERTEX , // mandatory
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 ,
ARRAY_FORMAT_BONES = 1 < < ARRAY_BONES ,
ARRAY_FORMAT_WEIGHTS = 1 < < ARRAY_WEIGHTS ,
ARRAY_FORMAT_INDEX = 1 < < ARRAY_INDEX ,
ARRAY_COMPRESS_BASE = ( ARRAY_INDEX + 1 ) ,
ARRAY_COMPRESS_NORMAL = 1 < < ( ARRAY_NORMAL + ARRAY_COMPRESS_BASE ) ,
ARRAY_COMPRESS_TANGENT = 1 < < ( ARRAY_TANGENT + ARRAY_COMPRESS_BASE ) ,
ARRAY_COMPRESS_COLOR = 1 < < ( ARRAY_COLOR + ARRAY_COMPRESS_BASE ) ,
ARRAY_COMPRESS_TEX_UV = 1 < < ( ARRAY_TEX_UV + ARRAY_COMPRESS_BASE ) ,
ARRAY_COMPRESS_TEX_UV2 = 1 < < ( ARRAY_TEX_UV2 + ARRAY_COMPRESS_BASE ) ,
ARRAY_COMPRESS_INDEX = 1 < < ( ARRAY_INDEX + ARRAY_COMPRESS_BASE ) ,
2020-04-20 11:48:00 +02:00
ARRAY_COMPRESS_DEFAULT = ARRAY_COMPRESS_NORMAL | ARRAY_COMPRESS_TANGENT | ARRAY_COMPRESS_COLOR | ARRAY_COMPRESS_TEX_UV | ARRAY_COMPRESS_TEX_UV2 ,
2017-03-05 16:44:50 +01:00
ARRAY_FLAG_USE_2D_VERTICES = ARRAY_COMPRESS_INDEX < < 1 ,
2017-11-14 21:25:42 +01:00
ARRAY_FLAG_USE_DYNAMIC_UPDATE = ARRAY_COMPRESS_INDEX < < 3 ,
2016-03-09 00:00:52 +01:00
} ;
2014-02-10 02:10:30 +01:00
enum PrimitiveType {
2019-06-16 04:45:24 +02:00
PRIMITIVE_POINTS ,
PRIMITIVE_LINES ,
2019-08-19 00:40:52 +02:00
PRIMITIVE_LINE_STRIP ,
2019-06-16 04:45:24 +02:00
PRIMITIVE_TRIANGLES ,
2019-08-19 00:40:52 +02:00
PRIMITIVE_TRIANGLE_STRIP ,
2019-06-16 04:45:24 +02:00
PRIMITIVE_MAX ,
2016-03-09 00:00:52 +01:00
} ;
2014-02-10 02:10:30 +01:00
2019-08-19 00:40:52 +02:00
struct SurfaceData {
PrimitiveType primitive = PRIMITIVE_MAX ;
uint32_t format = 0 ;
2020-02-17 22:06:54 +01:00
Vector < uint8_t > vertex_data ;
2019-08-19 00:40:52 +02:00
uint32_t vertex_count = 0 ;
2020-02-17 22:06:54 +01:00
Vector < uint8_t > index_data ;
2019-08-19 00:40:52 +02:00
uint32_t index_count = 0 ;
AABB aabb ;
struct LOD {
float edge_length ;
2020-02-17 22:06:54 +01:00
Vector < uint8_t > index_data ;
2019-08-19 00:40:52 +02:00
} ;
Vector < LOD > lods ;
Vector < AABB > bone_aabbs ;
2020-03-17 07:33:00 +01:00
Vector < Vector < uint8_t > > blend_shapes ;
2019-08-19 00:40:52 +02:00
RID material ;
} ;
virtual RID mesh_create_from_surfaces ( const Vector < SurfaceData > & p_surfaces ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual RID mesh_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-11-21 01:36:32 +01:00
virtual uint32_t mesh_surface_get_format_offset ( uint32_t p_format , int p_vertex_len , int p_index_len , int p_array_index ) const ;
virtual uint32_t mesh_surface_get_format_stride ( uint32_t p_format , int p_vertex_len , int p_index_len ) const ;
/// Returns stride
virtual uint32_t mesh_surface_make_offsets_from_format ( uint32_t p_format , int p_vertex_len , int p_index_len , uint32_t * r_offsets ) const ;
2019-08-19 00:40:52 +02:00
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 = ARRAY_COMPRESS_DEFAULT ) ;
Array mesh_create_arrays_from_surface_data ( const SurfaceData & p_data ) const ;
Array mesh_surface_get_arrays ( RID p_mesh , int p_surface ) const ;
Array mesh_surface_get_blend_shape_arrays ( RID p_mesh , int p_surface ) const ;
Dictionary mesh_surface_get_lods ( RID p_mesh , int p_surface ) const ;
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 ( ) , uint32_t p_compress_format = ARRAY_COMPRESS_DEFAULT ) ;
virtual void mesh_add_surface ( RID p_mesh , const SurfaceData & p_surface ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual int mesh_get_blend_shape_count ( RID p_mesh ) const = 0 ;
2014-02-10 02:10:30 +01:00
2017-01-12 12:34:00 +01:00
enum BlendShapeMode {
BLEND_SHAPE_MODE_NORMALIZED ,
BLEND_SHAPE_MODE_RELATIVE ,
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01: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 02:10:30 +01:00
2020-02-17 22:06:54 +01:00
virtual void mesh_surface_update_region ( RID p_mesh , int p_surface , int p_offset , const Vector < uint8_t > & p_data ) = 0 ;
2017-11-14 21:25:42 +01:00
2017-03-05 16:44:50 +01:00
virtual void mesh_surface_set_material ( RID p_mesh , int p_surface , RID p_material ) = 0 ;
virtual RID mesh_surface_get_material ( RID p_mesh , int p_surface ) const = 0 ;
2014-02-10 02:10:30 +01:00
2019-08-19 00:40:52 +02:00
virtual SurfaceData mesh_get_surface ( RID p_mesh , int p_surface ) const = 0 ;
2016-10-03 21:33:42 +02:00
2017-03-05 16:44:50 +01:00
virtual int mesh_get_surface_count ( RID p_mesh ) const = 0 ;
2014-05-05 03:50:23 +02:00
2017-11-17 03:09:00 +01: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 03:50:23 +02:00
2017-03-05 16:44:50 +01:00
virtual void mesh_clear ( RID p_mesh ) = 0 ;
2015-09-20 18:03:46 +02:00
2014-02-10 02:10:30 +01:00
/* MULTIMESH API */
2017-03-05 16:44:50 +01:00
virtual RID multimesh_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
enum MultimeshTransformFormat {
MULTIMESH_TRANSFORM_2D ,
MULTIMESH_TRANSFORM_3D ,
} ;
2019-09-14 05:37:42 +02:00
virtual void multimesh_allocate ( RID p_multimesh , int p_instances , MultimeshTransformFormat p_transform_format , bool p_use_colors = false , bool p_use_custom_data = false ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual int multimesh_get_instance_count ( RID p_multimesh ) const = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void multimesh_set_mesh ( RID p_multimesh , RID p_mesh ) = 0 ;
virtual void multimesh_instance_set_transform ( RID p_multimesh , int p_index , const Transform & p_transform ) = 0 ;
virtual void multimesh_instance_set_transform_2d ( RID p_multimesh , int p_index , const Transform2D & p_transform ) = 0 ;
virtual void multimesh_instance_set_color ( RID p_multimesh , int p_index , const Color & p_color ) = 0 ;
2018-07-07 01:21:13 +02:00
virtual void multimesh_instance_set_custom_data ( RID p_multimesh , int p_index , const Color & p_color ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual RID multimesh_get_mesh ( RID p_multimesh ) const = 0 ;
2017-11-17 03:09:00 +01:00
virtual AABB multimesh_get_aabb ( RID p_multimesh ) const = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual Transform multimesh_instance_get_transform ( RID p_multimesh , int p_index ) const = 0 ;
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 01:21:13 +02:00
virtual Color multimesh_instance_get_custom_data ( RID p_multimesh , int p_index ) const = 0 ;
2020-02-17 22:06:54 +01: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 02:10:30 +01:00
2017-03-05 16:44:50 +01: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-03 21:33:42 +02:00
2014-05-29 15:56:39 +02:00
/* IMMEDIATE API */
2017-03-05 16:44:50 +01:00
virtual RID immediate_create ( ) = 0 ;
virtual void immediate_begin ( RID p_immediate , PrimitiveType p_rimitive , RID p_texture = RID ( ) ) = 0 ;
virtual void immediate_vertex ( RID p_immediate , const Vector3 & p_vertex ) = 0 ;
virtual void immediate_vertex_2d ( RID p_immediate , const Vector2 & p_vertex ) ;
virtual void immediate_normal ( RID p_immediate , const Vector3 & p_normal ) = 0 ;
virtual void immediate_tangent ( RID p_immediate , const Plane & p_tangent ) = 0 ;
virtual void immediate_color ( RID p_immediate , const Color & p_color ) = 0 ;
virtual void immediate_uv ( RID p_immediate , const Vector2 & tex_uv ) = 0 ;
virtual void immediate_uv2 ( RID p_immediate , const Vector2 & tex_uv ) = 0 ;
virtual void immediate_end ( RID p_immediate ) = 0 ;
virtual void immediate_clear ( RID p_immediate ) = 0 ;
virtual void immediate_set_material ( RID p_immediate , RID p_material ) = 0 ;
virtual RID immediate_get_material ( RID p_immediate ) const = 0 ;
2014-05-29 15:56:39 +02:00
2016-10-03 21:33:42 +02:00
/* SKELETON API */
2014-05-29 15:56:39 +02:00
2017-03-05 16:44:50 +01:00
virtual RID skeleton_create ( ) = 0 ;
virtual void skeleton_allocate ( RID p_skeleton , int p_bones , bool p_2d_skeleton = false ) = 0 ;
virtual int skeleton_get_bone_count ( RID p_skeleton ) const = 0 ;
virtual void skeleton_bone_set_transform ( RID p_skeleton , int p_bone , const Transform & p_transform ) = 0 ;
virtual Transform skeleton_bone_get_transform ( RID p_skeleton , int p_bone ) const = 0 ;
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-03 22:29:15 +02:00
virtual void skeleton_set_base_transform_2d ( RID p_skeleton , const Transform2D & p_base_transform ) = 0 ;
2014-02-10 02:10:30 +01:00
/* Light API */
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
enum LightType {
LIGHT_DIRECTIONAL ,
LIGHT_OMNI ,
LIGHT_SPOT
} ;
enum LightParam {
LIGHT_PARAM_ENERGY ,
2017-11-20 01:45:42 +01:00
LIGHT_PARAM_INDIRECT_ENERGY ,
2016-10-03 21:33:42 +02:00
LIGHT_PARAM_SPECULAR ,
LIGHT_PARAM_RANGE ,
2020-04-09 20:11:15 +02:00
LIGHT_PARAM_SIZE ,
2014-02-10 02:10:30 +01:00
LIGHT_PARAM_ATTENUATION ,
2016-10-03 21:33:42 +02:00
LIGHT_PARAM_SPOT_ANGLE ,
2016-10-27 16:50:26 +02:00
LIGHT_PARAM_SPOT_ATTENUATION ,
2016-10-03 21:33:42 +02: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-07 19:38:17 +02:00
LIGHT_PARAM_SHADOW_FADE_START ,
2016-10-03 21:33:42 +02:00
LIGHT_PARAM_SHADOW_NORMAL_BIAS ,
2016-10-27 16:50:26 +02:00
LIGHT_PARAM_SHADOW_BIAS ,
2020-04-08 03:51:52 +02:00
LIGHT_PARAM_SHADOW_PANCAKE_SIZE ,
2020-04-10 11:30:36 +02:00
LIGHT_PARAM_SHADOW_BLUR ,
2020-08-13 03:21:01 +02:00
LIGHT_PARAM_SHADOW_VOLUMETRIC_FOG_FADE ,
2020-04-08 03:51:52 +02:00
LIGHT_PARAM_TRANSMITTANCE_BIAS ,
2014-02-10 02:10:30 +01:00
LIGHT_PARAM_MAX
} ;
2017-11-10 03:34:01 +01:00
virtual RID directional_light_create ( ) = 0 ;
virtual RID omni_light_create ( ) = 0 ;
virtual RID spot_light_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01: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 ;
virtual void light_set_shadow ( RID p_light , bool p_enabled ) = 0 ;
virtual void light_set_shadow_color ( RID p_light , const Color & p_color ) = 0 ;
virtual void light_set_projector ( RID p_light , RID p_texture ) = 0 ;
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 ;
2017-08-20 01:06:40 +02:00
virtual void light_set_reverse_cull_face_mode ( RID p_light , bool p_enabled ) = 0 ;
2020-06-25 15:33:28 +02:00
enum LightBakeMode {
LIGHT_BAKE_DISABLED ,
LIGHT_BAKE_DYNAMIC ,
LIGHT_BAKE_STATIC ,
} ;
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 02:10:30 +01:00
// omni light
enum LightOmniShadowMode {
LIGHT_OMNI_SHADOW_DUAL_PARABOLOID ,
2016-11-10 03:55:06 +01:00
LIGHT_OMNI_SHADOW_CUBE ,
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01:00
virtual void light_omni_set_shadow_mode ( RID p_light , LightOmniShadowMode p_mode ) = 0 ;
2016-11-10 03:55:06 +01:00
2014-02-10 02:10:30 +01:00
// directional light
enum LightDirectionalShadowMode {
LIGHT_DIRECTIONAL_SHADOW_ORTHOGONAL ,
2014-05-05 03:50:23 +02:00
LIGHT_DIRECTIONAL_SHADOW_PARALLEL_2_SPLITS ,
2020-07-01 14:18:13 +02:00
LIGHT_DIRECTIONAL_SHADOW_PARALLEL_4_SPLITS ,
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01:00
virtual void light_directional_set_shadow_mode ( RID p_light , LightDirectionalShadowMode p_mode ) = 0 ;
virtual void light_directional_set_blend_splits ( RID p_light , bool p_enable ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-09-07 23:00:47 +02:00
enum LightDirectionalShadowDepthRangeMode {
LIGHT_DIRECTIONAL_SHADOW_DEPTH_RANGE_STABLE ,
LIGHT_DIRECTIONAL_SHADOW_DEPTH_RANGE_OPTIMIZED ,
} ;
virtual void light_directional_set_shadow_depth_range_mode ( RID p_light , LightDirectionalShadowDepthRangeMode p_range_mode ) = 0 ;
2016-10-03 21:33:42 +02:00
/* PROBE API */
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual RID reflection_probe_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2016-11-19 17:23:37 +01:00
enum ReflectionProbeUpdateMode {
REFLECTION_PROBE_UPDATE_ONCE ,
REFLECTION_PROBE_UPDATE_ALWAYS ,
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01:00
virtual void reflection_probe_set_update_mode ( RID p_probe , ReflectionProbeUpdateMode p_mode ) = 0 ;
virtual void reflection_probe_set_intensity ( RID p_probe , float p_intensity ) = 0 ;
2020-06-25 15:33:28 +02:00
enum ReflectionProbeAmbientMode {
REFLECTION_PROBE_AMBIENT_DISABLED ,
REFLECTION_PROBE_AMBIENT_ENVIRONMENT ,
2020-07-01 14:18:13 +02:00
REFLECTION_PROBE_AMBIENT_COLOR ,
2020-06-25 15:33:28 +02: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 ;
2017-03-05 16:44:50 +01:00
virtual void reflection_probe_set_max_distance ( RID p_probe , float p_distance ) = 0 ;
virtual void reflection_probe_set_extents ( RID p_probe , const Vector3 & p_extents ) = 0 ;
virtual void reflection_probe_set_origin_offset ( RID p_probe , const Vector3 & p_offset ) = 0 ;
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 ;
virtual void reflection_probe_set_cull_mask ( RID p_probe , uint32_t p_layers ) = 0 ;
2018-09-28 21:40:20 +02:00
virtual void reflection_probe_set_resolution ( RID p_probe , int p_resolution ) = 0 ;
2016-03-09 00:00:52 +01:00
2020-04-14 05:05:21 +02: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 ;
virtual void decal_set_extents ( RID p_decal , const Vector3 & p_extents ) = 0 ;
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 ;
2016-12-20 04:21:07 +01:00
/* GI PROBE API */
2014-05-29 15:56:39 +02:00
2017-03-05 16:44:50 +01:00
virtual RID gi_probe_create ( ) = 0 ;
2014-06-11 15:41:03 +02:00
2020-02-17 22:06:54 +01:00
virtual void gi_probe_allocate ( RID p_gi_probe , const Transform & 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 15:41:03 +02:00
2019-10-03 22:39:08 +02:00
virtual AABB gi_probe_get_bounds ( RID p_gi_probe ) const = 0 ;
virtual Vector3i gi_probe_get_octree_size ( RID p_gi_probe ) const = 0 ;
2020-02-17 22:06:54 +01:00
virtual Vector < uint8_t > gi_probe_get_octree_cells ( RID p_gi_probe ) const = 0 ;
virtual Vector < uint8_t > gi_probe_get_data_cells ( RID p_gi_probe ) const = 0 ;
virtual Vector < uint8_t > gi_probe_get_distance_field ( RID p_gi_probe ) const = 0 ;
virtual Vector < int > gi_probe_get_level_counts ( RID p_gi_probe ) const = 0 ;
2019-10-03 22:39:08 +02:00
virtual Transform gi_probe_get_to_cell_xform ( RID p_gi_probe ) const = 0 ;
2014-06-11 15:41:03 +02:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_dynamic_range ( RID p_gi_probe , float p_range ) = 0 ;
virtual float gi_probe_get_dynamic_range ( RID p_gi_probe ) const = 0 ;
2014-06-11 15:41:03 +02:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_propagation ( RID p_gi_probe , float p_range ) = 0 ;
virtual float gi_probe_get_propagation ( RID p_gi_probe ) const = 0 ;
2014-10-28 02:54:32 +01:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_energy ( RID p_gi_probe , float p_energy ) = 0 ;
virtual float gi_probe_get_energy ( RID p_gi_probe ) const = 0 ;
2014-10-28 02:54:32 +01:00
2019-10-14 08:45:44 +02:00
virtual void gi_probe_set_ao ( RID p_gi_probe , float p_ao ) = 0 ;
virtual float gi_probe_get_ao ( RID p_gi_probe ) const = 0 ;
2019-11-04 22:17:53 +01:00
virtual void gi_probe_set_ao_size ( RID p_gi_probe , float p_strength ) = 0 ;
virtual float gi_probe_get_ao_size ( RID p_gi_probe ) const = 0 ;
2019-10-14 08:45:44 +02:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_bias ( RID p_gi_probe , float p_bias ) = 0 ;
virtual float gi_probe_get_bias ( RID p_gi_probe ) const = 0 ;
2014-08-14 15:31:38 +02:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_normal_bias ( RID p_gi_probe , float p_range ) = 0 ;
virtual float gi_probe_get_normal_bias ( RID p_gi_probe ) const = 0 ;
2017-02-16 12:55:11 +01:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_interior ( RID p_gi_probe , bool p_enable ) = 0 ;
virtual bool gi_probe_is_interior ( RID p_gi_probe ) const = 0 ;
2017-07-16 04:24:37 +02:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_use_two_bounces ( RID p_gi_probe , bool p_enable ) = 0 ;
virtual bool gi_probe_is_using_two_bounces ( RID p_gi_probe ) const = 0 ;
2017-02-06 09:12:15 +01:00
2019-10-03 22:39:08 +02:00
virtual void gi_probe_set_anisotropy_strength ( RID p_gi_probe , float p_strength ) = 0 ;
virtual float gi_probe_get_anisotropy_strength ( RID p_gi_probe ) const = 0 ;
2016-01-31 13:56:53 +01:00
2020-06-25 15:33:28 +02:00
enum GIProbeQuality {
GI_PROBE_QUALITY_LOW ,
GI_PROBE_QUALITY_HIGH ,
} ;
virtual void gi_probe_set_quality ( GIProbeQuality ) = 0 ;
2020-05-01 14:34:23 +02:00
/* LIGHTMAP */
2017-12-14 12:59:46 +01:00
2020-05-01 14:34:23 +02: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 ;
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 12:59:46 +01:00
2016-12-30 12:35:54 +01:00
/* PARTICLES API */
2017-03-05 16:44:50 +01:00
virtual RID particles_create ( ) = 0 ;
2016-12-30 12:35:54 +01:00
2020-09-06 14:18:10 +02:00
virtual void particles_set_emitting ( RID p_particles , bool p_enable ) = 0 ;
2017-12-23 05:08:50 +01:00
virtual bool particles_get_emitting ( RID p_particles ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void particles_set_amount ( RID p_particles , int p_amount ) = 0 ;
virtual void particles_set_lifetime ( RID p_particles , float p_lifetime ) = 0 ;
2017-06-25 13:01:15 +02:00
virtual void particles_set_one_shot ( RID p_particles , bool p_one_shot ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void particles_set_pre_process_time ( RID p_particles , float p_time ) = 0 ;
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 03:09:00 +01:00
virtual void particles_set_custom_aabb ( RID p_particles , const AABB & p_aabb ) = 0 ;
2017-04-09 03:38:11 +02:00
virtual void particles_set_speed_scale ( RID p_particles , float p_scale ) = 0 ;
2017-03-05 16:44:50 +01: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 04:36:37 +02:00
virtual void particles_set_fixed_fps ( RID p_particles , int p_fps ) = 0 ;
virtual void particles_set_fractional_delta ( RID p_particles , bool p_enable ) = 0 ;
2019-11-09 09:51:17 +01:00
virtual bool particles_is_inactive ( RID p_particles ) = 0 ;
virtual void particles_request_process ( RID p_particles ) = 0 ;
2017-06-25 13:01:15 +02:00
virtual void particles_restart ( RID p_particles ) = 0 ;
2016-01-31 13:56:53 +01:00
2020-09-06 14:18:10 +02: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
} ;
virtual void particles_emit ( RID p_particles , const Transform & p_transform , const Vector3 & p_velocity , const Color & p_color , const Color & p_custom , uint32_t p_emit_flags ) = 0 ;
2016-12-30 12:35:54 +01:00
enum ParticlesDrawOrder {
PARTICLES_DRAW_ORDER_INDEX ,
PARTICLES_DRAW_ORDER_LIFETIME ,
PARTICLES_DRAW_ORDER_VIEW_DEPTH ,
} ;
2014-10-28 02:54:32 +01:00
2017-03-05 16:44:50 +01:00
virtual void particles_set_draw_order ( RID p_particles , ParticlesDrawOrder p_order ) = 0 ;
2014-10-28 02:54:32 +01:00
2017-03-05 16:44:50 +01: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 02:54:32 +01:00
2017-11-17 03:09:00 +01:00
virtual AABB particles_get_current_aabb ( RID p_particles ) = 0 ;
2014-05-29 15:56:39 +02:00
2017-06-21 21:25:45 +02:00
virtual void particles_set_emission_transform ( RID p_particles , const Transform & p_transform ) = 0 ; //this is only used for 2D, in 3D it's automatic
2014-02-10 02:10:30 +01:00
/* CAMERA API */
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01: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-19 17:17:02 +01:00
virtual void camera_set_frustum ( RID p_camera , float p_size , Vector2 p_offset , float p_z_near , float p_z_far ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void camera_set_transform ( RID p_camera , const Transform & p_transform ) = 0 ;
virtual void camera_set_cull_mask ( RID p_camera , uint32_t p_layers ) = 0 ;
virtual void camera_set_environment ( RID p_camera , RID p_env ) = 0 ;
2020-01-13 19:37:24 +01:00
virtual void camera_set_camera_effects ( RID p_camera , RID p_camera_effects ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void camera_set_use_vertical_aspect ( RID p_camera , bool p_enable ) = 0 ;
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
/* VIEWPORT TARGET API */
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual RID viewport_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2020-04-08 16:47:36 +02:00
virtual void viewport_set_use_xr ( RID p_viewport , bool p_use_xr ) = 0 ;
2017-03-05 16:44:50 +01: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 ;
virtual void viewport_set_parent_viewport ( RID p_viewport , RID p_parent_viewport ) = 0 ;
2016-10-03 21:33:42 +02:00
2020-03-04 02:51:12 +01: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-08 20:25:34 +02:00
virtual void viewport_set_render_direct_to_screen ( RID p_viewport , bool p_enable ) = 0 ;
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
enum ViewportUpdateMode {
VIEWPORT_UPDATE_DISABLED ,
VIEWPORT_UPDATE_ONCE , //then goes to disabled, must be manually updated
VIEWPORT_UPDATE_WHEN_VISIBLE , // default
2020-03-14 17:06:39 +01:00
VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE ,
2016-10-03 21:33:42 +02:00
VIEWPORT_UPDATE_ALWAYS
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01:00
virtual void viewport_set_update_mode ( RID p_viewport , ViewportUpdateMode p_mode ) = 0 ;
2014-04-15 03:43:44 +02:00
2016-10-03 21:33:42 +02:00
enum ViewportClearMode {
VIEWPORT_CLEAR_ALWAYS ,
2016-10-05 06:26:35 +02:00
VIEWPORT_CLEAR_NEVER ,
2016-10-03 21:33:42 +02:00
VIEWPORT_CLEAR_ONLY_NEXT_FRAME
2014-02-10 02:10:30 +01:00
} ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
virtual void viewport_set_clear_mode ( RID p_viewport , ViewportClearMode p_clear_mode ) = 0 ;
2016-10-03 21:33:42 +02:00
2017-03-05 16:44:50 +01:00
virtual RID viewport_get_texture ( RID p_viewport ) const = 0 ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
virtual void viewport_set_hide_scenario ( RID p_viewport , bool p_hide ) = 0 ;
virtual void viewport_set_hide_canvas ( RID p_viewport , bool p_hide ) = 0 ;
virtual void viewport_set_disable_environment ( RID p_viewport , bool p_disable ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01: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 ;
virtual void viewport_set_canvas_transform ( RID p_viewport , RID p_canvas , const Transform2D & p_offset ) = 0 ;
virtual void viewport_set_transparent_background ( RID p_viewport , bool p_enabled ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void viewport_set_global_canvas_transform ( RID p_viewport , const Transform2D & p_transform ) = 0 ;
2018-10-30 21:53:00 +01:00
virtual void viewport_set_canvas_stacking ( RID p_viewport , RID p_canvas , int p_layer , int p_sublayer ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void viewport_set_shadow_atlas_size ( RID p_viewport , int p_size ) = 0 ;
virtual void viewport_set_shadow_atlas_quadrant_subdivision ( RID p_viewport , int p_quadrant , int p_subdiv ) = 0 ;
2016-11-10 03:55:06 +01:00
2017-01-02 02:16:52 +01:00
enum ViewportMSAA {
VIEWPORT_MSAA_DISABLED ,
VIEWPORT_MSAA_2X ,
VIEWPORT_MSAA_4X ,
VIEWPORT_MSAA_8X ,
VIEWPORT_MSAA_16X ,
2020-04-12 20:33:57 +02:00
VIEWPORT_MSAA_MAX ,
2017-01-02 02:16:52 +01:00
} ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void viewport_set_msaa ( RID p_viewport , ViewportMSAA p_msaa ) = 0 ;
2017-06-09 05:23:50 +02:00
2020-04-12 06:49:10 +02:00
enum ViewportScreenSpaceAA {
VIEWPORT_SCREEN_SPACE_AA_DISABLED ,
VIEWPORT_SCREEN_SPACE_AA_FXAA ,
2020-04-20 11:48:00 +02:00
VIEWPORT_SCREEN_SPACE_AA_MAX ,
2020-04-12 06:49:10 +02:00
} ;
2020-04-20 11:48:00 +02:00
2020-04-12 06:49:10 +02:00
virtual void viewport_set_screen_space_aa ( RID p_viewport , ViewportScreenSpaceAA p_mode ) = 0 ;
2017-06-11 20:52:03 +02:00
enum ViewportRenderInfo {
VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME ,
VIEWPORT_RENDER_INFO_VERTICES_IN_FRAME ,
VIEWPORT_RENDER_INFO_MATERIAL_CHANGES_IN_FRAME ,
VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME ,
VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME ,
VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME ,
2020-04-20 11:48:00 +02:00
VIEWPORT_RENDER_INFO_MAX ,
2017-06-11 20:52:03 +02:00
} ;
virtual int viewport_get_render_info ( RID p_viewport , ViewportRenderInfo p_info ) = 0 ;
enum ViewportDebugDraw {
VIEWPORT_DEBUG_DRAW_DISABLED ,
VIEWPORT_DEBUG_DRAW_UNSHADED ,
2019-09-07 03:51:27 +02:00
VIEWPORT_DEBUG_DRAW_LIGHTING ,
2017-06-11 20:52:03 +02:00
VIEWPORT_DEBUG_DRAW_OVERDRAW ,
VIEWPORT_DEBUG_DRAW_WIREFRAME ,
2020-01-27 00:09:40 +01:00
VIEWPORT_DEBUG_DRAW_NORMAL_BUFFER ,
2019-10-03 22:39:08 +02:00
VIEWPORT_DEBUG_DRAW_GI_PROBE_ALBEDO ,
VIEWPORT_DEBUG_DRAW_GI_PROBE_LIGHTING ,
2019-10-05 15:27:43 +02:00
VIEWPORT_DEBUG_DRAW_GI_PROBE_EMISSION ,
2019-10-03 22:39:08 +02:00
VIEWPORT_DEBUG_DRAW_SHADOW_ATLAS ,
VIEWPORT_DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS ,
2020-01-12 02:26:52 +01:00
VIEWPORT_DEBUG_DRAW_SCENE_LUMINANCE ,
2020-01-25 11:18:55 +01:00
VIEWPORT_DEBUG_DRAW_SSAO ,
2020-04-08 03:51:52 +02:00
VIEWPORT_DEBUG_DRAW_PSSM_SPLITS ,
2020-04-14 05:05:21 +02:00
VIEWPORT_DEBUG_DRAW_DECAL_ATLAS ,
2020-06-25 15:33:28 +02:00
VIEWPORT_DEBUG_DRAW_SDFGI ,
VIEWPORT_DEBUG_DRAW_SDFGI_PROBES ,
VIEWPORT_DEBUG_DRAW_GI_BUFFER ,
2017-06-11 20:52:03 +02:00
} ;
virtual void viewport_set_debug_draw ( RID p_viewport , ViewportDebugDraw p_draw ) = 0 ;
2020-04-10 19:18:42 +02:00
virtual void viewport_set_measure_render_time ( RID p_viewport , bool p_enable ) = 0 ;
virtual float viewport_get_measured_render_time_cpu ( RID p_viewport ) const = 0 ;
virtual float viewport_get_measured_render_time_gpu ( RID p_viewport ) const = 0 ;
2019-09-07 03:51:27 +02:00
virtual void directional_shadow_atlas_set_size ( int p_size ) = 0 ;
2019-08-26 22:43:58 +02:00
/* SKY API */
enum SkyMode {
2020-07-11 02:07:30 +02:00
SKY_MODE_AUTOMATIC ,
2019-08-26 22:43:58 +02:00
SKY_MODE_QUALITY ,
2020-07-11 02:07:30 +02:00
SKY_MODE_INCREMENTAL ,
2019-08-26 22:43:58 +02: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 01:32:19 +01:00
virtual void sky_set_material ( RID p_sky , RID p_material ) = 0 ;
2020-05-01 14:34:23 +02:00
virtual Ref < Image > sky_bake_panorama ( RID p_sky , float p_energy , bool p_bake_irradiance , const Size2i & p_size ) = 0 ;
2019-08-26 22:43:58 +02:00
2014-02-10 02:10:30 +01:00
/* ENVIRONMENT API */
2017-03-05 16:44:50 +01:00
virtual RID environment_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
enum EnvironmentBG {
2016-10-21 12:27:13 +02:00
ENV_BG_CLEAR_COLOR ,
2014-02-10 02:10:30 +01:00
ENV_BG_COLOR ,
2017-05-25 18:53:59 +02:00
ENV_BG_SKY ,
2015-03-16 04:47:37 +01:00
ENV_BG_CANVAS ,
2016-10-21 12:27:13 +02:00
ENV_BG_KEEP ,
2017-08-20 16:17:24 +02:00
ENV_BG_CAMERA_FEED ,
2014-02-10 02:10:30 +01:00
ENV_BG_MAX
} ;
2019-08-26 22:43:58 +02: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 ,
} ;
2017-03-05 16:44:50 +01:00
virtual void environment_set_background ( RID p_env , EnvironmentBG p_bg ) = 0 ;
2017-05-25 18:53:59 +02:00
virtual void environment_set_sky ( RID p_env , RID p_sky ) = 0 ;
2017-09-29 23:56:05 +02:00
virtual void environment_set_sky_custom_fov ( RID p_env , float p_scale ) = 0 ;
2018-12-15 06:27:03 +01:00
virtual void environment_set_sky_orientation ( RID p_env , const Basis & p_orientation ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void environment_set_bg_color ( RID p_env , const Color & p_color ) = 0 ;
virtual void environment_set_bg_energy ( RID p_env , float p_energy ) = 0 ;
virtual void environment_set_canvas_max_layer ( RID p_env , int p_max_layer ) = 0 ;
2020-01-25 11:18:55 +01: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 , const Color & p_ao_color = Color ( ) ) = 0 ;
2019-06-11 20:43:37 +02:00
// FIXME: Disabled during Vulkan refactoring, should be ported.
#if 0
2017-08-20 16:17:24 +02:00
virtual void environment_set_camera_feed_id ( RID p_env , int p_camera_feed_id ) = 0 ;
2019-06-11 20:43:37 +02:00
# endif
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
enum EnvironmentGlowBlendMode {
2020-02-12 09:59:06 +01: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 15:56:39 +02:00
} ;
2020-04-20 11:48:00 +02:00
2020-03-30 15:46:03 +02:00
virtual void environment_set_glow ( RID p_env , bool p_enable , int p_level_flags , 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 ) = 0 ;
virtual void environment_glow_set_use_bicubic_upscale ( bool p_enable ) = 0 ;
2020-09-01 08:04:45 +02:00
virtual void environment_glow_set_use_high_quality ( bool p_enable ) = 0 ;
2014-06-28 04:21:45 +02:00
2016-10-03 21:33:42 +02:00
enum EnvironmentToneMapper {
ENV_TONE_MAPPER_LINEAR ,
2018-08-26 12:29:20 +02:00
ENV_TONE_MAPPER_REINHARD ,
2016-10-30 01:48:09 +02:00
ENV_TONE_MAPPER_FILMIC ,
2016-12-07 21:49:52 +01:00
ENV_TONE_MAPPER_ACES
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01:00
virtual void environment_set_tonemap ( RID p_env , EnvironmentToneMapper p_tone_mapper , float p_exposure , float p_white , bool p_auto_exposure , float p_min_luminance , float p_max_luminance , float p_auto_exp_speed , float p_auto_exp_grey ) = 0 ;
virtual void environment_set_adjustment ( RID p_env , bool p_enable , float p_brightness , float p_contrast , float p_saturation , RID p_ramp ) = 0 ;
2014-02-10 02:10:30 +01:00
2020-04-02 04:24:52 +02: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 {
ENV_SSR_ROUGNESS_QUALITY_DISABLED ,
ENV_SSR_ROUGNESS_QUALITY_LOW ,
ENV_SSR_ROUGNESS_QUALITY_MEDIUM ,
ENV_SSR_ROUGNESS_QUALITY_HIGH ,
} ;
virtual void environment_set_ssr_roughness_quality ( EnvironmentSSRRoughnessQuality p_quality ) = 0 ;
2017-10-22 18:52:31 +02:00
enum EnvironmentSSAOBlur {
ENV_SSAO_BLUR_DISABLED ,
ENV_SSAO_BLUR_1x1 ,
ENV_SSAO_BLUR_2x2 ,
ENV_SSAO_BLUR_3x3 ,
} ;
2020-02-16 18:55:40 +01:00
virtual void environment_set_ssao ( RID p_env , bool p_enable , float p_radius , float p_intensity , float p_bias , float p_light_affect , float p_ao_channel_affect , EnvironmentSSAOBlur p_blur , float p_bilateral_sharpness ) = 0 ;
2020-01-25 11:18:55 +01:00
enum EnvironmentSSAOQuality {
ENV_SSAO_QUALITY_LOW ,
ENV_SSAO_QUALITY_MEDIUM ,
ENV_SSAO_QUALITY_HIGH ,
ENV_SSAO_QUALITY_ULTRA ,
} ;
virtual void environment_set_ssao_quality ( EnvironmentSSAOQuality p_quality , bool p_half_size ) = 0 ;
2014-02-10 02:10:30 +01:00
2020-06-25 15:33:28 +02:00
enum EnvironmentSDFGICascades {
ENV_SDFGI_CASCADES_4 ,
ENV_SDFGI_CASCADES_6 ,
ENV_SDFGI_CASCADES_8 ,
} ;
enum EnvironmentSDFGIYScale {
ENV_SDFGI_Y_SCALE_DISABLED ,
ENV_SDFGI_Y_SCALE_75_PERCENT ,
ENV_SDFGI_Y_SCALE_50_PERCENT
} ;
2020-07-01 14:18:13 +02:00
virtual void environment_set_sdfgi ( RID p_env , bool p_enable , EnvironmentSDFGICascades p_cascades , float p_min_cell_size , EnvironmentSDFGIYScale p_y_scale , bool p_use_occlusion , bool p_use_multibounce , bool p_read_sky , float p_energy , float p_normal_bias , float p_probe_bias ) = 0 ;
2020-06-25 15:33:28 +02:00
enum EnvironmentSDFGIRayCount {
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 ;
2020-08-14 03:07:49 +02: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 ) = 0 ;
2017-06-07 04:16:17 +02:00
2020-08-13 03:21:01 +02:00
enum EnvVolumetricFogShadowFilter {
ENV_VOLUMETRIC_FOG_SHADOW_FILTER_DISABLED ,
ENV_VOLUMETRIC_FOG_SHADOW_FILTER_LOW ,
ENV_VOLUMETRIC_FOG_SHADOW_FILTER_MEDIUM ,
ENV_VOLUMETRIC_FOG_SHADOW_FILTER_HIGH ,
} ;
2020-09-05 10:46:56 +02:00
virtual void environment_set_volumetric_fog ( RID p_env , bool p_enable , float p_density , const Color & p_light , float p_light_energy , float p_length , float p_detail_spread , float p_gi_inject , EnvVolumetricFogShadowFilter p_shadow_filter ) = 0 ;
2020-08-13 03:21:01 +02: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 ;
virtual void environment_set_volumetric_fog_directional_shadow_shrink_size ( int p_shrink_size ) = 0 ;
virtual void environment_set_volumetric_fog_positional_shadow_shrink_size ( int p_shrink_size ) = 0 ;
2020-05-01 14:34:23 +02:00
virtual Ref < Image > environment_bake_panorama ( RID p_env , bool p_bake_irradiance , const Size2i & p_size ) = 0 ;
2020-06-25 15:33:28 +02:00
virtual void screen_space_roughness_limiter_set_active ( bool p_enable , float p_amount , float p_limit ) = 0 ;
2020-01-27 00:09:40 +01:00
2020-04-04 04:42:26 +02: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-13 19:37:24 +01:00
/* CAMERA EFFECTS */
virtual RID camera_effects_create ( ) = 0 ;
enum DOFBlurQuality {
2020-01-16 01:23:21 +01:00
DOF_BLUR_QUALITY_VERY_LOW ,
2020-01-13 19:37:24 +01:00
DOF_BLUR_QUALITY_LOW ,
DOF_BLUR_QUALITY_MEDIUM ,
DOF_BLUR_QUALITY_HIGH ,
} ;
2020-01-16 01:23:21 +01:00
virtual void camera_effects_set_dof_blur_quality ( DOFBlurQuality p_quality , bool p_use_jitter ) = 0 ;
enum DOFBokehShape {
DOF_BOKEH_BOX ,
DOF_BOKEH_HEXAGON ,
DOF_BOKEH_CIRCLE
} ;
virtual void camera_effects_set_dof_blur_bokeh_shape ( DOFBokehShape p_shape ) = 0 ;
virtual void camera_effects_set_dof_blur ( RID p_camera_effects , 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 ;
2020-01-13 19:37:24 +01:00
virtual void camera_effects_set_custom_exposure ( RID p_camera_effects , bool p_enable , float p_exposure ) = 0 ;
2020-04-10 11:30:36 +02:00
enum ShadowQuality {
SHADOW_QUALITY_HARD ,
SHADOW_QUALITY_SOFT_LOW ,
SHADOW_QUALITY_SOFT_MEDIUM ,
SHADOW_QUALITY_SOFT_HIGH ,
SHADOW_QUALITY_SOFT_ULTRA ,
SHADOW_QUALITY_MAX
2020-04-08 03:51:52 +02:00
} ;
2020-04-10 11:30:36 +02:00
virtual void shadows_quality_set ( ShadowQuality p_quality ) = 0 ;
virtual void directional_shadow_quality_set ( ShadowQuality p_quality ) = 0 ;
2020-04-08 03:51:52 +02:00
2014-02-10 02:10:30 +01:00
/* SCENARIO API */
2017-03-05 16:44:50 +01:00
virtual RID scenario_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
enum ScenarioDebugMode {
SCENARIO_DEBUG_DISABLED ,
SCENARIO_DEBUG_WIREFRAME ,
SCENARIO_DEBUG_OVERDRAW ,
2014-09-18 05:18:57 +02:00
SCENARIO_DEBUG_SHADELESS ,
2014-02-10 02:10:30 +01:00
} ;
2017-03-05 16:44:50 +01:00
virtual void scenario_set_debug ( RID p_scenario , ScenarioDebugMode p_debug_mode ) = 0 ;
virtual void scenario_set_environment ( RID p_scenario , RID p_environment ) = 0 ;
virtual void scenario_set_fallback_environment ( RID p_scenario , RID p_environment ) = 0 ;
2020-01-13 19:37:24 +01:00
virtual void scenario_set_camera_effects ( RID p_scenario , RID p_camera_effects ) = 0 ;
2014-02-10 02:10:30 +01:00
/* INSTANCING API */
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
enum InstanceType {
INSTANCE_NONE ,
INSTANCE_MESH ,
INSTANCE_MULTIMESH ,
2014-05-29 15:56:39 +02:00
INSTANCE_IMMEDIATE ,
2014-02-10 02:10:30 +01:00
INSTANCE_PARTICLES ,
INSTANCE_LIGHT ,
2016-10-03 21:33:42 +02:00
INSTANCE_REFLECTION_PROBE ,
2020-04-14 05:05:21 +02:00
INSTANCE_DECAL ,
2016-12-20 04:21:07 +01:00
INSTANCE_GI_PROBE ,
2020-05-01 14:34:23 +02:00
INSTANCE_LIGHTMAP ,
2016-10-19 16:14:41 +02:00
INSTANCE_MAX ,
2014-10-28 02:54:32 +01:00
2017-04-07 04:36:37 +02:00
INSTANCE_GEOMETRY_MASK = ( 1 < < INSTANCE_MESH ) | ( 1 < < INSTANCE_MULTIMESH ) | ( 1 < < INSTANCE_IMMEDIATE ) | ( 1 < < INSTANCE_PARTICLES )
2014-02-10 02:10:30 +01:00
} ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
virtual RID instance_create2 ( RID p_base , RID p_scenario ) ;
2020-01-21 21:32:27 +01:00
virtual RID instance_create ( ) = 0 ;
2014-02-10 02:10:30 +01:00
2020-01-21 21:32:27 +01: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 ;
2017-03-05 16:44:50 +01:00
virtual void instance_set_layer_mask ( RID p_instance , uint32_t p_mask ) = 0 ;
virtual void instance_set_transform ( RID p_instance , const Transform & p_transform ) = 0 ;
2019-05-09 11:21:49 +02:00
virtual void instance_attach_object_instance_id ( RID p_instance , ObjectID p_id ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void instance_set_blend_shape_weight ( RID p_instance , int p_shape , float p_weight ) = 0 ;
virtual void instance_set_surface_material ( RID p_instance , int p_surface , RID p_material ) = 0 ;
virtual void instance_set_visible ( RID p_instance , bool p_visible ) = 0 ;
2016-05-27 19:18:40 +02:00
2017-11-20 20:54:26 +01:00
virtual void instance_set_custom_aabb ( RID p_instance , AABB aabb ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void instance_attach_skeleton ( RID p_instance , RID p_skeleton ) = 0 ;
virtual void instance_set_exterior ( RID p_instance , bool p_enabled ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void instance_set_extra_visibility_margin ( RID p_instance , real_t p_margin ) = 0 ;
2014-02-10 02:10:30 +01:00
// don't use these in a game!
2017-11-17 03:09:00 +01:00
virtual Vector < ObjectID > instances_cull_aabb ( const AABB & p_aabb , RID p_scenario = RID ( ) ) const = 0 ;
2017-03-05 16:44:50 +01: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 02:10:30 +01:00
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 16:18:51 +01:00
Array _instances_cull_aabb_bind ( const AABB & p_aabb , RID p_scenario = RID ( ) ) const ;
Array _instances_cull_ray_bind ( const Vector3 & p_from , const Vector3 & p_to , RID p_scenario = RID ( ) ) const ;
Array _instances_cull_convex_bind ( const Array & p_convex , RID p_scenario = RID ( ) ) const ;
2014-02-10 02:10:30 +01:00
enum InstanceFlags {
2014-06-11 15:41:03 +02:00
INSTANCE_FLAG_USE_BAKED_LIGHT ,
2019-10-11 04:14:56 +02:00
INSTANCE_FLAG_USE_DYNAMIC_GI ,
2018-07-27 13:58:56 +02:00
INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE ,
2014-02-10 02:10:30 +01:00
INSTANCE_FLAG_MAX
} ;
2016-03-08 00:00:55 +01:00
enum ShadowCastingSetting {
SHADOW_CASTING_SETTING_OFF ,
SHADOW_CASTING_SETTING_ON ,
SHADOW_CASTING_SETTING_DOUBLE_SIDED ,
SHADOW_CASTING_SETTING_SHADOWS_ONLY ,
} ;
2017-03-05 16:44:50 +01:00
virtual void instance_geometry_set_flag ( RID p_instance , InstanceFlags p_flags , bool p_enabled ) = 0 ;
2016-03-08 00:00:55 +01:00
virtual void instance_geometry_set_cast_shadows_setting ( RID p_instance , ShadowCastingSetting p_shadow_casting_setting ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void instance_geometry_set_material_override ( RID p_instance , RID p_material ) = 0 ;
2014-06-11 15:41:03 +02:00
2017-03-05 16:44:50 +01:00
virtual void instance_geometry_set_draw_range ( RID p_instance , float p_min , float p_max , float p_min_margin , float p_max_margin ) = 0 ;
virtual void instance_geometry_set_as_instance_lod ( RID p_instance , RID p_as_lod_of_instance ) = 0 ;
2020-05-01 14:34:23 +02:00
virtual void instance_geometry_set_lightmap ( RID p_instance , RID p_lightmap , const Rect2 & p_lightmap_uv_scale , int p_lightmap_slice ) = 0 ;
2014-02-10 02:10:30 +01:00
2020-04-17 04:52:00 +02: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-05-01 14:34:23 +02:00
/* Bake 3D objects */
enum BakeChannels {
BAKE_CHANNEL_ALBEDO_ALPHA ,
BAKE_CHANNEL_NORMAL ,
BAKE_CHANNEL_ORM ,
BAKE_CHANNEL_EMISSION
} ;
virtual TypedArray < Image > bake_render_uv2 ( RID p_base , const Vector < RID > & p_material_overrides , const Size2i & p_image_size ) = 0 ;
2014-02-10 02:10:30 +01:00
/* CANVAS (2D) */
2017-03-05 16:44:50 +01:00
virtual RID canvas_create ( ) = 0 ;
virtual void canvas_set_item_mirroring ( RID p_canvas , RID p_item , const Point2 & p_mirroring ) = 0 ;
virtual void canvas_set_modulate ( RID p_canvas , const Color & p_color ) = 0 ;
2019-04-05 15:24:54 +02: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 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual RID canvas_item_create ( ) = 0 ;
virtual void canvas_item_set_parent ( RID p_item , RID p_parent ) = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void canvas_item_set_visible ( RID p_item , bool p_visible ) = 0 ;
virtual void canvas_item_set_light_mask ( RID p_item , int p_mask ) = 0 ;
2015-02-18 23:39:44 +01:00
2018-08-29 21:48:32 +02:00
virtual void canvas_item_set_update_when_visible ( RID p_item , bool p_update ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void canvas_item_set_transform ( RID p_item , const Transform2D & p_transform ) = 0 ;
virtual void canvas_item_set_clip ( RID p_item , bool p_clip ) = 0 ;
virtual void canvas_item_set_distance_field_mode ( RID p_item , bool p_enable ) = 0 ;
virtual void canvas_item_set_custom_rect ( RID p_item , bool p_custom_rect , const Rect2 & p_rect = Rect2 ( ) ) = 0 ;
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 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void canvas_item_set_draw_behind_parent ( RID p_item , bool p_enable ) = 0 ;
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
enum NinePatchAxisMode {
NINE_PATCH_STRETCH ,
NINE_PATCH_TILE ,
NINE_PATCH_TILE_FIT ,
} ;
2014-02-10 02:10:30 +01:00
2019-06-16 04:45:24 +02:00
enum CanvasItemTextureFilter {
CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , //uses canvas item setting for draw command, uses global setting for canvas item
CANVAS_ITEM_TEXTURE_FILTER_NEAREST ,
CANVAS_ITEM_TEXTURE_FILTER_LINEAR ,
2020-02-20 00:31:43 +01:00
CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS ,
2019-07-21 16:31:30 +02:00
CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS ,
2020-02-20 00:31:43 +01:00
CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC ,
2019-07-21 16:31:30 +02:00
CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC ,
2019-06-16 04:45:24 +02:00
CANVAS_ITEM_TEXTURE_FILTER_MAX
} ;
enum CanvasItemTextureRepeat {
CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT , //uses canvas item setting for draw command, uses global setting for canvas item
CANVAS_ITEM_TEXTURE_REPEAT_DISABLED ,
CANVAS_ITEM_TEXTURE_REPEAT_ENABLED ,
CANVAS_ITEM_TEXTURE_REPEAT_MIRROR ,
CANVAS_ITEM_TEXTURE_REPEAT_MAX ,
} ;
//takes effect only for new draw commands
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 ;
2019-06-25 03:24:07 +02: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 ) = 0 ;
virtual void canvas_item_add_polyline ( RID p_item , const Vector < Point2 > & p_points , const Vector < Color > & p_colors , float p_width = 1.0 ) = 0 ;
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 ;
2017-03-05 16:44:50 +01: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 ;
2019-06-16 04:45:24 +02: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 , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 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 , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , bool p_clip_uv = false , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
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 ) , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
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 , float p_width = 1.0 , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
2019-06-25 03:24:07 +02: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 ( ) , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 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 , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
2019-06-16 04:45:24 +02:00
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 ( ) , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
virtual void canvas_item_add_multimesh ( RID p_item , RID p_mesh , RID p_texture = RID ( ) , RID p_normal_map = RID ( ) , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
virtual void canvas_item_add_particles ( RID p_item , RID p_particles , RID p_texture , RID p_normal_map , RID p_specular_map = RID ( ) , const Color & p_specular_color_shininess = Color ( ) , CanvasItemTextureFilter p_texture_filter = CANVAS_ITEM_TEXTURE_FILTER_DEFAULT , CanvasItemTextureRepeat = CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void canvas_item_add_set_transform ( RID p_item , const Transform2D & p_transform ) = 0 ;
virtual void canvas_item_add_clip_ignore ( RID p_item , bool p_ignore ) = 0 ;
virtual void canvas_item_set_sort_children_by_y ( RID p_item , bool p_enable ) = 0 ;
2017-12-29 23:06:03 +01:00
virtual void canvas_item_set_z_index ( RID p_item , int p_z ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void canvas_item_set_z_as_relative_to_parent ( RID p_item , bool p_enable ) = 0 ;
virtual void canvas_item_set_copy_to_backbuffer ( RID p_item , bool p_enable , const Rect2 & p_rect ) = 0 ;
2018-02-21 21:23:27 +01:00
virtual void canvas_item_attach_skeleton ( RID p_item , RID p_skeleton ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void canvas_item_clear ( RID p_item ) = 0 ;
virtual void canvas_item_set_draw_index ( RID p_item , int p_index ) = 0 ;
virtual void canvas_item_set_material ( RID p_item , RID p_material ) = 0 ;
virtual void canvas_item_set_use_parent_material ( RID p_item , bool p_enable ) = 0 ;
virtual RID canvas_light_create ( ) = 0 ;
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 ;
virtual void canvas_light_set_scale ( RID p_light , float p_scale ) = 0 ;
virtual void canvas_light_set_transform ( RID p_light , const Transform2D & p_transform ) = 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 ;
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 ;
virtual void canvas_light_set_energy ( RID p_light , float p_energy ) = 0 ;
virtual void canvas_light_set_z_range ( RID p_light , int p_min_z , int p_max_z ) = 0 ;
virtual void canvas_light_set_layer_range ( RID p_light , int p_min_layer , int p_max_layer ) = 0 ;
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 15:07:16 +01:00
2015-04-03 06:43:37 +02:00
enum CanvasLightMode {
CANVAS_LIGHT_MODE_ADD ,
CANVAS_LIGHT_MODE_SUB ,
CANVAS_LIGHT_MODE_MIX ,
2015-12-09 00:25:08 +01:00
CANVAS_LIGHT_MODE_MASK ,
2015-04-03 06:43:37 +02:00
} ;
2017-03-05 16:44:50 +01:00
virtual void canvas_light_set_mode ( RID p_light , CanvasLightMode p_mode ) = 0 ;
2016-10-03 21:33:42 +02:00
enum CanvasLightShadowFilter {
CANVAS_LIGHT_FILTER_NONE ,
CANVAS_LIGHT_FILTER_PCF5 ,
CANVAS_LIGHT_FILTER_PCF13 ,
2019-07-07 06:49:40 +02:00
CANVAS_LIGHT_FILTER_MAX
2016-10-03 21:33:42 +02:00
} ;
2017-03-05 16:44:50 +01:00
virtual void canvas_light_set_shadow_enabled ( RID p_light , bool p_enabled ) = 0 ;
virtual void canvas_light_set_shadow_buffer_size ( RID p_light , int p_size ) = 0 ;
virtual void canvas_light_set_shadow_filter ( RID p_light , CanvasLightShadowFilter p_filter ) = 0 ;
virtual void canvas_light_set_shadow_color ( RID p_light , const Color & p_color ) = 0 ;
2017-06-13 06:23:04 +02:00
virtual void canvas_light_set_shadow_smooth ( RID p_light , float p_smooth ) = 0 ;
2015-03-02 04:54:10 +01:00
2017-03-05 16:44:50 +01: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 ;
virtual void canvas_light_occluder_set_polygon ( RID p_occluder , RID p_polygon ) = 0 ;
virtual void canvas_light_occluder_set_transform ( RID p_occluder , const Transform2D & p_xform ) = 0 ;
virtual void canvas_light_occluder_set_light_mask ( RID p_occluder , int p_mask ) = 0 ;
2015-01-22 15:07:16 +01:00
2017-03-05 16:44:50 +01:00
virtual RID canvas_occluder_polygon_create ( ) = 0 ;
2020-02-17 22:06:54 +01:00
virtual void canvas_occluder_polygon_set_shape ( RID p_occluder_polygon , const Vector < Vector2 > & p_shape , bool p_closed ) = 0 ;
virtual void canvas_occluder_polygon_set_shape_as_lines ( RID p_occluder_polygon , const Vector < Vector2 > & p_shape ) = 0 ;
2016-10-03 21:33:42 +02:00
2015-03-02 04:54:10 +01:00
enum CanvasOccluderPolygonCullMode {
CANVAS_OCCLUDER_POLYGON_CULL_DISABLED ,
CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE ,
CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE ,
} ;
2020-04-20 11:48:00 +02:00
2017-03-05 16:44:50 +01:00
virtual void canvas_occluder_polygon_set_cull_mode ( RID p_occluder_polygon , CanvasOccluderPolygonCullMode p_mode ) = 0 ;
2015-01-22 15:07:16 +01:00
2020-04-17 04:52:00 +02:00
/* GLOBAL VARIABLES */
enum GlobalVariableType {
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
} ;
virtual void global_variable_add ( const StringName & p_name , GlobalVariableType p_type , const Variant & p_value ) = 0 ;
virtual void global_variable_remove ( const StringName & p_name ) = 0 ;
virtual Vector < StringName > global_variable_get_list ( ) const = 0 ;
virtual void global_variable_set ( const StringName & p_name , const Variant & p_value ) = 0 ;
virtual void global_variable_set_override ( const StringName & p_name , const Variant & p_value ) = 0 ;
virtual Variant global_variable_get ( const StringName & p_name ) const = 0 ;
virtual GlobalVariableType global_variable_get_type ( const StringName & p_name ) const = 0 ;
virtual void global_variables_load_settings ( bool p_load_textures ) = 0 ;
virtual void global_variables_clear ( ) = 0 ;
static ShaderLanguage : : DataType global_variable_type_get_shader_datatype ( GlobalVariableType p_type ) ;
2014-02-10 02:10:30 +01:00
/* BLACK BARS */
2017-03-05 16:44:50 +01:00
virtual void black_bars_set_margins ( int p_left , int p_top , int p_right , int p_bottom ) = 0 ;
virtual void black_bars_set_images ( RID p_left , RID p_top , RID p_right , RID p_bottom ) = 0 ;
2014-02-10 02:10:30 +01:00
/* FREE */
2017-03-05 16:44:50 +01:00
virtual void free ( RID p_rid ) = 0 ; ///< free RIDs associated with the visual server
2014-02-10 02:10:30 +01:00
2017-06-09 05:23:50 +02:00
virtual void request_frame_drawn_callback ( Object * p_where , const StringName & p_method , const Variant & p_userdata ) = 0 ;
2014-02-10 02:10:30 +01:00
/* EVENT QUEUING */
2018-05-09 08:11:43 +02:00
virtual void draw ( bool p_swap_buffers = true , double frame_step = 0.0 ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void sync ( ) = 0 ;
virtual bool has_changed ( ) const = 0 ;
virtual void init ( ) = 0 ;
virtual void finish ( ) = 0 ;
2014-02-10 02:10:30 +01:00
/* STATUS INFORMATION */
enum RenderInfo {
INFO_OBJECTS_IN_FRAME ,
INFO_VERTICES_IN_FRAME ,
INFO_MATERIAL_CHANGES_IN_FRAME ,
INFO_SHADER_CHANGES_IN_FRAME ,
INFO_SURFACE_CHANGES_IN_FRAME ,
INFO_DRAW_CALLS_IN_FRAME ,
INFO_USAGE_VIDEO_MEM_TOTAL ,
INFO_VIDEO_MEM_USED ,
INFO_TEXTURE_MEM_USED ,
INFO_VERTEX_MEM_USED ,
} ;
2017-03-05 16:44:50 +01:00
virtual int get_render_info ( RenderInfo p_info ) = 0 ;
2019-09-13 20:08:05 +02:00
virtual String get_video_adapter_name ( ) const = 0 ;
virtual String get_video_adapter_vendor ( ) const = 0 ;
2014-05-29 15:56:39 +02:00
2019-09-20 22:58:06 +02:00
struct FrameProfileArea {
String name ;
float gpu_msec ;
float cpu_msec ;
} ;
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 ;
2014-02-10 02:10:30 +01:00
/* TESTING */
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
virtual RID get_test_cube ( ) = 0 ;
2014-02-10 02:10:30 +01:00
virtual RID get_test_texture ( ) ;
2014-05-29 15:56:39 +02:00
virtual RID get_white_texture ( ) ;
2014-02-10 02:10:30 +01:00
2020-06-25 15:33:28 +02:00
virtual void sdfgi_set_debug_probe_select ( const Vector3 & p_position , const Vector3 & p_dir ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual RID make_sphere_mesh ( int p_lats , int p_lons , float p_radius ) ;
2014-02-10 02:10:30 +01:00
2020-05-25 19:20:45 +02:00
virtual void mesh_add_surface_from_mesh_data ( RID p_mesh , const Geometry3D : : MeshData & p_mesh_data ) ;
2020-02-17 22:06:54 +01:00
virtual void mesh_add_surface_from_planes ( RID p_mesh , const Vector < Plane > & p_planes ) ;
2014-02-10 02:10:30 +01:00
2019-06-13 22:37:19 +02:00
virtual void set_boot_image ( const Ref < Image > & p_image , const Color & p_color , bool p_scale , bool p_use_filter = true ) = 0 ;
2017-03-05 16:44:50 +01:00
virtual void set_default_clear_color ( const Color & p_color ) = 0 ;
2014-02-10 02:10:30 +01:00
enum Features {
FEATURE_SHADERS ,
FEATURE_MULTITHREADED ,
} ;
2017-03-05 16:44:50 +01:00
virtual bool has_feature ( Features p_feature ) const = 0 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual bool has_os_feature ( const String & p_feature ) const = 0 ;
2017-02-06 04:38:39 +01:00
2017-06-11 20:52:03 +02:00
virtual void set_debug_generate_wireframes ( bool p_generate ) = 0 ;
2017-12-16 21:09:25 +01:00
virtual void call_set_use_vsync ( bool p_enable ) = 0 ;
2018-09-29 01:32:40 +02:00
virtual bool is_low_end ( ) const = 0 ;
2020-06-14 19:06:48 +02:00
bool is_render_loop_enabled ( ) const ;
void set_render_loop_enabled ( bool p_enabled ) ;
2020-03-27 19:21:27 +01:00
RenderingServer ( ) ;
virtual ~ RenderingServer ( ) ;
2014-02-10 02:10:30 +01:00
} ;
// make variant understand the enums
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : TextureLayeredType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CubeMapLayer ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ShaderMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ArrayType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ArrayFormat ) ;
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 15:33:28 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : LightBakeMode ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : LightOmniShadowMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : LightDirectionalShadowMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : LightDirectionalShadowDepthRangeMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ReflectionProbeUpdateMode ) ;
2020-06-25 15:33:28 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : ReflectionProbeAmbientMode ) ;
2020-04-14 05:05:21 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : DecalTexture ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : ParticlesDrawOrder ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ViewportUpdateMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ViewportClearMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ViewportMSAA ) ;
2020-04-20 11:48:00 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportScreenSpaceAA ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : ViewportRenderInfo ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ViewportDebugDraw ) ;
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 11:48:00 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSSRRoughnessQuality ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSSAOBlur ) ;
2020-04-20 11:48:00 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : EnvironmentSSAOQuality ) ;
VARIANT_ENUM_CAST ( RenderingServer : : SubSurfaceScatteringQuality ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : DOFBlurQuality ) ;
VARIANT_ENUM_CAST ( RenderingServer : : DOFBokehShape ) ;
2020-04-20 11:48:00 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : ShadowQuality ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : ScenarioDebugMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : InstanceType ) ;
VARIANT_ENUM_CAST ( RenderingServer : : InstanceFlags ) ;
VARIANT_ENUM_CAST ( RenderingServer : : ShadowCastingSetting ) ;
VARIANT_ENUM_CAST ( RenderingServer : : NinePatchAxisMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasItemTextureFilter ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasItemTextureRepeat ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasLightMode ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasLightShadowFilter ) ;
VARIANT_ENUM_CAST ( RenderingServer : : CanvasOccluderPolygonCullMode ) ;
2020-04-17 04:52:00 +02:00
VARIANT_ENUM_CAST ( RenderingServer : : GlobalVariableType ) ;
2020-03-27 19:21:27 +01:00
VARIANT_ENUM_CAST ( RenderingServer : : RenderInfo ) ;
VARIANT_ENUM_CAST ( RenderingServer : : Features ) ;
2020-04-20 11:48:00 +02:00
// Alias to make it easier to use.
2020-03-27 19:21:27 +01:00
# define RS RenderingServer
2014-02-10 02:10:30 +01:00
2020-04-20 11:48:00 +02:00
# endif // RENDERING_SERVER_H