Fixed minimum size of aabb in ImmediateMesh to draw only one vertex
This commit is contained in:
parent
52b7d5fa34
commit
ca2b7a87a5
|
@ -144,6 +144,7 @@ void ImmediateMesh::surface_add_vertex_2d(const Vector2 &p_vertex) {
|
||||||
|
|
||||||
active_surface_data.vertex_2d = true;
|
active_surface_data.vertex_2d = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImmediateMesh::surface_end() {
|
void ImmediateMesh::surface_end() {
|
||||||
ERR_FAIL_COND_MSG(!surface_active, "Not creating any surface. Use surface_begin() to do it.");
|
ERR_FAIL_COND_MSG(!surface_active, "Not creating any surface. Use surface_begin() to do it.");
|
||||||
ERR_FAIL_COND_MSG(!vertices.size(), "No vertices were added, surface can't be created.");
|
ERR_FAIL_COND_MSG(!vertices.size(), "No vertices were added, surface can't be created.");
|
||||||
|
@ -185,7 +186,7 @@ void ImmediateMesh::surface_end() {
|
||||||
vtx[2] = vertices[i].z;
|
vtx[2] = vertices[i].z;
|
||||||
}
|
}
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
aabb.position = vertices[i];
|
aabb = AABB(vertices[i], SMALL_VEC3); // Must have a bit of size.
|
||||||
} else {
|
} else {
|
||||||
aabb.expand_to(vertices[i]);
|
aabb.expand_to(vertices[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,8 @@ class ImmediateMesh : public Mesh {
|
||||||
Vector<uint8_t> surface_vertex_create_cache;
|
Vector<uint8_t> surface_vertex_create_cache;
|
||||||
Vector<uint8_t> surface_attribute_create_cache;
|
Vector<uint8_t> surface_attribute_create_cache;
|
||||||
|
|
||||||
|
const Vector3 SMALL_VEC3 = Vector3(CMP_EPSILON, CMP_EPSILON, CMP_EPSILON);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
|
|
|
@ -199,11 +199,11 @@ RID RenderingServer::_make_test_cube() {
|
||||||
normal_points[j][i % 3] = (i >= 3 ? -1 : 1);
|
normal_points[j][i % 3] = (i >= 3 ? -1 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//tri 1
|
// Tri 1
|
||||||
ADD_VTX(0);
|
ADD_VTX(0);
|
||||||
ADD_VTX(1);
|
ADD_VTX(1);
|
||||||
ADD_VTX(2);
|
ADD_VTX(2);
|
||||||
//tri 2
|
// Tri 2
|
||||||
ADD_VTX(2);
|
ADD_VTX(2);
|
||||||
ADD_VTX(3);
|
ADD_VTX(3);
|
||||||
ADD_VTX(0);
|
ADD_VTX(0);
|
||||||
|
@ -317,9 +317,6 @@ RID RenderingServer::get_white_texture() {
|
||||||
return white_texture;
|
return white_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SMALL_VEC2 Vector2(0.00001, 0.00001)
|
|
||||||
#define SMALL_VEC3 Vector3(0.00001, 0.00001, 0.00001)
|
|
||||||
|
|
||||||
Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_vertex_stride, uint32_t p_attrib_stride, uint32_t p_skin_stride, Vector<uint8_t> &r_vertex_array, Vector<uint8_t> &r_attrib_array, Vector<uint8_t> &r_skin_array, int p_vertex_array_len, Vector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> &r_bone_aabb) {
|
Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_vertex_stride, uint32_t p_attrib_stride, uint32_t p_skin_stride, Vector<uint8_t> &r_vertex_array, Vector<uint8_t> &r_attrib_array, Vector<uint8_t> &r_skin_array, int p_vertex_array_len, Vector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> &r_bone_aabb) {
|
||||||
uint8_t *vw = r_vertex_array.ptrw();
|
uint8_t *vw = r_vertex_array.ptrw();
|
||||||
uint8_t *aw = r_attrib_array.ptrw();
|
uint8_t *aw = r_attrib_array.ptrw();
|
||||||
|
@ -333,7 +330,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
int max_bone = 0;
|
int max_bone = 0;
|
||||||
|
|
||||||
for (int ai = 0; ai < RS::ARRAY_MAX; ai++) {
|
for (int ai = 0; ai < RS::ARRAY_MAX; ai++) {
|
||||||
if (!(p_format & (1 << ai))) { // no array
|
if (!(p_format & (1 << ai))) { // No array
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,7 +342,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
|
|
||||||
const Vector2 *src = array.ptr();
|
const Vector2 *src = array.ptr();
|
||||||
|
|
||||||
// setting vertices means regenerating the AABB
|
// Setting vertices means regenerating the AABB.
|
||||||
Rect2 aabb;
|
Rect2 aabb;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -355,7 +352,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
memcpy(&vw[p_offsets[ai] + i * p_vertex_stride], vector, sizeof(float) * 2);
|
memcpy(&vw[p_offsets[ai] + i * p_vertex_stride], vector, sizeof(float) * 2);
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
aabb = Rect2(src[i], SMALL_VEC2); //must have a bit of size
|
aabb = Rect2(src[i], SMALL_VEC2); // Must have a bit of size.
|
||||||
} else {
|
} else {
|
||||||
aabb.expand_to(src[i]);
|
aabb.expand_to(src[i]);
|
||||||
}
|
}
|
||||||
|
@ -370,7 +367,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
|
|
||||||
const Vector3 *src = array.ptr();
|
const Vector3 *src = array.ptr();
|
||||||
|
|
||||||
// setting vertices means regenerating the AABB
|
// Setting vertices means regenerating the AABB.
|
||||||
AABB aabb;
|
AABB aabb;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -505,7 +502,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
case ARRAY_CUSTOM_RGBA8_UNORM:
|
case ARRAY_CUSTOM_RGBA8_UNORM:
|
||||||
case ARRAY_CUSTOM_RGBA8_SNORM:
|
case ARRAY_CUSTOM_RGBA8_SNORM:
|
||||||
case ARRAY_CUSTOM_RG_HALF: {
|
case ARRAY_CUSTOM_RG_HALF: {
|
||||||
//size 4
|
// Size 4
|
||||||
ERR_FAIL_COND_V(p_arrays[ai].get_type() != Variant::PACKED_BYTE_ARRAY, ERR_INVALID_PARAMETER);
|
ERR_FAIL_COND_V(p_arrays[ai].get_type() != Variant::PACKED_BYTE_ARRAY, ERR_INVALID_PARAMETER);
|
||||||
|
|
||||||
Vector<uint8_t> array = p_arrays[ai];
|
Vector<uint8_t> array = p_arrays[ai];
|
||||||
|
@ -520,7 +517,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case ARRAY_CUSTOM_RGBA_HALF: {
|
case ARRAY_CUSTOM_RGBA_HALF: {
|
||||||
//size 8
|
// Size 8
|
||||||
ERR_FAIL_COND_V(p_arrays[ai].get_type() != Variant::PACKED_BYTE_ARRAY, ERR_INVALID_PARAMETER);
|
ERR_FAIL_COND_V(p_arrays[ai].get_type() != Variant::PACKED_BYTE_ARRAY, ERR_INVALID_PARAMETER);
|
||||||
|
|
||||||
Vector<uint8_t> array = p_arrays[ai];
|
Vector<uint8_t> array = p_arrays[ai];
|
||||||
|
@ -537,7 +534,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
case ARRAY_CUSTOM_RG_FLOAT:
|
case ARRAY_CUSTOM_RG_FLOAT:
|
||||||
case ARRAY_CUSTOM_RGB_FLOAT:
|
case ARRAY_CUSTOM_RGB_FLOAT:
|
||||||
case ARRAY_CUSTOM_RGBA_FLOAT: {
|
case ARRAY_CUSTOM_RGBA_FLOAT: {
|
||||||
//RF
|
// RF
|
||||||
ERR_FAIL_COND_V(p_arrays[ai].get_type() != Variant::PACKED_FLOAT32_ARRAY, ERR_INVALID_PARAMETER);
|
ERR_FAIL_COND_V(p_arrays[ai].get_type() != Variant::PACKED_FLOAT32_ARRAY, ERR_INVALID_PARAMETER);
|
||||||
|
|
||||||
Vector<float> array = p_arrays[ai];
|
Vector<float> array = p_arrays[ai];
|
||||||
|
@ -646,7 +643,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_format & RS::ARRAY_FORMAT_BONES) {
|
if (p_format & RS::ARRAY_FORMAT_BONES) {
|
||||||
//create AABBs for each detected bone
|
// Create AABBs for each detected bone.
|
||||||
int total_bones = max_bone + 1;
|
int total_bones = max_bone + 1;
|
||||||
|
|
||||||
bool first = r_bone_aabb.size() == 0;
|
bool first = r_bone_aabb.size() == 0;
|
||||||
|
@ -657,7 +654,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
for (int i = 0; i < total_bones; i++) {
|
for (int i = 0; i < total_bones; i++) {
|
||||||
r_bone_aabb.write[i].size = Vector3(-1, -1, -1); //negative means unused
|
r_bone_aabb.write[i].size = Vector3(-1, -1, -1); // Negative means unused.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,7 +683,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
|
||||||
ERR_FAIL_INDEX_V(idx, total_bones, ERR_INVALID_DATA);
|
ERR_FAIL_INDEX_V(idx, total_bones, ERR_INVALID_DATA);
|
||||||
|
|
||||||
if (bptr[idx].size.x < 0) {
|
if (bptr[idx].size.x < 0) {
|
||||||
//first
|
// First
|
||||||
bptr[idx] = AABB(v, SMALL_VEC3);
|
bptr[idx] = AABB(v, SMALL_VEC3);
|
||||||
any_valid = true;
|
any_valid = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -749,7 +746,7 @@ void RenderingServer::mesh_surface_make_offsets_from_format(uint32_t p_format, i
|
||||||
uint32_t *size_accum;
|
uint32_t *size_accum;
|
||||||
|
|
||||||
for (int i = 0; i < RS::ARRAY_MAX; i++) {
|
for (int i = 0; i < RS::ARRAY_MAX; i++) {
|
||||||
r_offsets[i] = 0; //reset
|
r_offsets[i] = 0; // Reset
|
||||||
|
|
||||||
if (i == RS::ARRAY_VERTEX) {
|
if (i == RS::ARRAY_VERTEX) {
|
||||||
size_accum = &r_vertex_element_size;
|
size_accum = &r_vertex_element_size;
|
||||||
|
@ -759,7 +756,7 @@ void RenderingServer::mesh_surface_make_offsets_from_format(uint32_t p_format, i
|
||||||
size_accum = &r_skin_element_size;
|
size_accum = &r_skin_element_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(p_format & (1 << i))) { // no array
|
if (!(p_format & (1 << i))) { // No array
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -873,7 +870,7 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa
|
||||||
|
|
||||||
uint32_t format = 0;
|
uint32_t format = 0;
|
||||||
|
|
||||||
// validation
|
// Validation
|
||||||
int index_array_len = 0;
|
int index_array_len = 0;
|
||||||
int array_len = 0;
|
int array_len = 0;
|
||||||
|
|
||||||
|
@ -921,10 +918,10 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_FAIL_COND_V((format & RS::ARRAY_FORMAT_VERTEX) == 0, ERR_INVALID_PARAMETER); // mandatory
|
ERR_FAIL_COND_V((format & RS::ARRAY_FORMAT_VERTEX) == 0, ERR_INVALID_PARAMETER); // Mandatory
|
||||||
|
|
||||||
if (p_blend_shapes.size()) {
|
if (p_blend_shapes.size()) {
|
||||||
//validate format for morphs
|
// Validate format for morphs.
|
||||||
for (int i = 0; i < p_blend_shapes.size(); i++) {
|
for (int i = 0; i < p_blend_shapes.size(); i++) {
|
||||||
uint32_t bsformat = 0;
|
uint32_t bsformat = 0;
|
||||||
Array arr = p_blend_shapes[i];
|
Array arr = p_blend_shapes[i];
|
||||||
|
@ -939,7 +936,7 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < RS::ARRAY_CUSTOM_COUNT; ++i) {
|
for (uint32_t i = 0; i < RS::ARRAY_CUSTOM_COUNT; ++i) {
|
||||||
// include custom array format type.
|
// Include custom array format type.
|
||||||
if (format & (1 << (ARRAY_CUSTOM0 + i))) {
|
if (format & (1 << (ARRAY_CUSTOM0 + i))) {
|
||||||
format |= (RS::ARRAY_FORMAT_CUSTOM_MASK << (RS::ARRAY_FORMAT_CUSTOM_BASE + i * RS::ARRAY_FORMAT_CUSTOM_BITS)) & p_compress_format;
|
format |= (RS::ARRAY_FORMAT_CUSTOM_MASK << (RS::ARRAY_FORMAT_CUSTOM_BASE + i * RS::ARRAY_FORMAT_CUSTOM_BITS)) & p_compress_format;
|
||||||
}
|
}
|
||||||
|
@ -954,7 +951,7 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa
|
||||||
mesh_surface_make_offsets_from_format(format, array_len, index_array_len, offsets, vertex_element_size, attrib_element_size, skin_element_size);
|
mesh_surface_make_offsets_from_format(format, array_len, index_array_len, offsets, vertex_element_size, attrib_element_size, skin_element_size);
|
||||||
|
|
||||||
uint32_t mask = (1 << ARRAY_MAX) - 1;
|
uint32_t mask = (1 << ARRAY_MAX) - 1;
|
||||||
format |= (~mask) & p_compress_format; //make the full format
|
format |= (~mask) & p_compress_format; // Make the full format.
|
||||||
|
|
||||||
int vertex_array_size = vertex_element_size * array_len;
|
int vertex_array_size = vertex_element_size * array_len;
|
||||||
int attrib_array_size = attrib_element_size * array_len;
|
int attrib_array_size = attrib_element_size * array_len;
|
||||||
|
@ -1010,13 +1007,13 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa
|
||||||
Vector<int> indices = p_lods[E];
|
Vector<int> indices = p_lods[E];
|
||||||
ERR_CONTINUE(indices.size() == 0);
|
ERR_CONTINUE(indices.size() == 0);
|
||||||
uint32_t index_count = indices.size();
|
uint32_t index_count = indices.size();
|
||||||
ERR_CONTINUE(index_count >= (uint32_t)index_array_len); //should be smaller..
|
ERR_CONTINUE(index_count >= (uint32_t)index_array_len); // Should be smaller..
|
||||||
|
|
||||||
const int *r = indices.ptr();
|
const int *r = indices.ptr();
|
||||||
|
|
||||||
Vector<uint8_t> data;
|
Vector<uint8_t> data;
|
||||||
if (array_len <= 65536) {
|
if (array_len <= 65536) {
|
||||||
//16 bits indices
|
// 16 bits indices
|
||||||
data.resize(indices.size() * 2);
|
data.resize(indices.size() * 2);
|
||||||
uint8_t *w = data.ptrw();
|
uint8_t *w = data.ptrw();
|
||||||
uint16_t *index_ptr = (uint16_t *)w;
|
uint16_t *index_ptr = (uint16_t *)w;
|
||||||
|
@ -1024,7 +1021,7 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa
|
||||||
index_ptr[i] = r[i];
|
index_ptr[i] = r[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//32 bits indices
|
// 32 bits indices
|
||||||
data.resize(indices.size() * 4);
|
data.resize(indices.size() * 4);
|
||||||
uint8_t *w = data.ptrw();
|
uint8_t *w = data.ptrw();
|
||||||
uint32_t *index_ptr = (uint32_t *)w;
|
uint32_t *index_ptr = (uint32_t *)w;
|
||||||
|
@ -1204,7 +1201,7 @@ Array RenderingServer::_get_array_from_surface(uint32_t p_format, Vector<uint8_t
|
||||||
case ARRAY_CUSTOM_RGBA8_SNORM:
|
case ARRAY_CUSTOM_RGBA8_SNORM:
|
||||||
case ARRAY_CUSTOM_RG_HALF:
|
case ARRAY_CUSTOM_RG_HALF:
|
||||||
case ARRAY_CUSTOM_RGBA_HALF: {
|
case ARRAY_CUSTOM_RGBA_HALF: {
|
||||||
//size 4
|
// Size 4
|
||||||
int s = type == ARRAY_CUSTOM_RGBA_HALF ? 8 : 4;
|
int s = type == ARRAY_CUSTOM_RGBA_HALF ? 8 : 4;
|
||||||
Vector<uint8_t> arr;
|
Vector<uint8_t> arr;
|
||||||
arr.resize(p_vertex_len * s);
|
arr.resize(p_vertex_len * s);
|
||||||
|
@ -1472,12 +1469,12 @@ ShaderLanguage::DataType RenderingServer::global_variable_type_get_shader_dataty
|
||||||
case RS::GLOBAL_VAR_TYPE_SAMPLERCUBE:
|
case RS::GLOBAL_VAR_TYPE_SAMPLERCUBE:
|
||||||
return ShaderLanguage::TYPE_SAMPLERCUBE;
|
return ShaderLanguage::TYPE_SAMPLERCUBE;
|
||||||
default:
|
default:
|
||||||
return ShaderLanguage::TYPE_MAX; //invalid or not found
|
return ShaderLanguage::TYPE_MAX; // Invalid or not found.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingDevice *RenderingServer::get_rendering_device() const {
|
RenderingDevice *RenderingServer::get_rendering_device() const {
|
||||||
// return the rendering device we're using globally
|
// Return the rendering device we're using globally.
|
||||||
return RenderingDevice::get_singleton();
|
return RenderingDevice::get_singleton();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2221,8 +2218,8 @@ void RenderingServer::_bind_methods() {
|
||||||
BIND_ENUM_CONSTANT(VIEWPORT_SCALING_3D_MODE_MAX);
|
BIND_ENUM_CONSTANT(VIEWPORT_SCALING_3D_MODE_MAX);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_DISABLED);
|
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_DISABLED);
|
||||||
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ONCE); //then goes to disabled); must be manually updated
|
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ONCE); // Then goes to disabled); must be manually updated.
|
||||||
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_WHEN_VISIBLE); // default
|
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_WHEN_VISIBLE); // Default
|
||||||
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE);
|
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE);
|
||||||
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ALWAYS);
|
BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ALWAYS);
|
||||||
|
|
||||||
|
@ -2553,7 +2550,8 @@ void RenderingServer::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_set_modulate", "item", "color"), &RenderingServer::canvas_item_set_modulate);
|
ClassDB::bind_method(D_METHOD("canvas_item_set_modulate", "item", "color"), &RenderingServer::canvas_item_set_modulate);
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_set_self_modulate", "item", "color"), &RenderingServer::canvas_item_set_self_modulate);
|
ClassDB::bind_method(D_METHOD("canvas_item_set_self_modulate", "item", "color"), &RenderingServer::canvas_item_set_self_modulate);
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_set_draw_behind_parent", "item", "enabled"), &RenderingServer::canvas_item_set_draw_behind_parent);
|
ClassDB::bind_method(D_METHOD("canvas_item_set_draw_behind_parent", "item", "enabled"), &RenderingServer::canvas_item_set_draw_behind_parent);
|
||||||
//primitives
|
|
||||||
|
/* Primitives */
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_line", "item", "from", "to", "color", "width"), &RenderingServer::canvas_item_add_line, DEFVAL(1.0));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_line", "item", "from", "to", "color", "width"), &RenderingServer::canvas_item_add_line, DEFVAL(1.0));
|
||||||
ClassDB::bind_method(D_METHOD("canvas_item_add_polyline", "item", "points", "colors", "width", "antialiased"), &RenderingServer::canvas_item_add_polyline, DEFVAL(1.0), DEFVAL(false));
|
ClassDB::bind_method(D_METHOD("canvas_item_add_polyline", "item", "points", "colors", "width", "antialiased"), &RenderingServer::canvas_item_add_polyline, DEFVAL(1.0), DEFVAL(false));
|
||||||
|
@ -2704,7 +2702,7 @@ void RenderingServer::_bind_methods() {
|
||||||
BIND_ENUM_CONSTANT(GLOBAL_VAR_TYPE_MAX);
|
BIND_ENUM_CONSTANT(GLOBAL_VAR_TYPE_MAX);
|
||||||
|
|
||||||
/* Free */
|
/* Free */
|
||||||
ClassDB::bind_method(D_METHOD("free_rid", "rid"), &RenderingServer::free); // shouldn't conflict with Object::free()
|
ClassDB::bind_method(D_METHOD("free_rid", "rid"), &RenderingServer::free); // Shouldn't conflict with Object::free().
|
||||||
|
|
||||||
/* Misc */
|
/* Misc */
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,9 @@ class RenderingServer : public Object {
|
||||||
|
|
||||||
RendererThreadPool *thread_pool = nullptr;
|
RendererThreadPool *thread_pool = nullptr;
|
||||||
|
|
||||||
|
const Vector2 SMALL_VEC2 = Vector2(CMP_EPSILON, CMP_EPSILON);
|
||||||
|
const Vector3 SMALL_VEC3 = Vector3(CMP_EPSILON, CMP_EPSILON, CMP_EPSILON);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RID _make_test_cube();
|
RID _make_test_cube();
|
||||||
void _free_internal_rids();
|
void _free_internal_rids();
|
||||||
|
@ -108,7 +111,7 @@ public:
|
||||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) = 0;
|
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) = 0;
|
||||||
virtual void texture_proxy_update(RID p_texture, RID p_proxy_to) = 0;
|
virtual void texture_proxy_update(RID p_texture, RID p_proxy_to) = 0;
|
||||||
|
|
||||||
//these two APIs can be used together or in combination with the others.
|
// These two APIs can be used together or in combination with the others.
|
||||||
virtual RID texture_2d_placeholder_create() = 0;
|
virtual RID texture_2d_placeholder_create() = 0;
|
||||||
virtual RID texture_2d_layered_placeholder_create(TextureLayeredType p_layered_type) = 0;
|
virtual RID texture_2d_layered_placeholder_create(TextureLayeredType p_layered_type) = 0;
|
||||||
virtual RID texture_3d_placeholder_create() = 0;
|
virtual RID texture_3d_placeholder_create() = 0;
|
||||||
|
@ -210,18 +213,18 @@ public:
|
||||||
|
|
||||||
enum ArrayType {
|
enum ArrayType {
|
||||||
ARRAY_VERTEX = 0, // RG32F or RGB32F (depending on 2D bit)
|
ARRAY_VERTEX = 0, // RG32F or RGB32F (depending on 2D bit)
|
||||||
ARRAY_NORMAL = 1, // A2B10G10R10, A is ignored
|
ARRAY_NORMAL = 1, // A2B10G10R10, A is ignored.
|
||||||
ARRAY_TANGENT = 2, // A2B10G10R10, A flips sign of binormal
|
ARRAY_TANGENT = 2, // A2B10G10R10, A flips sign of binormal.
|
||||||
ARRAY_COLOR = 3, // RGBA8
|
ARRAY_COLOR = 3, // RGBA8
|
||||||
ARRAY_TEX_UV = 4, // RG32F
|
ARRAY_TEX_UV = 4, // RG32F
|
||||||
ARRAY_TEX_UV2 = 5, // RG32F
|
ARRAY_TEX_UV2 = 5, // RG32F
|
||||||
ARRAY_CUSTOM0 = 6, // depends on ArrayCustomFormat
|
ARRAY_CUSTOM0 = 6, // Depends on ArrayCustomFormat.
|
||||||
ARRAY_CUSTOM1 = 7,
|
ARRAY_CUSTOM1 = 7,
|
||||||
ARRAY_CUSTOM2 = 8,
|
ARRAY_CUSTOM2 = 8,
|
||||||
ARRAY_CUSTOM3 = 9,
|
ARRAY_CUSTOM3 = 9,
|
||||||
ARRAY_BONES = 10, // RGBA16UI (x2 if 8 weights)
|
ARRAY_BONES = 10, // RGBA16UI (x2 if 8 weights)
|
||||||
ARRAY_WEIGHTS = 11, // RGBA16UNORM (x2 if 8 weights)
|
ARRAY_WEIGHTS = 11, // RGBA16UNORM (x2 if 8 weights)
|
||||||
ARRAY_INDEX = 12, // 16 or 32 bits depending on length > 0xFFFF
|
ARRAY_INDEX = 12, // 16 or 32 bits depending on length > 0xFFFF.
|
||||||
ARRAY_MAX = 13
|
ARRAY_MAX = 13
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -243,7 +246,7 @@ public:
|
||||||
|
|
||||||
enum ArrayFormat {
|
enum ArrayFormat {
|
||||||
/* ARRAY FORMAT FLAGS */
|
/* ARRAY FORMAT FLAGS */
|
||||||
ARRAY_FORMAT_VERTEX = 1 << ARRAY_VERTEX, // mandatory
|
ARRAY_FORMAT_VERTEX = 1 << ARRAY_VERTEX, // Mandatory
|
||||||
ARRAY_FORMAT_NORMAL = 1 << ARRAY_NORMAL,
|
ARRAY_FORMAT_NORMAL = 1 << ARRAY_NORMAL,
|
||||||
ARRAY_FORMAT_TANGENT = 1 << ARRAY_TANGENT,
|
ARRAY_FORMAT_TANGENT = 1 << ARRAY_TANGENT,
|
||||||
ARRAY_FORMAT_COLOR = 1 << ARRAY_COLOR,
|
ARRAY_FORMAT_COLOR = 1 << ARRAY_COLOR,
|
||||||
|
@ -287,9 +290,9 @@ public:
|
||||||
PrimitiveType primitive = PRIMITIVE_MAX;
|
PrimitiveType primitive = PRIMITIVE_MAX;
|
||||||
|
|
||||||
uint32_t format = 0;
|
uint32_t format = 0;
|
||||||
Vector<uint8_t> vertex_data; // vertex, normal, tangent (change with skinning, blendshape)
|
Vector<uint8_t> vertex_data; // Vertex, Normal, Tangent (change with skinning, blendshape).
|
||||||
Vector<uint8_t> attribute_data; // color,uv, uv2, custom0-3
|
Vector<uint8_t> attribute_data; // Color, UV, UV2, Custom0-3.
|
||||||
Vector<uint8_t> skin_data; // bone index, bone weight
|
Vector<uint8_t> skin_data; // Bone index, Bone weight.
|
||||||
uint32_t vertex_count = 0;
|
uint32_t vertex_count = 0;
|
||||||
Vector<uint8_t> index_data;
|
Vector<uint8_t> index_data;
|
||||||
uint32_t index_count = 0;
|
uint32_t index_count = 0;
|
||||||
|
@ -452,7 +455,7 @@ public:
|
||||||
virtual void light_set_bake_mode(RID p_light, LightBakeMode p_bake_mode) = 0;
|
virtual void light_set_bake_mode(RID p_light, LightBakeMode p_bake_mode) = 0;
|
||||||
virtual void light_set_max_sdfgi_cascade(RID p_light, uint32_t p_cascade) = 0;
|
virtual void light_set_max_sdfgi_cascade(RID p_light, uint32_t p_cascade) = 0;
|
||||||
|
|
||||||
// omni light
|
// Omni light
|
||||||
enum LightOmniShadowMode {
|
enum LightOmniShadowMode {
|
||||||
LIGHT_OMNI_SHADOW_DUAL_PARABOLOID,
|
LIGHT_OMNI_SHADOW_DUAL_PARABOLOID,
|
||||||
LIGHT_OMNI_SHADOW_CUBE,
|
LIGHT_OMNI_SHADOW_CUBE,
|
||||||
|
@ -460,7 +463,7 @@ public:
|
||||||
|
|
||||||
virtual void light_omni_set_shadow_mode(RID p_light, LightOmniShadowMode p_mode) = 0;
|
virtual void light_omni_set_shadow_mode(RID p_light, LightOmniShadowMode p_mode) = 0;
|
||||||
|
|
||||||
// directional light
|
// Directional light
|
||||||
enum LightDirectionalShadowMode {
|
enum LightDirectionalShadowMode {
|
||||||
LIGHT_DIRECTIONAL_SHADOW_ORTHOGONAL,
|
LIGHT_DIRECTIONAL_SHADOW_ORTHOGONAL,
|
||||||
LIGHT_DIRECTIONAL_SHADOW_PARALLEL_2_SPLITS,
|
LIGHT_DIRECTIONAL_SHADOW_PARALLEL_2_SPLITS,
|
||||||
|
@ -671,7 +674,7 @@ public:
|
||||||
|
|
||||||
virtual AABB particles_get_current_aabb(RID p_particles) = 0;
|
virtual AABB particles_get_current_aabb(RID p_particles) = 0;
|
||||||
|
|
||||||
virtual void particles_set_emission_transform(RID p_particles, const Transform3D &p_transform) = 0; //this is only used for 2D, in 3D it's automatic
|
virtual void particles_set_emission_transform(RID p_particles, const Transform3D &p_transform) = 0; // This is only used for 2D, in 3D it's automatic.
|
||||||
|
|
||||||
/* PARTICLES COLLISION API */
|
/* PARTICLES COLLISION API */
|
||||||
|
|
||||||
|
@ -689,16 +692,16 @@ public:
|
||||||
|
|
||||||
virtual void particles_collision_set_collision_type(RID p_particles_collision, ParticlesCollisionType p_type) = 0;
|
virtual void particles_collision_set_collision_type(RID p_particles_collision, ParticlesCollisionType p_type) = 0;
|
||||||
virtual void particles_collision_set_cull_mask(RID p_particles_collision, uint32_t p_cull_mask) = 0;
|
virtual void particles_collision_set_cull_mask(RID p_particles_collision, uint32_t p_cull_mask) = 0;
|
||||||
virtual void particles_collision_set_sphere_radius(RID p_particles_collision, real_t p_radius) = 0; //for spheres
|
virtual void particles_collision_set_sphere_radius(RID p_particles_collision, real_t p_radius) = 0; // For spheres.
|
||||||
virtual void particles_collision_set_box_extents(RID p_particles_collision, const Vector3 &p_extents) = 0; //for non-spheres
|
virtual void particles_collision_set_box_extents(RID p_particles_collision, const Vector3 &p_extents) = 0; // For non-spheres.
|
||||||
virtual void particles_collision_set_attractor_strength(RID p_particles_collision, real_t p_strength) = 0;
|
virtual void particles_collision_set_attractor_strength(RID p_particles_collision, real_t p_strength) = 0;
|
||||||
virtual void particles_collision_set_attractor_directionality(RID p_particles_collision, real_t p_directionality) = 0;
|
virtual void particles_collision_set_attractor_directionality(RID p_particles_collision, real_t p_directionality) = 0;
|
||||||
virtual void particles_collision_set_attractor_attenuation(RID p_particles_collision, real_t p_curve) = 0;
|
virtual void particles_collision_set_attractor_attenuation(RID p_particles_collision, real_t p_curve) = 0;
|
||||||
virtual void particles_collision_set_field_texture(RID p_particles_collision, RID p_texture) = 0; //for SDF and vector field, heightfield is dynamic
|
virtual void particles_collision_set_field_texture(RID p_particles_collision, RID p_texture) = 0; // For SDF and vector field, heightfield is dynamic.
|
||||||
|
|
||||||
virtual void particles_collision_height_field_update(RID p_particles_collision) = 0; //for SDF and vector field
|
virtual void particles_collision_height_field_update(RID p_particles_collision) = 0; // For SDF and vector field.
|
||||||
|
|
||||||
enum ParticlesCollisionHeightfieldResolution { //longest axis resolution
|
enum ParticlesCollisionHeightfieldResolution { // Longest axis resolution.
|
||||||
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_256,
|
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_256,
|
||||||
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_512,
|
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_512,
|
||||||
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_1024,
|
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_1024,
|
||||||
|
@ -708,7 +711,7 @@ public:
|
||||||
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_MAX,
|
PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual void particles_collision_set_height_field_resolution(RID p_particles_collision, ParticlesCollisionHeightfieldResolution p_resolution) = 0; //for SDF and vector field
|
virtual void particles_collision_set_height_field_resolution(RID p_particles_collision, ParticlesCollisionHeightfieldResolution p_resolution) = 0; // For SDF and vector field.
|
||||||
|
|
||||||
/* FOG VOLUME API */
|
/* FOG VOLUME API */
|
||||||
|
|
||||||
|
@ -750,7 +753,7 @@ public:
|
||||||
/* VIEWPORT API */
|
/* VIEWPORT API */
|
||||||
|
|
||||||
enum CanvasItemTextureFilter {
|
enum CanvasItemTextureFilter {
|
||||||
CANVAS_ITEM_TEXTURE_FILTER_DEFAULT, //uses canvas item setting for draw command, uses global setting for canvas item
|
CANVAS_ITEM_TEXTURE_FILTER_DEFAULT, // Uses canvas item setting for draw command, uses global setting for canvas item.
|
||||||
CANVAS_ITEM_TEXTURE_FILTER_NEAREST,
|
CANVAS_ITEM_TEXTURE_FILTER_NEAREST,
|
||||||
CANVAS_ITEM_TEXTURE_FILTER_LINEAR,
|
CANVAS_ITEM_TEXTURE_FILTER_LINEAR,
|
||||||
CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS,
|
CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS,
|
||||||
|
@ -761,7 +764,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CanvasItemTextureRepeat {
|
enum CanvasItemTextureRepeat {
|
||||||
CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT, //uses canvas item setting for draw command, uses global setting for canvas item
|
CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT, // Uses canvas item setting for draw command, uses global setting for canvas item.
|
||||||
CANVAS_ITEM_TEXTURE_REPEAT_DISABLED,
|
CANVAS_ITEM_TEXTURE_REPEAT_DISABLED,
|
||||||
CANVAS_ITEM_TEXTURE_REPEAT_ENABLED,
|
CANVAS_ITEM_TEXTURE_REPEAT_ENABLED,
|
||||||
CANVAS_ITEM_TEXTURE_REPEAT_MIRROR,
|
CANVAS_ITEM_TEXTURE_REPEAT_MIRROR,
|
||||||
|
@ -791,8 +794,8 @@ public:
|
||||||
|
|
||||||
enum ViewportUpdateMode {
|
enum ViewportUpdateMode {
|
||||||
VIEWPORT_UPDATE_DISABLED,
|
VIEWPORT_UPDATE_DISABLED,
|
||||||
VIEWPORT_UPDATE_ONCE, //then goes to disabled, must be manually updated
|
VIEWPORT_UPDATE_ONCE, // Then goes to disabled, must be manually updated.
|
||||||
VIEWPORT_UPDATE_WHEN_VISIBLE, // default
|
VIEWPORT_UPDATE_WHEN_VISIBLE, // Default
|
||||||
VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE,
|
VIEWPORT_UPDATE_WHEN_PARENT_VISIBLE,
|
||||||
VIEWPORT_UPDATE_ALWAYS
|
VIEWPORT_UPDATE_ALWAYS
|
||||||
};
|
};
|
||||||
|
@ -1171,7 +1174,7 @@ public:
|
||||||
|
|
||||||
virtual void instance_set_ignore_culling(RID p_instance, bool p_enabled) = 0;
|
virtual void instance_set_ignore_culling(RID p_instance, bool p_enabled) = 0;
|
||||||
|
|
||||||
// don't use these in a game!
|
// Don't use these in a game!
|
||||||
virtual Vector<ObjectID> instances_cull_aabb(const AABB &p_aabb, RID p_scenario = RID()) const = 0;
|
virtual Vector<ObjectID> instances_cull_aabb(const AABB &p_aabb, RID p_scenario = RID()) const = 0;
|
||||||
virtual Vector<ObjectID> instances_cull_ray(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario = RID()) const = 0;
|
virtual Vector<ObjectID> instances_cull_ray(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario = RID()) const = 0;
|
||||||
virtual Vector<ObjectID> instances_cull_convex(const Vector<Plane> &p_convex, RID p_scenario = RID()) const = 0;
|
virtual Vector<ObjectID> instances_cull_convex(const Vector<Plane> &p_convex, RID p_scenario = RID()) const = 0;
|
||||||
|
@ -1245,7 +1248,7 @@ public:
|
||||||
virtual void canvas_texture_set_channel(RID p_canvas_texture, CanvasTextureChannel p_channel, RID p_texture) = 0;
|
virtual void canvas_texture_set_channel(RID p_canvas_texture, CanvasTextureChannel p_channel, RID p_texture) = 0;
|
||||||
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) = 0;
|
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) = 0;
|
||||||
|
|
||||||
//takes effect only for new draw commands
|
// Takes effect only for new draw commands.
|
||||||
virtual void canvas_texture_set_texture_filter(RID p_canvas_texture, CanvasItemTextureFilter p_filter) = 0;
|
virtual void canvas_texture_set_texture_filter(RID p_canvas_texture, CanvasItemTextureFilter p_filter) = 0;
|
||||||
virtual void canvas_texture_set_texture_repeat(RID p_canvas_texture, CanvasItemTextureRepeat p_repeat) = 0;
|
virtual void canvas_texture_set_texture_repeat(RID p_canvas_texture, CanvasItemTextureRepeat p_repeat) = 0;
|
||||||
|
|
||||||
|
@ -1443,7 +1446,7 @@ public:
|
||||||
|
|
||||||
/* FREE */
|
/* FREE */
|
||||||
|
|
||||||
virtual void free(RID p_rid) = 0; ///< free RIDs associated with the rendering server
|
virtual void free(RID p_rid) = 0; // Free RIDs associated with the rendering server.
|
||||||
|
|
||||||
/* EVENT QUEUING */
|
/* EVENT QUEUING */
|
||||||
|
|
||||||
|
@ -1529,7 +1532,7 @@ public:
|
||||||
virtual ~RenderingServer();
|
virtual ~RenderingServer();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//binder helpers
|
// Binder helpers
|
||||||
RID _texture_2d_layered_create(const TypedArray<Image> &p_layers, TextureLayeredType p_layered_type);
|
RID _texture_2d_layered_create(const TypedArray<Image> &p_layers, TextureLayeredType p_layered_type);
|
||||||
RID _texture_3d_create(Image::Format p_format, int p_width, int p_height, int p_depth, bool p_mipmaps, const TypedArray<Image> &p_data);
|
RID _texture_3d_create(Image::Format p_format, int p_width, int p_height, int p_depth, bool p_mipmaps, const TypedArray<Image> &p_data);
|
||||||
void _texture_3d_update(RID p_texture, const TypedArray<Image> &p_data);
|
void _texture_3d_update(RID p_texture, const TypedArray<Image> &p_data);
|
||||||
|
@ -1543,7 +1546,7 @@ private:
|
||||||
void _particles_set_trail_bind_poses(RID p_particles, const TypedArray<Transform3D> &p_bind_poses);
|
void _particles_set_trail_bind_poses(RID p_particles, const TypedArray<Transform3D> &p_bind_poses);
|
||||||
};
|
};
|
||||||
|
|
||||||
// make variant understand the enums
|
// Make variant understand the enums.
|
||||||
VARIANT_ENUM_CAST(RenderingServer::TextureLayeredType);
|
VARIANT_ENUM_CAST(RenderingServer::TextureLayeredType);
|
||||||
VARIANT_ENUM_CAST(RenderingServer::CubeMapLayer);
|
VARIANT_ENUM_CAST(RenderingServer::CubeMapLayer);
|
||||||
VARIANT_ENUM_CAST(RenderingServer::ShaderMode);
|
VARIANT_ENUM_CAST(RenderingServer::ShaderMode);
|
||||||
|
|
Loading…
Reference in New Issue