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
/*************************************************************************/
2020-01-01 11:16:22 +01:00
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
2014-02-10 02:10:30 +01:00
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
2018-01-05 00:50:27 +01:00
2020-03-27 19:21:27 +01:00
# 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-03-27 19:21:27 +01:00
Error RenderingServer : : _surface_set_data ( Array p_arrays , uint32_t p_format , uint32_t * p_offsets , uint32_t p_stride , Vector < uint8_t > & r_vertex_array , int p_vertex_array_len , Vector < uint8_t > & r_index_array , int p_index_array_len , AABB & r_aabb , Vector < AABB > & r_bone_aabb ) {
2020-02-17 22:06:54 +01:00
uint8_t * vw = r_vertex_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
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_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
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_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 ( ) ;
2016-10-19 16:14:41 +02:00
// setting vertices means regenerating the AABB
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_NORMAL ) {
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2017-06-17 02:13:13 +02:00
int8_t vector [ 4 ] = {
2018-01-18 23:10:07 +01:00
( int8_t ) CLAMP ( src [ i ] . x * 127 , - 128 , 127 ) ,
( int8_t ) CLAMP ( src [ i ] . y * 127 , - 128 , 127 ) ,
( int8_t ) CLAMP ( src [ i ] . z * 127 , - 128 , 127 ) ,
2016-10-19 16:14:41 +02:00
0 ,
} ;
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , vector , 4 ) ;
2016-10-19 16:14:41 +02:00
}
} else {
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 } ;
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , vector , 3 * 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
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TANGENT ) {
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2019-11-01 16:16:31 +01:00
int8_t xyzw [ 4 ] = {
( int8_t ) CLAMP ( src [ i * 4 + 0 ] * 127 , - 128 , 127 ) ,
( int8_t ) CLAMP ( src [ i * 4 + 1 ] * 127 , - 128 , 127 ) ,
( int8_t ) CLAMP ( src [ i * 4 + 2 ] * 127 , - 128 , 127 ) ,
( int8_t ) CLAMP ( src [ i * 4 + 3 ] * 127 , - 128 , 127 )
2016-10-19 16:14:41 +02:00
} ;
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , xyzw , 4 ) ;
2016-10-19 16:14:41 +02:00
}
} else {
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
float xyzw [ 4 ] = {
src [ i * 4 + 0 ] ,
src [ i * 4 + 1 ] ,
src [ i * 4 + 2 ] ,
src [ i * 4 + 3 ]
2016-10-19 16:14:41 +02:00
} ;
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , xyzw , 4 * 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 ( ) ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_COLOR ) {
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2016-10-19 16:14:41 +02:00
uint8_t colors [ 4 ] ;
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < 4 ; j + + ) {
colors [ j ] = CLAMP ( int ( ( src [ i ] [ j ] ) * 255.0 ) , 0 , 255 ) ;
2016-10-19 16:14:41 +02:00
}
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , colors , 4 ) ;
2016-10-19 16:14:41 +02:00
}
} else {
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , & src [ i ] , 4 * 4 ) ;
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
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV ) {
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 ( & vw [ p_offsets [ ai ] + i * p_stride ] , uv , 2 * 2 ) ;
2016-10-19 16:14:41 +02:00
}
} else {
2017-03-05 16:44:50 +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
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_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
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV2 ) {
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 ( & vw [ p_offsets [ ai ] + i * p_stride ] , uv , 2 * 2 ) ;
2016-10-19 16:14:41 +02:00
}
} else {
2017-03-05 16:44:50 +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
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , uv , 2 * 4 ) ;
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-02-17 22:06:54 +01:00
Vector < real_t > array = p_arrays [ ai ] ;
2016-10-19 16:14:41 +02:00
2020-03-27 19:21:27 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len * RS : : ARRAY_WEIGHTS_SIZE , 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
{
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2020-03-27 19:21:27 +01:00
uint16_t data [ RS : : ARRAY_WEIGHTS_SIZE ] ;
for ( int j = 0 ; j < RS : : ARRAY_WEIGHTS_SIZE ; j + + ) {
data [ j ] = CLAMP ( src [ i * RS : : ARRAY_WEIGHTS_SIZE + j ] * 65535 , 0 , 65535 ) ;
2016-10-19 16:14:41 +02:00
}
2017-03-05 16:44:50 +01:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , data , 2 * 4 ) ;
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-03-27 19:21:27 +01:00
ERR_FAIL_COND_V ( array . size ( ) ! = p_vertex_array_len * RS : : ARRAY_WEIGHTS_SIZE , 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
2019-08-19 00:40:52 +02:00
for ( int i = 0 ; i < p_vertex_array_len ; i + + ) {
2020-03-27 19:21:27 +01:00
uint16_t data [ RS : : ARRAY_WEIGHTS_SIZE ] ;
for ( int j = 0 ; j < RS : : ARRAY_WEIGHTS_SIZE ; j + + ) {
data [ j ] = src [ i * RS : : ARRAY_WEIGHTS_SIZE + j ] ;
2019-08-19 00:40:52 +02:00
max_bone = MAX ( data [ j ] , max_bone ) ;
2016-10-19 16:14:41 +02:00
}
2019-08-19 00:40:52 +02:00
copymem ( & vw [ p_offsets [ ai ] + i * p_stride ] , data , 2 * 4 ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
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 ) ;
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
2017-03-05 16:44:50 +01:00
if ( vertices . size ( ) & & bones . size ( ) = = vertices . size ( ) * 4 & & 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 ] ;
2017-03-05 16:44:50 +01:00
for ( int j = 0 ; j < 4 ; j + + ) {
int idx = rb [ i * 4 + j ] ;
float w = rw [ i * 4 + 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-03-27 19:21:27 +01:00
uint32_t RenderingServer : : mesh_surface_get_format_offset ( uint32_t p_format , int p_vertex_len , int p_index_len , int p_array_index ) const {
2017-11-21 01:36:32 +01:00
uint32_t offsets [ ARRAY_MAX ] ;
mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , p_index_len , offsets ) ;
return offsets [ p_array_index ] ;
}
2020-03-27 19:21:27 +01:00
uint32_t RenderingServer : : mesh_surface_get_format_stride ( uint32_t p_format , int p_vertex_len , int p_index_len ) const {
2017-11-21 01:36:32 +01:00
uint32_t offsets [ ARRAY_MAX ] ;
return mesh_surface_make_offsets_from_format ( p_format , p_vertex_len , p_index_len , offsets ) ;
}
2020-03-27 19:21:27 +01:00
uint32_t RenderingServer : : mesh_surface_make_offsets_from_format ( uint32_t p_format , int p_vertex_len , int p_index_len , uint32_t * r_offsets ) const {
2017-11-21 01:36:32 +01:00
int total_elem_size = 0 ;
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-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 : {
2017-11-21 01:36:32 +01:00
if ( p_format & ARRAY_COMPRESS_NORMAL ) {
elem_size = sizeof ( uint32_t ) ;
} else {
elem_size = sizeof ( float ) * 3 ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TANGENT : {
2017-11-21 01:36:32 +01:00
if ( p_format & ARRAY_COMPRESS_TANGENT ) {
elem_size = sizeof ( uint32_t ) ;
} else {
elem_size = sizeof ( float ) * 4 ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_COLOR : {
2017-11-21 01:36:32 +01:00
if ( p_format & ARRAY_COMPRESS_COLOR ) {
elem_size = sizeof ( uint32_t ) ;
} else {
elem_size = sizeof ( float ) * 4 ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV : {
2017-11-21 01:36:32 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV ) {
elem_size = sizeof ( uint32_t ) ;
} else {
elem_size = sizeof ( float ) * 2 ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV2 : {
2017-11-21 01:36:32 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV2 ) {
elem_size = sizeof ( uint32_t ) ;
} else {
elem_size = sizeof ( float ) * 2 ;
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_WEIGHTS : {
2019-08-19 00:40:52 +02:00
elem_size = sizeof ( uint16_t ) * 4 ;
2017-11-21 01:36:32 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_BONES : {
2019-08-19 00:40:52 +02:00
elem_size = sizeof ( uint16_t ) * 4 ;
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 : {
ERR_FAIL_V ( 0 ) ;
}
}
r_offsets [ i ] = total_elem_size ;
total_elem_size + = elem_size ;
}
return total_elem_size ;
}
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 ) {
2016-10-19 16:14:41 +02:00
Variant var = p_arrays [ i ] ;
2017-03-05 16:44:50 +01:00
switch ( var . get_type ( ) ) {
2020-02-17 22:06:54 +01:00
case Variant : : PACKED_VECTOR2_ARRAY : {
Vector < Vector2 > v2 = var ;
2016-10-19 16:14:41 +02:00
} break ;
2020-02-17 22:06:54 +01:00
case Variant : : PACKED_VECTOR3_ARRAY : {
Vector < Vector3 > v3 = var ;
2016-10-19 16:14:41 +02:00
} break ;
default : {
Array v = var ;
} break ;
}
2020-02-17 22:06:54 +01:00
array_len = PackedVector3Array ( p_arrays [ i ] ) . size ( ) ;
2019-08-19 00:40:52 +02:00
ERR_FAIL_COND_V ( array_len = = 0 , ERR_INVALID_DATA ) ;
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
2017-03-05 16:44:50 +01:00
int total_elem_size = 0 ;
2016-10-19 16:14:41 +02:00
2020-03-27 19:21:27 +01:00
for ( int i = 0 ; i < RS : : ARRAY_MAX ; i + + ) {
2017-03-05 16:44:50 +01:00
offsets [ i ] = 0 ; //reset
2016-10-19 16:14:41 +02:00
2020-05-14 16:41:43 +02:00
if ( ! ( format & ( 1 < < i ) ) ) { // 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
int elem_size = 0 ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
switch ( i ) {
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_VERTEX : {
2016-10-19 16:14:41 +02:00
Variant arr = p_arrays [ 0 ] ;
2020-02-17 22:06:54 +01:00
if ( arr . get_type ( ) = = Variant : : PACKED_VECTOR2_ARRAY ) {
2017-03-05 16:44:50 +01:00
elem_size = 2 ;
p_compress_format | = ARRAY_FLAG_USE_2D_VERTICES ;
2020-02-17 22:06:54 +01:00
} else if ( arr . get_type ( ) = = Variant : : PACKED_VECTOR3_ARRAY ) {
2017-03-05 16:44:50 +01:00
p_compress_format & = ~ ARRAY_FLAG_USE_2D_VERTICES ;
elem_size = 3 ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = ( p_compress_format & ARRAY_FLAG_USE_2D_VERTICES ) ? 2 : 3 ;
2016-10-19 16:14:41 +02:00
}
2019-08-19 00:40:52 +02:00
{
2017-03-05 16:44:50 +01:00
elem_size * = sizeof ( float ) ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_NORMAL : {
2017-03-05 16:44:50 +01:00
if ( p_compress_format & ARRAY_COMPRESS_NORMAL ) {
elem_size = sizeof ( uint32_t ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 3 ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TANGENT : {
2017-03-05 16:44:50 +01:00
if ( p_compress_format & ARRAY_COMPRESS_TANGENT ) {
elem_size = sizeof ( uint32_t ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 4 ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_COLOR : {
2017-03-05 16:44:50 +01:00
if ( p_compress_format & ARRAY_COMPRESS_COLOR ) {
elem_size = sizeof ( uint32_t ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 4 ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV : {
2017-03-05 16:44:50 +01:00
if ( p_compress_format & ARRAY_COMPRESS_TEX_UV ) {
elem_size = sizeof ( uint32_t ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 2 ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV2 : {
2017-03-05 16:44:50 +01:00
if ( p_compress_format & ARRAY_COMPRESS_TEX_UV2 ) {
elem_size = sizeof ( uint32_t ) ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 2 ;
2016-10-19 16:14:41 +02:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_WEIGHTS : {
2019-08-19 00:40:52 +02:00
elem_size = sizeof ( uint16_t ) * 4 ;
2016-10-19 16:14:41 +02:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_BONES : {
2019-08-19 00:40:52 +02:00
elem_size = sizeof ( uint16_t ) * 4 ;
2016-10-19 16:14:41 +02:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_INDEX : {
2017-03-05 16:44:50 +01:00
if ( index_array_len < = 0 ) {
2016-10-19 16:14:41 +02:00
ERR_PRINT ( " index_array_len==NO_INDEX_ARRAY " ) ;
break ;
}
2018-01-18 21:37:17 +01:00
/* determine whether using 16 or 32 bits indices */
2017-03-05 16:44:50 +01:00
if ( array_len > = ( 1 < < 16 ) ) {
elem_size = 4 ;
2016-10-19 16:14:41 +02:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = 2 ;
2016-10-19 16:14:41 +02:00
}
2017-03-05 16:44:50 +01:00
offsets [ i ] = elem_size ;
2016-10-19 16:14:41 +02:00
continue ;
2019-07-23 09:14:31 +02:00
}
2016-10-19 16:14:41 +02:00
default : {
2019-08-19 00:40:52 +02:00
ERR_FAIL_V ( ERR_BUG ) ;
2016-10-19 16:14:41 +02:00
}
}
2017-03-05 16:44:50 +01:00
offsets [ i ] = total_elem_size ;
total_elem_size + = elem_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
int array_size = total_elem_size * array_len ;
2020-02-17 22:06:54 +01:00
Vector < uint8_t > vertex_array ;
2016-10-19 16:14:41 +02:00
vertex_array . resize ( array_size ) ;
2020-03-27 19:21:27 +01:00
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 > 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
2017-03-05 16:44:50 +01:00
Error err = _surface_set_data ( p_arrays , format , offsets , total_elem_size , vertex_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-03-17 07:33:00 +01:00
Vector < Vector < uint8_t > > blend_shape_data ;
2016-10-19 16:14:41 +02:00
2017-03-05 16:44:50 +01:00
for ( int i = 0 ; i < p_blend_shapes . size ( ) ; i + + ) {
2020-02-17 22:06:54 +01:00
Vector < uint8_t > vertex_array_shape ;
2016-10-19 16:14:41 +02:00
vertex_array_shape . resize ( array_size ) ;
2020-02-17 22:06:54 +01:00
Vector < uint8_t > noindex ;
2016-10-19 16:14:41 +02:00
2017-11-17 03:09:00 +01:00
AABB laabb ;
2019-02-12 21:10:08 +01:00
Error err2 = _surface_set_data ( p_blend_shapes [ i ] , format & ~ ARRAY_FORMAT_INDEX , offsets , total_elem_size , vertex_array_shape , array_len , noindex , 0 , laabb , bone_aabb ) ;
2016-10-19 16:14:41 +02:00
aabb . merge_with ( laabb ) ;
2019-08-19 00:40:52 +02:00
ERR_FAIL_COND_V_MSG ( err2 ! = OK , ERR_INVALID_DATA , " Invalid blend shape array format for surface. " ) ;
2016-10-19 16:14:41 +02:00
blend_shape_data . push_back ( vertex_array_shape ) ;
}
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 ;
surface_data . vertex_count = array_len ;
surface_data . index_data = index_array ;
surface_data . index_count = index_array_len ;
surface_data . blend_shapes = blend_shape_data ;
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-03-27 19:21:27 +01:00
Array RenderingServer : : _get_array_from_surface ( uint32_t p_format , Vector < uint8_t > p_vertex_data , int p_vertex_len , Vector < uint8_t > p_index_data , int p_index_len ) const {
2016-11-10 03:55:06 +01:00
uint32_t offsets [ ARRAY_MAX ] ;
2017-03-05 16:44:50 +01:00
int total_elem_size = 0 ;
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 + + ) {
2017-03-05 16:44:50 +01:00
offsets [ i ] = 0 ; //reset
2016-11-10 03:55:06 +01:00
2020-05-14 16:41:43 +02:00
if ( ! ( p_format & ( 1 < < i ) ) ) { // no array
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
int elem_size = 0 ;
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 ) {
elem_size = 2 ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = 3 ;
2016-11-10 03:55:06 +01:00
}
2019-08-19 00:40:52 +02:00
{
2017-03-05 16:44:50 +01:00
elem_size * = sizeof ( float ) ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_NORMAL : {
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_NORMAL ) {
elem_size = sizeof ( uint32_t ) ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 3 ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TANGENT : {
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TANGENT ) {
elem_size = sizeof ( uint32_t ) ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 4 ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_COLOR : {
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_COLOR ) {
elem_size = sizeof ( uint32_t ) ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 4 ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV : {
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV ) {
elem_size = sizeof ( uint32_t ) ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 2 ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_TEX_UV2 : {
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV2 ) {
elem_size = sizeof ( uint32_t ) ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = sizeof ( float ) * 2 ;
2016-11-10 03:55:06 +01:00
}
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_WEIGHTS : {
2019-08-19 00:40:52 +02:00
elem_size = sizeof ( uint16_t ) * 4 ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_BONES : {
2019-08-19 00:40:52 +02:00
elem_size = sizeof ( uint16_t ) * 4 ;
2016-11-10 03:55:06 +01:00
} break ;
2020-03-27 19:21:27 +01:00
case RS : : ARRAY_INDEX : {
2017-03-05 16:44:50 +01:00
if ( p_index_len < = 0 ) {
2016-11-10 03:55:06 +01:00
ERR_PRINT ( " index_array_len==NO_INDEX_ARRAY " ) ;
break ;
}
2018-01-18 21:37:17 +01:00
/* determine whether using 16 or 32 bits indices */
2017-03-05 16:44:50 +01:00
if ( p_vertex_len > = ( 1 < < 16 ) ) {
elem_size = 4 ;
2016-11-10 03:55:06 +01:00
} else {
2017-03-05 16:44:50 +01:00
elem_size = 2 ;
2016-11-10 03:55:06 +01:00
}
2017-03-05 16:44:50 +01:00
offsets [ i ] = elem_size ;
2016-11-10 03:55:06 +01:00
continue ;
2019-07-23 09:14:31 +02:00
}
2016-11-10 03:55:06 +01:00
default : {
2017-03-05 16:44:50 +01:00
ERR_FAIL_V ( Array ( ) ) ;
2016-11-10 03:55:06 +01:00
}
}
2017-03-05 16:44:50 +01:00
offsets [ i ] = total_elem_size ;
total_elem_size + = 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 ( ) ;
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 + + ) {
const float * v = ( const float * ) & r [ j * total_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_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 + + ) {
const float * v = ( const float * ) & r [ j * total_elem_size + offsets [ i ] ] ;
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 ) ;
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_NORMAL ) {
2020-02-17 22:06:54 +01:00
Vector3 * w = arr . ptrw ( ) ;
2017-06-17 02:13:13 +02:00
const float multiplier = 1.f / 127.f ;
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 + + ) {
2017-06-17 02:13:13 +02:00
const int8_t * v = ( const int8_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
w [ j ] = Vector3 ( float ( v [ 0 ] ) * multiplier , float ( v [ 1 ] ) * multiplier , float ( v [ 2 ] ) * multiplier ) ;
2016-11-10 03:55:06 +01:00
}
} else {
2020-02-17 22:06:54 +01:00
Vector3 * 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 + + ) {
const float * v = ( const float * ) & r [ j * total_elem_size + offsets [ i ] ] ;
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 ;
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 ) ;
if ( p_format & ARRAY_COMPRESS_TANGENT ) {
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 + + ) {
2017-07-03 15:44:45 +02:00
const int8_t * v = ( const int8_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
2017-03-05 16:44:50 +01:00
for ( int k = 0 ; k < 4 ; k + + ) {
2017-07-03 15:44:45 +02:00
w [ j * 4 + k ] = float ( v [ k ] / 127.0 ) ;
2016-11-10 03:55:06 +01:00
}
}
} else {
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 + + ) {
const float * v = ( const float * ) & r [ j * total_elem_size + offsets [ i ] ] ;
for ( int k = 0 ; k < 4 ; k + + ) {
w [ j * 4 + 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_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 ) ;
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_COLOR ) {
2020-02-17 22:06:54 +01:00
Color * 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 + + ) {
const uint8_t * v = ( const uint8_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
2017-06-17 03:17:25 +02:00
w [ j ] = Color ( float ( v [ 0 ] / 255.0 ) , float ( v [ 1 ] / 255.0 ) , float ( v [ 2 ] / 255.0 ) , float ( v [ 3 ] / 255.0 ) ) ;
2016-11-10 03:55:06 +01:00
}
} else {
2020-02-17 22:06:54 +01:00
Color * 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 + + ) {
const float * v = ( const float * ) & r [ j * total_elem_size + offsets [ i ] ] ;
w [ j ] = Color ( v [ 0 ] , v [ 1 ] , v [ 2 ] , 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 ) ;
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV ) {
2020-02-17 22:06:54 +01:00
Vector2 * 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 + + ) {
const uint16_t * v = ( const uint16_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
w [ j ] = Vector2 ( Math : : halfptr_to_float ( & v [ 0 ] ) , Math : : halfptr_to_float ( & v [ 1 ] ) ) ;
2016-11-10 03:55:06 +01:00
}
} else {
2020-02-17 22:06:54 +01:00
Vector2 * 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 + + ) {
const float * v = ( const float * ) & r [ j * total_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 ) ;
2017-03-05 16:44:50 +01:00
if ( p_format & ARRAY_COMPRESS_TEX_UV2 ) {
2020-02-17 22:06:54 +01:00
Vector2 * 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 + + ) {
const uint16_t * v = ( const uint16_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
w [ j ] = Vector2 ( Math : : halfptr_to_float ( & v [ 0 ] ) , Math : : halfptr_to_float ( & v [ 1 ] ) ) ;
2016-11-10 03:55:06 +01:00
}
} else {
2020-02-17 22:06:54 +01:00
Vector2 * 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 + + ) {
const float * v = ( const float * ) & r [ j * total_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_WEIGHTS : {
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 ) ;
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 + + ) {
const uint16_t * v = ( const uint16_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
for ( int k = 0 ; k < 4 ; k + + ) {
2017-11-24 04:52:14 +01:00
w [ j * 4 + 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-02-17 22:06:54 +01:00
Vector < int > arr ;
2017-03-05 16:44:50 +01:00
arr . resize ( p_vertex_len * 4 ) ;
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 + + ) {
const uint16_t * v = ( const uint16_t * ) & r [ j * total_elem_size + offsets [ i ] ] ;
for ( int k = 0 ; k < 4 ; k + + ) {
w [ j * 4 + 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-03-17 07:33:00 +01:00
Vector < Vector < uint8_t > > blend_shape_data = sd . blend_shapes ;
2019-08-19 00:40:52 +02:00
2017-09-10 12:10:28 +02:00
if ( blend_shape_data . size ( ) > 0 ) {
2019-08-19 00:40:52 +02:00
int vertex_len = sd . vertex_count ;
2017-09-10 12:10:28 +02:00
2020-02-17 22:06:54 +01:00
Vector < uint8_t > index_data = sd . index_data ;
2019-08-19 00:40:52 +02:00
int index_len = sd . index_count ;
2017-09-10 12:10:28 +02:00
2019-08-19 00:40:52 +02:00
uint32_t format = sd . format ;
2017-09-10 12:10:28 +02:00
Array blend_shape_array ;
blend_shape_array . resize ( blend_shape_data . size ( ) ) ;
for ( int i = 0 ; i < blend_shape_data . size ( ) ; i + + ) {
blend_shape_array . set ( i , _get_array_from_surface ( format , blend_shape_data [ i ] , vertex_len , index_data , index_len ) ) ;
}
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 ;
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 ;
return _get_array_from_surface ( format , vertex_data , vertex_len , index_data , index_len ) ;
}
#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 ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_format_offset " , " format " , " vertex_len " , " index_len " , " array_index " ) , & RenderingServer : : mesh_surface_get_format_offset ) ;
ClassDB : : bind_method ( D_METHOD ( " mesh_surface_get_format_stride " , " format " , " vertex_len " , " index_len " ) , & RenderingServer : : mesh_surface_get_format_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 ) ) ;
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 ) ;
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 ) ;
ClassDB : : bind_method ( D_METHOD ( " viewport_set_shadow_atlas_size " , " viewport " , " size " ) , & RenderingServer : : viewport_set_shadow_atlas_size ) ;
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 ) ;
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 ) ;
ClassDB : : bind_method ( D_METHOD ( " environment_set_adjustment " , " env " , " enable " , " brightness " , " contrast " , " saturation " , " ramp " ) , & 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-10-19 00:27:51 +02:00
ClassDB : : bind_method ( D_METHOD ( " environment_set_ssao " , " env " , " enable " , " radius " , " intensity " , " bias " , " light_affect " , " ao_channel_affect " , " blur " , " bilateral_sharpness " ) , & 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_shape_as_lines " , " occluder_polygon " , " shape " ) , & RenderingServer : : canvas_occluder_polygon_set_shape_as_lines ) ;
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 ) ;
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 ) ;
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 ) ;
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
2017-10-20 00:24:49 +02:00
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_NORMAL ) ;
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_TANGENT ) ;
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_COLOR ) ;
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_TEX_UV ) ;
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_TEX_UV2 ) ;
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_INDEX ) ;
2020-04-20 11:48:00 +02:00
BIND_ENUM_CONSTANT ( ARRAY_COMPRESS_DEFAULT ) ;
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 ) ;
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-10-19 00:27:51 +02:00
BIND_ENUM_CONSTANT ( ENV_SSAO_BLUR_DISABLED ) ;
BIND_ENUM_CONSTANT ( ENV_SSAO_BLUR_1x1 ) ;
BIND_ENUM_CONSTANT ( ENV_SSAO_BLUR_2x2 ) ;
BIND_ENUM_CONSTANT ( ENV_SSAO_BLUR_3x3 ) ;
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-03-27 19:21:27 +01:00
void RenderingServer : : _canvas_item_add_style_box ( RID p_item , const Rect2 & p_rect , const Rect2 & p_source , RID p_texture , const Vector < float > & p_margins , const Color & p_modulate ) {
2017-03-05 16:44:50 +01:00
ERR_FAIL_COND ( p_margins . size ( ) ! = 4 ) ;
2016-10-03 21:33:42 +02:00
//canvas_item_add_style_box(p_item,p_rect,p_source,p_texture,Vector2(p_margins[0],p_margins[1]),Vector2(p_margins[2],p_margins[3]),true,p_modulate);
2014-02-10 02:10:30 +01:00
}
2020-03-27 19:21:27 +01:00
void RenderingServer : : _camera_set_orthogonal ( RID p_camera , float p_size , float p_z_near , float p_z_far ) {
2017-03-05 16:44:50 +01:00
camera_set_orthogonal ( p_camera , p_size , p_z_near , p_z_far ) ;
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);
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) " ) ) ;
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 ) ;
2017-07-18 02:05:38 +02:00
GLOBAL_DEF ( " rendering/quality/shadow_atlas/size " , 4096 ) ;
2017-07-19 22:00:46 +02:00
GLOBAL_DEF ( " rendering/quality/shadow_atlas/size.mobile " , 2048 ) ;
2017-07-26 15:03:13 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/shadow_atlas/size " , PropertyInfo ( Variant : : INT , " rendering/quality/shadow_atlas/size " , PROPERTY_HINT_RANGE , " 256,16384 " ) ) ;
2017-07-18 02:05:38 +02:00
GLOBAL_DEF ( " rendering/quality/shadow_atlas/quadrant_0_subdiv " , 1 ) ;
GLOBAL_DEF ( " rendering/quality/shadow_atlas/quadrant_1_subdiv " , 2 ) ;
GLOBAL_DEF ( " rendering/quality/shadow_atlas/quadrant_2_subdiv " , 3 ) ;
GLOBAL_DEF ( " rendering/quality/shadow_atlas/quadrant_3_subdiv " , 4 ) ;
2017-07-19 22:00:46 +02:00
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/shadow_atlas/quadrant_0_subdiv " , PropertyInfo ( Variant : : INT , " rendering/quality/shadow_atlas/quadrant_0_subdiv " , PROPERTY_HINT_ENUM , " Disabled,1 Shadow,4 Shadows,16 Shadows,64 Shadows,256 Shadows,1024 Shadows " ) ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/shadow_atlas/quadrant_1_subdiv " , PropertyInfo ( Variant : : INT , " rendering/quality/shadow_atlas/quadrant_1_subdiv " , PROPERTY_HINT_ENUM , " Disabled,1 Shadow,4 Shadows,16 Shadows,64 Shadows,256 Shadows,1024 Shadows " ) ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/shadow_atlas/quadrant_2_subdiv " , PropertyInfo ( Variant : : INT , " rendering/quality/shadow_atlas/quadrant_2_subdiv " , PROPERTY_HINT_ENUM , " Disabled,1 Shadow,4 Shadows,16 Shadows,64 Shadows,256 Shadows,1024 Shadows " ) ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/shadow_atlas/quadrant_3_subdiv " , PropertyInfo ( Variant : : INT , " rendering/quality/shadow_atlas/quadrant_3_subdiv " , PROPERTY_HINT_ENUM , " Disabled,1 Shadow,4 Shadows,16 Shadows,64 Shadows,256 Shadows,1024 Shadows " ) ) ;
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
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-10-19 00:27:51 +02:00
GLOBAL_DEF ( " rendering/quality/ssao/quality " , 1 ) ;
ProjectSettings : : get_singleton ( ) - > set_custom_property_info ( " rendering/quality/ssao/quality " , PropertyInfo ( Variant : : INT , " rendering/quality/ssao/quality " , PROPERTY_HINT_ENUM , " Low (Fast),Medium (Average),High (Slow),Ultra (Slower) " ) ) ;
GLOBAL_DEF ( " rendering/quality/ssao/half_size " , false ) ;
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
GLOBAL_DEF ( " rendering/sdfgi/probe_ray_count " , 2 ) ;
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) " ) ) ;
GLOBAL_DEF ( " rendering/sdfgi/frames_to_converge " , 1 ) ;
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) " ) ) ;
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 " ) ) ;
2014-02-10 02:10:30 +01:00
}
2020-03-27 19:21:27 +01:00
RenderingServer : : ~ RenderingServer ( ) {
2020-04-02 01:20:12 +02:00
singleton = nullptr ;
2014-02-10 02:10:30 +01:00
}