2014-02-10 02:10:30 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* visual_server.cpp */
|
|
|
|
/*************************************************************************/
|
|
|
|
/* 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
|
|
|
|
2014-02-10 02:10:30 +01:00
|
|
|
#include "visual_server.h"
|
2017-08-27 21:07:15 +02:00
|
|
|
|
2018-09-11 18:13:45 +02:00
|
|
|
#include "core/method_bind_ext.gen.inc"
|
|
|
|
#include "core/project_settings.h"
|
2014-02-10 02:10:30 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
VisualServer *VisualServer::singleton = NULL;
|
|
|
|
VisualServer *(*VisualServer::create_func)() = NULL;
|
2014-02-10 02:10:30 +01:00
|
|
|
|
|
|
|
VisualServer *VisualServer::get_singleton() {
|
|
|
|
|
|
|
|
return singleton;
|
|
|
|
}
|
|
|
|
|
|
|
|
VisualServer *VisualServer::create() {
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
ERR_FAIL_COND_V(singleton, NULL);
|
2016-03-09 00:00:52 +01:00
|
|
|
|
2014-02-10 02:10:30 +01:00
|
|
|
if (create_func)
|
|
|
|
return create_func();
|
2016-03-09 00:00:52 +01:00
|
|
|
|
|
|
|
return NULL;
|
2014-02-10 02:10:30 +01:00
|
|
|
}
|
|
|
|
|
2017-10-20 00:24:49 +02:00
|
|
|
Array VisualServer::_texture_debug_usage_bind() {
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
Array VisualServer::_shader_get_param_list_bind(RID p_shader) const {
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
Array VisualServer::_instances_cull_aabb_bind(const AABB &p_aabb, RID p_scenario) const {
|
|
|
|
|
|
|
|
Vector<ObjectID> ids = instances_cull_aabb(p_aabb, p_scenario);
|
|
|
|
return to_array(ids);
|
|
|
|
}
|
|
|
|
|
|
|
|
Array VisualServer::_instances_cull_ray_bind(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario) const {
|
|
|
|
|
|
|
|
Vector<ObjectID> ids = instances_cull_ray(p_from, p_to, p_scenario);
|
|
|
|
return to_array(ids);
|
|
|
|
}
|
|
|
|
|
|
|
|
Array VisualServer::_instances_cull_convex_bind(const Array &p_convex, RID p_scenario) const {
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2014-02-10 02:10:30 +01:00
|
|
|
RID VisualServer::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++) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int y = 0; y < TEST_TEXTURE_SIZE; y++) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
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) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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 {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
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
|
|
|
|
2015-04-21 00:38:02 +02:00
|
|
|
void VisualServer::_free_internal_rids() {
|
|
|
|
|
|
|
|
if (test_texture.is_valid())
|
|
|
|
free(test_texture);
|
|
|
|
if (white_texture.is_valid())
|
|
|
|
free(white_texture);
|
|
|
|
if (test_material.is_valid())
|
|
|
|
free(test_material);
|
|
|
|
}
|
|
|
|
|
2014-02-10 02:10:30 +01:00
|
|
|
RID VisualServer::_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++) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
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++) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
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++) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (i < 3)
|
2018-04-21 16:35:23 +02:00
|
|
|
face_points[j][(i + k) % 3] = v[k];
|
2014-02-10 02:10:30 +01:00
|
|
|
else
|
2018-04-21 16:35:23 +02:00
|
|
|
face_points[3 - j][(i + k) % 3] = -v[k];
|
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;
|
|
|
|
d.resize(VS::ARRAY_MAX);
|
2017-03-05 16:44:50 +01:00
|
|
|
d[VisualServer::ARRAY_NORMAL] = normals;
|
|
|
|
d[VisualServer::ARRAY_TANGENT] = tangents;
|
|
|
|
d[VisualServer::ARRAY_TEX_UV] = uvs;
|
|
|
|
d[VisualServer::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());
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < vertices.size(); i++)
|
|
|
|
indices.set(i, i);
|
|
|
|
d[VisualServer::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;
|
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
RID VisualServer::make_sphere_mesh(int p_lats, int p_lons, float p_radius) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
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--) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
d.resize(VS::ARRAY_MAX);
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2014-05-29 15:56:39 +02:00
|
|
|
RID VisualServer::get_white_texture() {
|
|
|
|
|
|
|
|
if (white_texture.is_valid())
|
|
|
|
return white_texture;
|
|
|
|
|
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();
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < 16 * 3; i++)
|
|
|
|
w[i] = 255;
|
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-02-17 22:06:54 +01:00
|
|
|
Error VisualServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_stride, Vector<uint8_t> &r_vertex_array, int p_vertex_array_len, Vector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> &r_bone_aabb) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2020-02-17 22:06:54 +01:00
|
|
|
uint8_t *vw = r_vertex_array.ptrw();
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2020-02-17 22:06:54 +01:00
|
|
|
uint8_t *iw;
|
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
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int ai = 0; ai < VS::ARRAY_MAX; ai++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (!(p_format & (1 << ai))) // no array
|
2016-10-19 16:14:41 +02:00
|
|
|
continue;
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
switch (ai) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
|
|
|
case VS::ARRAY_VERTEX: {
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (p_format & VS::ARRAY_FLAG_USE_2D_VERTICES) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
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;
|
|
|
|
case VS::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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < p_vertex_array_len; i++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
|
|
|
|
case VS::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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
case VS::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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
copymem(&vw[p_offsets[ai] + i * p_stride], &src[i], 4 * 4);
|
2016-10-19 16:14:41 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} break;
|
|
|
|
case VS::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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < p_vertex_array_len; i++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
|
|
|
|
case VS::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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < p_vertex_array_len; i++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
case VS::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
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
ERR_FAIL_COND_V(array.size() != p_vertex_array_len * VS::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
|
|
|
{
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < p_vertex_array_len; i++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
|
|
|
uint16_t data[VS::ARRAY_WEIGHTS_SIZE];
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int j = 0; j < VS::ARRAY_WEIGHTS_SIZE; j++) {
|
|
|
|
data[j] = CLAMP(src[i * VS::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;
|
|
|
|
case VS::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
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
ERR_FAIL_COND_V(array.size() != p_vertex_array_len * VS::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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
uint16_t data[VS::ARRAY_WEIGHTS_SIZE];
|
|
|
|
for (int j = 0; j < VS::ARRAY_WEIGHTS_SIZE; j++) {
|
|
|
|
data[j] = src[i * VS::ARRAY_WEIGHTS_SIZE + j];
|
|
|
|
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;
|
|
|
|
case VS::ARRAY_INDEX: {
|
|
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (p_format & VS::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-02-17 22:06:54 +01:00
|
|
|
Vector<Vector3> vertices = p_arrays[VS::ARRAY_VERTEX];
|
|
|
|
Vector<int> bones = p_arrays[VS::ARRAY_BONES];
|
|
|
|
Vector<float> weights = p_arrays[VS::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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
int idx = rb[i * 4 + j];
|
|
|
|
float w = rw[i * 4 + j];
|
|
|
|
if (w == 0)
|
|
|
|
continue; //break;
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2017-11-21 01:36:32 +01:00
|
|
|
uint32_t VisualServer::mesh_surface_get_format_offset(uint32_t p_format, int p_vertex_len, int p_index_len, int p_array_index) const {
|
|
|
|
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];
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t VisualServer::mesh_surface_get_format_stride(uint32_t p_format, int p_vertex_len, int p_index_len) const {
|
|
|
|
uint32_t offsets[ARRAY_MAX];
|
|
|
|
return mesh_surface_make_offsets_from_format(p_format, p_vertex_len, p_index_len, offsets);
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t VisualServer::mesh_surface_make_offsets_from_format(uint32_t p_format, int p_vertex_len, int p_index_len, uint32_t *r_offsets) const {
|
|
|
|
|
|
|
|
int total_elem_size = 0;
|
|
|
|
|
|
|
|
for (int i = 0; i < VS::ARRAY_MAX; i++) {
|
|
|
|
|
|
|
|
r_offsets[i] = 0; //reset
|
|
|
|
|
|
|
|
if (!(p_format & (1 << i))) // no array
|
|
|
|
continue;
|
|
|
|
|
|
|
|
int elem_size = 0;
|
|
|
|
|
|
|
|
switch (i) {
|
|
|
|
|
|
|
|
case VS::ARRAY_VERTEX: {
|
|
|
|
|
|
|
|
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;
|
|
|
|
case VS::ARRAY_NORMAL: {
|
|
|
|
|
|
|
|
if (p_format & ARRAY_COMPRESS_NORMAL) {
|
|
|
|
elem_size = sizeof(uint32_t);
|
|
|
|
} else {
|
|
|
|
elem_size = sizeof(float) * 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
} break;
|
|
|
|
|
|
|
|
case VS::ARRAY_TANGENT: {
|
|
|
|
if (p_format & ARRAY_COMPRESS_TANGENT) {
|
|
|
|
elem_size = sizeof(uint32_t);
|
|
|
|
} else {
|
|
|
|
elem_size = sizeof(float) * 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
} break;
|
|
|
|
case VS::ARRAY_COLOR: {
|
|
|
|
|
|
|
|
if (p_format & ARRAY_COMPRESS_COLOR) {
|
|
|
|
elem_size = sizeof(uint32_t);
|
|
|
|
} else {
|
|
|
|
elem_size = sizeof(float) * 4;
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
case VS::ARRAY_TEX_UV: {
|
|
|
|
if (p_format & ARRAY_COMPRESS_TEX_UV) {
|
|
|
|
elem_size = sizeof(uint32_t);
|
|
|
|
} else {
|
|
|
|
elem_size = sizeof(float) * 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
} break;
|
|
|
|
|
|
|
|
case VS::ARRAY_TEX_UV2: {
|
|
|
|
if (p_format & ARRAY_COMPRESS_TEX_UV2) {
|
|
|
|
elem_size = sizeof(uint32_t);
|
|
|
|
} else {
|
|
|
|
elem_size = sizeof(float) * 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
} break;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::ARRAY_INDEX: {
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
Error VisualServer::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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
ERR_FAIL_INDEX_V(p_primitive, VS::PRIMITIVE_MAX, ERR_INVALID_PARAMETER);
|
|
|
|
ERR_FAIL_COND_V(p_arrays.size() != VS::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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (p_arrays[i].get_type() == Variant::NIL)
|
2016-10-19 16:14:41 +02:00
|
|
|
continue;
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
format |= (1 << i);
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (i == VS::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);
|
2017-03-05 16:44:50 +01:00
|
|
|
} else if (i == VS::ARRAY_INDEX) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
ERR_FAIL_COND_V((format & VS::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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (arr[j].get_type() != Variant::NIL)
|
|
|
|
bsformat |= (1 << j);
|
2016-10-19 16:14:41 +02:00
|
|
|
}
|
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
ERR_FAIL_COND_V((bsformat) != (format & (VS::ARRAY_FORMAT_INDEX - 1)), ERR_INVALID_PARAMETER);
|
2016-10-19 16:14:41 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t offsets[VS::ARRAY_MAX];
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
int total_elem_size = 0;
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < VS::ARRAY_MAX; i++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
offsets[i] = 0; //reset
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (!(format & (1 << i))) // no array
|
2016-10-19 16:14:41 +02:00
|
|
|
continue;
|
|
|
|
|
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) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
|
|
|
case VS::ARRAY_VERTEX: {
|
|
|
|
|
|
|
|
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;
|
|
|
|
case VS::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;
|
|
|
|
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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)) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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);
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
int index_array_size = offsets[VS::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-02-17 22:06:54 +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++) {
|
2016-10-19 16:14:41 +02:00
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
void VisualServer::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) {
|
|
|
|
|
|
|
|
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-02-17 22:06:54 +01:00
|
|
|
Array VisualServer::_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
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < VS::ARRAY_MAX; i++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
offsets[i] = 0; //reset
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (!(p_format & (1 << i))) // no array
|
2016-11-10 03:55:06 +01:00
|
|
|
continue;
|
|
|
|
|
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) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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;
|
|
|
|
case VS::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)) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
ret.resize(VS::ARRAY_MAX);
|
|
|
|
|
2020-02-17 22:06:54 +01:00
|
|
|
const uint8_t *r = p_vertex_data.ptr();
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int i = 0; i < VS::ARRAY_MAX; i++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (!(p_format & (1 << i)))
|
2016-11-10 03:55:06 +01:00
|
|
|
continue;
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
switch (i) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
|
|
|
case VS::ARRAY_VERTEX: {
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
if (p_format & ARRAY_FLAG_USE_2D_VERTICES) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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
|
|
|
{
|
2016-11-10 03:55:06 +01: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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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
|
|
|
{
|
2016-11-10 03:55:06 +01: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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
case VS::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) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
|
|
|
|
case VS::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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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;
|
|
|
|
case VS::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) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
case VS::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) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
|
|
|
|
case VS::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) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
case VS::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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
case VS::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++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
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;
|
|
|
|
case VS::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)) {
|
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
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
for (int j = 0; j < p_index_len; j++) {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
Array VisualServer::mesh_surface_get_arrays(RID p_mesh, int p_surface) const {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
Dictionary VisualServer::mesh_surface_get_lods(RID p_mesh, int p_surface) const {
|
2016-11-10 03:55:06 +01:00
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2017-09-10 12:10:28 +02:00
|
|
|
Array VisualServer::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-02-17 22:06:54 +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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-19 00:40:52 +02:00
|
|
|
Array VisualServer::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
|
2017-10-20 00:24:49 +02:00
|
|
|
Array VisualServer::_mesh_surface_get_skeleton_aabb_bind(RID p_mesh, int p_surface) const {
|
|
|
|
|
2017-11-17 03:09:00 +01:00
|
|
|
Vector<AABB> vec = VS::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
|
2014-02-10 02:10:30 +01:00
|
|
|
void VisualServer::_bind_methods() {
|
|
|
|
|
2017-10-11 17:45:19 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("force_sync"), &VisualServer::sync);
|
2018-05-09 08:11:43 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("force_draw", "swap_buffers", "frame_step"), &VisualServer::draw, DEFVAL(true), DEFVAL(0.0));
|
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
|
|
|
|
2019-06-26 00:49:52 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("texture_2d_create", "image"), &VisualServer::texture_2d_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("texture_2d_get", "texture"), &VisualServer::texture_2d_get);
|
|
|
|
|
2018-07-21 22:26:14 +02:00
|
|
|
#ifndef _3D_DISABLED
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("sky_create"), &VisualServer::sky_create);
|
2019-08-26 22:43:58 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("sky_set_texture", "sky", "panorama"), &VisualServer::sky_set_texture);
|
2018-07-21 22:26:14 +02:00
|
|
|
#endif
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("shader_create"), &VisualServer::shader_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_set_code", "shader", "code"), &VisualServer::shader_set_code);
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_get_code", "shader"), &VisualServer::shader_get_code);
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_get_param_list", "shader"), &VisualServer::_shader_get_param_list_bind);
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_set_default_texture_param", "shader", "name", "texture"), &VisualServer::shader_set_default_texture_param);
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_get_default_texture_param", "shader", "name"), &VisualServer::shader_get_default_texture_param);
|
2019-07-12 15:12:48 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("shader_get_param_default", "material", "parameter"), &VisualServer::shader_get_param_default);
|
2017-10-20 00:24:49 +02:00
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("material_create"), &VisualServer::material_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("material_set_shader", "shader_material", "shader"), &VisualServer::material_set_shader);
|
|
|
|
ClassDB::bind_method(D_METHOD("material_set_param", "material", "parameter", "value"), &VisualServer::material_set_param);
|
|
|
|
ClassDB::bind_method(D_METHOD("material_get_param", "material", "parameter"), &VisualServer::material_get_param);
|
|
|
|
ClassDB::bind_method(D_METHOD("material_set_render_priority", "material", "priority"), &VisualServer::material_set_render_priority);
|
2019-07-12 15:12:48 +02:00
|
|
|
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("material_set_next_pass", "material", "next_material"), &VisualServer::material_set_next_pass);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_create"), &VisualServer::mesh_create);
|
2017-11-21 01:36:32 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_get_format_offset", "format", "vertex_len", "index_len", "array_index"), &VisualServer::mesh_surface_get_format_offset);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_get_format_stride", "format", "vertex_len", "index_len"), &VisualServer::mesh_surface_get_format_stride);
|
2020-02-12 09:59:06 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("mesh_add_surface_from_arrays", "mesh", "primitive", "arrays", "blend_shapes", "lods", "compress_format"), &VisualServer::mesh_add_surface_from_arrays, DEFVAL(Array()), DEFVAL(Dictionary()), DEFVAL(ARRAY_COMPRESS_DEFAULT));
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("mesh_get_blend_shape_count", "mesh"), &VisualServer::mesh_get_blend_shape_count);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_set_blend_shape_mode", "mesh", "mode"), &VisualServer::mesh_set_blend_shape_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_get_blend_shape_mode", "mesh"), &VisualServer::mesh_get_blend_shape_mode);
|
2017-11-21 01:26:37 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_update_region", "mesh", "surface", "offset", "data"), &VisualServer::mesh_surface_update_region);
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_set_material", "mesh", "surface", "material"), &VisualServer::mesh_surface_set_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_get_material", "mesh", "surface"), &VisualServer::mesh_surface_get_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_get_arrays", "mesh", "surface"), &VisualServer::mesh_surface_get_arrays);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_surface_get_blend_shape_arrays", "mesh", "surface"), &VisualServer::mesh_surface_get_blend_shape_arrays);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_get_surface_count", "mesh"), &VisualServer::mesh_get_surface_count);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_set_custom_aabb", "mesh", "aabb"), &VisualServer::mesh_set_custom_aabb);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_get_custom_aabb", "mesh"), &VisualServer::mesh_get_custom_aabb);
|
|
|
|
ClassDB::bind_method(D_METHOD("mesh_clear", "mesh"), &VisualServer::mesh_clear);
|
|
|
|
|
2019-12-01 06:47:16 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_create"), &VisualServer::multimesh_create);
|
2019-09-14 05:37:42 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_allocate", "multimesh", "instances", "transform_format", "color_format", "custom_data_format"), &VisualServer::multimesh_allocate, DEFVAL(false), DEFVAL(false));
|
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
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_get_instance_count", "multimesh"), &VisualServer::multimesh_get_instance_count);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_set_mesh", "multimesh", "mesh"), &VisualServer::multimesh_set_mesh);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_set_transform", "multimesh", "index", "transform"), &VisualServer::multimesh_instance_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_set_transform_2d", "multimesh", "index", "transform"), &VisualServer::multimesh_instance_set_transform_2d);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_set_color", "multimesh", "index", "color"), &VisualServer::multimesh_instance_set_color);
|
2018-07-07 01:21:13 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_set_custom_data", "multimesh", "index", "custom_data"), &VisualServer::multimesh_instance_set_custom_data);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_get_mesh", "multimesh"), &VisualServer::multimesh_get_mesh);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_get_aabb", "multimesh"), &VisualServer::multimesh_get_aabb);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_get_transform", "multimesh", "index"), &VisualServer::multimesh_instance_get_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_get_transform_2d", "multimesh", "index"), &VisualServer::multimesh_instance_get_transform_2d);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_get_color", "multimesh", "index"), &VisualServer::multimesh_instance_get_color);
|
2018-07-07 01:21:13 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_instance_get_custom_data", "multimesh", "index"), &VisualServer::multimesh_instance_get_custom_data);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_set_visible_instances", "multimesh", "visible"), &VisualServer::multimesh_set_visible_instances);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_get_visible_instances", "multimesh"), &VisualServer::multimesh_get_visible_instances);
|
2019-09-14 05:37:42 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_set_buffer", "multimesh", "buffer"), &VisualServer::multimesh_set_buffer);
|
|
|
|
ClassDB::bind_method(D_METHOD("multimesh_get_buffer", "multimesh"), &VisualServer::multimesh_get_buffer);
|
2018-07-21 22:26:14 +02:00
|
|
|
#ifndef _3D_DISABLED
|
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
|
|
|
ClassDB::bind_method(D_METHOD("immediate_create"), &VisualServer::immediate_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_begin", "immediate", "primitive", "texture"), &VisualServer::immediate_begin, DEFVAL(RID()));
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_vertex", "immediate", "vertex"), &VisualServer::immediate_vertex);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_vertex_2d", "immediate", "vertex"), &VisualServer::immediate_vertex_2d);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_normal", "immediate", "normal"), &VisualServer::immediate_normal);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_tangent", "immediate", "tangent"), &VisualServer::immediate_tangent);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_color", "immediate", "color"), &VisualServer::immediate_color);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_uv", "immediate", "tex_uv"), &VisualServer::immediate_uv);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_uv2", "immediate", "tex_uv"), &VisualServer::immediate_uv2);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_end", "immediate"), &VisualServer::immediate_end);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_clear", "immediate"), &VisualServer::immediate_clear);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_set_material", "immediate", "material"), &VisualServer::immediate_set_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("immediate_get_material", "immediate"), &VisualServer::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
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_create"), &VisualServer::skeleton_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_allocate", "skeleton", "bones", "is_2d_skeleton"), &VisualServer::skeleton_allocate, DEFVAL(false));
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_get_bone_count", "skeleton"), &VisualServer::skeleton_get_bone_count);
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_bone_set_transform", "skeleton", "bone", "transform"), &VisualServer::skeleton_bone_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_bone_get_transform", "skeleton", "bone"), &VisualServer::skeleton_bone_get_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_bone_set_transform_2d", "skeleton", "bone", "transform"), &VisualServer::skeleton_bone_set_transform_2d);
|
|
|
|
ClassDB::bind_method(D_METHOD("skeleton_bone_get_transform_2d", "skeleton", "bone"), &VisualServer::skeleton_bone_get_transform_2d);
|
|
|
|
|
2018-07-21 22:26:14 +02:00
|
|
|
#ifndef _3D_DISABLED
|
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
|
|
|
ClassDB::bind_method(D_METHOD("directional_light_create"), &VisualServer::directional_light_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("omni_light_create"), &VisualServer::omni_light_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("spot_light_create"), &VisualServer::spot_light_create);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_color", "light", "color"), &VisualServer::light_set_color);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_param", "light", "param", "value"), &VisualServer::light_set_param);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_shadow", "light", "enabled"), &VisualServer::light_set_shadow);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_shadow_color", "light", "color"), &VisualServer::light_set_shadow_color);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_projector", "light", "texture"), &VisualServer::light_set_projector);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_negative", "light", "enable"), &VisualServer::light_set_negative);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_cull_mask", "light", "mask"), &VisualServer::light_set_cull_mask);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_set_reverse_cull_face_mode", "light", "enabled"), &VisualServer::light_set_reverse_cull_face_mode);
|
2019-04-23 11:36:36 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("light_set_use_gi", "light", "enabled"), &VisualServer::light_set_use_gi);
|
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
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("light_omni_set_shadow_mode", "light", "mode"), &VisualServer::light_omni_set_shadow_mode);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("light_directional_set_shadow_mode", "light", "mode"), &VisualServer::light_directional_set_shadow_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_directional_set_blend_splits", "light", "enable"), &VisualServer::light_directional_set_blend_splits);
|
|
|
|
ClassDB::bind_method(D_METHOD("light_directional_set_shadow_depth_range_mode", "light", "range_mode"), &VisualServer::light_directional_set_shadow_depth_range_mode);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_create"), &VisualServer::reflection_probe_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_update_mode", "probe", "mode"), &VisualServer::reflection_probe_set_update_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_intensity", "probe", "intensity"), &VisualServer::reflection_probe_set_intensity);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_interior_ambient", "probe", "color"), &VisualServer::reflection_probe_set_interior_ambient);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_interior_ambient_energy", "probe", "energy"), &VisualServer::reflection_probe_set_interior_ambient_energy);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_interior_ambient_probe_contribution", "probe", "contrib"), &VisualServer::reflection_probe_set_interior_ambient_probe_contribution);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_max_distance", "probe", "distance"), &VisualServer::reflection_probe_set_max_distance);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_extents", "probe", "extents"), &VisualServer::reflection_probe_set_extents);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_origin_offset", "probe", "offset"), &VisualServer::reflection_probe_set_origin_offset);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_as_interior", "probe", "enable"), &VisualServer::reflection_probe_set_as_interior);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_enable_box_projection", "probe", "enable"), &VisualServer::reflection_probe_set_enable_box_projection);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_enable_shadows", "probe", "enable"), &VisualServer::reflection_probe_set_enable_shadows);
|
|
|
|
ClassDB::bind_method(D_METHOD("reflection_probe_set_cull_mask", "probe", "layers"), &VisualServer::reflection_probe_set_cull_mask);
|
|
|
|
|
2019-10-03 22:39:08 +02:00
|
|
|
#ifndef _MSC_VER
|
|
|
|
#warning TODO all giprobe methods need re-binding
|
|
|
|
#endif
|
|
|
|
#if 0
|
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
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_create"), &VisualServer::gi_probe_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_bounds", "probe", "bounds"), &VisualServer::gi_probe_set_bounds);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_bounds", "probe"), &VisualServer::gi_probe_get_bounds);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_cell_size", "probe", "range"), &VisualServer::gi_probe_set_cell_size);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_cell_size", "probe"), &VisualServer::gi_probe_get_cell_size);
|
2018-08-20 15:58:53 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_to_cell_xform", "probe", "xform"), &VisualServer::gi_probe_set_to_cell_xform);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_to_cell_xform", "probe"), &VisualServer::gi_probe_get_to_cell_xform);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_dynamic_data", "probe", "data"), &VisualServer::gi_probe_set_dynamic_data);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_dynamic_data", "probe"), &VisualServer::gi_probe_get_dynamic_data);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_dynamic_range", "probe", "range"), &VisualServer::gi_probe_set_dynamic_range);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_dynamic_range", "probe"), &VisualServer::gi_probe_get_dynamic_range);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_energy", "probe", "energy"), &VisualServer::gi_probe_set_energy);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_energy", "probe"), &VisualServer::gi_probe_get_energy);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_bias", "probe", "bias"), &VisualServer::gi_probe_set_bias);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_bias", "probe"), &VisualServer::gi_probe_get_bias);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_normal_bias", "probe", "bias"), &VisualServer::gi_probe_set_normal_bias);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_normal_bias", "probe"), &VisualServer::gi_probe_get_normal_bias);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_propagation", "probe", "propagation"), &VisualServer::gi_probe_set_propagation);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_get_propagation", "probe"), &VisualServer::gi_probe_get_propagation);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_interior", "probe", "enable"), &VisualServer::gi_probe_set_interior);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_is_interior", "probe"), &VisualServer::gi_probe_is_interior);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_set_compress", "probe", "enable"), &VisualServer::gi_probe_set_compress);
|
|
|
|
ClassDB::bind_method(D_METHOD("gi_probe_is_compressed", "probe"), &VisualServer::gi_probe_is_compressed);
|
2019-10-03 22:39:08 +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
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_create"), &VisualServer::lightmap_capture_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_set_bounds", "capture", "bounds"), &VisualServer::lightmap_capture_set_bounds);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_get_bounds", "capture"), &VisualServer::lightmap_capture_get_bounds);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_set_octree", "capture", "octree"), &VisualServer::lightmap_capture_set_octree);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_set_octree_cell_transform", "capture", "xform"), &VisualServer::lightmap_capture_set_octree_cell_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_get_octree_cell_transform", "capture"), &VisualServer::lightmap_capture_get_octree_cell_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_set_octree_cell_subdiv", "capture", "subdiv"), &VisualServer::lightmap_capture_set_octree_cell_subdiv);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_get_octree_cell_subdiv", "capture"), &VisualServer::lightmap_capture_get_octree_cell_subdiv);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_get_octree", "capture"), &VisualServer::lightmap_capture_get_octree);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_set_energy", "capture", "energy"), &VisualServer::lightmap_capture_set_energy);
|
|
|
|
ClassDB::bind_method(D_METHOD("lightmap_capture_get_energy", "capture"), &VisualServer::lightmap_capture_get_energy);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("particles_create"), &VisualServer::particles_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_emitting", "particles", "emitting"), &VisualServer::particles_set_emitting);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_get_emitting", "particles"), &VisualServer::particles_get_emitting);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_amount", "particles", "amount"), &VisualServer::particles_set_amount);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_lifetime", "particles", "lifetime"), &VisualServer::particles_set_lifetime);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_one_shot", "particles", "one_shot"), &VisualServer::particles_set_one_shot);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_pre_process_time", "particles", "time"), &VisualServer::particles_set_pre_process_time);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_explosiveness_ratio", "particles", "ratio"), &VisualServer::particles_set_explosiveness_ratio);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_randomness_ratio", "particles", "ratio"), &VisualServer::particles_set_randomness_ratio);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_custom_aabb", "particles", "aabb"), &VisualServer::particles_set_custom_aabb);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_speed_scale", "particles", "scale"), &VisualServer::particles_set_speed_scale);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_use_local_coordinates", "particles", "enable"), &VisualServer::particles_set_use_local_coordinates);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_process_material", "particles", "material"), &VisualServer::particles_set_process_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_fixed_fps", "particles", "fps"), &VisualServer::particles_set_fixed_fps);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_fractional_delta", "particles", "enable"), &VisualServer::particles_set_fractional_delta);
|
2019-11-09 09:51:17 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("particles_is_inactive", "particles"), &VisualServer::particles_is_inactive);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_request_process", "particles"), &VisualServer::particles_request_process);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("particles_restart", "particles"), &VisualServer::particles_restart);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_draw_order", "particles", "order"), &VisualServer::particles_set_draw_order);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_draw_passes", "particles", "count"), &VisualServer::particles_set_draw_passes);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_draw_pass_mesh", "particles", "pass", "mesh"), &VisualServer::particles_set_draw_pass_mesh);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_get_current_aabb", "particles"), &VisualServer::particles_get_current_aabb);
|
|
|
|
ClassDB::bind_method(D_METHOD("particles_set_emission_transform", "particles", "transform"), &VisualServer::particles_set_emission_transform);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("camera_create"), &VisualServer::camera_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_perspective", "camera", "fovy_degrees", "z_near", "z_far"), &VisualServer::camera_set_perspective);
|
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_orthogonal", "camera", "size", "z_near", "z_far"), &VisualServer::camera_set_orthogonal);
|
2019-02-19 17:17:02 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_frustum", "camera", "size", "offset", "z_near", "z_far"), &VisualServer::camera_set_frustum);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_transform", "camera", "transform"), &VisualServer::camera_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_cull_mask", "camera", "layers"), &VisualServer::camera_set_cull_mask);
|
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_environment", "camera", "env"), &VisualServer::camera_set_environment);
|
|
|
|
ClassDB::bind_method(D_METHOD("camera_set_use_vertical_aspect", "camera", "enable"), &VisualServer::camera_set_use_vertical_aspect);
|
2017-10-20 00:24:49 +02:00
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_create"), &VisualServer::viewport_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_use_arvr", "viewport", "use_arvr"), &VisualServer::viewport_set_use_arvr);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_size", "viewport", "width", "height"), &VisualServer::viewport_set_size);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_active", "viewport", "active"), &VisualServer::viewport_set_active);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_parent_viewport", "viewport", "parent_viewport"), &VisualServer::viewport_set_parent_viewport);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_attach_to_screen", "viewport", "rect", "screen"), &VisualServer::viewport_attach_to_screen, DEFVAL(Rect2()), DEFVAL(0));
|
2019-05-08 20:25:34 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_render_direct_to_screen", "viewport", "enabled"), &VisualServer::viewport_set_render_direct_to_screen);
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("viewport_detach", "viewport"), &VisualServer::viewport_detach);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_update_mode", "viewport", "update_mode"), &VisualServer::viewport_set_update_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_clear_mode", "viewport", "clear_mode"), &VisualServer::viewport_set_clear_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_get_texture", "viewport"), &VisualServer::viewport_get_texture);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_hide_scenario", "viewport", "hidden"), &VisualServer::viewport_set_hide_scenario);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_hide_canvas", "viewport", "hidden"), &VisualServer::viewport_set_hide_canvas);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_disable_environment", "viewport", "disabled"), &VisualServer::viewport_set_disable_environment);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_attach_camera", "viewport", "camera"), &VisualServer::viewport_attach_camera);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_scenario", "viewport", "scenario"), &VisualServer::viewport_set_scenario);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_attach_canvas", "viewport", "canvas"), &VisualServer::viewport_attach_canvas);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_remove_canvas", "viewport", "canvas"), &VisualServer::viewport_remove_canvas);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_canvas_transform", "viewport", "canvas", "offset"), &VisualServer::viewport_set_canvas_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_transparent_background", "viewport", "enabled"), &VisualServer::viewport_set_transparent_background);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_global_canvas_transform", "viewport", "transform"), &VisualServer::viewport_set_global_canvas_transform);
|
2018-10-30 21:53:00 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_canvas_stacking", "viewport", "canvas", "layer", "sublayer"), &VisualServer::viewport_set_canvas_stacking);
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_shadow_atlas_size", "viewport", "size"), &VisualServer::viewport_set_shadow_atlas_size);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_shadow_atlas_quadrant_subdivision", "viewport", "quadrant", "subdivision"), &VisualServer::viewport_set_shadow_atlas_quadrant_subdivision);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_msaa", "viewport", "msaa"), &VisualServer::viewport_set_msaa);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_get_render_info", "viewport", "info"), &VisualServer::viewport_get_render_info);
|
|
|
|
ClassDB::bind_method(D_METHOD("viewport_set_debug_draw", "viewport", "draw"), &VisualServer::viewport_set_debug_draw);
|
|
|
|
|
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
|
|
|
ClassDB::bind_method(D_METHOD("environment_create"), &VisualServer::environment_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_background", "env", "bg"), &VisualServer::environment_set_background);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_sky", "env", "sky"), &VisualServer::environment_set_sky);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_sky_custom_fov", "env", "scale"), &VisualServer::environment_set_sky_custom_fov);
|
2018-12-15 06:27:03 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_sky_orientation", "env", "orientation"), &VisualServer::environment_set_sky_orientation);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_bg_color", "env", "color"), &VisualServer::environment_set_bg_color);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_bg_energy", "env", "energy"), &VisualServer::environment_set_bg_energy);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_canvas_max_layer", "env", "max_layer"), &VisualServer::environment_set_canvas_max_layer);
|
2020-02-12 09:59:06 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_ambient_light", "env", "color", "ambient", "energy", "sky_contibution", "reflection_source", "ao_color"), &VisualServer::environment_set_ambient_light, DEFVAL(VS::ENV_AMBIENT_SOURCE_BG), DEFVAL(1.0), DEFVAL(0.0), DEFVAL(VS::ENV_REFLECTION_SOURCE_BG), DEFVAL(Color()));
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_glow", "env", "enable", "level_flags", "intensity", "strength", "mix", "bloom_threshold", "blend_mode", "hdr_bleed_threshold", "hdr_bleed_scale", "hdr_luminance_cap", "bicubic_upscale"), &VisualServer::environment_set_glow);
|
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
|
|
|
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"), &VisualServer::environment_set_tonemap);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_adjustment", "env", "enable", "brightness", "contrast", "saturation", "ramp"), &VisualServer::environment_set_adjustment);
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_ssr", "env", "enable", "max_steps", "fade_in", "fade_out", "depth_tolerance", "roughness"), &VisualServer::environment_set_ssr);
|
2020-02-16 18:55:40 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_ssao", "env", "enable", "radius", "intensity", "bias", "light_affect", "ao_channel_affect", "blur", "bilateral_sharpness"), &VisualServer::environment_set_ssao);
|
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
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_fog", "env", "enable", "color", "sun_color", "sun_amount"), &VisualServer::environment_set_fog);
|
2018-11-14 02:19:11 +01:00
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_fog_depth", "env", "enable", "depth_begin", "depth_end", "depth_curve", "transmit", "transmit_curve"), &VisualServer::environment_set_fog_depth);
|
|
|
|
|
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
|
|
|
ClassDB::bind_method(D_METHOD("environment_set_fog_height", "env", "enable", "min_height", "max_height", "height_curve"), &VisualServer::environment_set_fog_height);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("scenario_create"), &VisualServer::scenario_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("scenario_set_debug", "scenario", "debug_mode"), &VisualServer::scenario_set_debug);
|
|
|
|
ClassDB::bind_method(D_METHOD("scenario_set_environment", "scenario", "environment"), &VisualServer::scenario_set_environment);
|
|
|
|
ClassDB::bind_method(D_METHOD("scenario_set_fallback_environment", "scenario", "environment"), &VisualServer::scenario_set_fallback_environment);
|
|
|
|
|
2018-07-21 22:26:14 +02:00
|
|
|
#ifndef _3D_DISABLED
|
|
|
|
|
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
|
|
|
ClassDB::bind_method(D_METHOD("instance_create2", "base", "scenario"), &VisualServer::instance_create2);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_create"), &VisualServer::instance_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_base", "instance", "base"), &VisualServer::instance_set_base);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_scenario", "instance", "scenario"), &VisualServer::instance_set_scenario);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_layer_mask", "instance", "mask"), &VisualServer::instance_set_layer_mask);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_transform", "instance", "transform"), &VisualServer::instance_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_attach_object_instance_id", "instance", "id"), &VisualServer::instance_attach_object_instance_id);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_blend_shape_weight", "instance", "shape", "weight"), &VisualServer::instance_set_blend_shape_weight);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_surface_material", "instance", "surface", "material"), &VisualServer::instance_set_surface_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_visible", "instance", "visible"), &VisualServer::instance_set_visible);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_use_lightmap", "instance", "lightmap_instance", "lightmap"), &VisualServer::instance_set_use_lightmap);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_custom_aabb", "instance", "aabb"), &VisualServer::instance_set_custom_aabb);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_attach_skeleton", "instance", "skeleton"), &VisualServer::instance_attach_skeleton);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_exterior", "instance", "enabled"), &VisualServer::instance_set_exterior);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_set_extra_visibility_margin", "instance", "margin"), &VisualServer::instance_set_extra_visibility_margin);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_geometry_set_flag", "instance", "flag", "enabled"), &VisualServer::instance_geometry_set_flag);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_geometry_set_cast_shadows_setting", "instance", "shadow_casting_setting"), &VisualServer::instance_geometry_set_cast_shadows_setting);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_geometry_set_material_override", "instance", "material"), &VisualServer::instance_geometry_set_material_override);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_geometry_set_draw_range", "instance", "min", "max", "min_margin", "max_margin"), &VisualServer::instance_geometry_set_draw_range);
|
|
|
|
ClassDB::bind_method(D_METHOD("instance_geometry_set_as_instance_lod", "instance", "as_lod_of_instance"), &VisualServer::instance_geometry_set_as_instance_lod);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("instances_cull_aabb", "aabb", "scenario"), &VisualServer::_instances_cull_aabb_bind, DEFVAL(RID()));
|
|
|
|
ClassDB::bind_method(D_METHOD("instances_cull_ray", "from", "to", "scenario"), &VisualServer::_instances_cull_ray_bind, DEFVAL(RID()));
|
|
|
|
ClassDB::bind_method(D_METHOD("instances_cull_convex", "convex", "scenario"), &VisualServer::_instances_cull_convex_bind, DEFVAL(RID()));
|
2018-07-21 22:26:14 +02:00
|
|
|
#endif
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_create"), &VisualServer::canvas_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_set_item_mirroring", "canvas", "item", "mirroring"), &VisualServer::canvas_set_item_mirroring);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_set_modulate", "canvas", "color"), &VisualServer::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
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_create"), &VisualServer::canvas_item_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_parent", "item", "parent"), &VisualServer::canvas_item_set_parent);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_visible", "item", "visible"), &VisualServer::canvas_item_set_visible);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_light_mask", "item", "mask"), &VisualServer::canvas_item_set_light_mask);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_transform", "item", "transform"), &VisualServer::canvas_item_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_clip", "item", "clip"), &VisualServer::canvas_item_set_clip);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_distance_field_mode", "item", "enabled"), &VisualServer::canvas_item_set_distance_field_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_custom_rect", "item", "use_custom_rect", "rect"), &VisualServer::canvas_item_set_custom_rect, DEFVAL(Rect2()));
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_modulate", "item", "color"), &VisualServer::canvas_item_set_modulate);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_self_modulate", "item", "color"), &VisualServer::canvas_item_set_self_modulate);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_draw_behind_parent", "item", "enabled"), &VisualServer::canvas_item_set_draw_behind_parent);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_line", "item", "from", "to", "color", "width", "antialiased"), &VisualServer::canvas_item_add_line, DEFVAL(1.0), DEFVAL(false));
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_polyline", "item", "points", "colors", "width", "antialiased"), &VisualServer::canvas_item_add_polyline, DEFVAL(1.0), DEFVAL(false));
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_rect", "item", "rect", "color"), &VisualServer::canvas_item_add_rect);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_circle", "item", "pos", "radius", "color"), &VisualServer::canvas_item_add_circle);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_texture_rect", "item", "rect", "texture", "tile", "modulate", "transpose", "normal_map"), &VisualServer::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"), &VisualServer::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"), &VisualServer::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"), &VisualServer::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"), &VisualServer::canvas_item_add_polygon, DEFVAL(Vector<Point2>()), DEFVAL(RID()), DEFVAL(RID()), DEFVAL(false));
|
2019-06-16 04:45:24 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_triangle_array", "item", "indices", "points", "colors", "uvs", "bones", "weights", "texture", "count", "normal_map", "antialiased"), &VisualServer::canvas_item_add_triangle_array, DEFVAL(Vector<Point2>()), DEFVAL(Vector<int>()), DEFVAL(Vector<float>()), DEFVAL(RID()), DEFVAL(-1), DEFVAL(RID()), DEFVAL(false));
|
2019-09-24 11:44:48 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_mesh", "item", "mesh", "transform", "modulate", "texture", "normal_map"), &VisualServer::canvas_item_add_mesh, DEFVAL(Transform2D()), DEFVAL(Color(1, 1, 1)), DEFVAL(RID()), DEFVAL(RID()));
|
2018-02-25 07:19:42 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_multimesh", "item", "mesh", "texture", "normal_map"), &VisualServer::canvas_item_add_multimesh, DEFVAL(RID()));
|
2018-09-27 13:05:57 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_particles", "item", "particles", "texture", "normal_map"), &VisualServer::canvas_item_add_particles);
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_set_transform", "item", "transform"), &VisualServer::canvas_item_add_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_add_clip_ignore", "item", "ignore"), &VisualServer::canvas_item_add_clip_ignore);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_sort_children_by_y", "item", "enabled"), &VisualServer::canvas_item_set_sort_children_by_y);
|
2019-06-25 03:24:07 +02:00
|
|
|
#endif
|
2017-12-29 23:06:03 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_z_index", "item", "z_index"), &VisualServer::canvas_item_set_z_index);
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_z_as_relative_to_parent", "item", "enabled"), &VisualServer::canvas_item_set_z_as_relative_to_parent);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_copy_to_backbuffer", "item", "enabled", "rect"), &VisualServer::canvas_item_set_copy_to_backbuffer);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_clear", "item"), &VisualServer::canvas_item_clear);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_draw_index", "item", "index"), &VisualServer::canvas_item_set_draw_index);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_material", "item", "material"), &VisualServer::canvas_item_set_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_item_set_use_parent_material", "item", "enabled"), &VisualServer::canvas_item_set_use_parent_material);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_create"), &VisualServer::canvas_light_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_attach_to_canvas", "light", "canvas"), &VisualServer::canvas_light_attach_to_canvas);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_enabled", "light", "enabled"), &VisualServer::canvas_light_set_enabled);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_scale", "light", "scale"), &VisualServer::canvas_light_set_scale);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_transform", "light", "transform"), &VisualServer::canvas_light_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_texture", "light", "texture"), &VisualServer::canvas_light_set_texture);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_texture_offset", "light", "offset"), &VisualServer::canvas_light_set_texture_offset);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_color", "light", "color"), &VisualServer::canvas_light_set_color);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_height", "light", "height"), &VisualServer::canvas_light_set_height);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_energy", "light", "energy"), &VisualServer::canvas_light_set_energy);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_z_range", "light", "min_z", "max_z"), &VisualServer::canvas_light_set_z_range);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_layer_range", "light", "min_layer", "max_layer"), &VisualServer::canvas_light_set_layer_range);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_item_cull_mask", "light", "mask"), &VisualServer::canvas_light_set_item_cull_mask);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_item_shadow_cull_mask", "light", "mask"), &VisualServer::canvas_light_set_item_shadow_cull_mask);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_mode", "light", "mode"), &VisualServer::canvas_light_set_mode);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_enabled", "light", "enabled"), &VisualServer::canvas_light_set_shadow_enabled);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_buffer_size", "light", "size"), &VisualServer::canvas_light_set_shadow_buffer_size);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_filter", "light", "filter"), &VisualServer::canvas_light_set_shadow_filter);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_color", "light", "color"), &VisualServer::canvas_light_set_shadow_color);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_smooth", "light", "smooth"), &VisualServer::canvas_light_set_shadow_smooth);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_occluder_create"), &VisualServer::canvas_light_occluder_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_occluder_attach_to_canvas", "occluder", "canvas"), &VisualServer::canvas_light_occluder_attach_to_canvas);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_enabled", "occluder", "enabled"), &VisualServer::canvas_light_occluder_set_enabled);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_polygon", "occluder", "polygon"), &VisualServer::canvas_light_occluder_set_polygon);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_transform", "occluder", "transform"), &VisualServer::canvas_light_occluder_set_transform);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_light_mask", "occluder", "mask"), &VisualServer::canvas_light_occluder_set_light_mask);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_create"), &VisualServer::canvas_occluder_polygon_create);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_set_shape", "occluder_polygon", "shape", "closed"), &VisualServer::canvas_occluder_polygon_set_shape);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_set_shape_as_lines", "occluder_polygon", "shape"), &VisualServer::canvas_occluder_polygon_set_shape_as_lines);
|
|
|
|
ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_set_cull_mode", "occluder_polygon", "mode"), &VisualServer::canvas_occluder_polygon_set_cull_mode);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("black_bars_set_margins", "left", "top", "right", "bottom"), &VisualServer::black_bars_set_margins);
|
|
|
|
ClassDB::bind_method(D_METHOD("black_bars_set_images", "left", "top", "right", "bottom"), &VisualServer::black_bars_set_images);
|
|
|
|
|
2018-01-25 00:23:31 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("free_rid", "rid"), &VisualServer::free); // shouldn't conflict with Object::free()
|
2017-10-20 00:24:49 +02:00
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("request_frame_drawn_callback", "where", "method", "userdata"), &VisualServer::request_frame_drawn_callback);
|
|
|
|
ClassDB::bind_method(D_METHOD("has_changed"), &VisualServer::has_changed);
|
|
|
|
ClassDB::bind_method(D_METHOD("init"), &VisualServer::init);
|
|
|
|
ClassDB::bind_method(D_METHOD("finish"), &VisualServer::finish);
|
|
|
|
ClassDB::bind_method(D_METHOD("get_render_info", "info"), &VisualServer::get_render_info);
|
2019-09-13 20:08:05 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_video_adapter_name"), &VisualServer::get_video_adapter_name);
|
|
|
|
ClassDB::bind_method(D_METHOD("get_video_adapter_vendor"), &VisualServer::get_video_adapter_vendor);
|
2018-07-21 22:26:14 +02:00
|
|
|
#ifndef _3D_DISABLED
|
2017-10-20 00:24:49 +02:00
|
|
|
|
2018-07-21 22:26:14 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("make_sphere_mesh", "latitudes", "longitudes", "radius"), &VisualServer::make_sphere_mesh);
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_test_cube"), &VisualServer::get_test_cube);
|
2018-07-21 22:26:14 +02:00
|
|
|
#endif
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_test_texture"), &VisualServer::get_test_texture);
|
|
|
|
ClassDB::bind_method(D_METHOD("get_white_texture"), &VisualServer::get_white_texture);
|
|
|
|
|
2019-06-13 22:37:19 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("set_boot_image", "image", "color", "scale", "use_filter"), &VisualServer::set_boot_image, DEFVAL(true));
|
2017-10-20 00:24:49 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("set_default_clear_color", "color"), &VisualServer::set_default_clear_color);
|
|
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("has_feature", "feature"), &VisualServer::has_feature);
|
|
|
|
ClassDB::bind_method(D_METHOD("has_os_feature", "feature"), &VisualServer::has_os_feature);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_debug_generate_wireframes", "generate"), &VisualServer::set_debug_generate_wireframes);
|
|
|
|
|
|
|
|
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
|
|
|
|
2017-10-20 00:24:49 +02:00
|
|
|
BIND_CONSTANT(MATERIAL_RENDER_PRIORITY_MIN);
|
|
|
|
BIND_CONSTANT(MATERIAL_RENDER_PRIORITY_MAX);
|
|
|
|
|
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);
|
|
|
|
BIND_ENUM_CONSTANT(SHADER_MAX);
|
|
|
|
|
|
|
|
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);
|
|
|
|
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(ARRAY_COMPRESS_DEFAULT);
|
|
|
|
|
|
|
|
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);
|
|
|
|
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_CONTACT_SHADOW_SIZE);
|
|
|
|
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);
|
|
|
|
BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE);
|
|
|
|
BIND_ENUM_CONSTANT(LIGHT_PARAM_MAX);
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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);
|
|
|
|
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);
|
2019-11-10 09:30:20 +01:00
|
|
|
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_EXT_2X);
|
|
|
|
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_EXT_4X);
|
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);
|
|
|
|
BIND_ENUM_CONSTANT(VIEWPORT_DEBUG_DRAW_ROUGHNESS_LIMITER);
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
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);
|
|
|
|
BIND_ENUM_CONSTANT(INSTANCE_LIGHT);
|
|
|
|
BIND_ENUM_CONSTANT(INSTANCE_REFLECTION_PROBE);
|
|
|
|
BIND_ENUM_CONSTANT(INSTANCE_GI_PROBE);
|
2017-12-16 20:34:16 +01:00
|
|
|
BIND_ENUM_CONSTANT(INSTANCE_LIGHTMAP_CAPTURE);
|
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);
|
|
|
|
|
2017-10-20 00:24:49 +02:00
|
|
|
BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_ADD);
|
|
|
|
BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_SUB);
|
|
|
|
BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_MIX);
|
|
|
|
BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_MASK);
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
void VisualServer::_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) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
void VisualServer::_camera_set_orthogonal(RID p_camera, float p_size, float p_z_near, float p_z_far) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
void VisualServer::mesh_add_surface_from_mesh_data(RID p_mesh, const Geometry::MeshData &p_mesh_data) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
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++) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
const Geometry::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++) {
|
2016-03-09 00:00:52 +01:00
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
#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;
|
|
|
|
d.resize(VS::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-02-17 22:06:54 +01:00
|
|
|
void VisualServer::mesh_add_surface_from_planes(RID p_mesh, const Vector<Plane> &p_planes) {
|
2014-02-10 02:10:30 +01:00
|
|
|
|
|
|
|
Geometry::MeshData mdata = Geometry::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
|
|
|
}
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
void VisualServer::immediate_vertex_2d(RID p_immediate, const Vector2 &p_vertex) {
|
|
|
|
immediate_vertex(p_immediate, Vector3(p_vertex.x, p_vertex.y, 0));
|
2016-11-23 11:04:55 +01:00
|
|
|
}
|
|
|
|
|
2014-02-10 02:10:30 +01:00
|
|
|
RID VisualServer::instance_create2(RID p_base, RID p_scenario) {
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
VisualServer::VisualServer() {
|
|
|
|
|
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
|
|
|
|
|
|
|
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"));
|
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"));
|
|
|
|
|
|
|
|
GLOBAL_DEF("rendering/quality/shadows/filter_mode", 1);
|
|
|
|
GLOBAL_DEF("rendering/quality/shadows/filter_mode.mobile", 0);
|
2020-01-16 01:23:21 +01:00
|
|
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/shadows/filter_mode", PropertyInfo(Variant::INT, "rendering/quality/shadows/filter_mode", PROPERTY_HINT_ENUM, "Disabled (Fastest),PCF5,PCF13 (Slowest)"));
|
2017-07-19 22:00:46 +02:00
|
|
|
|
2019-08-26 22:43:58 +02:00
|
|
|
GLOBAL_DEF("rendering/quality/reflections/roughness_layers", 6);
|
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);
|
|
|
|
GLOBAL_DEF("rendering/quality/reflection_atlas/reflection_size", 128);
|
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-01-21 18:24:22 +01:00
|
|
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/gi_probes/quality", PropertyInfo(Variant::INT, "rendering/quality/gi_probes/quality", PROPERTY_HINT_ENUM, "Ultra-Low (1 cone - fastest),Medium (4 cones), High (6 cones - slowest)"));
|
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
|
|
|
|
|
|
|
GLOBAL_DEF("rendering/quality/filters/use_nearest_mipmap_filter", false);
|
2019-07-21 16:31:30 +02:00
|
|
|
GLOBAL_DEF("rendering/quality/filters/max_anisotropy", 4);
|
2020-01-16 01:23:21 +01:00
|
|
|
|
|
|
|
GLOBAL_DEF("rendering/quality/filters/depth_of_field_bokeh_shape", 1);
|
|
|
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/depth_of_field_bokeh_shape", PropertyInfo(Variant::INT, "rendering/quality/filters/depth_of_field_bokeh_shape", PROPERTY_HINT_ENUM, "Box (Fastest),Hexagon,Circle (Slowest)"));
|
|
|
|
GLOBAL_DEF("rendering/quality/filters/depth_of_field_bokeh_quality", 2);
|
|
|
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/depth_of_field_bokeh_quality", PropertyInfo(Variant::INT, "rendering/quality/filters/depth_of_field_bokeh_quality", PROPERTY_HINT_ENUM, "Very Low (Fast),Low,Medium,High (Slow)"));
|
|
|
|
GLOBAL_DEF("rendering/quality/filters/depth_of_field_use_jitter", false);
|
2020-01-25 11:18:55 +01: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,High (Slow),Ultra (Very Slow)"));
|
|
|
|
GLOBAL_DEF("rendering/quality/ssao/half_size", false);
|
2020-01-27 00:09:40 +01:00
|
|
|
|
|
|
|
GLOBAL_DEF("rendering/quality/filters/screen_space_roughness_limiter", 0);
|
|
|
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/screen_space_roughness_limiter", PropertyInfo(Variant::INT, "rendering/quality/filters/screen_space_roughness_limiter", PROPERTY_HINT_ENUM, "Disabled,Enabled (Small Cost)"));
|
|
|
|
GLOBAL_DEF("rendering/quality/filters/screen_space_roughness_limiter_curve", 1.0);
|
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
|
|
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/screen_space_roughness_limiter_curve", PropertyInfo(Variant::FLOAT, "rendering/quality/filters/screen_space_roughness_limiter_curve", PROPERTY_HINT_EXP_EASING, "0.01,8,0.01"));
|
2014-02-10 02:10:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
VisualServer::~VisualServer() {
|
|
|
|
|
2017-03-05 16:44:50 +01:00
|
|
|
singleton = NULL;
|
2014-02-10 02:10:30 +01:00
|
|
|
}
|