2014-02-10 02:10:30 +01:00
/*************************************************************************/
2020-03-28 13:19:05 +01:00
/* rendering_server.cpp */
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
/*************************************************************************/
2021-01-01 20:13:46 +01:00
/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2021 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
# include "rendering_server.h"
2017-08-27 21:07:15 +02:00
2020-11-07 23:33:38 +01:00
# include "core/config/project_settings.h"
2014-02-10 02:10:30 +01:00
2020-04-02 01:20:12 +02:00
RenderingServer * RenderingServer : : singleton = nullptr ;
RenderingServer * ( * RenderingServer : : create_func ) ( ) = nullptr ;
2014-02-10 02:10:30 +01:00
2020-03-27 19:21:27 +01:00
RenderingServer * RenderingServer : : get_singleton ( ) {
2014-02-10 02:10:30 +01:00
return singleton ;
}
2020-03-27 19:21:27 +01:00
RenderingServer * RenderingServer : : create ( ) {
2020-04-02 01:20:12 +02:00
ERR_FAIL_COND_V ( singleton , nullptr ) ;
2016-03-09 00:00:52 +01:00
2020-05-14 16:41:43 +02:00
if ( create_func ) {
2014-02-10 02:10:30 +01:00
return create_func ( ) ;
2020-05-14 16:41:43 +02:00
}
2016-03-09 00:00:52 +01:00
2020-04-02 01:20:12 +02:00
return nullptr ;
2014-02-10 02:10:30 +01:00
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : _texture_debug_usage_bind ( ) {
2017-10-20 00:24:49 +02:00
List < TextureInfo > list ;
texture_debug_usage ( & list ) ;
Array arr ;
for ( const List < TextureInfo > : : Element * E = list . front ( ) ; E ; E = E - > next ( ) ) {
Dictionary dict ;
dict [ " texture " ] = E - > get ( ) . texture ;
2018-06-26 13:59:26 +02:00
dict [ " width " ] = E - > get ( ) . width ;
dict [ " height " ] = E - > get ( ) . height ;
dict [ " depth " ] = E - > get ( ) . depth ;
2017-10-20 00:24:49 +02:00
dict [ " format " ] = E - > get ( ) . format ;
dict [ " bytes " ] = E - > get ( ) . bytes ;
dict [ " path " ] = E - > get ( ) . path ;
arr . push_back ( dict ) ;
}
return arr ;
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : _shader_get_param_list_bind ( RID p_shader ) const {
2017-10-20 00:24:49 +02:00
List < PropertyInfo > l ;
shader_get_param_list ( p_shader , & l ) ;
return convert_property_list ( & l ) ;
}
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
static Array to_array ( const Vector < ObjectID > & ids ) {
Array a ;
a . resize ( ids . size ( ) ) ;
for ( int i = 0 ; i < ids . size ( ) ; + + i ) {
a [ i ] = ids [ i ] ;
}
return a ;
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : _instances_cull_aabb_bind ( const AABB & p_aabb , RID p_scenario ) 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 16:18:51 +01:00
Vector < ObjectID > ids = instances_cull_aabb ( p_aabb , p_scenario ) ;
return to_array ( ids ) ;
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : _instances_cull_ray_bind ( const Vector3 & p_from , const Vector3 & p_to , RID p_scenario ) 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 16:18:51 +01:00
Vector < ObjectID > ids = instances_cull_ray ( p_from , p_to , p_scenario ) ;
return to_array ( ids ) ;
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : _instances_cull_convex_bind ( const Array & p_convex , RID p_scenario ) 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 16:18:51 +01:00
Vector < Plane > planes ;
for ( int i = 0 ; i < p_convex . size ( ) ; + + i ) {
Variant v = p_convex [ i ] ;
ERR_FAIL_COND_V ( v . get_type ( ) ! = Variant : : PLANE , Array ( ) ) ;
planes . push_back ( v ) ;
}
Vector < ObjectID > ids = instances_cull_convex ( planes , p_scenario ) ;
return to_array ( ids ) ;
}
2020-03-27 19:21:27 +01:00
RID RenderingServer : : get_test_texture ( ) {
2016-10-03 21:33:42 +02:00
if ( test_texture . is_valid ( ) ) {
2014-02-10 02:10:30 +01:00
return test_texture ;
} ;
# define TEST_TEXTURE_SIZE 256
2020-02-17 22:06:54 +01:00
Vector < uint8_t > test_data ;
2017-03-05 16:44:50 +01:00
test_data . resize ( TEST_TEXTURE_SIZE * TEST_TEXTURE_SIZE * 3 ) ;
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
{
2020-02-17 22:06:54 +01:00
uint8_t * w = test_data . ptrw ( ) ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
for ( int x = 0 ; x < TEST_TEXTURE_SIZE ; x + + ) {
for ( int y = 0 ; y < TEST_TEXTURE_SIZE ; y + + ) {
2016-10-03 21:33:42 +02:00
Color c ;
2017-03-05 16:44:50 +01:00
int r = 255 - ( x + y ) / 2 ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
if ( ( x % ( TEST_TEXTURE_SIZE / 8 ) ) < 2 | | ( y % ( TEST_TEXTURE_SIZE / 8 ) ) < 2 ) {
c . r = y ;
c . g = r ;
c . b = x ;
2014-02-10 02:10:30 +01:00
2016-10-03 21:33:42 +02:00
} else {
2017-03-05 16:44:50 +01:00
c . r = r ;
c . g = x ;
c . b = y ;
2016-10-03 21:33:42 +02:00
}
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
w [ ( y * TEST_TEXTURE_SIZE + x ) * 3 + 0 ] = uint8_t ( CLAMP ( c . r * 255 , 0 , 255 ) ) ;
w [ ( y * TEST_TEXTURE_SIZE + x ) * 3 + 1 ] = uint8_t ( CLAMP ( c . g * 255 , 0 , 255 ) ) ;
w [ ( y * TEST_TEXTURE_SIZE + x ) * 3 + 2 ] = uint8_t ( CLAMP ( c . b * 255 , 0 , 255 ) ) ;
2016-10-03 21:33:42 +02:00
}
2014-02-10 02:10:30 +01:00
}
}
2017-05-17 12:36:47 +02:00
Ref < Image > data = memnew ( Image ( TEST_TEXTURE_SIZE , TEST_TEXTURE_SIZE , false , Image : : FORMAT_RGB8 , test_data ) ) ;
2016-10-03 21:33:42 +02:00
2019-06-11 20:43:37 +02:00
test_texture = texture_2d_create ( data ) ;
2014-02-10 02:10:30 +01:00
return test_texture ;
2017-05-17 12:36:47 +02:00
}
2014-02-10 02:10:30 +01:00
2020-03-27 19:21:27 +01:00
void RenderingServer : : _free_internal_rids ( ) {
2020-05-14 16:41:43 +02:00
if ( test_texture . is_valid ( ) ) {
2015-04-21 00:38:02 +02:00
free ( test_texture ) ;
2020-05-14 16:41:43 +02:00
}
if ( white_texture . is_valid ( ) ) {
2015-04-21 00:38:02 +02:00
free ( white_texture ) ;
2020-05-14 16:41:43 +02:00
}
if ( test_material . is_valid ( ) ) {
2015-04-21 00:38:02 +02:00
free ( test_material ) ;
2020-05-14 16:41:43 +02:00
}
2015-04-21 00:38:02 +02:00
}
2020-03-27 19:21:27 +01:00
RID RenderingServer : : _make_test_cube ( ) {
2020-02-17 22:06:54 +01:00
Vector < Vector3 > vertices ;
Vector < Vector3 > normals ;
Vector < float > tangents ;
Vector < Vector3 > uvs ;
2016-03-09 00:00:52 +01:00
2018-03-26 01:36:34 +02:00
# define ADD_VTX(m_idx) \
vertices . push_back ( face_points [ m_idx ] ) ; \
normals . push_back ( normal_points [ m_idx ] ) ; \
tangents . push_back ( normal_points [ m_idx ] [ 1 ] ) ; \
tangents . push_back ( normal_points [ m_idx ] [ 2 ] ) ; \
tangents . push_back ( normal_points [ m_idx ] [ 0 ] ) ; \
tangents . push_back ( 1.0 ) ; \
uvs . push_back ( Vector3 ( uv_points [ m_idx * 2 + 0 ] , uv_points [ m_idx * 2 + 1 ] , 0 ) ) ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < 6 ; i + + ) {
2014-02-10 02:10:30 +01:00
Vector3 face_points [ 4 ] ;
Vector3 normal_points [ 4 ] ;
2017-03-05 16:44:50 +01:00
float uv_points [ 8 ] = { 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 } ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < 4 ; j + + ) {
2014-02-10 02:10:30 +01:00
float v [ 3 ] ;
2017-03-05 16:44:50 +01:00
v [ 0 ] = 1.0 ;
v [ 1 ] = 1 - 2 * ( ( j > > 1 ) & 1 ) ;
v [ 2 ] = v [ 1 ] * ( 1 - 2 * ( j & 1 ) ) ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
for ( int k = 0 ; k < 3 ; k + + ) {
2020-05-14 16:41:43 +02:00
if ( i < 3 ) {
2018-04-21 16:35:23 +02:00
face_points [ j ] [ ( i + k ) % 3 ] = v [ k ] ;
2020-05-14 16:41:43 +02:00
} else {
2018-04-21 16:35:23 +02:00
face_points [ 3 - j ] [ ( i + k ) % 3 ] = - v [ k ] ;
2020-05-14 16:41:43 +02:00
}
2014-02-10 02:10:30 +01:00
}
2017-03-05 16:44:50 +01:00
normal_points [ j ] = Vector3 ( ) ;
normal_points [ j ] [ i % 3 ] = ( i > = 3 ? - 1 : 1 ) ;
2014-02-10 02:10:30 +01:00
}
2017-03-05 16:44:50 +01:00
//tri 1
2014-02-10 02:10:30 +01:00
ADD_VTX ( 0 ) ;
ADD_VTX ( 1 ) ;
ADD_VTX ( 2 ) ;
2017-03-05 16:44:50 +01:00
//tri 2
2014-02-10 02:10:30 +01:00
ADD_VTX ( 2 ) ;
ADD_VTX ( 3 ) ;
ADD_VTX ( 0 ) ;
}
RID test_cube = mesh_create ( ) ;
Array d ;
2020-03-27 19:21:27 +01:00
d . resize ( RS : : ARRAY_MAX ) ;
d [ RenderingServer : : ARRAY_NORMAL ] = normals ;
d [ RenderingServer : : ARRAY_TANGENT ] = tangents ;
d [ RenderingServer : : ARRAY_TEX_UV ] = uvs ;
d [ RenderingServer : : ARRAY_VERTEX ] = vertices ;
2014-02-10 02:10:30 +01:00
2020-02-17 22:06:54 +01:00
Vector < int > indices ;
2014-02-10 02:10:30 +01:00
indices . resize ( vertices . size ( ) ) ;
2020-05-14 16:41:43 +02:00
for ( int i = 0 ; i < vertices . size ( ) ; i + + ) {
2017-03-05 16:44:50 +01:00
indices . set ( i , i ) ;
2020-05-14 16:41:43 +02:00
}
2020-03-27 19:21:27 +01:00
d [ RenderingServer : : ARRAY_INDEX ] = indices ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
mesh_add_surface_from_arrays ( test_cube , PRIMITIVE_TRIANGLES , d ) ;
2015-04-21 00:38:02 +02:00
2017-03-05 16:44:50 +01:00
/*
2015-04-21 00:38:02 +02:00
test_material = fixed_material_create ( ) ;
2014-02-10 02:10:30 +01:00
//material_set_flag(material, MATERIAL_FLAG_BILLBOARD_TOGGLE,true);
2015-04-21 00:38:02 +02:00
fixed_material_set_texture ( test_material , FIXED_MATERIAL_PARAM_DIFFUSE , get_test_texture ( ) ) ;
fixed_material_set_param ( test_material , FIXED_MATERIAL_PARAM_SPECULAR_EXP , 70 ) ;
fixed_material_set_param ( test_material , FIXED_MATERIAL_PARAM_EMISSION , Color ( 0.2 , 0.2 , 0.2 ) ) ;
2014-02-10 02:10:30 +01:00
2015-04-21 00:38:02 +02:00
fixed_material_set_param ( test_material , FIXED_MATERIAL_PARAM_DIFFUSE , Color ( 1 , 1 , 1 ) ) ;
fixed_material_set_param ( test_material , FIXED_MATERIAL_PARAM_SPECULAR , Color ( 1 , 1 , 1 ) ) ;
2016-10-03 21:33:42 +02:00
*/
2017-03-05 16:44:50 +01:00
mesh_surface_set_material ( test_cube , 0 , test_material ) ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
return test_cube ;
}
2020-03-27 19:21:27 +01:00
RID RenderingServer : : make_sphere_mesh ( int p_lats , int p_lons , float p_radius ) {
2020-02-17 22:06:54 +01:00
Vector < Vector3 > vertices ;
Vector < Vector3 > normals ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
for ( int i = 1 ; i < = p_lats ; i + + ) {
double lat0 = Math_PI * ( - 0.5 + ( double ) ( i - 1 ) / p_lats ) ;
double z0 = Math : : sin ( lat0 ) ;
double zr0 = Math : : cos ( lat0 ) ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
double lat1 = Math_PI * ( - 0.5 + ( double ) i / p_lats ) ;
2014-02-10 02:10:30 +01:00
double z1 = Math : : sin ( lat1 ) ;
double zr1 = Math : : cos ( lat1 ) ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = p_lons ; j > = 1 ; j - - ) {
double lng0 = 2 * Math_PI * ( double ) ( j - 1 ) / p_lons ;
2014-02-10 02:10:30 +01:00
double x0 = Math : : cos ( lng0 ) ;
double y0 = Math : : sin ( lng0 ) ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
double lng1 = 2 * Math_PI * ( double ) ( j ) / p_lons ;
2016-03-09 00:00:52 +01:00
double x1 = Math : : cos ( lng1 ) ;
2014-02-10 02:10:30 +01:00
double y1 = Math : : sin ( lng1 ) ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
Vector3 v [ 4 ] = {
Vector3 ( x1 * zr0 , z0 , y1 * zr0 ) ,
Vector3 ( x1 * zr1 , z1 , y1 * zr1 ) ,
Vector3 ( x0 * zr1 , z1 , y0 * zr1 ) ,
Vector3 ( x0 * zr0 , z0 , y0 * zr0 )
2014-02-10 02:10:30 +01:00
} ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
# define ADD_POINT(m_idx) \
normals . push_back ( v [ m_idx ] ) ; \
vertices . push_back ( v [ m_idx ] * p_radius ) ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
ADD_POINT ( 0 ) ;
ADD_POINT ( 1 ) ;
ADD_POINT ( 2 ) ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
ADD_POINT ( 2 ) ;
ADD_POINT ( 3 ) ;
ADD_POINT ( 0 ) ;
}
}
RID mesh = mesh_create ( ) ;
Array d ;
2020-03-27 19:21:27 +01:00
d . resize ( RS : : ARRAY_MAX ) ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
d [ ARRAY_VERTEX ] = vertices ;
d [ ARRAY_NORMAL ] = normals ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
mesh_add_surface_from_arrays ( mesh , PRIMITIVE_TRIANGLES , d ) ;
2014-02-10 02:10:30 +01:00
return mesh ;
}
2020-03-27 19:21:27 +01:00
RID RenderingServer : : get_white_texture ( ) {
2020-05-14 16:41:43 +02:00
if ( white_texture . is_valid ( ) ) {
2014-05-29 15:56:39 +02:00
return white_texture ;
2020-05-14 16:41:43 +02:00
}
2014-05-29 15:56:39 +02:00
2020-02-17 22:06:54 +01:00
Vector < uint8_t > wt ;
2017-03-05 16:44:50 +01:00
wt . resize ( 16 * 3 ) ;
2014-05-29 15:56:39 +02:00
{
2020-02-17 22:06:54 +01:00
uint8_t * w = wt . ptrw ( ) ;
2020-05-14 16:41:43 +02:00
for ( int i = 0 ; i < 16 * 3 ; i + + ) {
2017-03-05 16:44:50 +01:00
w [ i ] = 255 ;
2020-05-14 16:41:43 +02:00
}
2014-05-29 15:56:39 +02:00
}
2017-05-17 12:36:47 +02:00
Ref < Image > white = memnew ( Image ( 4 , 4 , 0 , Image : : FORMAT_RGB8 , wt ) ) ;
2019-06-11 20:43:37 +02:00
white_texture = texture_2d_create ( white ) ;
2014-05-29 15:56:39 +02:00
return white_texture ;
}
2017-08-19 19:54:04 +02:00
# define SMALL_VEC2 Vector2(0.00001, 0.00001)
# define SMALL_VEC3 Vector3(0.00001, 0.00001, 0.00001)
2020-12-02 02:40:47 +01:00
Error RenderingServer : : _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 ) {
2020-02-17 22:06:54 +01:00
uint8_t * vw = r_vertex_array . ptrw ( ) ;
2020-12-02 02:40:47 +01:00
uint8_t * aw = r_attrib_array . ptrw ( ) ;
uint8_t * sw = r_skin_array . ptrw ( ) ;
2016-10-19 16:14:41 +02:00
2020-04-02 01:20:12 +02:00
uint8_t * iw = nullptr ;
2016-10-19 16:14:41 +02:00
if ( r_index_array . size ( ) ) {
2020-02-17 22:06:54 +01:00
iw = r_index_array . ptrw ( ) ;
2016-10-19 16:14:41 +02:00
}
2017-03-05 16:44:50 +01:00
int max_bone = 0 ;
2016-10-19 16:14:41 +02:00
2020-03-27 19:21:27 +01:00
for ( int ai = 0 ; ai < RS : : ARRAY_MAX ; ai + + ) {
2020-05-14 16:41:43 +02:00
if ( ! ( p_format & ( 1 < < ai ) ) ) { // no array
2016-10-19 16:14:41 +02:00
continue ;
2020-05-14 16:41:43 +02:00
}
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
switch ( ai ) {
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_VERTEX : {
if ( p_format & RS : : ARRAY_FLAG_USE_2D_VERTICES ) {
2020-02-17 22:06:54 +01:00
Vector < Vector2 > array = p_arrays [ ai ] ;
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const Vector2 * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
// setting vertices means regenerating the AABB
Rect2 aabb ;
2019-08-19 00:40:52 +02:00
{
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
float vector [ 2 ] = { src [ i ] . x , src [ i ] . y } ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_vertex_stride ] , vector , sizeof ( float ) * 2 ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
if ( i = = 0 ) {
2017-08-19 19:54:04 +02:00
aabb = Rect2 ( src [ i ] , SMALL_VEC2 ) ; //must have a bit of size
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
aabb . expand_to ( src [ i ] ) ;
2016-10-19 16:14:41 +02:00
}
}
}
2017-11-17 03:09:00 +01:00
r_aabb = AABB ( Vector3 ( aabb . position . x , aabb . position . y , 0 ) , Vector3 ( aabb . size . x , aabb . size . y , 0 ) ) ;
2016-10-19 16:14:41 +02:00
} else {
2020-02-17 22:06:54 +01:00
Vector < Vector3 > array = p_arrays [ ai ] ;
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const Vector3 * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
// setting vertices means regenerating the AABB
2017-11-17 03:09:00 +01:00
AABB aabb ;
2016-10-19 16:14:41 +02:00
2019-08-19 00:40:52 +02:00
{
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
float vector [ 3 ] = { src [ i ] . x , src [ i ] . y , src [ i ] . z } ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_vertex_stride ] , vector , sizeof ( float ) * 3 ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
if ( i = = 0 ) {
2017-11-17 03:09:00 +01:00
aabb = AABB ( src [ i ] , SMALL_VEC3 ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
aabb . expand_to ( src [ i ] ) ;
2016-10-19 16:14:41 +02:00
}
}
}
2017-03-05 16:44:50 +01:00
r_aabb = aabb ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_NORMAL : {
2020-02-17 22:06:54 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_VECTOR3_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < Vector3 > array = p_arrays [ ai ] ;
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const Vector3 * src = array . ptr ( ) ;
2020-12-02 02:40:47 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
Vector3 n = src [ i ] * Vector3 ( 0.5 , 0.5 , 0.5 ) + Vector3 ( 0.5 , 0.5 , 0.5 ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
uint32_t value = 0 ;
value | = CLAMP ( int ( n . x * 1023.0 ) , 0 , 1023 ) ;
value | = CLAMP ( int ( n . y * 1023.0 ) , 0 , 1023 ) < < 10 ;
value | = CLAMP ( int ( n . z * 1023.0 ) , 0 , 1023 ) < < 20 ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_vertex_stride ] , & value , 4 ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TANGENT : {
Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
2020-02-24 19:20:53 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_FLOAT32_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < real_t > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len * 4 , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const real_t * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
uint32_t value = 0 ;
value | = CLAMP ( int ( ( src [ i * 4 + 0 ] * 0.5 + 0.5 ) * 1023.0 ) , 0 , 1023 ) ;
value | = CLAMP ( int ( ( src [ i * 4 + 1 ] * 0.5 + 0.5 ) * 1023.0 ) , 0 , 1023 ) < < 10 ;
value | = CLAMP ( int ( ( src [ i * 4 + 2 ] * 0.5 + 0.5 ) * 1023.0 ) , 0 , 1023 ) < < 20 ;
value | = CLAMP ( int ( ( src [ i * 4 + 3 ] * 0.5 + 0.5 ) * 3.0 ) , 0 , 3 ) < < 30 ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_vertex_stride ] , & value , 4 ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_COLOR : {
2020-02-17 22:06:54 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_COLOR_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < Color > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const Color * src = array . ptr ( ) ;
2020-12-02 02:40:47 +01:00
uint16_t color16 [ 4 ] ;
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
color16 [ 0 ] = Math : : make_half_float ( src [ i ] . r ) ;
color16 [ 1 ] = Math : : make_half_float ( src [ i ] . g ) ;
color16 [ 2 ] = Math : : make_half_float ( src [ i ] . b ) ;
color16 [ 3 ] = Math : : make_half_float ( src [ i ] . a ) ;
copymem ( & aw [ p_offsets [ ai ] + i * p_attrib_stride ] , color16 , 8 ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV : {
2020-02-17 22:06:54 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_VECTOR3_ARRAY & & p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_VECTOR2_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < Vector2 > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const Vector2 * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
float uv [ 2 ] = { src [ i ] . x , src [ i ] . y } ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
copymem ( & aw [ p_offsets [ ai ] + i * p_attrib_stride ] , uv , 2 * 4 ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV2 : {
2020-02-17 22:06:54 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_VECTOR3_ARRAY & & p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_VECTOR2_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < Vector2 > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const Vector2 * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
uint16_t uv [ 2 ] = { Math : : make_half_float ( src [ i ] . x ) , Math : : make_half_float ( src [ i ] . y ) } ;
copymem ( & aw [ p_offsets [ ai ] + i * p_attrib_stride ] , uv , 2 * 2 ) ;
}
} break ;
case RS : : ARRAY_CUSTOM0 :
case RS : : ARRAY_CUSTOM1 :
case RS : : ARRAY_CUSTOM2 :
case RS : : ARRAY_CUSTOM3 : {
uint32_t type = ( p_format > > ( ARRAY_FORMAT_CUSTOM_BASE + ARRAY_FORMAT_CUSTOM_BITS * ( RS : : ARRAY_CUSTOM0 - ai ) ) ) & ARRAY_FORMAT_CUSTOM_MASK ;
switch ( type ) {
case ARRAY_CUSTOM_RGBA8_UNORM :
case ARRAY_CUSTOM_RGBA8_SNORM :
case ARRAY_CUSTOM_RG_HALF : {
//size 4
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_BYTE_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
Vector < uint8_t > array = p_arrays [ ai ] ;
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len * 4 , ERR_INVALID_PARAMETER ) ;
const uint8_t * src = array . ptr ( ) ;
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
copymem ( & aw [ p_offsets [ ai ] + i * p_attrib_stride ] , & src [ i * 4 ] , 4 ) ;
}
} break ;
case ARRAY_CUSTOM_RGBA_HALF : {
//size 8
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_BYTE_ARRAY , ERR_INVALID_PARAMETER ) ;
Vector < uint8_t > array = p_arrays [ ai ] ;
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len * 8 , ERR_INVALID_PARAMETER ) ;
const uint8_t * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
copymem ( & aw [ p_offsets [ ai ] + i * p_attrib_stride ] , & src [ i * 8 ] , 8 ) ;
}
} break ;
case ARRAY_CUSTOM_R_FLOAT :
case ARRAY_CUSTOM_RG_FLOAT :
case ARRAY_CUSTOM_RGB_FLOAT :
case ARRAY_CUSTOM_RGBA_FLOAT : {
//RF
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_FLOAT32_ARRAY , ERR_INVALID_PARAMETER ) ;
Vector < float > array = p_arrays [ ai ] ;
int32_t s = ARRAY_CUSTOM_R_FLOAT - ai + 1 ;
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len * s , ERR_INVALID_PARAMETER ) ;
const float * src = array . ptr ( ) ;
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
copymem ( & aw [ p_offsets [ ai ] + i * p_attrib_stride ] , & src [ i * s ] , 4 * s ) ;
}
} break ;
default : {
2016-10-19 16:14:41 +02:00
}
}
2020-12-02 02:40:47 +01:00
2016-10-19 16:14:41 +02:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_WEIGHTS : {
Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
2020-02-24 19:20:53 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_FLOAT32_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
uint32_t bone_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
2020-02-17 22:06:54 +01:00
Vector < real_t > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = ( int32_t ) ( p_vertex_array_len * bone_count ) , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const real_t * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2019-08-19 00:40:52 +02:00
{
2020-12-02 02:40:47 +01:00
uint16_t data [ 8 ] ;
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2020-12-02 02:40:47 +01:00
for ( uint32_t j = 0 ; j < bone_count ; j + + ) {
data [ j ] = CLAMP ( src [ i * bone_count + j ] * 65535 , 0 , 65535 ) ;
2016-10-19 16:14:41 +02:00
}
2020-12-02 02:40:47 +01:00
copymem ( & sw [ p_offsets [ ai ] + i * p_skin_stride ] , data , 2 * bone_count ) ;
2016-10-19 16:14:41 +02:00
}
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_BONES : {
Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
2020-02-24 19:20:53 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_INT32_ARRAY & & p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_FLOAT32_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < int > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
uint32_t bone_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
ERR_FAIL_COND_V ( array . size ( ) ! = ( int32_t ) ( p_vertex_array_len * bone_count ) , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const int * src = array . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
uint16_t data [ 8 ] ;
2019-08-19 00:40:52 +02:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2020-12-02 02:40:47 +01:00
for ( uint32_t j = 0 ; j < bone_count ; j + + ) {
data [ j ] = src [ i * bone_count + j ] ;
2019-08-19 00:40:52 +02:00
max_bone = MAX ( data [ j ] , max_bone ) ;
2016-10-19 16:14:41 +02:00
}
2020-12-02 02:40:47 +01:00
copymem ( & sw [ p_offsets [ ai ] + i * p_skin_stride ] , data , 2 * bone_count ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-12-02 02:40:47 +01:00
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_INDEX : {
Fix some -Wmaybe-uninitialized warnings
Namely:
```
modules/basis_universal/register_types.cpp: In function 'Ref<Image> basis_universal_unpacker(const Vector<unsigned char>&)':
modules/basis_universal/register_types.cpp:266:15: warning: 'imgfmt' may be used uninitialized in this function [-Wmaybe-uninitialized]
266 | image->create(info.m_width, info.m_height, info.m_total_levels > 1, imgfmt, gpudata);
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
modules/basis_universal/register_types.cpp:255:39: warning: 'format' may be used uninitialized in this function [-Wmaybe-uninitialized]
255 | bool ret = tr.transcode_image_level(ptr, size, 0, i, dst + ofs, level.m_total_blocks - i, format);
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
```
servers/visual_server.cpp: In member function 'Error VisualServer::_surface_set_data(Array, uint32_t, uint32_t*, uint32_t, Vector<unsigned char>&, int, Vector<unsigned char>&, int, AABB&, Vector<AABB>&)':
servers/visual_server.cpp:636:15: warning: 'iw' may be used uninitialized in this function [-Wmaybe-uninitialized]
636 | copymem(&iw[i * 2], &v, 2);
| ^
```
```
core/image.cpp: In member function 'Error Image::generate_mipmap_roughness(Image::RoughnessChannel, const Ref<Image>&)':
core/image.cpp:1683:11: warning: 'roughness' may be used uninitialized in this function [-Wmaybe-uninitialized]
1683 | float roughness;
| ^~~~~~~~~
```
2020-03-27 12:36:59 +01:00
ERR_FAIL_NULL_V ( iw , ERR_INVALID_DATA ) ;
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( p_index_array_len < = 0 , ERR_INVALID_DATA ) ;
Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
2020-02-24 19:20:53 +01:00
ERR_FAIL_COND_V ( p_arrays [ ai ] . get_type ( ) ! = Variant : : PACKED_INT32_ARRAY , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < int > indices = p_arrays [ ai ] ;
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND_V ( indices . size ( ) = = 0 , ERR_INVALID_PARAMETER ) ;
ERR_FAIL_COND_V ( indices . size ( ) ! = p_index_array_len , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2018-01-18 21:37:17 +01:00
/* determine whether using 16 or 32 bits indices */
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
const int * src = indices . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_index_array_len ; i + + ) {
if ( p_vertex_array_len < ( 1 < < 16 ) ) {
uint16_t v = src [ i ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
copymem ( & iw [ i * 2 ] , & v , 2 ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
uint32_t v = src [ i ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
copymem ( & iw [ i * 4 ] , & v , 4 ) ;
2016-10-19 16:14:41 +02:00
}
}
} break ;
default : {
2017-03-05 16:44:50 +01:00
ERR_FAIL_V ( ERR_INVALID_DATA ) ;
2016-10-19 16:14:41 +02:00
}
}
}
2020-03-27 19:21:27 +01:00
if ( p_format & RS : : ARRAY_FORMAT_BONES ) {
2016-10-19 16:14:41 +02:00
//create AABBs for each detected bone
2017-03-05 16:44:50 +01:00
int total_bones = max_bone + 1 ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
bool first = r_bone_aabb . size ( ) = = 0 ;
2016-10-19 16:14:41 +02:00
r_bone_aabb . resize ( total_bones ) ;
2020-12-16 15:07:08 +01:00
int weight_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
2016-10-19 16:14:41 +02:00
if ( first ) {
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < total_bones ; i + + ) {
2018-07-25 03:11:03 +02:00
r_bone_aabb . write [ i ] . size = Vector3 ( - 1 , - 1 , - 1 ) ; //negative means unused
2016-10-19 16:14:41 +02:00
}
}
2020-03-27 19:21:27 +01:00
Vector < Vector3 > vertices = p_arrays [ RS : : ARRAY_VERTEX ] ;
Vector < int > bones = p_arrays [ RS : : ARRAY_BONES ] ;
Vector < float > weights = p_arrays [ RS : : ARRAY_WEIGHTS ] ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
bool any_valid = false ;
2016-10-19 16:14:41 +02:00
2020-12-16 15:07:08 +01:00
if ( vertices . size ( ) & & bones . size ( ) = = vertices . size ( ) * weight_count & & weights . size ( ) = = bones . size ( ) ) {
2016-10-19 16:14:41 +02:00
int vs = vertices . size ( ) ;
2020-02-17 22:06:54 +01:00
const Vector3 * rv = vertices . ptr ( ) ;
const int * rb = bones . ptr ( ) ;
const float * rw = weights . ptr ( ) ;
2016-10-19 16:14:41 +02:00
2017-11-25 04:07:54 +01:00
AABB * bptr = r_bone_aabb . ptrw ( ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < vs ; i + + ) {
2016-10-19 16:14:41 +02:00
Vector3 v = rv [ i ] ;
2020-12-16 15:07:08 +01:00
for ( int j = 0 ; j < weight_count ; j + + ) {
int idx = rb [ i * weight_count + j ] ;
float w = rw [ i * weight_count + j ] ;
2020-05-14 16:41:43 +02:00
if ( w = = 0 ) {
2017-03-05 16:44:50 +01:00
continue ; //break;
2020-05-14 16:41:43 +02:00
}
2017-03-05 16:44:50 +01:00
ERR_FAIL_INDEX_V ( idx , total_bones , ERR_INVALID_DATA ) ;
2016-10-19 16:14:41 +02:00
2019-03-14 05:35:19 +01:00
if ( bptr [ idx ] . size . x < 0 ) {
2016-10-19 16:14:41 +02:00
//first
2017-11-17 03:09:00 +01:00
bptr [ idx ] = AABB ( v , SMALL_VEC3 ) ;
2017-03-05 16:44:50 +01:00
any_valid = true ;
2016-10-19 16:14:41 +02:00
} else {
bptr [ idx ] . expand_to ( v ) ;
}
}
}
}
if ( ! any_valid & & first ) {
r_bone_aabb . clear ( ) ;
}
}
return OK ;
}
2020-12-02 02:40:47 +01:00
uint32_t RenderingServer : : mesh_surface_get_format_offset ( uint32_t p_format , int p_vertex_len , int p_array_index ) const {
p_format & = ~ ARRAY_FORMAT_INDEX ;
2017-11-21 01:36:32 +01:00
uint32_t offsets [ ARRAY_MAX ] ;
2020-12-02 02:40:47 +01:00
uint32_t vstr ;
uint32_t astr ;
uint32_t sstr ;
mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , 0 , offsets , vstr , astr , sstr ) ;
2017-11-21 01:36:32 +01:00
return offsets [ p_array_index ] ;
}
2020-12-02 02:40:47 +01:00
uint32_t RenderingServer : : mesh_surface_get_format_vertex_stride ( uint32_t p_format , int p_vertex_len ) const {
p_format & = ~ ARRAY_FORMAT_INDEX ;
2017-11-21 01:36:32 +01:00
uint32_t offsets [ ARRAY_MAX ] ;
2020-12-02 02:40:47 +01:00
uint32_t vstr ;
uint32_t astr ;
uint32_t sstr ;
mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , 0 , offsets , vstr , astr , sstr ) ;
return vstr ;
2017-11-21 01:36:32 +01:00
}
2020-12-02 02:40:47 +01:00
uint32_t RenderingServer : : mesh_surface_get_format_attribute_stride ( uint32_t p_format , int p_vertex_len ) const {
p_format & = ~ ARRAY_FORMAT_INDEX ;
uint32_t offsets [ ARRAY_MAX ] ;
uint32_t vstr ;
uint32_t astr ;
uint32_t sstr ;
mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , 0 , offsets , vstr , astr , sstr ) ;
return astr ;
}
uint32_t RenderingServer : : mesh_surface_get_format_skin_stride ( uint32_t p_format , int p_vertex_len ) const {
p_format & = ~ ARRAY_FORMAT_INDEX ;
uint32_t offsets [ ARRAY_MAX ] ;
uint32_t vstr ;
uint32_t astr ;
uint32_t sstr ;
mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , 0 , offsets , vstr , astr , sstr ) ;
return sstr ;
}
void RenderingServer : : 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 {
r_vertex_element_size = 0 ;
r_attrib_element_size = 0 ;
r_skin_element_size = 0 ;
2017-11-21 01:36:32 +01:00
2020-12-02 02:40:47 +01:00
uint32_t * size_accum ;
2017-11-21 01:36:32 +01:00
2020-03-27 19:21:27 +01:00
for ( int i = 0 ; i < RS : : ARRAY_MAX ; i + + ) {
2017-11-21 01:36:32 +01:00
r_offsets [ i ] = 0 ; //reset
2020-12-02 02:40:47 +01:00
if ( i = = RS : : ARRAY_VERTEX ) {
size_accum = & r_vertex_element_size ;
} else if ( i = = RS : : ARRAY_COLOR ) {
size_accum = & r_attrib_element_size ;
} else if ( i = = RS : : ARRAY_BONES ) {
size_accum = & r_skin_element_size ;
}
2020-05-14 16:41:43 +02:00
if ( ! ( p_format & ( 1 < < i ) ) ) { // no array
2017-11-21 01:36:32 +01:00
continue ;
2020-05-14 16:41:43 +02:00
}
2017-11-21 01:36:32 +01:00
int elem_size = 0 ;
switch ( i ) {
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_VERTEX : {
2017-11-21 01:36:32 +01:00
if ( p_format & ARRAY_FLAG_USE_2D_VERTICES ) {
elem_size = 2 ;
} else {
elem_size = 3 ;
}
2019-08-19 00:40:52 +02:00
{
2017-11-21 01:36:32 +01:00
elem_size * = sizeof ( float ) ;
}
if ( elem_size = = 6 ) {
elem_size = 8 ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_NORMAL : {
2020-12-02 02:40:47 +01:00
elem_size = 4 ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TANGENT : {
2020-12-02 02:40:47 +01:00
elem_size = 4 ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_COLOR : {
2020-12-02 02:40:47 +01:00
elem_size = 8 ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV : {
2020-12-02 02:40:47 +01:00
elem_size = 8 ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV2 : {
2020-12-02 02:40:47 +01:00
elem_size = 8 ;
2017-11-21 01:36:32 +01:00
} break ;
2020-12-02 02:40:47 +01:00
case RS : : ARRAY_CUSTOM0 :
case RS : : ARRAY_CUSTOM1 :
case RS : : ARRAY_CUSTOM2 :
case RS : : ARRAY_CUSTOM3 : {
uint32_t format = ( p_format > > ( ARRAY_FORMAT_CUSTOM_BASE + ( ARRAY_FORMAT_CUSTOM_BITS * ( i - ARRAY_CUSTOM0 ) ) ) ) & ARRAY_FORMAT_CUSTOM_MASK ;
switch ( format ) {
case ARRAY_CUSTOM_RGBA8_UNORM : {
elem_size = 4 ;
} break ;
case ARRAY_CUSTOM_RGBA8_SNORM : {
elem_size = 4 ;
} break ;
case ARRAY_CUSTOM_RG_HALF : {
elem_size = 4 ;
} break ;
case ARRAY_CUSTOM_RGBA_HALF : {
elem_size = 8 ;
} break ;
case ARRAY_CUSTOM_R_FLOAT : {
elem_size = 4 ;
} break ;
case ARRAY_CUSTOM_RG_FLOAT : {
elem_size = 8 ;
} break ;
case ARRAY_CUSTOM_RGB_FLOAT : {
elem_size = 12 ;
} break ;
case ARRAY_CUSTOM_RGBA_FLOAT : {
elem_size = 16 ;
} break ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_WEIGHTS : {
2020-12-02 02:40:47 +01:00
uint32_t bone_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
elem_size = sizeof ( uint16_t ) * bone_count ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_BONES : {
2020-12-02 02:40:47 +01:00
uint32_t bone_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
elem_size = sizeof ( uint16_t ) * bone_count ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_INDEX : {
2017-11-21 01:36:32 +01:00
if ( p_index_len < = 0 ) {
ERR_PRINT ( " index_array_len==NO_INDEX_ARRAY " ) ;
break ;
}
/* determine whether using 16 or 32 bits indices */
if ( p_vertex_len > = ( 1 < < 16 ) ) {
elem_size = 4 ;
} else {
elem_size = 2 ;
}
r_offsets [ i ] = elem_size ;
continue ;
2019-06-26 15:08:25 +02:00
}
2017-11-21 01:36:32 +01:00
default : {
2020-12-02 02:40:47 +01:00
ERR_FAIL ( ) ;
2017-11-21 01:36:32 +01:00
}
}
2020-12-02 02:40:47 +01:00
r_offsets [ i ] = ( * size_accum ) ;
( * size_accum ) + = elem_size ;
2017-11-21 01:36:32 +01:00
}
}
2020-03-27 19:21:27 +01:00
Error RenderingServer : : mesh_create_surface_data_from_arrays ( SurfaceData * r_surface_data , PrimitiveType p_primitive , const Array & p_arrays , const Array & p_blend_shapes , const Dictionary & p_lods , uint32_t p_compress_format ) {
ERR_FAIL_INDEX_V ( p_primitive , RS : : PRIMITIVE_MAX , ERR_INVALID_PARAMETER ) ;
ERR_FAIL_COND_V ( p_arrays . size ( ) ! = RS : : ARRAY_MAX , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
uint32_t format = 0 ;
2016-10-19 16:14:41 +02:00
// validation
2017-03-05 16:44:50 +01:00
int index_array_len = 0 ;
int array_len = 0 ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_arrays . size ( ) ; i + + ) {
2020-05-14 16:41:43 +02:00
if ( p_arrays [ i ] . get_type ( ) = = Variant : : NIL ) {
2016-10-19 16:14:41 +02:00
continue ;
2020-05-14 16:41:43 +02:00
}
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
format | = ( 1 < < i ) ;
2016-10-19 16:14:41 +02:00
2020-03-27 19:21:27 +01:00
if ( i = = RS : : ARRAY_VERTEX ) {
2020-12-02 02:40:47 +01:00
switch ( p_arrays [ i ] . get_type ( ) ) {
2020-02-17 22:06:54 +01:00
case Variant : : PACKED_VECTOR2_ARRAY : {
2020-12-02 02:40:47 +01:00
Vector < Vector2 > v2 = p_arrays [ i ] ;
array_len = v2 . size ( ) ;
2016-10-19 16:14:41 +02:00
} break ;
2020-02-17 22:06:54 +01:00
case Variant : : PACKED_VECTOR3_ARRAY : {
2020-12-02 02:40:47 +01:00
Vector < Vector3 > v3 = p_arrays [ i ] ;
array_len = v3 . size ( ) ;
2016-10-19 16:14:41 +02:00
} break ;
default : {
2020-12-02 02:40:47 +01:00
ERR_FAIL_V ( ERR_INVALID_DATA ) ;
2016-10-19 16:14:41 +02:00
} break ;
}
2019-08-19 00:40:52 +02:00
ERR_FAIL_COND_V ( array_len = = 0 , ERR_INVALID_DATA ) ;
2020-12-28 20:51:48 +01:00
} else if ( i = = RS : : ARRAY_BONES ) {
switch ( p_arrays [ i ] . get_type ( ) ) {
case Variant : : PACKED_INT32_ARRAY : {
Vector < Vector3 > vertexes = p_arrays [ RS : : ARRAY_VERTEX ] ;
Vector < int32_t > bones = p_arrays [ i ] ;
int32_t bone_8_group_count = bones . size ( ) / ( ARRAY_WEIGHTS_SIZE * 2 ) ;
int32_t vertex_count = vertexes . size ( ) ;
if ( vertex_count = = bone_8_group_count ) {
format | = RS : : ARRAY_FLAG_USE_8_BONE_WEIGHTS ;
}
} break ;
default : {
ERR_FAIL_V ( ERR_INVALID_DATA ) ;
} break ;
}
2020-03-27 19:21:27 +01:00
} else if ( i = = RS : : ARRAY_INDEX ) {
Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
2020-02-24 19:20:53 +01:00
index_array_len = PackedInt32Array ( p_arrays [ i ] ) . size ( ) ;
2016-10-19 16:14:41 +02:00
}
}
2020-03-27 19:21:27 +01:00
ERR_FAIL_COND_V ( ( format & RS : : ARRAY_FORMAT_VERTEX ) = = 0 , ERR_INVALID_PARAMETER ) ; // mandatory
2016-10-19 16:14:41 +02:00
if ( p_blend_shapes . size ( ) ) {
//validate format for morphs
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_blend_shapes . size ( ) ; i + + ) {
uint32_t bsformat = 0 ;
2016-10-19 16:14:41 +02:00
Array arr = p_blend_shapes [ i ] ;
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < arr . size ( ) ; j + + ) {
2020-05-14 16:41:43 +02:00
if ( arr [ j ] . get_type ( ) ! = Variant : : NIL ) {
2017-03-05 16:44:50 +01:00
bsformat | = ( 1 < < j ) ;
2020-05-14 16:41:43 +02:00
}
2016-10-19 16:14:41 +02:00
}
2020-03-27 19:21:27 +01:00
ERR_FAIL_COND_V ( ( bsformat ) ! = ( format & ( RS : : ARRAY_FORMAT_INDEX - 1 ) ) , ERR_INVALID_PARAMETER ) ;
2016-10-19 16:14:41 +02:00
}
}
2020-03-27 19:21:27 +01:00
uint32_t offsets [ RS : : ARRAY_MAX ] ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
uint32_t vertex_element_size ;
uint32_t attrib_element_size ;
uint32_t skin_element_size ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
mesh_surface_make_offsets_from_format ( format , array_len , index_array_len , offsets , vertex_element_size , attrib_element_size , skin_element_size ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
uint32_t mask = ( 1 < < ARRAY_MAX ) - 1 ;
format | = ( ~ mask ) & p_compress_format ; //make the full format
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
int vertex_array_size = vertex_element_size * array_len ;
int attrib_array_size = attrib_element_size * array_len ;
int skin_array_size = skin_element_size * array_len ;
int index_array_size = offsets [ RS : : ARRAY_INDEX ] * index_array_len ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < uint8_t > vertex_array ;
2020-12-02 02:40:47 +01:00
vertex_array . resize ( vertex_array_size ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
Vector < uint8_t > attrib_array ;
attrib_array . resize ( attrib_array_size ) ;
Vector < uint8_t > skin_array ;
skin_array . resize ( skin_array_size ) ;
2016-10-19 16:14:41 +02:00
2020-02-17 22:06:54 +01:00
Vector < uint8_t > index_array ;
2016-10-19 16:14:41 +02:00
index_array . resize ( index_array_size ) ;
2017-11-17 03:09:00 +01:00
AABB aabb ;
Vector < AABB > bone_aabb ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
Error err = _surface_set_data ( p_arrays , format , offsets , vertex_element_size , attrib_element_size , skin_element_size , vertex_array , attrib_array , skin_array , array_len , index_array , index_array_len , aabb , bone_aabb ) ;
2019-08-19 00:40:52 +02:00
ERR_FAIL_COND_V_MSG ( err ! = OK , ERR_INVALID_DATA , " Invalid array format for surface. " ) ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
Vector < uint8_t > blend_shape_data ;
uint32_t blend_shape_count = 0 ;
2016-10-19 16:14:41 +02:00
2020-12-02 02:40:47 +01:00
if ( p_blend_shapes . size ( ) ) {
uint32_t bs_format = format & RS : : ARRAY_FORMAT_BLEND_SHAPE_MASK ;
for ( int i = 0 ; i < p_blend_shapes . size ( ) ; i + + ) {
Vector < uint8_t > vertex_array_shape ;
vertex_array_shape . resize ( vertex_array_size ) ;
Vector < uint8_t > noindex ;
Vector < uint8_t > noattrib ;
Vector < uint8_t > noskin ;
AABB laabb ;
Error err2 = _surface_set_data ( p_blend_shapes [ i ] , bs_format , offsets , vertex_element_size , 0 , 0 , vertex_array_shape , noattrib , noskin , array_len , noindex , 0 , laabb , bone_aabb ) ;
aabb . merge_with ( laabb ) ;
ERR_FAIL_COND_V_MSG ( err2 ! = OK , ERR_INVALID_DATA , " Invalid blend shape array format for surface. " ) ;
blend_shape_data . append_array ( vertex_array_shape ) ;
blend_shape_count + + ;
}
2016-10-19 16:14:41 +02:00
}
2019-08-19 00:40:52 +02:00
Vector < SurfaceData : : LOD > lods ;
if ( index_array_len ) {
List < Variant > keys ;
p_lods . get_key_list ( & keys ) ;
for ( List < Variant > : : Element * E = keys . front ( ) ; E ; E = E - > next ( ) ) {
float distance = E - > get ( ) ;
ERR_CONTINUE ( distance < = 0.0 ) ;
2020-02-17 22:06:54 +01:00
Vector < int > indices = p_lods [ E - > get ( ) ] ;
2019-08-19 00:40:52 +02:00
ERR_CONTINUE ( indices . size ( ) = = 0 ) ;
uint32_t index_count = indices . size ( ) ;
ERR_CONTINUE ( index_count > = ( uint32_t ) index_array_len ) ; //should be smaller..
2020-02-17 22:06:54 +01:00
const int * r = indices . ptr ( ) ;
2019-08-19 00:40:52 +02:00
2020-02-17 22:06:54 +01:00
Vector < uint8_t > data ;
2019-08-19 00:40:52 +02:00
if ( array_len < = 65536 ) {
//16 bits indices
data . resize ( indices . size ( ) * 2 ) ;
2020-02-17 22:06:54 +01:00
uint8_t * w = data . ptrw ( ) ;
uint16_t * index_ptr = ( uint16_t * ) w ;
2019-08-19 00:40:52 +02:00
for ( uint32_t i = 0 ; i < index_count ; i + + ) {
index_ptr [ i ] = r [ i ] ;
}
} else {
//32 bits indices
data . resize ( indices . size ( ) * 4 ) ;
2020-02-17 22:06:54 +01:00
uint8_t * w = data . ptrw ( ) ;
uint32_t * index_ptr = ( uint32_t * ) w ;
2019-08-19 00:40:52 +02:00
for ( uint32_t i = 0 ; i < index_count ; i + + ) {
index_ptr [ i ] = r [ i ] ;
}
}
SurfaceData : : LOD lod ;
lod . edge_length = distance ;
lod . index_data = data ;
lods . push_back ( lod ) ;
}
}
SurfaceData & surface_data = * r_surface_data ;
surface_data . format = format ;
surface_data . primitive = p_primitive ;
surface_data . aabb = aabb ;
surface_data . vertex_data = vertex_array ;
2020-12-02 02:40:47 +01:00
surface_data . attribute_data = attrib_array ;
surface_data . skin_data = skin_array ;
2019-08-19 00:40:52 +02:00
surface_data . vertex_count = array_len ;
surface_data . index_data = index_array ;
surface_data . index_count = index_array_len ;
2020-12-02 02:40:47 +01:00
surface_data . blend_shape_data = blend_shape_data ;
2019-08-19 00:40:52 +02:00
surface_data . bone_aabbs = bone_aabb ;
surface_data . lods = lods ;
2016-10-19 16:14:41 +02:00
2019-08-19 00:40:52 +02:00
return OK ;
}
2020-03-27 19:21:27 +01:00
void RenderingServer : : mesh_add_surface_from_arrays ( RID p_mesh , PrimitiveType p_primitive , const Array & p_arrays , const Array & p_blend_shapes , const Dictionary & p_lods , uint32_t p_compress_format ) {
2019-08-19 00:40:52 +02:00
SurfaceData sd ;
Error err = mesh_create_surface_data_from_arrays ( & sd , p_primitive , p_arrays , p_blend_shapes , p_lods , p_compress_format ) ;
if ( err ! = OK ) {
return ;
}
mesh_add_surface ( p_mesh , sd ) ;
2016-10-03 21:33:42 +02:00
}
2020-12-02 02:40:47 +01:00
Array RenderingServer : : _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 {
uint32_t offsets [ RS : : ARRAY_MAX ] ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
uint32_t vertex_elem_size ;
uint32_t attrib_elem_size ;
uint32_t skin_elem_size ;
mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , p_index_len , offsets , vertex_elem_size , attrib_elem_size , skin_elem_size ) ;
2016-11-10 03:55:06 +01:00
Array ret ;
2020-03-27 19:21:27 +01:00
ret . resize ( RS : : ARRAY_MAX ) ;
2016-11-10 03:55:06 +01:00
2020-02-17 22:06:54 +01:00
const uint8_t * r = p_vertex_data . ptr ( ) ;
2020-12-02 02:40:47 +01:00
const uint8_t * ar = p_attrib_data . ptr ( ) ;
const uint8_t * sr = p_skin_data . ptr ( ) ;
2016-11-10 03:55:06 +01:00
2020-03-27 19:21:27 +01:00
for ( int i = 0 ; i < RS : : ARRAY_MAX ; i + + ) {
2020-05-14 16:41:43 +02:00
if ( ! ( p_format & ( 1 < < i ) ) ) {
2016-11-10 03:55:06 +01:00
continue ;
2020-05-14 16:41:43 +02:00
}
2016-11-10 03:55:06 +01:00
2017-03-05 16:44:50 +01:00
switch ( i ) {
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_VERTEX : {
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_FLAG_USE_2D_VERTICES ) {
2020-02-17 22:06:54 +01:00
Vector < Vector2 > arr_2d ;
2016-11-10 03:55:06 +01:00
arr_2d . resize ( p_vertex_len ) ;
2019-08-19 00:40:52 +02:00
{
2020-02-17 22:06:54 +01:00
Vector2 * w = arr_2d . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
2020-12-02 02:40:47 +01:00
const float * v = ( const float * ) & r [ j * vertex_elem_size + offsets [ i ] ] ;
2017-03-05 16:44:50 +01:00
w [ j ] = Vector2 ( v [ 0 ] , v [ 1 ] ) ;
2016-11-10 03:55:06 +01:00
}
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr_2d ;
2016-11-10 03:55:06 +01:00
} else {
2020-02-17 22:06:54 +01:00
Vector < Vector3 > arr_3d ;
2016-11-10 03:55:06 +01:00
arr_3d . resize ( p_vertex_len ) ;
2019-08-19 00:40:52 +02:00
{
2020-02-17 22:06:54 +01:00
Vector3 * w = arr_3d . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
2020-12-02 02:40:47 +01:00
const float * v = ( const float * ) & r [ j * vertex_elem_size + offsets [ i ] ] ;
2017-03-05 16:44:50 +01:00
w [ j ] = Vector3 ( v [ 0 ] , v [ 1 ] , v [ 2 ] ) ;
2016-11-10 03:55:06 +01:00
}
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr_3d ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_NORMAL : {
2020-02-17 22:06:54 +01:00
Vector < Vector3 > arr ;
2016-11-10 03:55:06 +01:00
arr . resize ( p_vertex_len ) ;
2020-12-02 02:40:47 +01:00
Vector3 * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
const uint32_t v = * ( const uint32_t * ) & r [ j * vertex_elem_size + offsets [ i ] ] ;
w [ j ] = Vector3 ( ( v & 0x3FF ) / 1023.0 , ( ( v > > 10 ) & 0x3FF ) / 1023.0 , ( ( v > > 20 ) & 0x3FF ) / 1023.0 ) * Vector3 ( 2 , 2 , 2 ) - Vector3 ( 1 , 1 , 1 ) ;
2016-11-10 03:55:06 +01:00
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TANGENT : {
2020-02-17 22:06:54 +01:00
Vector < float > arr ;
2017-03-05 16:44:50 +01:00
arr . resize ( p_vertex_len * 4 ) ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
float * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
const uint32_t v = * ( const uint32_t * ) & r [ j * vertex_elem_size + offsets [ i ] ] ;
w [ j * 4 + 0 ] = ( ( v & 0x3FF ) / 1023.0 ) * 2.0 - 1.0 ;
w [ j * 4 + 1 ] = ( ( ( v > > 10 ) & 0x3FF ) / 1023.0 ) * 2.0 - 1.0 ;
w [ j * 4 + 2 ] = ( ( ( v > > 20 ) & 0x3FF ) / 1023.0 ) * 2.0 - 1.0 ;
w [ j * 4 + 3 ] = ( ( v > > 30 ) / 3.0 ) * 2.0 - 1.0 ;
2016-11-10 03:55:06 +01:00
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_COLOR : {
2020-02-17 22:06:54 +01:00
Vector < Color > arr ;
2016-11-10 03:55:06 +01:00
arr . resize ( p_vertex_len ) ;
2020-12-02 02:40:47 +01:00
Color * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
for ( int32_t j = 0 ; j < p_vertex_len ; j + + ) {
const uint16_t * v = ( const uint16_t * ) & ar [ j * attrib_elem_size + offsets [ i ] ] ;
w [ j ] = Color ( Math : : half_to_float ( v [ 0 ] ) , Math : : half_to_float ( v [ 1 ] ) , Math : : half_to_float ( v [ 2 ] ) , Math : : half_to_float ( v [ 3 ] ) ) ;
2016-11-10 03:55:06 +01:00
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV : {
2020-02-17 22:06:54 +01:00
Vector < Vector2 > arr ;
2016-11-10 03:55:06 +01:00
arr . resize ( p_vertex_len ) ;
2020-12-02 02:40:47 +01:00
Vector2 * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
const float * v = ( const float * ) & ar [ j * attrib_elem_size + offsets [ i ] ] ;
w [ j ] = Vector2 ( v [ 0 ] , v [ 1 ] ) ;
2016-11-10 03:55:06 +01:00
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV2 : {
2020-02-17 22:06:54 +01:00
Vector < Vector2 > arr ;
2016-11-10 03:55:06 +01:00
arr . resize ( p_vertex_len ) ;
2020-12-02 02:40:47 +01:00
Vector2 * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
const float * v = ( const float * ) & ar [ j * attrib_elem_size + offsets [ i ] ] ;
w [ j ] = Vector2 ( v [ 0 ] , v [ 1 ] ) ;
2016-11-10 03:55:06 +01:00
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
2020-12-02 02:40:47 +01:00
} break ;
case RS : : ARRAY_CUSTOM0 :
case RS : : ARRAY_CUSTOM1 :
case RS : : ARRAY_CUSTOM2 :
case RS : : ARRAY_CUSTOM3 : {
uint32_t type = ( p_format > > ( ARRAY_FORMAT_CUSTOM_BASE + ARRAY_FORMAT_CUSTOM_BITS * ( RS : : ARRAY_CUSTOM0 - i ) ) ) & ARRAY_FORMAT_CUSTOM_MASK ;
switch ( type ) {
case ARRAY_CUSTOM_RGBA8_UNORM :
case ARRAY_CUSTOM_RGBA8_SNORM :
case ARRAY_CUSTOM_RG_HALF :
case ARRAY_CUSTOM_RGBA_HALF : {
//size 4
int s = type = = ARRAY_CUSTOM_RGBA_HALF ? 8 : 4 ;
Vector < uint8_t > arr ;
arr . resize ( p_vertex_len * s ) ;
uint8_t * w = arr . ptrw ( ) ;
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
const uint8_t * v = ( const uint8_t * ) & ar [ j * attrib_elem_size + offsets [ i ] ] ;
copymem ( & w [ j * s ] , v , s ) ;
}
ret [ i ] = arr ;
} break ;
case ARRAY_CUSTOM_R_FLOAT :
case ARRAY_CUSTOM_RG_FLOAT :
case ARRAY_CUSTOM_RGB_FLOAT :
case ARRAY_CUSTOM_RGBA_FLOAT : {
uint32_t s = type - ARRAY_CUSTOM_R_FLOAT + 1 ;
Vector < float > arr ;
float * w = arr . ptrw ( ) ;
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
const float * v = ( const float * ) & ar [ j * attrib_elem_size + offsets [ i ] ] ;
copymem ( & w [ j * s ] , v , s * sizeof ( float ) ) ;
}
ret [ i ] = arr ;
} break ;
default : {
}
}
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_WEIGHTS : {
2020-12-02 02:40:47 +01:00
uint32_t bone_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
2020-02-17 22:06:54 +01:00
Vector < float > arr ;
2020-12-02 02:40:47 +01:00
arr . resize ( p_vertex_len * bone_count ) ;
2019-08-19 00:40:52 +02:00
{
2020-02-17 22:06:54 +01:00
float * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
2020-12-02 02:40:47 +01:00
const uint16_t * v = ( const uint16_t * ) & sr [ j * skin_elem_size + offsets [ i ] ] ;
for ( uint32_t k = 0 ; k < bone_count ; k + + ) {
w [ j * bone_count + k ] = float ( v [ k ] / 65535.0 ) ;
2016-11-10 03:55:06 +01:00
}
}
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_BONES : {
2020-12-02 02:40:47 +01:00
uint32_t bone_count = ( p_format & ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ? 8 : 4 ;
2020-02-17 22:06:54 +01:00
Vector < int > arr ;
2020-12-02 02:40:47 +01:00
arr . resize ( p_vertex_len * bone_count ) ;
2016-11-10 03:55:06 +01:00
2020-02-17 22:06:54 +01:00
int * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2019-08-19 00:40:52 +02:00
for ( int j = 0 ; j < p_vertex_len ; j + + ) {
2020-12-02 02:40:47 +01:00
const uint16_t * v = ( const uint16_t * ) & sr [ j * skin_elem_size + offsets [ i ] ] ;
for ( uint32_t k = 0 ; k < bone_count ; k + + ) {
w [ j * bone_count + k ] = v [ k ] ;
2016-11-10 03:55:06 +01:00
}
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_INDEX : {
2018-01-18 21:37:17 +01:00
/* determine whether using 16 or 32 bits indices */
2016-11-10 03:55:06 +01:00
2020-02-17 22:06:54 +01:00
const uint8_t * ir = p_index_data . ptr ( ) ;
2016-11-10 03:55:06 +01:00
2020-02-17 22:06:54 +01:00
Vector < int > arr ;
2016-11-10 03:55:06 +01:00
arr . resize ( p_index_len ) ;
2017-03-05 16:44:50 +01:00
if ( p_vertex_len < ( 1 < < 16 ) ) {
2020-02-17 22:06:54 +01:00
int * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < p_index_len ; j + + ) {
const uint16_t * v = ( const uint16_t * ) & ir [ j * 2 ] ;
w [ j ] = * v ;
2016-11-10 03:55:06 +01:00
}
} else {
2020-02-17 22:06:54 +01:00
int * w = arr . ptrw ( ) ;
2016-11-10 03:55:06 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < p_index_len ; j + + ) {
const int * v = ( const int * ) & ir [ j * 4 ] ;
w [ j ] = * v ;
2016-11-10 03:55:06 +01:00
}
}
2017-03-05 16:44:50 +01:00
ret [ i ] = arr ;
2016-11-10 03:55:06 +01:00
} break ;
default : {
2017-03-05 16:44:50 +01:00
ERR_FAIL_V ( ret ) ;
2016-11-10 03:55:06 +01:00
}
}
}
return ret ;
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : mesh_surface_get_arrays ( RID p_mesh , int p_surface ) const {
2019-08-19 00:40:52 +02:00
SurfaceData sd = mesh_get_surface ( p_mesh , p_surface ) ;
return mesh_create_arrays_from_surface_data ( sd ) ;
}
2016-11-10 03:55:06 +01:00
2020-03-27 19:21:27 +01:00
Dictionary RenderingServer : : mesh_surface_get_lods ( RID p_mesh , int p_surface ) const {
2019-08-19 00:40:52 +02:00
SurfaceData sd = mesh_get_surface ( p_mesh , p_surface ) ;
ERR_FAIL_COND_V ( sd . vertex_count = = 0 , Dictionary ( ) ) ;
2016-11-10 03:55:06 +01:00
2019-08-19 00:40:52 +02:00
Dictionary ret ;
for ( int i = 0 ; i < sd . lods . size ( ) ; i + + ) {
2020-02-17 22:06:54 +01:00
Vector < int > lods ;
2019-08-19 00:40:52 +02:00
if ( sd . vertex_count < = 65536 ) {
uint32_t lc = sd . lods [ i ] . index_data . size ( ) / 2 ;
lods . resize ( lc ) ;
2020-02-17 22:06:54 +01:00
const uint8_t * r = sd . lods [ i ] . index_data . ptr ( ) ;
const uint16_t * rptr = ( const uint16_t * ) r ;
int * w = lods . ptrw ( ) ;
2019-08-19 00:40:52 +02:00
for ( uint32_t j = 0 ; j < lc ; j + + ) {
w [ j ] = rptr [ i ] ;
}
} else {
uint32_t lc = sd . lods [ i ] . index_data . size ( ) / 4 ;
lods . resize ( lc ) ;
2020-02-17 22:06:54 +01:00
const uint8_t * r = sd . lods [ i ] . index_data . ptr ( ) ;
const uint32_t * rptr = ( const uint32_t * ) r ;
int * w = lods . ptrw ( ) ;
2019-08-19 00:40:52 +02:00
for ( uint32_t j = 0 ; j < lc ; j + + ) {
w [ j ] = rptr [ i ] ;
}
}
ret [ sd . lods [ i ] . edge_length ] = lods ;
}
return ret ;
2016-11-10 03:55:06 +01:00
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : mesh_surface_get_blend_shape_arrays ( RID p_mesh , int p_surface ) const {
2019-08-19 00:40:52 +02:00
SurfaceData sd = mesh_get_surface ( p_mesh , p_surface ) ;
ERR_FAIL_COND_V ( sd . vertex_count = = 0 , Array ( ) ) ;
2020-12-02 02:40:47 +01:00
Vector < uint8_t > blend_shape_data = sd . blend_shape_data ;
2019-08-19 00:40:52 +02:00
2017-09-10 12:10:28 +02:00
if ( blend_shape_data . size ( ) > 0 ) {
2020-12-02 02:40:47 +01:00
uint32_t bs_offsets [ RS : : ARRAY_MAX ] ;
uint32_t bs_format = ( sd . format & RS : : ARRAY_FORMAT_BLEND_SHAPE_MASK ) ;
uint32_t vertex_elem_size ;
uint32_t attrib_elem_size ;
uint32_t skin_elem_size ;
mesh_surface_make_offsets_from_format ( bs_format , sd . vertex_count , 0 , bs_offsets , vertex_elem_size , attrib_elem_size , skin_elem_size ) ;
2017-09-10 12:10:28 +02:00
2020-12-02 02:40:47 +01:00
int divisor = vertex_elem_size * sd . vertex_count ;
ERR_FAIL_COND_V ( ( blend_shape_data . size ( ) % divisor ) ! = 0 , Array ( ) ) ;
2017-09-10 12:10:28 +02:00
2020-12-02 02:40:47 +01:00
uint32_t blend_shape_count = blend_shape_data . size ( ) / divisor ;
2020-12-16 15:07:08 +01:00
ERR_FAIL_COND_V ( blend_shape_count ! = ( uint32_t ) mesh_get_blend_shape_count ( p_mesh ) , Array ( ) ) ;
2017-09-10 12:10:28 +02:00
Array blend_shape_array ;
2020-12-16 15:07:08 +01:00
blend_shape_array . resize ( mesh_get_blend_shape_count ( p_mesh ) ) ;
2020-12-02 02:40:47 +01:00
for ( uint32_t i = 0 ; i < blend_shape_count ; i + + ) {
Vector < uint8_t > bs_data = blend_shape_data . subarray ( i * divisor , ( i + 1 ) * divisor - 1 ) ;
Vector < uint8_t > unused ;
blend_shape_array . set ( i , _get_array_from_surface ( bs_format , bs_data , unused , unused , sd . vertex_count , unused , 0 ) ) ;
2017-09-10 12:10:28 +02:00
}
return blend_shape_array ;
} else {
return Array ( ) ;
}
}
2020-03-27 19:21:27 +01:00
Array RenderingServer : : mesh_create_arrays_from_surface_data ( const SurfaceData & p_data ) const {
2020-02-17 22:06:54 +01:00
Vector < uint8_t > vertex_data = p_data . vertex_data ;
2020-12-02 02:40:47 +01:00
Vector < uint8_t > attrib_data = p_data . attribute_data ;
Vector < uint8_t > skin_data = p_data . skin_data ;
2019-08-19 00:40:52 +02:00
ERR_FAIL_COND_V ( vertex_data . size ( ) = = 0 , Array ( ) ) ;
int vertex_len = p_data . vertex_count ;
2020-02-17 22:06:54 +01:00
Vector < uint8_t > index_data = p_data . index_data ;
2019-08-19 00:40:52 +02:00
int index_len = p_data . index_count ;
uint32_t format = p_data . format ;
2020-12-02 02:40:47 +01:00
return _get_array_from_surface ( format , vertex_data , attrib_data , skin_data , vertex_len , index_data , index_len ) ;
2019-08-19 00:40:52 +02:00
}
#if 0
2020-03-27 19:21:27 +01:00
Array RenderingServer : : _mesh_surface_get_skeleton_aabb_bind ( RID p_mesh , int p_surface ) const {
Vector < AABB > vec = RS : : get_singleton ( ) - > mesh_surface_get_skeleton_aabb ( p_mesh , p_surface ) ;
2017-10-20 00:24:49 +02:00
Array arr ;
for ( int i = 0 ; i < vec . size ( ) ; i + + ) {
arr [ i ] = vec [ i ] ;
}
return arr ;
}
2019-08-19 00:40:52 +02:00
# endif
2020-04-17 04:52:00 +02:00
ShaderLanguage : : DataType RenderingServer : : global_variable_type_get_shader_datatype ( GlobalVariableType p_type ) {
switch ( p_type ) {
2020-05-10 13:00:47 +02:00
case RS : : GLOBAL_VAR_TYPE_BOOL :
return ShaderLanguage : : TYPE_BOOL ;
case RS : : GLOBAL_VAR_TYPE_BVEC2 :
return ShaderLanguage : : TYPE_BVEC2 ;
case RS : : GLOBAL_VAR_TYPE_BVEC3 :
return ShaderLanguage : : TYPE_BVEC3 ;
case RS : : GLOBAL_VAR_TYPE_BVEC4 :
return ShaderLanguage : : TYPE_BVEC4 ;
case RS : : GLOBAL_VAR_TYPE_INT :
return ShaderLanguage : : TYPE_INT ;
case RS : : GLOBAL_VAR_TYPE_IVEC2 :
return ShaderLanguage : : TYPE_IVEC2 ;
case RS : : GLOBAL_VAR_TYPE_IVEC3 :
return ShaderLanguage : : TYPE_IVEC3 ;
case RS : : GLOBAL_VAR_TYPE_IVEC4 :
return ShaderLanguage : : TYPE_IVEC4 ;
case RS : : GLOBAL_VAR_TYPE_RECT2I :
return ShaderLanguage : : TYPE_IVEC4 ;
case RS : : GLOBAL_VAR_TYPE_UINT :
return ShaderLanguage : : TYPE_UINT ;
case RS : : GLOBAL_VAR_TYPE_UVEC2 :
return ShaderLanguage : : TYPE_UVEC2 ;
case RS : : GLOBAL_VAR_TYPE_UVEC3 :
return ShaderLanguage : : TYPE_UVEC3 ;
case RS : : GLOBAL_VAR_TYPE_UVEC4 :
return ShaderLanguage : : TYPE_UVEC4 ;
case RS : : GLOBAL_VAR_TYPE_FLOAT :
return ShaderLanguage : : TYPE_FLOAT ;
case RS : : GLOBAL_VAR_TYPE_VEC2 :
return ShaderLanguage : : TYPE_VEC2 ;
case RS : : GLOBAL_VAR_TYPE_VEC3 :
return ShaderLanguage : : TYPE_VEC3 ;
case RS : : GLOBAL_VAR_TYPE_VEC4 :
return ShaderLanguage : : TYPE_VEC4 ;
case RS : : GLOBAL_VAR_TYPE_COLOR :
return ShaderLanguage : : TYPE_VEC4 ;
case RS : : GLOBAL_VAR_TYPE_RECT2 :
return ShaderLanguage : : TYPE_VEC4 ;
case RS : : GLOBAL_VAR_TYPE_MAT2 :
return ShaderLanguage : : TYPE_MAT2 ;
case RS : : GLOBAL_VAR_TYPE_MAT3 :
return ShaderLanguage : : TYPE_MAT3 ;
case RS : : GLOBAL_VAR_TYPE_MAT4 :
return ShaderLanguage : : TYPE_MAT4 ;
case RS : : GLOBAL_VAR_TYPE_TRANSFORM_2D :
return ShaderLanguage : : TYPE_MAT3 ;
case RS : : GLOBAL_VAR_TYPE_TRANSFORM :
return ShaderLanguage : : TYPE_MAT4 ;
case RS : : GLOBAL_VAR_TYPE_SAMPLER2D :
return ShaderLanguage : : TYPE_SAMPLER2D ;
case RS : : GLOBAL_VAR_TYPE_SAMPLER2DARRAY :
return ShaderLanguage : : TYPE_SAMPLER2DARRAY ;
case RS : : GLOBAL_VAR_TYPE_SAMPLER3D :
return ShaderLanguage : : TYPE_SAMPLER3D ;
case RS : : GLOBAL_VAR_TYPE_SAMPLERCUBE :
return ShaderLanguage : : TYPE_SAMPLERCUBE ;
default :
return ShaderLanguage : : TYPE_MAX ; //invalid or not found
2020-04-17 04:52:00 +02:00
}
}
2020-09-17 06:11:39 +02:00
RenderingDevice * RenderingServer : : create_local_rendering_device ( ) const {
return RenderingDevice : : get_singleton ( ) - > create_local_device ( ) ;
}
2020-03-27 19:21:27 +01:00
void RenderingServer : : _bind_methods ( ) {
ClassDB : : bind_method ( D_METHOD ( " force_sync " ) , & RenderingServer : : sync ) ;
ClassDB : : bind_method ( D_METHOD ( " force_draw " , " swap_buffers " , " frame_step " ) , & RenderingServer : : draw , DEFVAL ( true ) , DEFVAL ( 0.0 ) ) ;
2020-09-17 06:11:39 +02:00
ClassDB : : bind_method ( D_METHOD ( " create_local_rendering_device " ) , & RenderingServer : : create_local_rendering_device ) ;
2017-10-20 00:24:49 +02:00
2019-06-22 18:34:26 +02:00
# ifndef _MSC_VER
2019-06-11 20:43:37 +02:00
# warning TODO all texture methods need re-binding
2019-06-22 18:34:26 +02:00
# endif
2019-06-11 20:43:37 +02:00
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " texture_2d_create " , " image " ) , & RenderingServer : : texture_2d_create ) ;
ClassDB : : bind_method ( D_METHOD ( " texture_2d_get " , " texture " ) , & RenderingServer : : texture_2d_get ) ;
2019-06-26 00:49:52 +02:00
2018-07-21 22:26:14 +02:00
# ifndef _3D_DISABLED
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " sky_create " ) , & RenderingServer : : sky_create ) ;
ClassDB : : bind_method ( D_METHOD ( " sky_set_material " , " sky " , " material " ) , & RenderingServer : : sky_set_material ) ;
2018-07-21 22:26:14 +02:00
# endif
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " shader_create " ) , & RenderingServer : : shader_create ) ;
ClassDB : : bind_method ( D_METHOD ( " shader_set_code " , " shader " , " code " ) , & RenderingServer : : shader_set_code ) ;
ClassDB : : bind_method ( D_METHOD ( " shader_get_code " , " shader " ) , & RenderingServer : : shader_get_code ) ;
ClassDB : : bind_method ( D_METHOD ( " shader_get_param_list " , " shader " ) , & RenderingServer : : _shader_get_param_list_bind ) ;
ClassDB : : bind_method ( D_METHOD ( " shader_set_default_texture_param " , " shader " , " name " , " texture " ) , & RenderingServer : : shader_set_default_texture_param ) ;
ClassDB : : bind_method ( D_METHOD ( " shader_get_default_texture_param " , " shader " , " name " ) , & RenderingServer : : shader_get_default_texture_param ) ;
ClassDB : : bind_method ( D_METHOD ( " shader_get_param_default " , " material " , " parameter " ) , & RenderingServer : : shader_get_param_default ) ;
ClassDB : : bind_method ( D_METHOD ( " material_create " ) , & RenderingServer : : material_create ) ;
ClassDB : : bind_method ( D_METHOD ( " material_set_shader " , " shader_material " , " shader " ) , & RenderingServer : : material_set_shader ) ;
ClassDB : : bind_method ( D_METHOD ( " material_set_param " , " material " , " parameter " , " value " ) , & RenderingServer : : material_set_param ) ;
ClassDB : : bind_method ( D_METHOD ( " material_get_param " , " material " , " parameter " ) , & RenderingServer : : material_get_param ) ;
ClassDB : : bind_method ( D_METHOD ( " material_set_render_priority " , " material " , " priority " ) , & RenderingServer : : material_set_render_priority ) ;
ClassDB : : bind_method ( D_METHOD ( " material_set_next_pass " , " material " , " next_material " ) , & RenderingServer : : material_set_next_pass ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_create " ) , & RenderingServer : : mesh_create ) ;
2020-12-02 02:40:47 +01:00
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_format_offset " , " format " , " vertex_count " , " array_index " ) , & RenderingServer : : mesh_surface_get_format_offset ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_format_vertex_stride " , " format " , " vertex_count " ) , & RenderingServer : : mesh_surface_get_format_vertex_stride ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_format_attribute_stride " , " format " , " vertex_count " ) , & RenderingServer : : mesh_surface_get_format_attribute_stride ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_format_skin_stride " , " format " , " vertex_count " ) , & RenderingServer : : mesh_surface_get_format_skin_stride ) ;
//ClassDB::bind_method(D_METHOD("mesh_add_surface_from_arrays", "mesh", "primitive", "arrays", "blend_shapes", "lods", "compress_format"), &RenderingServer::mesh_add_surface_from_arrays, DEFVAL(Array()), DEFVAL(Dictionary()), DEFVAL(ARRAY_COMPRESS_DEFAULT));
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " mesh_get_blend_shape_count " , " mesh " ) , & RenderingServer : : mesh_get_blend_shape_count ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_set_blend_shape_mode " , " mesh " , " mode " ) , & RenderingServer : : mesh_set_blend_shape_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_get_blend_shape_mode " , " mesh " ) , & RenderingServer : : mesh_get_blend_shape_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_update_region " , " mesh " , " surface " , " offset " , " data " ) , & RenderingServer : : mesh_surface_update_region ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_set_material " , " mesh " , " surface " , " material " ) , & RenderingServer : : mesh_surface_set_material ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_material " , " mesh " , " surface " ) , & RenderingServer : : mesh_surface_get_material ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_arrays " , " mesh " , " surface " ) , & RenderingServer : : mesh_surface_get_arrays ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_blend_shape_arrays " , " mesh " , " surface " ) , & RenderingServer : : mesh_surface_get_blend_shape_arrays ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_get_surface_count " , " mesh " ) , & RenderingServer : : mesh_get_surface_count ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_set_custom_aabb " , " mesh " , " aabb " ) , & RenderingServer : : mesh_set_custom_aabb ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_get_custom_aabb " , " mesh " ) , & RenderingServer : : mesh_get_custom_aabb ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_clear " , " mesh " ) , & RenderingServer : : mesh_clear ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_create " ) , & RenderingServer : : multimesh_create ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_allocate " , " multimesh " , " instances " , " transform_format " , " color_format " , " custom_data_format " ) , & RenderingServer : : multimesh_allocate , DEFVAL ( false ) , DEFVAL ( false ) ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_get_instance_count " , " multimesh " ) , & RenderingServer : : multimesh_get_instance_count ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_set_mesh " , " multimesh " , " mesh " ) , & RenderingServer : : multimesh_set_mesh ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_set_transform " , " multimesh " , " index " , " transform " ) , & RenderingServer : : multimesh_instance_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_set_transform_2d " , " multimesh " , " index " , " transform " ) , & RenderingServer : : multimesh_instance_set_transform_2d ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_set_color " , " multimesh " , " index " , " color " ) , & RenderingServer : : multimesh_instance_set_color ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_set_custom_data " , " multimesh " , " index " , " custom_data " ) , & RenderingServer : : multimesh_instance_set_custom_data ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_get_mesh " , " multimesh " ) , & RenderingServer : : multimesh_get_mesh ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_get_aabb " , " multimesh " ) , & RenderingServer : : multimesh_get_aabb ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_get_transform " , " multimesh " , " index " ) , & RenderingServer : : multimesh_instance_get_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_get_transform_2d " , " multimesh " , " index " ) , & RenderingServer : : multimesh_instance_get_transform_2d ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_get_color " , " multimesh " , " index " ) , & RenderingServer : : multimesh_instance_get_color ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_instance_get_custom_data " , " multimesh " , " index " ) , & RenderingServer : : multimesh_instance_get_custom_data ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_set_visible_instances " , " multimesh " , " visible " ) , & RenderingServer : : multimesh_set_visible_instances ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_get_visible_instances " , " multimesh " ) , & RenderingServer : : multimesh_get_visible_instances ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_set_buffer " , " multimesh " , " buffer " ) , & RenderingServer : : multimesh_set_buffer ) ;
ClassDB : : bind_method ( D_METHOD ( " multimesh_get_buffer " , " multimesh " ) , & RenderingServer : : multimesh_get_buffer ) ;
2018-07-21 22:26:14 +02:00
# ifndef _3D_DISABLED
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " immediate_create " ) , & RenderingServer : : immediate_create ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_begin " , " immediate " , " primitive " , " texture " ) , & RenderingServer : : immediate_begin , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_vertex " , " immediate " , " vertex " ) , & RenderingServer : : immediate_vertex ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_vertex_2d " , " immediate " , " vertex " ) , & RenderingServer : : immediate_vertex_2d ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_normal " , " immediate " , " normal " ) , & RenderingServer : : immediate_normal ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_tangent " , " immediate " , " tangent " ) , & RenderingServer : : immediate_tangent ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_color " , " immediate " , " color " ) , & RenderingServer : : immediate_color ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_uv " , " immediate " , " tex_uv " ) , & RenderingServer : : immediate_uv ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_uv2 " , " immediate " , " tex_uv " ) , & RenderingServer : : immediate_uv2 ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_end " , " immediate " ) , & RenderingServer : : immediate_end ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_clear " , " immediate " ) , & RenderingServer : : immediate_clear ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_set_material " , " immediate " , " material " ) , & RenderingServer : : immediate_set_material ) ;
ClassDB : : bind_method ( D_METHOD ( " immediate_get_material " , " immediate " ) , & RenderingServer : : immediate_get_material ) ;
2018-07-21 22:26:14 +02:00
# endif
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
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " skeleton_create " ) , & RenderingServer : : skeleton_create ) ;
ClassDB : : bind_method ( D_METHOD ( " skeleton_allocate " , " skeleton " , " bones " , " is_2d_skeleton " ) , & RenderingServer : : skeleton_allocate , DEFVAL ( false ) ) ;
ClassDB : : bind_method ( D_METHOD ( " skeleton_get_bone_count " , " skeleton " ) , & RenderingServer : : skeleton_get_bone_count ) ;
ClassDB : : bind_method ( D_METHOD ( " skeleton_bone_set_transform " , " skeleton " , " bone " , " transform " ) , & RenderingServer : : skeleton_bone_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " skeleton_bone_get_transform " , " skeleton " , " bone " ) , & RenderingServer : : skeleton_bone_get_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " skeleton_bone_set_transform_2d " , " skeleton " , " bone " , " transform " ) , & RenderingServer : : skeleton_bone_set_transform_2d ) ;
ClassDB : : bind_method ( D_METHOD ( " skeleton_bone_get_transform_2d " , " skeleton " , " bone " ) , & RenderingServer : : skeleton_bone_get_transform_2d ) ;
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
2018-07-21 22:26:14 +02:00
# ifndef _3D_DISABLED
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " directional_light_create " ) , & RenderingServer : : directional_light_create ) ;
ClassDB : : bind_method ( D_METHOD ( " omni_light_create " ) , & RenderingServer : : omni_light_create ) ;
ClassDB : : bind_method ( D_METHOD ( " spot_light_create " ) , & RenderingServer : : spot_light_create ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_color " , " light " , " color " ) , & RenderingServer : : light_set_color ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_param " , " light " , " param " , " value " ) , & RenderingServer : : light_set_param ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_shadow " , " light " , " enabled " ) , & RenderingServer : : light_set_shadow ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_shadow_color " , " light " , " color " ) , & RenderingServer : : light_set_shadow_color ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_projector " , " light " , " texture " ) , & RenderingServer : : light_set_projector ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_negative " , " light " , " enable " ) , & RenderingServer : : light_set_negative ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_cull_mask " , " light " , " mask " ) , & RenderingServer : : light_set_cull_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " light_set_reverse_cull_face_mode " , " light " , " enabled " ) , & RenderingServer : : light_set_reverse_cull_face_mode ) ;
2020-06-25 15:33:28 +02:00
ClassDB : : bind_method ( D_METHOD ( " light_set_bake_mode " , " light " , " bake_mode " ) , & RenderingServer : : light_set_bake_mode ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " light_omni_set_shadow_mode " , " light " , " mode " ) , & RenderingServer : : light_omni_set_shadow_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " light_directional_set_shadow_mode " , " light " , " mode " ) , & RenderingServer : : light_directional_set_shadow_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " light_directional_set_blend_splits " , " light " , " enable " ) , & RenderingServer : : light_directional_set_blend_splits ) ;
2020-10-22 08:22:53 +02:00
ClassDB : : bind_method ( D_METHOD ( " light_directional_set_sky_only " , " light " , " enable " ) , & RenderingServer : : light_directional_set_sky_only ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " light_directional_set_shadow_depth_range_mode " , " light " , " range_mode " ) , & RenderingServer : : light_directional_set_shadow_depth_range_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_create " ) , & RenderingServer : : reflection_probe_create ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_update_mode " , " probe " , " mode " ) , & RenderingServer : : reflection_probe_set_update_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_intensity " , " probe " , " intensity " ) , & RenderingServer : : reflection_probe_set_intensity ) ;
2020-06-25 15:33:28 +02:00
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_ambient_mode " , " probe " , " mode " ) , & RenderingServer : : reflection_probe_set_ambient_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_ambient_color " , " probe " , " color " ) , & RenderingServer : : reflection_probe_set_ambient_color ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_ambient_energy " , " probe " , " energy " ) , & RenderingServer : : reflection_probe_set_ambient_energy ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_max_distance " , " probe " , " distance " ) , & RenderingServer : : reflection_probe_set_max_distance ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_extents " , " probe " , " extents " ) , & RenderingServer : : reflection_probe_set_extents ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_origin_offset " , " probe " , " offset " ) , & RenderingServer : : reflection_probe_set_origin_offset ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_as_interior " , " probe " , " enable " ) , & RenderingServer : : reflection_probe_set_as_interior ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_enable_box_projection " , " probe " , " enable " ) , & RenderingServer : : reflection_probe_set_enable_box_projection ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_enable_shadows " , " probe " , " enable " ) , & RenderingServer : : reflection_probe_set_enable_shadows ) ;
ClassDB : : bind_method ( D_METHOD ( " reflection_probe_set_cull_mask " , " probe " , " layers " ) , & RenderingServer : : reflection_probe_set_cull_mask ) ;
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
2019-10-03 22:39:08 +02:00
# ifndef _MSC_VER
# warning TODO all giprobe methods need re-binding
# endif
#if 0
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " gi_probe_create " ) , & RenderingServer : : gi_probe_create ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_bounds " , " probe " , " bounds " ) , & RenderingServer : : gi_probe_set_bounds ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_bounds " , " probe " ) , & RenderingServer : : gi_probe_get_bounds ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_cell_size " , " probe " , " range " ) , & RenderingServer : : gi_probe_set_cell_size ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_cell_size " , " probe " ) , & RenderingServer : : gi_probe_get_cell_size ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_to_cell_xform " , " probe " , " xform " ) , & RenderingServer : : gi_probe_set_to_cell_xform ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_to_cell_xform " , " probe " ) , & RenderingServer : : gi_probe_get_to_cell_xform ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_dynamic_data " , " probe " , " data " ) , & RenderingServer : : gi_probe_set_dynamic_data ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_dynamic_data " , " probe " ) , & RenderingServer : : gi_probe_get_dynamic_data ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_dynamic_range " , " probe " , " range " ) , & RenderingServer : : gi_probe_set_dynamic_range ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_dynamic_range " , " probe " ) , & RenderingServer : : gi_probe_get_dynamic_range ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_energy " , " probe " , " energy " ) , & RenderingServer : : gi_probe_set_energy ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_energy " , " probe " ) , & RenderingServer : : gi_probe_get_energy ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_bias " , " probe " , " bias " ) , & RenderingServer : : gi_probe_set_bias ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_bias " , " probe " ) , & RenderingServer : : gi_probe_get_bias ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_normal_bias " , " probe " , " bias " ) , & RenderingServer : : gi_probe_set_normal_bias ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_normal_bias " , " probe " ) , & RenderingServer : : gi_probe_get_normal_bias ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_propagation " , " probe " , " propagation " ) , & RenderingServer : : gi_probe_set_propagation ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_get_propagation " , " probe " ) , & RenderingServer : : gi_probe_get_propagation ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_interior " , " probe " , " enable " ) , & RenderingServer : : gi_probe_set_interior ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_is_interior " , " probe " ) , & RenderingServer : : gi_probe_is_interior ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_set_compress " , " probe " , " enable " ) , & RenderingServer : : gi_probe_set_compress ) ;
ClassDB : : bind_method ( D_METHOD ( " gi_probe_is_compressed " , " probe " ) , & RenderingServer : : gi_probe_is_compressed ) ;
2019-10-03 22:39:08 +02:00
# endif
2020-05-01 14:34:23 +02:00
/*
ClassDB : : bind_method ( D_METHOD ( " lightmap_create() " ) , & RenderingServer : : lightmap_capture_create ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_set_bounds " , " capture " , " bounds " ) , & RenderingServer : : lightmap_capture_set_bounds ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_get_bounds " , " capture " ) , & RenderingServer : : lightmap_capture_get_bounds ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_set_octree " , " capture " , " octree " ) , & RenderingServer : : lightmap_capture_set_octree ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_set_octree_cell_transform " , " capture " , " xform " ) , & RenderingServer : : lightmap_capture_set_octree_cell_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_get_octree_cell_transform " , " capture " ) , & RenderingServer : : lightmap_capture_get_octree_cell_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_set_octree_cell_subdiv " , " capture " , " subdiv " ) , & RenderingServer : : lightmap_capture_set_octree_cell_subdiv ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_get_octree_cell_subdiv " , " capture " ) , & RenderingServer : : lightmap_capture_get_octree_cell_subdiv ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_get_octree " , " capture " ) , & RenderingServer : : lightmap_capture_get_octree ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_set_energy " , " capture " , " energy " ) , & RenderingServer : : lightmap_capture_set_energy ) ;
ClassDB : : bind_method ( D_METHOD ( " lightmap_capture_get_energy " , " capture " ) , & RenderingServer : : lightmap_capture_get_energy ) ;
2020-05-01 14:34:23 +02:00
*/
2018-07-21 22:26:14 +02:00
# endif
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " particles_create " ) , & RenderingServer : : particles_create ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_emitting " , " particles " , " emitting " ) , & RenderingServer : : particles_set_emitting ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_get_emitting " , " particles " ) , & RenderingServer : : particles_get_emitting ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_amount " , " particles " , " amount " ) , & RenderingServer : : particles_set_amount ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_lifetime " , " particles " , " lifetime " ) , & RenderingServer : : particles_set_lifetime ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_one_shot " , " particles " , " one_shot " ) , & RenderingServer : : particles_set_one_shot ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_pre_process_time " , " particles " , " time " ) , & RenderingServer : : particles_set_pre_process_time ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_explosiveness_ratio " , " particles " , " ratio " ) , & RenderingServer : : particles_set_explosiveness_ratio ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_randomness_ratio " , " particles " , " ratio " ) , & RenderingServer : : particles_set_randomness_ratio ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_custom_aabb " , " particles " , " aabb " ) , & RenderingServer : : particles_set_custom_aabb ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_speed_scale " , " particles " , " scale " ) , & RenderingServer : : particles_set_speed_scale ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_use_local_coordinates " , " particles " , " enable " ) , & RenderingServer : : particles_set_use_local_coordinates ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_process_material " , " particles " , " material " ) , & RenderingServer : : particles_set_process_material ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_fixed_fps " , " particles " , " fps " ) , & RenderingServer : : particles_set_fixed_fps ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_fractional_delta " , " particles " , " enable " ) , & RenderingServer : : particles_set_fractional_delta ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_is_inactive " , " particles " ) , & RenderingServer : : particles_is_inactive ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_request_process " , " particles " ) , & RenderingServer : : particles_request_process ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_restart " , " particles " ) , & RenderingServer : : particles_restart ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_draw_order " , " particles " , " order " ) , & RenderingServer : : particles_set_draw_order ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_draw_passes " , " particles " , " count " ) , & RenderingServer : : particles_set_draw_passes ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_draw_pass_mesh " , " particles " , " pass " , " mesh " ) , & RenderingServer : : particles_set_draw_pass_mesh ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_get_current_aabb " , " particles " ) , & RenderingServer : : particles_get_current_aabb ) ;
ClassDB : : bind_method ( D_METHOD ( " particles_set_emission_transform " , " particles " , " transform " ) , & RenderingServer : : particles_set_emission_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_create " ) , & RenderingServer : : camera_create ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_perspective " , " camera " , " fovy_degrees " , " z_near " , " z_far " ) , & RenderingServer : : camera_set_perspective ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_orthogonal " , " camera " , " size " , " z_near " , " z_far " ) , & RenderingServer : : camera_set_orthogonal ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_frustum " , " camera " , " size " , " offset " , " z_near " , " z_far " ) , & RenderingServer : : camera_set_frustum ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_transform " , " camera " , " transform " ) , & RenderingServer : : camera_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_cull_mask " , " camera " , " layers " ) , & RenderingServer : : camera_set_cull_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_environment " , " camera " , " env " ) , & RenderingServer : : camera_set_environment ) ;
ClassDB : : bind_method ( D_METHOD ( " camera_set_use_vertical_aspect " , " camera " , " enable " ) , & RenderingServer : : camera_set_use_vertical_aspect ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_create " ) , & RenderingServer : : viewport_create ) ;
2020-04-08 16:47:36 +02:00
ClassDB : : bind_method ( D_METHOD ( " viewport_set_use_xr " , " viewport " , " use_xr " ) , & RenderingServer : : viewport_set_use_xr ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " viewport_set_size " , " viewport " , " width " , " height " ) , & RenderingServer : : viewport_set_size ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_active " , " viewport " , " active " ) , & RenderingServer : : viewport_set_active ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_parent_viewport " , " viewport " , " parent_viewport " ) , & RenderingServer : : viewport_set_parent_viewport ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_attach_to_screen " , " viewport " , " rect " , " screen " ) , & RenderingServer : : viewport_attach_to_screen , DEFVAL ( Rect2 ( ) ) , DEFVAL ( DisplayServer : : MAIN_WINDOW_ID ) ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_render_direct_to_screen " , " viewport " , " enabled " ) , & RenderingServer : : viewport_set_render_direct_to_screen ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_update_mode " , " viewport " , " update_mode " ) , & RenderingServer : : viewport_set_update_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_clear_mode " , " viewport " , " clear_mode " ) , & RenderingServer : : viewport_set_clear_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_get_texture " , " viewport " ) , & RenderingServer : : viewport_get_texture ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_hide_scenario " , " viewport " , " hidden " ) , & RenderingServer : : viewport_set_hide_scenario ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_hide_canvas " , " viewport " , " hidden " ) , & RenderingServer : : viewport_set_hide_canvas ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_disable_environment " , " viewport " , " disabled " ) , & RenderingServer : : viewport_set_disable_environment ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_attach_camera " , " viewport " , " camera " ) , & RenderingServer : : viewport_attach_camera ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_scenario " , " viewport " , " scenario " ) , & RenderingServer : : viewport_set_scenario ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_attach_canvas " , " viewport " , " canvas " ) , & RenderingServer : : viewport_attach_canvas ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_remove_canvas " , " viewport " , " canvas " ) , & RenderingServer : : viewport_remove_canvas ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_canvas_transform " , " viewport " , " canvas " , " offset " ) , & RenderingServer : : viewport_set_canvas_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_transparent_background " , " viewport " , " enabled " ) , & RenderingServer : : viewport_set_transparent_background ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_global_canvas_transform " , " viewport " , " transform " ) , & RenderingServer : : viewport_set_global_canvas_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_canvas_stacking " , " viewport " , " canvas " , " layer " , " sublayer " ) , & RenderingServer : : viewport_set_canvas_stacking ) ;
2021-01-24 20:00:20 +01:00
ClassDB : : bind_method ( D_METHOD ( " viewport_set_shadow_atlas_size " , " viewport " , " size " , " use_16_bits " ) , & RenderingServer : : viewport_set_shadow_atlas_size , DEFVAL ( false ) ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " viewport_set_shadow_atlas_quadrant_subdivision " , " viewport " , " quadrant " , " subdivision " ) , & RenderingServer : : viewport_set_shadow_atlas_quadrant_subdivision ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_msaa " , " viewport " , " msaa " ) , & RenderingServer : : viewport_set_msaa ) ;
2020-10-19 22:23:36 +02:00
ClassDB : : bind_method ( D_METHOD ( " viewport_set_use_debanding " , " viewport " , " enable " ) , & RenderingServer : : viewport_set_use_debanding ) ;
2020-04-20 23:34:47 +02:00
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " viewport_get_render_info " , " viewport " , " info " ) , & RenderingServer : : viewport_get_render_info ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_debug_draw " , " viewport " , " draw " ) , & RenderingServer : : viewport_set_debug_draw ) ;
2020-12-24 00:40:19 +01:00
ClassDB : : bind_method ( D_METHOD ( " viewport_set_measure_render_time " , " viewport " , " enable " ) , & RenderingServer : : viewport_set_measure_render_time ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_get_measured_render_time_cpu " , " viewport " ) , & RenderingServer : : viewport_get_measured_render_time_cpu ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_get_measured_render_time_gpu " , " viewport " ) , & RenderingServer : : viewport_get_measured_render_time_gpu ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " environment_create " ) , & RenderingServer : : environment_create ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_background " , " env " , " bg " ) , & RenderingServer : : environment_set_background ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_sky " , " env " , " sky " ) , & RenderingServer : : environment_set_sky ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_sky_custom_fov " , " env " , " scale " ) , & RenderingServer : : environment_set_sky_custom_fov ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_sky_orientation " , " env " , " orientation " ) , & RenderingServer : : environment_set_sky_orientation ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_bg_color " , " env " , " color " ) , & RenderingServer : : environment_set_bg_color ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_bg_energy " , " env " , " energy " ) , & RenderingServer : : environment_set_bg_energy ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_canvas_max_layer " , " env " , " max_layer " ) , & RenderingServer : : environment_set_canvas_max_layer ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_ambient_light " , " env " , " color " , " ambient " , " energy " , " sky_contibution " , " reflection_source " , " ao_color " ) , & RenderingServer : : environment_set_ambient_light , DEFVAL ( RS : : ENV_AMBIENT_SOURCE_BG ) , DEFVAL ( 1.0 ) , DEFVAL ( 0.0 ) , DEFVAL ( RS : : ENV_REFLECTION_SOURCE_BG ) , DEFVAL ( Color ( ) ) ) ;
2020-09-20 00:02:32 +02:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_glow " , " env " , " enable " , " levels " , " intensity " , " strength " , " mix " , " bloom_threshold " , " blend_mode " , " hdr_bleed_threshold " , " hdr_bleed_scale " , " hdr_luminance_cap " ) , & RenderingServer : : environment_set_glow ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_tonemap " , " env " , " tone_mapper " , " exposure " , " white " , " auto_exposure " , " min_luminance " , " max_luminance " , " auto_exp_speed " , " auto_exp_grey " ) , & RenderingServer : : environment_set_tonemap ) ;
2020-11-23 02:51:31 +01:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_adjustment " , " env " , " enable " , " brightness " , " contrast " , " saturation " , " use_1d_color_correction " , " color_correction " ) , & RenderingServer : : environment_set_adjustment ) ;
2020-04-03 01:38:48 +02:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_ssr " , " env " , " enable " , " max_steps " , " fade_in " , " fade_out " , " depth_tolerance " ) , & RenderingServer : : environment_set_ssr ) ;
2020-12-08 06:37:09 +01:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_ssao " , " env " , " enable " , " radius " , " intensity " , " power " , " detail " , " horizon " , " sharpness " , " light_affect " , " ao_channel_affect " ) , & RenderingServer : : environment_set_ssao ) ;
2020-08-21 07:48:04 +02:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_fog " , " env " , " enable " , " light_color " , " light_energy " , " sun_scatter " , " density " , " height " , " height_density " , " aerial_perspective " ) , & RenderingServer : : environment_set_fog ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " scenario_create " ) , & RenderingServer : : scenario_create ) ;
ClassDB : : bind_method ( D_METHOD ( " scenario_set_debug " , " scenario " , " debug_mode " ) , & RenderingServer : : scenario_set_debug ) ;
ClassDB : : bind_method ( D_METHOD ( " scenario_set_environment " , " scenario " , " environment " ) , & RenderingServer : : scenario_set_environment ) ;
ClassDB : : bind_method ( D_METHOD ( " scenario_set_fallback_environment " , " scenario " , " environment " ) , & RenderingServer : : scenario_set_fallback_environment ) ;
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
2018-07-21 22:26:14 +02:00
# ifndef _3D_DISABLED
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " instance_create2 " , " base " , " scenario " ) , & RenderingServer : : instance_create2 ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_create " ) , & RenderingServer : : instance_create ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_base " , " instance " , " base " ) , & RenderingServer : : instance_set_base ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_scenario " , " instance " , " scenario " ) , & RenderingServer : : instance_set_scenario ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_layer_mask " , " instance " , " mask " ) , & RenderingServer : : instance_set_layer_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_transform " , " instance " , " transform " ) , & RenderingServer : : instance_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_attach_object_instance_id " , " instance " , " id " ) , & RenderingServer : : instance_attach_object_instance_id ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_blend_shape_weight " , " instance " , " shape " , " weight " ) , & RenderingServer : : instance_set_blend_shape_weight ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_surface_material " , " instance " , " surface " , " material " ) , & RenderingServer : : instance_set_surface_material ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_visible " , " instance " , " visible " ) , & RenderingServer : : instance_set_visible ) ;
2020-05-01 14:34:23 +02:00
// ClassDB::bind_method(D_METHOD("instance_set_use_lightmap", "instance", "lightmap_instance", "lightmap"), &RenderingServer::instance_set_use_lightmap);
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " instance_set_custom_aabb " , " instance " , " aabb " ) , & RenderingServer : : instance_set_custom_aabb ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_attach_skeleton " , " instance " , " skeleton " ) , & RenderingServer : : instance_attach_skeleton ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_exterior " , " instance " , " enabled " ) , & RenderingServer : : instance_set_exterior ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_set_extra_visibility_margin " , " instance " , " margin " ) , & RenderingServer : : instance_set_extra_visibility_margin ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_geometry_set_flag " , " instance " , " flag " , " enabled " ) , & RenderingServer : : instance_geometry_set_flag ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_geometry_set_cast_shadows_setting " , " instance " , " shadow_casting_setting " ) , & RenderingServer : : instance_geometry_set_cast_shadows_setting ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_geometry_set_material_override " , " instance " , " material " ) , & RenderingServer : : instance_geometry_set_material_override ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_geometry_set_draw_range " , " instance " , " min " , " max " , " min_margin " , " max_margin " ) , & RenderingServer : : instance_geometry_set_draw_range ) ;
ClassDB : : bind_method ( D_METHOD ( " instance_geometry_set_as_instance_lod " , " instance " , " as_lod_of_instance " ) , & RenderingServer : : instance_geometry_set_as_instance_lod ) ;
ClassDB : : bind_method ( D_METHOD ( " instances_cull_aabb " , " aabb " , " scenario " ) , & RenderingServer : : _instances_cull_aabb_bind , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " instances_cull_ray " , " from " , " to " , " scenario " ) , & RenderingServer : : _instances_cull_ray_bind , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " instances_cull_convex " , " convex " , " scenario " ) , & RenderingServer : : _instances_cull_convex_bind , DEFVAL ( RID ( ) ) ) ;
2018-07-21 22:26:14 +02:00
# endif
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " canvas_create " ) , & RenderingServer : : canvas_create ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_set_item_mirroring " , " canvas " , " item " , " mirroring " ) , & RenderingServer : : canvas_set_item_mirroring ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_set_modulate " , " canvas " , " color " ) , & RenderingServer : : canvas_set_modulate ) ;
2019-06-22 18:34:26 +02:00
# ifndef _MSC_VER
2019-06-25 03:24:07 +02:00
# warning TODO method bindings need to be fixed
2019-06-22 18:34:26 +02:00
# endif
2019-06-25 03:24:07 +02:00
#if 0
2017-10-20 00:24:49 +02:00
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " canvas_item_create " ) , & RenderingServer : : canvas_item_create ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_parent " , " item " , " parent " ) , & RenderingServer : : canvas_item_set_parent ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_visible " , " item " , " visible " ) , & RenderingServer : : canvas_item_set_visible ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_light_mask " , " item " , " mask " ) , & RenderingServer : : canvas_item_set_light_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_transform " , " item " , " transform " ) , & RenderingServer : : canvas_item_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_clip " , " item " , " clip " ) , & RenderingServer : : canvas_item_set_clip ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_distance_field_mode " , " item " , " enabled " ) , & RenderingServer : : canvas_item_set_distance_field_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_custom_rect " , " item " , " use_custom_rect " , " rect " ) , & RenderingServer : : canvas_item_set_custom_rect , DEFVAL ( Rect2 ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_modulate " , " item " , " color " ) , & RenderingServer : : canvas_item_set_modulate ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_self_modulate " , " item " , " color " ) , & RenderingServer : : canvas_item_set_self_modulate ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_draw_behind_parent " , " item " , " enabled " ) , & RenderingServer : : canvas_item_set_draw_behind_parent ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_line " , " item " , " from " , " to " , " color " , " width " , " antialiased " ) , & RenderingServer : : canvas_item_add_line , DEFVAL ( 1.0 ) , DEFVAL ( false ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_polyline " , " item " , " points " , " colors " , " width " , " antialiased " ) , & RenderingServer : : canvas_item_add_polyline , DEFVAL ( 1.0 ) , DEFVAL ( false ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_rect " , " item " , " rect " , " color " ) , & RenderingServer : : canvas_item_add_rect ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_circle " , " item " , " pos " , " radius " , " color " ) , & RenderingServer : : canvas_item_add_circle ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_texture_rect " , " item " , " rect " , " texture " , " tile " , " modulate " , " transpose " , " normal_map " ) , & RenderingServer : : canvas_item_add_texture_rect , DEFVAL ( false ) , DEFVAL ( Color ( 1 , 1 , 1 ) ) , DEFVAL ( false ) , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_texture_rect_region " , " item " , " rect " , " texture " , " src_rect " , " modulate " , " transpose " , " normal_map " , " clip_uv " ) , & RenderingServer : : canvas_item_add_texture_rect_region , DEFVAL ( Color ( 1 , 1 , 1 ) ) , DEFVAL ( false ) , DEFVAL ( RID ( ) ) , DEFVAL ( true ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_nine_patch " , " item " , " rect " , " source " , " texture " , " topleft " , " bottomright " , " x_axis_mode " , " y_axis_mode " , " draw_center " , " modulate " , " normal_map " ) , & RenderingServer : : canvas_item_add_nine_patch , DEFVAL ( NINE_PATCH_STRETCH ) , DEFVAL ( NINE_PATCH_STRETCH ) , DEFVAL ( true ) , DEFVAL ( Color ( 1 , 1 , 1 ) ) , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_primitive " , " item " , " points " , " colors " , " uvs " , " texture " , " width " , " normal_map " ) , & RenderingServer : : canvas_item_add_primitive , DEFVAL ( 1.0 ) , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_polygon " , " item " , " points " , " colors " , " uvs " , " texture " , " normal_map " , " antialiased " ) , & RenderingServer : : canvas_item_add_polygon , DEFVAL ( Vector < Point2 > ( ) ) , DEFVAL ( RID ( ) ) , DEFVAL ( RID ( ) ) , DEFVAL ( false ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_triangle_array " , " item " , " indices " , " points " , " colors " , " uvs " , " bones " , " weights " , " texture " , " count " , " normal_map " , " antialiased " ) , & RenderingServer : : canvas_item_add_triangle_array , DEFVAL ( Vector < Point2 > ( ) ) , DEFVAL ( Vector < int > ( ) ) , DEFVAL ( Vector < float > ( ) ) , DEFVAL ( RID ( ) ) , DEFVAL ( - 1 ) , DEFVAL ( RID ( ) ) , DEFVAL ( false ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_mesh " , " item " , " mesh " , " transform " , " modulate " , " texture " , " normal_map " ) , & RenderingServer : : canvas_item_add_mesh , DEFVAL ( Transform2D ( ) ) , DEFVAL ( Color ( 1 , 1 , 1 ) ) , DEFVAL ( RID ( ) ) , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_multimesh " , " item " , " mesh " , " texture " , " normal_map " ) , & RenderingServer : : canvas_item_add_multimesh , DEFVAL ( RID ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_particles " , " item " , " particles " , " texture " , " normal_map " ) , & RenderingServer : : canvas_item_add_particles ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_set_transform " , " item " , " transform " ) , & RenderingServer : : canvas_item_add_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_add_clip_ignore " , " item " , " ignore " ) , & RenderingServer : : canvas_item_add_clip_ignore ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_sort_children_by_y " , " item " , " enabled " ) , & RenderingServer : : canvas_item_set_sort_children_by_y ) ;
2019-06-25 03:24:07 +02:00
# endif
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_z_index " , " item " , " z_index " ) , & RenderingServer : : canvas_item_set_z_index ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_z_as_relative_to_parent " , " item " , " enabled " ) , & RenderingServer : : canvas_item_set_z_as_relative_to_parent ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_copy_to_backbuffer " , " item " , " enabled " , " rect " ) , & RenderingServer : : canvas_item_set_copy_to_backbuffer ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_clear " , " item " ) , & RenderingServer : : canvas_item_clear ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_draw_index " , " item " , " index " ) , & RenderingServer : : canvas_item_set_draw_index ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_material " , " item " , " material " ) , & RenderingServer : : canvas_item_set_material ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_item_set_use_parent_material " , " item " , " enabled " ) , & RenderingServer : : canvas_item_set_use_parent_material ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_create " ) , & RenderingServer : : canvas_light_create ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_attach_to_canvas " , " light " , " canvas " ) , & RenderingServer : : canvas_light_attach_to_canvas ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_enabled " , " light " , " enabled " ) , & RenderingServer : : canvas_light_set_enabled ) ;
2020-11-03 20:51:53 +01:00
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_texture_scale " , " light " , " scale " ) , & RenderingServer : : canvas_light_set_texture_scale ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_transform " , " light " , " transform " ) , & RenderingServer : : canvas_light_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_texture " , " light " , " texture " ) , & RenderingServer : : canvas_light_set_texture ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_texture_offset " , " light " , " offset " ) , & RenderingServer : : canvas_light_set_texture_offset ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_color " , " light " , " color " ) , & RenderingServer : : canvas_light_set_color ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_height " , " light " , " height " ) , & RenderingServer : : canvas_light_set_height ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_energy " , " light " , " energy " ) , & RenderingServer : : canvas_light_set_energy ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_z_range " , " light " , " min_z " , " max_z " ) , & RenderingServer : : canvas_light_set_z_range ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_layer_range " , " light " , " min_layer " , " max_layer " ) , & RenderingServer : : canvas_light_set_layer_range ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_item_cull_mask " , " light " , " mask " ) , & RenderingServer : : canvas_light_set_item_cull_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_item_shadow_cull_mask " , " light " , " mask " ) , & RenderingServer : : canvas_light_set_item_shadow_cull_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_mode " , " light " , " mode " ) , & RenderingServer : : canvas_light_set_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_shadow_enabled " , " light " , " enabled " ) , & RenderingServer : : canvas_light_set_shadow_enabled ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_shadow_filter " , " light " , " filter " ) , & RenderingServer : : canvas_light_set_shadow_filter ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_shadow_color " , " light " , " color " ) , & RenderingServer : : canvas_light_set_shadow_color ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_set_shadow_smooth " , " light " , " smooth " ) , & RenderingServer : : canvas_light_set_shadow_smooth ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_occluder_create " ) , & RenderingServer : : canvas_light_occluder_create ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_occluder_attach_to_canvas " , " occluder " , " canvas " ) , & RenderingServer : : canvas_light_occluder_attach_to_canvas ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_occluder_set_enabled " , " occluder " , " enabled " ) , & RenderingServer : : canvas_light_occluder_set_enabled ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_occluder_set_polygon " , " occluder " , " polygon " ) , & RenderingServer : : canvas_light_occluder_set_polygon ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_occluder_set_transform " , " occluder " , " transform " ) , & RenderingServer : : canvas_light_occluder_set_transform ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_light_occluder_set_light_mask " , " occluder " , " mask " ) , & RenderingServer : : canvas_light_occluder_set_light_mask ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_occluder_polygon_create " ) , & RenderingServer : : canvas_occluder_polygon_create ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_occluder_polygon_set_shape " , " occluder_polygon " , " shape " , " closed " ) , & RenderingServer : : canvas_occluder_polygon_set_shape ) ;
ClassDB : : bind_method ( D_METHOD ( " canvas_occluder_polygon_set_cull_mode " , " occluder_polygon " , " mode " ) , & RenderingServer : : canvas_occluder_polygon_set_cull_mode ) ;
2020-04-17 04:52:00 +02:00
ClassDB : : bind_method ( D_METHOD ( " global_variable_add " , " name " , " type " , " default_value " ) , & RenderingServer : : global_variable_add ) ;
ClassDB : : bind_method ( D_METHOD ( " global_variable_remove " , " name " ) , & RenderingServer : : global_variable_remove ) ;
ClassDB : : bind_method ( D_METHOD ( " global_variable_get_list " ) , & RenderingServer : : global_variable_get_list ) ;
ClassDB : : bind_method ( D_METHOD ( " global_variable_set " , " name " , " value " ) , & RenderingServer : : global_variable_set ) ;
ClassDB : : bind_method ( D_METHOD ( " global_variable_get " , " name " ) , & RenderingServer : : global_variable_get ) ;
ClassDB : : bind_method ( D_METHOD ( " global_variable_get_type " , " name " ) , & RenderingServer : : global_variable_get_type ) ;
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " black_bars_set_margins " , " left " , " top " , " right " , " bottom " ) , & RenderingServer : : black_bars_set_margins ) ;
ClassDB : : bind_method ( D_METHOD ( " black_bars_set_images " , " left " , " top " , " right " , " bottom " ) , & RenderingServer : : black_bars_set_images ) ;
ClassDB : : bind_method ( D_METHOD ( " free_rid " , " rid " ) , & RenderingServer : : free ) ; // shouldn't conflict with Object::free()
ClassDB : : bind_method ( D_METHOD ( " request_frame_drawn_callback " , " where " , " method " , " userdata " ) , & RenderingServer : : request_frame_drawn_callback ) ;
ClassDB : : bind_method ( D_METHOD ( " has_changed " ) , & RenderingServer : : has_changed ) ;
ClassDB : : bind_method ( D_METHOD ( " init " ) , & RenderingServer : : init ) ;
ClassDB : : bind_method ( D_METHOD ( " finish " ) , & RenderingServer : : finish ) ;
ClassDB : : bind_method ( D_METHOD ( " get_render_info " , " info " ) , & RenderingServer : : get_render_info ) ;
ClassDB : : bind_method ( D_METHOD ( " get_video_adapter_name " ) , & RenderingServer : : get_video_adapter_name ) ;
ClassDB : : bind_method ( D_METHOD ( " get_video_adapter_vendor " ) , & RenderingServer : : get_video_adapter_vendor ) ;
2018-07-21 22:26:14 +02:00
# ifndef _3D_DISABLED
2017-10-20 00:24:49 +02:00
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " make_sphere_mesh " , " latitudes " , " longitudes " , " radius " ) , & RenderingServer : : make_sphere_mesh ) ;
ClassDB : : bind_method ( D_METHOD ( " get_test_cube " ) , & RenderingServer : : get_test_cube ) ;
2018-07-21 22:26:14 +02:00
# endif
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " get_test_texture " ) , & RenderingServer : : get_test_texture ) ;
ClassDB : : bind_method ( D_METHOD ( " get_white_texture " ) , & RenderingServer : : get_white_texture ) ;
2017-10-20 00:24:49 +02:00
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " set_boot_image " , " image " , " color " , " scale " , " use_filter " ) , & RenderingServer : : set_boot_image , DEFVAL ( true ) ) ;
ClassDB : : bind_method ( D_METHOD ( " set_default_clear_color " , " color " ) , & RenderingServer : : set_default_clear_color ) ;
2017-10-20 00:24:49 +02:00
2020-03-27 19:21:27 +01:00
ClassDB : : bind_method ( D_METHOD ( " has_feature " , " feature " ) , & RenderingServer : : has_feature ) ;
ClassDB : : bind_method ( D_METHOD ( " has_os_feature " , " feature " ) , & RenderingServer : : has_os_feature ) ;
ClassDB : : bind_method ( D_METHOD ( " set_debug_generate_wireframes " , " generate " ) , & RenderingServer : : set_debug_generate_wireframes ) ;
2017-10-20 00:24:49 +02:00
2020-06-14 19:06:48 +02:00
ClassDB : : bind_method ( D_METHOD ( " is_render_loop_enabled " ) , & RenderingServer : : is_render_loop_enabled ) ;
ClassDB : : bind_method ( D_METHOD ( " set_render_loop_enabled " , " enabled " ) , & RenderingServer : : set_render_loop_enabled ) ;
2020-12-24 04:13:52 +01:00
ClassDB : : bind_method ( D_METHOD ( " get_frame_setup_time_cpu " ) , & RenderingServer : : get_frame_setup_time_cpu ) ;
2020-06-14 19:06:48 +02:00
ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL , " render_loop_enabled " ) , " set_render_loop_enabled " , " is_render_loop_enabled " ) ;
2017-10-20 00:24:49 +02:00
BIND_CONSTANT ( NO_INDEX_ARRAY ) ;
BIND_CONSTANT ( ARRAY_WEIGHTS_SIZE ) ;
BIND_CONSTANT ( CANVAS_ITEM_Z_MIN ) ;
BIND_CONSTANT ( CANVAS_ITEM_Z_MAX ) ;
BIND_CONSTANT ( MAX_GLOW_LEVELS ) ;
BIND_CONSTANT ( MAX_CURSORS ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( TEXTURE_LAYERED_2D_ARRAY ) ;
BIND_ENUM_CONSTANT ( TEXTURE_LAYERED_CUBEMAP ) ;
BIND_ENUM_CONSTANT ( TEXTURE_LAYERED_CUBEMAP_ARRAY ) ;
2019-06-11 20:43:37 +02:00
BIND_ENUM_CONSTANT ( CUBEMAP_LAYER_LEFT ) ;
BIND_ENUM_CONSTANT ( CUBEMAP_LAYER_RIGHT ) ;
BIND_ENUM_CONSTANT ( CUBEMAP_LAYER_BOTTOM ) ;
BIND_ENUM_CONSTANT ( CUBEMAP_LAYER_TOP ) ;
BIND_ENUM_CONSTANT ( CUBEMAP_LAYER_FRONT ) ;
BIND_ENUM_CONSTANT ( CUBEMAP_LAYER_BACK ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( SHADER_SPATIAL ) ;
BIND_ENUM_CONSTANT ( SHADER_CANVAS_ITEM ) ;
BIND_ENUM_CONSTANT ( SHADER_PARTICLES ) ;
2019-09-15 11:58:38 +02:00
BIND_ENUM_CONSTANT ( SHADER_SKY ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( SHADER_MAX ) ;
2020-04-20 11:48:00 +02:00
BIND_CONSTANT ( MATERIAL_RENDER_PRIORITY_MIN ) ;
BIND_CONSTANT ( MATERIAL_RENDER_PRIORITY_MAX ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( ARRAY_VERTEX ) ;
BIND_ENUM_CONSTANT ( ARRAY_NORMAL ) ;
BIND_ENUM_CONSTANT ( ARRAY_TANGENT ) ;
BIND_ENUM_CONSTANT ( ARRAY_COLOR ) ;
BIND_ENUM_CONSTANT ( ARRAY_TEX_UV ) ;
BIND_ENUM_CONSTANT ( ARRAY_TEX_UV2 ) ;
2020-12-04 15:54:48 +01:00
BIND_ENUM_CONSTANT ( ARRAY_CUSTOM0 ) ;
BIND_ENUM_CONSTANT ( ARRAY_CUSTOM1 ) ;
BIND_ENUM_CONSTANT ( ARRAY_CUSTOM2 ) ;
BIND_ENUM_CONSTANT ( ARRAY_CUSTOM3 ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( ARRAY_BONES ) ;
BIND_ENUM_CONSTANT ( ARRAY_WEIGHTS ) ;
BIND_ENUM_CONSTANT ( ARRAY_INDEX ) ;
BIND_ENUM_CONSTANT ( ARRAY_MAX ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_VERTEX ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_NORMAL ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_TANGENT ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_COLOR ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_TEX_UV ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_TEX_UV2 ) ;
2020-12-04 15:54:48 +01:00
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM0 ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM1 ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM2 ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM3 ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_BONES ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_WEIGHTS ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_INDEX ) ;
2019-08-19 00:40:52 +02:00
2020-12-04 15:54:48 +01:00
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_BLEND_SHAPE_MASK ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM_BASE ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM0_SHIFT ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM1_SHIFT ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM2_SHIFT ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM3_SHIFT ) ;
BIND_ENUM_CONSTANT ( ARRAY_FORMAT_CUSTOM_MASK ) ;
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_FLAGS_BASE ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( ARRAY_FLAG_USE_2D_VERTICES ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( ARRAY_FLAG_USE_DYNAMIC_UPDATE ) ;
2020-12-04 15:54:48 +01:00
BIND_ENUM_CONSTANT ( ARRAY_FLAG_USE_8_BONE_WEIGHTS ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( PRIMITIVE_POINTS ) ;
BIND_ENUM_CONSTANT ( PRIMITIVE_LINES ) ;
2019-08-19 00:40:52 +02:00
BIND_ENUM_CONSTANT ( PRIMITIVE_LINE_STRIP ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( PRIMITIVE_TRIANGLES ) ;
2019-08-19 00:40:52 +02:00
BIND_ENUM_CONSTANT ( PRIMITIVE_TRIANGLE_STRIP ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( PRIMITIVE_MAX ) ;
BIND_ENUM_CONSTANT ( BLEND_SHAPE_MODE_NORMALIZED ) ;
BIND_ENUM_CONSTANT ( BLEND_SHAPE_MODE_RELATIVE ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( MULTIMESH_TRANSFORM_2D ) ;
BIND_ENUM_CONSTANT ( MULTIMESH_TRANSFORM_3D ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( LIGHT_DIRECTIONAL ) ;
BIND_ENUM_CONSTANT ( LIGHT_OMNI ) ;
BIND_ENUM_CONSTANT ( LIGHT_SPOT ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_ENERGY ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_INDIRECT_ENERGY ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SPECULAR ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_RANGE ) ;
2020-04-17 01:05:25 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SIZE ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_ATTENUATION ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SPOT_ANGLE ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SPOT_ATTENUATION ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_MAX_DISTANCE ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET ) ;
2019-09-07 19:38:17 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_FADE_START ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_NORMAL_BIAS ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_BIAS ) ;
2020-04-17 01:05:25 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_PANCAKE_SIZE ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_SHADOW_BLUR ) ;
BIND_ENUM_CONSTANT ( LIGHT_PARAM_TRANSMITTANCE_BIAS ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( LIGHT_PARAM_MAX ) ;
2020-07-01 14:18:13 +02:00
BIND_ENUM_CONSTANT ( LIGHT_BAKE_DISABLED ) ;
BIND_ENUM_CONSTANT ( LIGHT_BAKE_DYNAMIC ) ;
BIND_ENUM_CONSTANT ( LIGHT_BAKE_STATIC ) ;
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
BIND_ENUM_CONSTANT ( LIGHT_OMNI_SHADOW_DUAL_PARABOLOID ) ;
BIND_ENUM_CONSTANT ( LIGHT_OMNI_SHADOW_CUBE ) ;
BIND_ENUM_CONSTANT ( LIGHT_DIRECTIONAL_SHADOW_ORTHOGONAL ) ;
BIND_ENUM_CONSTANT ( LIGHT_DIRECTIONAL_SHADOW_PARALLEL_2_SPLITS ) ;
BIND_ENUM_CONSTANT ( LIGHT_DIRECTIONAL_SHADOW_PARALLEL_4_SPLITS ) ;
2020-02-12 09:59:06 +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
BIND_ENUM_CONSTANT ( LIGHT_DIRECTIONAL_SHADOW_DEPTH_RANGE_STABLE ) ;
BIND_ENUM_CONSTANT ( LIGHT_DIRECTIONAL_SHADOW_DEPTH_RANGE_OPTIMIZED ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( REFLECTION_PROBE_UPDATE_ONCE ) ;
BIND_ENUM_CONSTANT ( REFLECTION_PROBE_UPDATE_ALWAYS ) ;
2020-07-01 14:18:13 +02:00
BIND_ENUM_CONSTANT ( REFLECTION_PROBE_AMBIENT_DISABLED ) ;
BIND_ENUM_CONSTANT ( REFLECTION_PROBE_AMBIENT_ENVIRONMENT ) ;
BIND_ENUM_CONSTANT ( REFLECTION_PROBE_AMBIENT_COLOR ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( DECAL_TEXTURE_ALBEDO ) ;
BIND_ENUM_CONSTANT ( DECAL_TEXTURE_NORMAL ) ;
BIND_ENUM_CONSTANT ( DECAL_TEXTURE_ORM ) ;
BIND_ENUM_CONSTANT ( DECAL_TEXTURE_EMISSION ) ;
BIND_ENUM_CONSTANT ( DECAL_TEXTURE_MAX ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( PARTICLES_DRAW_ORDER_INDEX ) ;
BIND_ENUM_CONSTANT ( PARTICLES_DRAW_ORDER_LIFETIME ) ;
BIND_ENUM_CONSTANT ( PARTICLES_DRAW_ORDER_VIEW_DEPTH ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_UPDATE_DISABLED ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_UPDATE_ONCE ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_UPDATE_WHEN_VISIBLE ) ;
2020-03-14 17:06:39 +01:00
BIND_ENUM_CONSTANT ( VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_UPDATE_ALWAYS ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_CLEAR_ALWAYS ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_CLEAR_NEVER ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_CLEAR_ONLY_NEXT_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_MSAA_DISABLED ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_MSAA_2X ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_MSAA_4X ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_MSAA_8X ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_MSAA_16X ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_MSAA_MAX ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_SCREEN_SPACE_AA_DISABLED ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_SCREEN_SPACE_AA_FXAA ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_SCREEN_SPACE_AA_MAX ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_VERTICES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_MATERIAL_CHANGES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_RENDER_INFO_MAX ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_DISABLED ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_UNSHADED ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_LIGHTING ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_OVERDRAW ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_WIREFRAME ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_NORMAL_BUFFER ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_GI_PROBE_ALBEDO ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_GI_PROBE_LIGHTING ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_GI_PROBE_EMISSION ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_SHADOW_ATLAS ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_SCENE_LUMINANCE ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_SSAO ) ;
2020-04-08 03:51:52 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_PSSM_SPLITS ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_DECAL_ATLAS ) ;
2020-06-25 15:33:28 +02:00
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_SDFGI ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_SDFGI_PROBES ) ;
BIND_ENUM_CONSTANT ( VIEWPORT_DEBUG_DRAW_GI_BUFFER ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( SKY_MODE_QUALITY ) ;
BIND_ENUM_CONSTANT ( SKY_MODE_REALTIME ) ;
BIND_ENUM_CONSTANT ( ENV_BG_CLEAR_COLOR ) ;
BIND_ENUM_CONSTANT ( ENV_BG_COLOR ) ;
BIND_ENUM_CONSTANT ( ENV_BG_SKY ) ;
BIND_ENUM_CONSTANT ( ENV_BG_CANVAS ) ;
BIND_ENUM_CONSTANT ( ENV_BG_KEEP ) ;
BIND_ENUM_CONSTANT ( ENV_BG_CAMERA_FEED ) ;
BIND_ENUM_CONSTANT ( ENV_BG_MAX ) ;
BIND_ENUM_CONSTANT ( ENV_AMBIENT_SOURCE_BG ) ;
BIND_ENUM_CONSTANT ( ENV_AMBIENT_SOURCE_DISABLED ) ;
BIND_ENUM_CONSTANT ( ENV_AMBIENT_SOURCE_COLOR ) ;
BIND_ENUM_CONSTANT ( ENV_AMBIENT_SOURCE_SKY ) ;
BIND_ENUM_CONSTANT ( ENV_REFLECTION_SOURCE_BG ) ;
BIND_ENUM_CONSTANT ( ENV_REFLECTION_SOURCE_DISABLED ) ;
BIND_ENUM_CONSTANT ( ENV_REFLECTION_SOURCE_SKY ) ;
BIND_ENUM_CONSTANT ( ENV_GLOW_BLEND_MODE_ADDITIVE ) ;
BIND_ENUM_CONSTANT ( ENV_GLOW_BLEND_MODE_SCREEN ) ;
BIND_ENUM_CONSTANT ( ENV_GLOW_BLEND_MODE_SOFTLIGHT ) ;
BIND_ENUM_CONSTANT ( ENV_GLOW_BLEND_MODE_REPLACE ) ;
BIND_ENUM_CONSTANT ( ENV_GLOW_BLEND_MODE_MIX ) ;
BIND_ENUM_CONSTANT ( ENV_TONE_MAPPER_LINEAR ) ;
BIND_ENUM_CONSTANT ( ENV_TONE_MAPPER_REINHARD ) ;
BIND_ENUM_CONSTANT ( ENV_TONE_MAPPER_FILMIC ) ;
BIND_ENUM_CONSTANT ( ENV_TONE_MAPPER_ACES ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( ENV_SSR_ROUGNESS_QUALITY_DISABLED ) ;
BIND_ENUM_CONSTANT ( ENV_SSR_ROUGNESS_QUALITY_LOW ) ;
BIND_ENUM_CONSTANT ( ENV_SSR_ROUGNESS_QUALITY_MEDIUM ) ;
BIND_ENUM_CONSTANT ( ENV_SSR_ROUGNESS_QUALITY_HIGH ) ;
2020-12-08 06:37:09 +01:00
BIND_ENUM_CONSTANT ( ENV_SSAO_QUALITY_VERY_LOW ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( ENV_SSAO_QUALITY_LOW ) ;
BIND_ENUM_CONSTANT ( ENV_SSAO_QUALITY_MEDIUM ) ;
BIND_ENUM_CONSTANT ( ENV_SSAO_QUALITY_HIGH ) ;
BIND_ENUM_CONSTANT ( ENV_SSAO_QUALITY_ULTRA ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( SUB_SURFACE_SCATTERING_QUALITY_DISABLED ) ;
BIND_ENUM_CONSTANT ( SUB_SURFACE_SCATTERING_QUALITY_LOW ) ;
BIND_ENUM_CONSTANT ( SUB_SURFACE_SCATTERING_QUALITY_MEDIUM ) ;
BIND_ENUM_CONSTANT ( SUB_SURFACE_SCATTERING_QUALITY_HIGH ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( DOF_BLUR_QUALITY_VERY_LOW ) ;
BIND_ENUM_CONSTANT ( DOF_BLUR_QUALITY_LOW ) ;
BIND_ENUM_CONSTANT ( DOF_BLUR_QUALITY_MEDIUM ) ;
BIND_ENUM_CONSTANT ( DOF_BLUR_QUALITY_HIGH ) ;
BIND_ENUM_CONSTANT ( DOF_BOKEH_BOX ) ;
BIND_ENUM_CONSTANT ( DOF_BOKEH_HEXAGON ) ;
BIND_ENUM_CONSTANT ( DOF_BOKEH_CIRCLE ) ;
2017-10-20 00:24:49 +02:00
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( SHADOW_QUALITY_HARD ) ;
BIND_ENUM_CONSTANT ( SHADOW_QUALITY_SOFT_LOW ) ;
BIND_ENUM_CONSTANT ( SHADOW_QUALITY_SOFT_MEDIUM ) ;
BIND_ENUM_CONSTANT ( SHADOW_QUALITY_SOFT_HIGH ) ;
BIND_ENUM_CONSTANT ( SHADOW_QUALITY_SOFT_ULTRA ) ;
BIND_ENUM_CONSTANT ( SHADOW_QUALITY_MAX ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( SCENARIO_DEBUG_DISABLED ) ;
BIND_ENUM_CONSTANT ( SCENARIO_DEBUG_WIREFRAME ) ;
BIND_ENUM_CONSTANT ( SCENARIO_DEBUG_OVERDRAW ) ;
BIND_ENUM_CONSTANT ( SCENARIO_DEBUG_SHADELESS ) ;
BIND_ENUM_CONSTANT ( INSTANCE_NONE ) ;
BIND_ENUM_CONSTANT ( INSTANCE_MESH ) ;
BIND_ENUM_CONSTANT ( INSTANCE_MULTIMESH ) ;
BIND_ENUM_CONSTANT ( INSTANCE_IMMEDIATE ) ;
BIND_ENUM_CONSTANT ( INSTANCE_PARTICLES ) ;
2020-10-12 10:57:54 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_PARTICLES_COLLISION ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_LIGHT ) ;
BIND_ENUM_CONSTANT ( INSTANCE_REFLECTION_PROBE ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_DECAL ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_GI_PROBE ) ;
2020-05-01 14:34:23 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_LIGHTMAP ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_MAX ) ;
BIND_ENUM_CONSTANT ( INSTANCE_GEOMETRY_MASK ) ;
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
BIND_ENUM_CONSTANT ( INSTANCE_FLAG_USE_BAKED_LIGHT ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( INSTANCE_FLAG_USE_DYNAMIC_GI ) ;
2018-07-27 13:58:56 +02:00
BIND_ENUM_CONSTANT ( INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE ) ;
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
BIND_ENUM_CONSTANT ( INSTANCE_FLAG_MAX ) ;
BIND_ENUM_CONSTANT ( SHADOW_CASTING_SETTING_OFF ) ;
BIND_ENUM_CONSTANT ( SHADOW_CASTING_SETTING_ON ) ;
BIND_ENUM_CONSTANT ( SHADOW_CASTING_SETTING_DOUBLE_SIDED ) ;
BIND_ENUM_CONSTANT ( SHADOW_CASTING_SETTING_SHADOWS_ONLY ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( NINE_PATCH_STRETCH ) ;
BIND_ENUM_CONSTANT ( NINE_PATCH_TILE ) ;
BIND_ENUM_CONSTANT ( NINE_PATCH_TILE_FIT ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_DEFAULT ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_NEAREST ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_LINEAR ) ;
2020-02-20 00:31:43 +01:00
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS ) ;
2020-02-20 00:31:43 +01:00
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_FILTER_MAX ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_REPEAT_DISABLED ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_REPEAT_ENABLED ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_REPEAT_MIRROR ) ;
BIND_ENUM_CONSTANT ( CANVAS_ITEM_TEXTURE_REPEAT_MAX ) ;
2020-11-04 15:38:26 +01:00
BIND_ENUM_CONSTANT ( CANVAS_GROUP_MODE_DISABLED ) ;
BIND_ENUM_CONSTANT ( CANVAS_GROUP_MODE_OPAQUE ) ;
BIND_ENUM_CONSTANT ( CANVAS_GROUP_MODE_TRANSPARENT ) ;
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_MODE_POINT ) ;
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_MODE_DIRECTIONAL ) ;
2020-11-03 20:51:53 +01:00
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_BLEND_MODE_ADD ) ;
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_BLEND_MODE_SUB ) ;
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_BLEND_MODE_MIX ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_FILTER_NONE ) ;
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_FILTER_PCF5 ) ;
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_FILTER_PCF13 ) ;
2020-02-12 09:59:06 +01:00
BIND_ENUM_CONSTANT ( CANVAS_LIGHT_FILTER_MAX ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( CANVAS_OCCLUDER_POLYGON_CULL_DISABLED ) ;
BIND_ENUM_CONSTANT ( CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE ) ;
BIND_ENUM_CONSTANT ( CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE ) ;
2020-04-17 04:52:00 +02:00
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_BOOL ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_BVEC2 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_BVEC3 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_BVEC4 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_INT ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_IVEC2 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_IVEC3 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_IVEC4 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_RECT2I ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_UINT ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_UVEC2 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_UVEC3 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_UVEC4 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_FLOAT ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_VEC2 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_VEC3 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_VEC4 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_COLOR ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_RECT2 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_MAT2 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_MAT3 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_MAT4 ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_TRANSFORM_2D ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_TRANSFORM ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_SAMPLER2D ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_SAMPLER2DARRAY ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_SAMPLER3D ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_SAMPLERCUBE ) ;
BIND_ENUM_CONSTANT ( GLOBAL_VAR_TYPE_MAX ) ;
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( INFO_OBJECTS_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( INFO_VERTICES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( INFO_MATERIAL_CHANGES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( INFO_SHADER_CHANGES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( INFO_SURFACE_CHANGES_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( INFO_DRAW_CALLS_IN_FRAME ) ;
BIND_ENUM_CONSTANT ( INFO_USAGE_VIDEO_MEM_TOTAL ) ;
BIND_ENUM_CONSTANT ( INFO_VIDEO_MEM_USED ) ;
BIND_ENUM_CONSTANT ( INFO_TEXTURE_MEM_USED ) ;
BIND_ENUM_CONSTANT ( INFO_VERTEX_MEM_USED ) ;
BIND_ENUM_CONSTANT ( FEATURE_SHADERS ) ;
BIND_ENUM_CONSTANT ( FEATURE_MULTITHREADED ) ;
2017-11-14 21:25:42 +01:00
2018-07-07 01:21:13 +02:00
ADD_SIGNAL ( MethodInfo ( " frame_pre_draw " ) ) ;
ADD_SIGNAL ( MethodInfo ( " frame_post_draw " ) ) ;
2014-02-10 02:10:30 +01:00
}
2020-05-25 19:20:45 +02:00
void RenderingServer : : mesh_add_surface_from_mesh_data ( RID p_mesh , const Geometry3D : : MeshData & p_mesh_data ) {
2020-02-17 22:06:54 +01:00
Vector < Vector3 > vertices ;
Vector < Vector3 > normals ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_mesh_data . faces . size ( ) ; i + + ) {
2020-05-25 19:20:45 +02:00
const Geometry3D : : MeshData : : Face & f = p_mesh_data . faces [ i ] ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
for ( int j = 2 ; j < f . indices . size ( ) ; j + + ) {
# define _ADD_VERTEX(m_idx) \
vertices . push_back ( p_mesh_data . vertices [ f . indices [ m_idx ] ] ) ; \
normals . push_back ( f . plane . normal ) ;
2016-03-09 00:00:52 +01:00
2017-03-05 16:44:50 +01:00
_ADD_VERTEX ( 0 ) ;
_ADD_VERTEX ( j - 1 ) ;
_ADD_VERTEX ( j ) ;
2016-03-09 00:00:52 +01:00
}
2014-02-10 02:10:30 +01:00
}
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
Array d ;
2020-03-27 19:21:27 +01:00
d . resize ( RS : : ARRAY_MAX ) ;
2017-03-05 16:44:50 +01:00
d [ ARRAY_VERTEX ] = vertices ;
d [ ARRAY_NORMAL ] = normals ;
mesh_add_surface_from_arrays ( p_mesh , PRIMITIVE_TRIANGLES , d ) ;
2014-02-10 02:10:30 +01:00
}
2020-03-27 19:21:27 +01:00
void RenderingServer : : mesh_add_surface_from_planes ( RID p_mesh , const Vector < Plane > & p_planes ) {
2020-05-25 19:20:45 +02:00
Geometry3D : : MeshData mdata = Geometry3D : : build_convex_mesh ( p_planes ) ;
2017-03-05 16:44:50 +01:00
mesh_add_surface_from_mesh_data ( p_mesh , mdata ) ;
2014-02-10 02:10:30 +01:00
}
2020-03-27 19:21:27 +01:00
void RenderingServer : : immediate_vertex_2d ( RID p_immediate , const Vector2 & p_vertex ) {
2017-03-05 16:44:50 +01:00
immediate_vertex ( p_immediate , Vector3 ( p_vertex . x , p_vertex . y , 0 ) ) ;
2016-11-23 11:04:55 +01:00
}
2020-03-27 19:21:27 +01:00
RID RenderingServer : : instance_create2 ( RID p_base , RID p_scenario ) {
2014-02-10 02:10:30 +01:00
RID instance = instance_create ( ) ;
2017-03-05 16:44:50 +01:00
instance_set_base ( instance , p_base ) ;
instance_set_scenario ( instance , p_scenario ) ;
2014-02-10 02:10:30 +01:00
return instance ;
}
2020-06-14 19:06:48 +02:00
bool RenderingServer : : is_render_loop_enabled ( ) const {
return render_loop_enabled ;
}
void RenderingServer : : set_render_loop_enabled ( bool p_enabled ) {
render_loop_enabled = p_enabled ;
}
2020-03-27 19:21:27 +01:00
RenderingServer : : RenderingServer ( ) {
2017-01-14 12:26:56 +01:00
//ERR_FAIL_COND(singleton);
2021-01-04 21:00:44 +01:00
thread_pool = memnew ( RendererThreadPool ) ;
2017-03-05 16:44:50 +01:00
singleton = this ;
2017-12-16 21:09:25 +01:00
2019-02-26 22:43:37 +01:00
GLOBAL_DEF_RST ( " rendering/vram_compression/import_bptc " , false ) ;
GLOBAL_DEF_RST ( " rendering/vram_compression/import_s3tc " , true ) ;
GLOBAL_DEF_RST ( " rendering/vram_compression/import_etc " , false ) ;
GLOBAL_DEF_RST ( " rendering/vram_compression/import_etc2 " , true ) ;
GLOBAL_DEF_RST ( " rendering/vram_compression/import_pvrtc " , false ) ;
2017-07-18 02:05:38 +02:00
2020-04-29 22:34:09 +02:00
GLOBAL_DEF ( " rendering/limits/time/time_rollover_secs " , 3600 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/limits/time/time_rollover_secs " , PropertyInfo ( Variant : : FLOAT , " rendering/limits/time/time_rollover_secs " , PROPERTY_HINT_RANGE , " 0,10000,1,or_greater " ) ) ;
2017-07-18 02:05:38 +02:00
GLOBAL_DEF ( " rendering/quality/directional_shadow/size " , 4096 ) ;
2017-07-19 22:00:46 +02:00
GLOBAL_DEF ( " rendering/quality/directional_shadow/size.mobile " , 2048 ) ;
2018-10-05 18:43:53 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/directional_shadow/size " , PropertyInfo ( Variant : : INT , " rendering/quality/directional_shadow/size " , PROPERTY_HINT_RANGE , " 256,16384 " ) ) ;
2020-04-10 11:30:36 +02:00
GLOBAL_DEF ( " rendering/quality/directional_shadow/soft_shadow_quality " , 2 ) ;
GLOBAL_DEF ( " rendering/quality/directional_shadow/soft_shadow_quality.mobile " , 0 ) ;
2020-10-15 10:31:16 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/directional_shadow/soft_shadow_quality " , PropertyInfo ( Variant : : INT , " rendering/quality/directional_shadow/soft_shadow_quality " , PROPERTY_HINT_ENUM , " Hard (Fastest),Soft Low (Fast),Soft Medium (Average),Soft High (Slow),Soft Ultra (Slowest) " ) ) ;
2021-01-24 20:00:20 +01:00
GLOBAL_DEF ( " rendering/quality/directional_shadow/16_bits " , true ) ;
2020-04-10 11:30:36 +02:00
GLOBAL_DEF ( " rendering/quality/shadows/soft_shadow_quality " , 2 ) ;
GLOBAL_DEF ( " rendering/quality/shadows/soft_shadow_quality.mobile " , 0 ) ;
2020-10-15 10:31:16 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/shadows/soft_shadow_quality " , PropertyInfo ( Variant : : INT , " rendering/quality/shadows/soft_shadow_quality " , PROPERTY_HINT_ENUM , " Hard (Fastest),Soft Low (Fast),Soft Medium (Average),Soft High (Slow),Soft Ultra (Slowest) " ) ) ;
2020-04-10 11:30:36 +02:00
2020-10-24 17:15:43 +02:00
GLOBAL_DEF ( " rendering/quality/2d_shadow_atlas/size " , 2048 ) ;
2020-12-07 22:27:38 +01:00
GLOBAL_DEF ( " rendering/quality/rd_renderer/use_low_end_renderer " , false ) ;
GLOBAL_DEF ( " rendering/quality/rd_renderer/use_low_end_renderer.mobile " , true ) ;
2020-03-20 01:32:19 +01:00
GLOBAL_DEF ( " rendering/quality/reflections/roughness_layers " , 8 ) ;
2017-07-19 22:00:46 +02:00
GLOBAL_DEF ( " rendering/quality/reflections/texture_array_reflections " , true ) ;
GLOBAL_DEF ( " rendering/quality/reflections/texture_array_reflections.mobile " , false ) ;
2019-08-26 22:43:58 +02:00
GLOBAL_DEF ( " rendering/quality/reflections/ggx_samples " , 1024 ) ;
GLOBAL_DEF ( " rendering/quality/reflections/ggx_samples.mobile " , 128 ) ;
2020-02-21 00:27:34 +01:00
GLOBAL_DEF ( " rendering/quality/reflections/fast_filter_high_quality " , false ) ;
2020-03-20 01:32:19 +01:00
GLOBAL_DEF ( " rendering/quality/reflection_atlas/reflection_size " , 256 ) ;
2019-09-09 22:50:51 +02:00
GLOBAL_DEF ( " rendering/quality/reflection_atlas/reflection_size.mobile " , 128 ) ;
GLOBAL_DEF ( " rendering/quality/reflection_atlas/reflection_count " , 64 ) ;
2017-07-22 19:07:38 +02:00
2021-01-23 00:50:24 +01:00
GLOBAL_DEF ( " rendering/quality/gi/use_half_resolution " , false ) ;
2019-10-03 22:39:08 +02:00
GLOBAL_DEF ( " rendering/quality/gi_probes/anisotropic " , false ) ;
2019-10-04 01:15:38 +02:00
GLOBAL_DEF ( " rendering/quality/gi_probes/quality " , 1 ) ;
2020-06-25 15:33:28 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/gi_probes/quality " , PropertyInfo ( Variant : : INT , " rendering/quality/gi_probes/quality " , PROPERTY_HINT_ENUM , " Low (4 Cones - Fast),High (6 Cones - Slow) " ) ) ;
2019-10-03 22:39:08 +02:00
2017-07-22 19:07:38 +02:00
GLOBAL_DEF ( " rendering/quality/shading/force_vertex_shading " , false ) ;
GLOBAL_DEF ( " rendering/quality/shading/force_vertex_shading.mobile " , true ) ;
2018-09-23 17:12:30 +02:00
GLOBAL_DEF ( " rendering/quality/shading/force_lambert_over_burley " , false ) ;
GLOBAL_DEF ( " rendering/quality/shading/force_lambert_over_burley.mobile " , true ) ;
GLOBAL_DEF ( " rendering/quality/shading/force_blinn_over_ggx " , false ) ;
GLOBAL_DEF ( " rendering/quality/shading/force_blinn_over_ggx.mobile " , true ) ;
2017-07-22 19:07:38 +02:00
GLOBAL_DEF ( " rendering/quality/depth_prepass/enable " , true ) ;
2019-01-25 15:48:28 +01:00
GLOBAL_DEF ( " rendering/quality/depth_prepass/disable_for_vendors " , " PowerVR,Mali,Adreno,Apple " ) ;
2018-10-24 15:22:50 +02:00
2020-04-12 20:33:57 +02:00
GLOBAL_DEF ( " rendering/quality/texture_filters/use_nearest_mipmap_filter " , false ) ;
2020-05-08 12:03:23 +02:00
GLOBAL_DEF ( " rendering/quality/texture_filters/anisotropic_filtering_level " , 2 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/texture_filters/anisotropic_filtering_level " , PropertyInfo ( Variant : : INT , " rendering/quality/texture_filters/anisotropic_filtering_level " , PROPERTY_HINT_ENUM , " Disabled (Fastest),2x (Faster),4x (Fast),8x (Average),16x (Slow) " ) ) ;
2020-01-16 01:23:21 +01:00
2020-04-12 20:33:57 +02:00
GLOBAL_DEF ( " rendering/quality/depth_of_field/depth_of_field_bokeh_shape " , 1 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/depth_of_field/depth_of_field_bokeh_shape " , PropertyInfo ( Variant : : INT , " rendering/quality/depth_of_field/depth_of_field_bokeh_shape " , PROPERTY_HINT_ENUM , " Box (Fast),Hexagon (Average),Circle (Slow) " ) ) ;
GLOBAL_DEF ( " rendering/quality/depth_of_field/depth_of_field_bokeh_quality " , 2 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/depth_of_field/depth_of_field_bokeh_quality " , PropertyInfo ( Variant : : INT , " rendering/quality/depth_of_field/depth_of_field_bokeh_quality " , PROPERTY_HINT_ENUM , " Very Low (Fastest),Low (Fast),Medium (Average),High (Slow) " ) ) ;
GLOBAL_DEF ( " rendering/quality/depth_of_field/depth_of_field_use_jitter " , false ) ;
2020-01-25 11:18:55 +01:00
2020-12-08 06:37:09 +01:00
GLOBAL_DEF ( " rendering/quality/ssao/quality " , 2 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/ssao/quality " , PropertyInfo ( Variant : : INT , " rendering/quality/ssao/quality " , PROPERTY_HINT_ENUM , " Very Low (Fast),Low (Fast),Medium (Average),High (Slow),Ultra (Custom) " ) ) ;
2020-10-19 00:27:51 +02:00
GLOBAL_DEF ( " rendering/quality/ssao/half_size " , false ) ;
2020-12-08 06:37:09 +01:00
GLOBAL_DEF ( " rendering/quality/ssao/half_size.mobile " , true ) ;
GLOBAL_DEF ( " rendering/quality/ssao/adaptive_target " , 0.5 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/ssao/adaptive_target " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/ssao/adaptive_target " , PROPERTY_HINT_RANGE , " 0.0,1.0,0.01 " ) ) ;
GLOBAL_DEF ( " rendering/quality/ssao/blur_passes " , 2 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/ssao/blur_passes " , PropertyInfo ( Variant : : INT , " rendering/quality/ssao/blur_passes " , PROPERTY_HINT_RANGE , " 0,6 " ) ) ;
GLOBAL_DEF ( " rendering/quality/ssao/fadeout_from " , 50.0 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/ssao/fadeout_from " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/ssao/fadeout_from " , PROPERTY_HINT_RANGE , " 0.0,512,0.1,or_greater " ) ) ;
GLOBAL_DEF ( " rendering/quality/ssao/fadeout_to " , 300.0 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/ssao/fadeout_to " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/ssao/fadeout_to " , PROPERTY_HINT_RANGE , " 64,65536,0.1,or_greater " ) ) ;
2020-01-27 00:09:40 +01:00
2020-07-01 14:18:13 +02:00
GLOBAL_DEF ( " rendering/quality/screen_filters/screen_space_roughness_limiter_enabled " , true ) ;
2020-06-25 15:33:28 +02:00
GLOBAL_DEF ( " rendering/quality/screen_filters/screen_space_roughness_limiter_amount " , 0.25 ) ;
GLOBAL_DEF ( " rendering/quality/screen_filters/screen_space_roughness_limiter_limit " , 0.18 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/screen_filters/screen_space_roughness_limiter_amount " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/screen_filters/screen_space_roughness_limiter_amount " , PROPERTY_HINT_RANGE , " 0.01,4.0,0.01 " ) ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/screen_filters/screen_space_roughness_limiter_limit " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/screen_filters/screen_space_roughness_limiter_limit " , PROPERTY_HINT_RANGE , " 0.01,1.0,0.01 " ) ) ;
2020-03-30 15:46:03 +02:00
GLOBAL_DEF ( " rendering/quality/glow/upscale_mode " , 1 ) ;
2020-04-07 19:55:05 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/glow/upscale_mode " , PropertyInfo ( Variant : : INT , " rendering/quality/glow/upscale_mode " , PROPERTY_HINT_ENUM , " Linear (Fast),Bicubic (Slow) " ) ) ;
2020-03-30 15:46:03 +02:00
GLOBAL_DEF ( " rendering/quality/glow/upscale_mode.mobile " , 0 ) ;
2020-09-01 08:04:45 +02:00
GLOBAL_DEF ( " rendering/quality/glow/use_high_quality " , false ) ;
2020-04-02 04:24:52 +02:00
GLOBAL_DEF ( " rendering/quality/screen_space_reflection/roughness_quality " , 1 ) ;
2020-04-07 19:55:05 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/screen_space_reflection/roughness_quality " , PropertyInfo ( Variant : : INT , " rendering/quality/screen_space_reflection/roughness_quality " , PROPERTY_HINT_ENUM , " Disabled (Fastest),Low (Fast),Medium (Average),High (Slow) " ) ) ;
2020-04-04 04:42:26 +02:00
GLOBAL_DEF ( " rendering/quality/subsurface_scattering/subsurface_scattering_quality " , 1 ) ;
2020-04-07 19:55:05 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/subsurface_scattering/subsurface_scattering_quality " , PropertyInfo ( Variant : : INT , " rendering/quality/subsurface_scattering/subsurface_scattering_quality " , PROPERTY_HINT_ENUM , " Disabled (Fastest),Low (Fast),Medium (Average),High (Slow) " ) ) ;
2020-04-04 04:42:26 +02:00
GLOBAL_DEF ( " rendering/quality/subsurface_scattering/subsurface_scattering_scale " , 0.05 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/subsurface_scattering/subsurface_scattering_scale " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/subsurface_scattering/subsurface_scattering_scale " , PROPERTY_HINT_RANGE , " 0.001,1,0.001 " ) ) ;
GLOBAL_DEF ( " rendering/quality/subsurface_scattering/subsurface_scattering_depth_scale " , 0.01 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/subsurface_scattering/subsurface_scattering_depth_scale " , PropertyInfo ( Variant : : FLOAT , " rendering/quality/subsurface_scattering/subsurface_scattering_depth_scale " , PROPERTY_HINT_RANGE , " 0.001,1,0.001 " ) ) ;
2020-04-17 04:52:00 +02:00
GLOBAL_DEF ( " rendering/high_end/global_shader_variables_buffer_size " , 65536 ) ;
2020-05-01 14:34:23 +02:00
GLOBAL_DEF ( " rendering/lightmapper/probe_capture_update_speed " , 15 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/lightmapper/probe_capture_update_speed " , PropertyInfo ( Variant : : FLOAT , " rendering/lightmapper/probe_capture_update_speed " , PROPERTY_HINT_RANGE , " 0.001,256,0.001 " ) ) ;
2020-06-25 15:33:28 +02:00
2021-01-23 00:50:24 +01:00
GLOBAL_DEF ( " rendering/sdfgi/probe_ray_count " , 1 ) ;
2020-06-25 15:33:28 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/sdfgi/probe_ray_count " , PropertyInfo ( Variant : : INT , " rendering/sdfgi/probe_ray_count " , PROPERTY_HINT_ENUM , " 8 (Fastest),16,32,64,96,128 (Slowest) " ) ) ;
2021-01-23 00:50:24 +01:00
GLOBAL_DEF ( " rendering/sdfgi/frames_to_converge " , 4 ) ;
2020-06-25 15:33:28 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/sdfgi/frames_to_converge " , PropertyInfo ( Variant : : INT , " rendering/sdfgi/frames_to_converge " , PROPERTY_HINT_ENUM , " 5 (Less Latency but Lower Quality),10,15,20,25,30 (More Latency but Higher Quality) " ) ) ;
2021-01-23 00:50:24 +01:00
GLOBAL_DEF ( " rendering/sdfgi/frames_to_update_lights " , 2 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/sdfgi/frames_to_update_lights " , PropertyInfo ( Variant : : INT , " rendering/sdfgi/frames_to_update_lights " , PROPERTY_HINT_ENUM , " 1 (Slower),2,4,8,16 (Faster) " ) ) ;
2020-08-13 03:21:01 +02:00
GLOBAL_DEF ( " rendering/volumetric_fog/volume_size " , 64 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/volumetric_fog/volume_size " , PropertyInfo ( Variant : : INT , " rendering/volumetric_fog/volume_size " , PROPERTY_HINT_RANGE , " 16,512,1 " ) ) ;
GLOBAL_DEF ( " rendering/volumetric_fog/volume_depth " , 128 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/volumetric_fog/volume_depth " , PropertyInfo ( Variant : : INT , " rendering/volumetric_fog/volume_depth " , PROPERTY_HINT_RANGE , " 16,512,1 " ) ) ;
GLOBAL_DEF ( " rendering/volumetric_fog/use_filter " , 0 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/volumetric_fog/use_filter " , PropertyInfo ( Variant : : INT , " rendering/volumetric_fog/use_filter " , PROPERTY_HINT_ENUM , " No (Faster),Yes (Higher Quality) " ) ) ;
GLOBAL_DEF ( " rendering/volumetric_fog/directional_shadow_shrink " , 512 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/volumetric_fog/directional_shadow_shrink " , PropertyInfo ( Variant : : INT , " rendering/volumetric_fog/directional_shadow_shrink " , PROPERTY_HINT_RANGE , " 32,2048,1 " ) ) ;
GLOBAL_DEF ( " rendering/volumetric_fog/positional_shadow_shrink " , 512 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/volumetric_fog/positional_shadow_shrink " , PropertyInfo ( Variant : : INT , " rendering/volumetric_fog/positional_shadow_shrink " , PROPERTY_HINT_RANGE , " 32,2048,1 " ) ) ;
2020-12-23 17:52:58 +01:00
GLOBAL_DEF ( " rendering/spatial_indexer/update_iterations_per_frame " , 10 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/spatial_indexer/update_iterations_per_frame " , PropertyInfo ( Variant : : INT , " rendering/spatial_indexer/update_iterations_per_frame " , PROPERTY_HINT_RANGE , " 0,1024,1 " ) ) ;
2021-01-04 21:00:44 +01:00
GLOBAL_DEF ( " rendering/spatial_indexer/threaded_cull_minimum_instances " , 1000 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/spatial_indexer/threaded_cull_minimum_instances " , PropertyInfo ( Variant : : INT , " rendering/spatial_indexer/threaded_cull_minimum_instances " , PROPERTY_HINT_RANGE , " 32,65536,1 " ) ) ;
GLOBAL_DEF ( " rendering/forward_renderer/threaded_render_minimum_instances " , 500 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/forward_renderer/threaded_render_minimum_instances " , PropertyInfo ( Variant : : INT , " rendering/forward_renderer/threaded_render_minimum_instances " , PROPERTY_HINT_RANGE , " 32,65536,1 " ) ) ;
2021-01-17 17:25:38 +01:00
GLOBAL_DEF ( " rendering/cluster_builder/max_clustered_elements " , 512 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/cluster_builder/max_clustered_elements " , PropertyInfo ( Variant : : FLOAT , " rendering/cluster_builder/max_clustered_elements " , PROPERTY_HINT_RANGE , " 32,8192,1 " ) ) ;
2014-02-10 02:10:30 +01:00
}
2020-03-27 19:21:27 +01:00
RenderingServer : : ~ RenderingServer ( ) {
2021-01-04 21:00:44 +01:00
memdelete ( thread_pool ) ;
2020-04-02 01:20:12 +02:00
singleton = nullptr ;
2014-02-10 02:10:30 +01:00
}