Merge pull request #60627 from aaronfranke/rename-elements
Rename Transform2D and Basis `elements` to `columns` and `rows` respectively
This commit is contained in:
commit
931838b330
59 changed files with 1081 additions and 1078 deletions
|
|
@ -331,9 +331,9 @@ public:
|
|||
//extract scale and scale the matrix by it, makes things simpler
|
||||
Vector3 scale = p_half_extents;
|
||||
for (uint32_t i = 0; i < 3; i++) {
|
||||
float s = xform.basis.elements[i].length();
|
||||
float s = xform.basis.rows[i].length();
|
||||
scale[i] *= s;
|
||||
xform.basis.elements[i] /= s;
|
||||
xform.basis.rows[i] /= s;
|
||||
};
|
||||
|
||||
float box_depth = Math::abs(xform.basis.xform_inv(Vector3(0, 0, -1)).dot(scale));
|
||||
|
|
|
|||
|
|
@ -41,57 +41,57 @@
|
|||
#include "servers/rendering/rendering_server_default.h"
|
||||
|
||||
void RendererCanvasRenderRD::_update_transform_2d_to_mat4(const Transform2D &p_transform, float *p_mat4) {
|
||||
p_mat4[0] = p_transform.elements[0][0];
|
||||
p_mat4[1] = p_transform.elements[0][1];
|
||||
p_mat4[0] = p_transform.columns[0][0];
|
||||
p_mat4[1] = p_transform.columns[0][1];
|
||||
p_mat4[2] = 0;
|
||||
p_mat4[3] = 0;
|
||||
p_mat4[4] = p_transform.elements[1][0];
|
||||
p_mat4[5] = p_transform.elements[1][1];
|
||||
p_mat4[4] = p_transform.columns[1][0];
|
||||
p_mat4[5] = p_transform.columns[1][1];
|
||||
p_mat4[6] = 0;
|
||||
p_mat4[7] = 0;
|
||||
p_mat4[8] = 0;
|
||||
p_mat4[9] = 0;
|
||||
p_mat4[10] = 1;
|
||||
p_mat4[11] = 0;
|
||||
p_mat4[12] = p_transform.elements[2][0];
|
||||
p_mat4[13] = p_transform.elements[2][1];
|
||||
p_mat4[12] = p_transform.columns[2][0];
|
||||
p_mat4[13] = p_transform.columns[2][1];
|
||||
p_mat4[14] = 0;
|
||||
p_mat4[15] = 1;
|
||||
}
|
||||
|
||||
void RendererCanvasRenderRD::_update_transform_2d_to_mat2x4(const Transform2D &p_transform, float *p_mat2x4) {
|
||||
p_mat2x4[0] = p_transform.elements[0][0];
|
||||
p_mat2x4[1] = p_transform.elements[1][0];
|
||||
p_mat2x4[0] = p_transform.columns[0][0];
|
||||
p_mat2x4[1] = p_transform.columns[1][0];
|
||||
p_mat2x4[2] = 0;
|
||||
p_mat2x4[3] = p_transform.elements[2][0];
|
||||
p_mat2x4[3] = p_transform.columns[2][0];
|
||||
|
||||
p_mat2x4[4] = p_transform.elements[0][1];
|
||||
p_mat2x4[5] = p_transform.elements[1][1];
|
||||
p_mat2x4[4] = p_transform.columns[0][1];
|
||||
p_mat2x4[5] = p_transform.columns[1][1];
|
||||
p_mat2x4[6] = 0;
|
||||
p_mat2x4[7] = p_transform.elements[2][1];
|
||||
p_mat2x4[7] = p_transform.columns[2][1];
|
||||
}
|
||||
|
||||
void RendererCanvasRenderRD::_update_transform_2d_to_mat2x3(const Transform2D &p_transform, float *p_mat2x3) {
|
||||
p_mat2x3[0] = p_transform.elements[0][0];
|
||||
p_mat2x3[1] = p_transform.elements[0][1];
|
||||
p_mat2x3[2] = p_transform.elements[1][0];
|
||||
p_mat2x3[3] = p_transform.elements[1][1];
|
||||
p_mat2x3[4] = p_transform.elements[2][0];
|
||||
p_mat2x3[5] = p_transform.elements[2][1];
|
||||
p_mat2x3[0] = p_transform.columns[0][0];
|
||||
p_mat2x3[1] = p_transform.columns[0][1];
|
||||
p_mat2x3[2] = p_transform.columns[1][0];
|
||||
p_mat2x3[3] = p_transform.columns[1][1];
|
||||
p_mat2x3[4] = p_transform.columns[2][0];
|
||||
p_mat2x3[5] = p_transform.columns[2][1];
|
||||
}
|
||||
|
||||
void RendererCanvasRenderRD::_update_transform_to_mat4(const Transform3D &p_transform, float *p_mat4) {
|
||||
p_mat4[0] = p_transform.basis.elements[0][0];
|
||||
p_mat4[1] = p_transform.basis.elements[1][0];
|
||||
p_mat4[2] = p_transform.basis.elements[2][0];
|
||||
p_mat4[0] = p_transform.basis.rows[0][0];
|
||||
p_mat4[1] = p_transform.basis.rows[1][0];
|
||||
p_mat4[2] = p_transform.basis.rows[2][0];
|
||||
p_mat4[3] = 0;
|
||||
p_mat4[4] = p_transform.basis.elements[0][1];
|
||||
p_mat4[5] = p_transform.basis.elements[1][1];
|
||||
p_mat4[6] = p_transform.basis.elements[2][1];
|
||||
p_mat4[4] = p_transform.basis.rows[0][1];
|
||||
p_mat4[5] = p_transform.basis.rows[1][1];
|
||||
p_mat4[6] = p_transform.basis.rows[2][1];
|
||||
p_mat4[7] = 0;
|
||||
p_mat4[8] = p_transform.basis.elements[0][2];
|
||||
p_mat4[9] = p_transform.basis.elements[1][2];
|
||||
p_mat4[10] = p_transform.basis.elements[2][2];
|
||||
p_mat4[8] = p_transform.basis.rows[0][2];
|
||||
p_mat4[9] = p_transform.basis.rows[1][2];
|
||||
p_mat4[10] = p_transform.basis.rows[2][2];
|
||||
p_mat4[11] = 0;
|
||||
p_mat4[12] = p_transform.origin.x;
|
||||
p_mat4[13] = p_transform.origin.y;
|
||||
|
|
@ -1175,7 +1175,7 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
|
|||
ERR_CONTINUE(!clight);
|
||||
}
|
||||
|
||||
Vector2 canvas_light_dir = l->xform_cache.elements[1].normalized();
|
||||
Vector2 canvas_light_dir = l->xform_cache.columns[1].normalized();
|
||||
|
||||
state.light_uniforms[index].position[0] = -canvas_light_dir.x;
|
||||
state.light_uniforms[index].position[1] = -canvas_light_dir.y;
|
||||
|
|
@ -1246,7 +1246,7 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
|
|||
_update_transform_2d_to_mat2x4(to_light_xform, state.light_uniforms[index].matrix);
|
||||
_update_transform_2d_to_mat2x4(l->xform_cache.affine_inverse(), state.light_uniforms[index].shadow_matrix);
|
||||
|
||||
state.light_uniforms[index].height = l->height * (p_canvas_transform.elements[0].length() + p_canvas_transform.elements[1].length()) * 0.5; //approximate height conversion to the canvas size, since all calculations are done in canvas coords to avoid precision loss
|
||||
state.light_uniforms[index].height = l->height * (p_canvas_transform.columns[0].length() + p_canvas_transform.columns[1].length()) * 0.5; //approximate height conversion to the canvas size, since all calculations are done in canvas coords to avoid precision loss
|
||||
for (int i = 0; i < 4; i++) {
|
||||
state.light_uniforms[index].shadow_color[i] = uint8_t(CLAMP(int32_t(l->shadow_color[i] * 255.0), 0, 255));
|
||||
state.light_uniforms[index].color[i] = l->color[i];
|
||||
|
|
@ -1310,9 +1310,9 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
|
|||
_update_transform_2d_to_mat4(p_canvas_transform, state_buffer.canvas_transform);
|
||||
|
||||
Transform2D normal_transform = p_canvas_transform;
|
||||
normal_transform.elements[0].normalize();
|
||||
normal_transform.elements[1].normalize();
|
||||
normal_transform.elements[2] = Vector2();
|
||||
normal_transform.columns[0].normalize();
|
||||
normal_transform.columns[1].normalize();
|
||||
normal_transform.columns[2] = Vector2();
|
||||
_update_transform_2d_to_mat4(normal_transform, state_buffer.canvas_normal_transform);
|
||||
|
||||
state_buffer.canvas_modulate[0] = p_modulate.r;
|
||||
|
|
@ -1645,7 +1645,7 @@ void RendererCanvasRenderRD::light_update_directional_shadow(RID p_rid, int p_sh
|
|||
|
||||
_update_shadow_atlas();
|
||||
|
||||
Vector2 light_dir = p_light_xform.elements[1].normalized();
|
||||
Vector2 light_dir = p_light_xform.columns[1].normalized();
|
||||
|
||||
Vector2 center = p_clip_rect.get_center();
|
||||
|
||||
|
|
@ -1713,8 +1713,8 @@ void RendererCanvasRenderRD::light_update_directional_shadow(RID p_rid, int p_sh
|
|||
RD::get_singleton()->draw_list_end();
|
||||
|
||||
Transform2D to_shadow;
|
||||
to_shadow.elements[0].x = 1.0 / -(half_size * 2.0);
|
||||
to_shadow.elements[2].x = 0.5;
|
||||
to_shadow.columns[0].x = 1.0 / -(half_size * 2.0);
|
||||
to_shadow.columns[2].x = 0.5;
|
||||
|
||||
cl->shadow.directional_xform = to_shadow * to_light_xform;
|
||||
}
|
||||
|
|
@ -1726,14 +1726,14 @@ void RendererCanvasRenderRD::render_sdf(RID p_render_target, LightOccluderInstan
|
|||
Rect2i rect = texture_storage->render_target_get_sdf_rect(p_render_target);
|
||||
|
||||
Transform2D to_sdf;
|
||||
to_sdf.elements[0] *= rect.size.width;
|
||||
to_sdf.elements[1] *= rect.size.height;
|
||||
to_sdf.elements[2] = rect.position;
|
||||
to_sdf.columns[0] *= rect.size.width;
|
||||
to_sdf.columns[1] *= rect.size.height;
|
||||
to_sdf.columns[2] = rect.position;
|
||||
|
||||
Transform2D to_clip;
|
||||
to_clip.elements[0] *= 2.0;
|
||||
to_clip.elements[1] *= 2.0;
|
||||
to_clip.elements[2] = -Vector2(1.0, 1.0);
|
||||
to_clip.columns[0] *= 2.0;
|
||||
to_clip.columns[1] *= 2.0;
|
||||
to_clip.columns[2] = -Vector2(1.0, 1.0);
|
||||
|
||||
to_clip = to_clip * to_sdf.affine_inverse();
|
||||
|
||||
|
|
|
|||
|
|
@ -1228,17 +1228,17 @@ void RendererSceneGIRD::SDFGI::debug_draw(const CameraMatrix &p_projection, cons
|
|||
push_constant.cam_extent[1] = vp_half.y;
|
||||
push_constant.cam_extent[2] = -p_projection.get_z_near();
|
||||
|
||||
push_constant.cam_transform[0] = p_transform.basis.elements[0][0];
|
||||
push_constant.cam_transform[1] = p_transform.basis.elements[1][0];
|
||||
push_constant.cam_transform[2] = p_transform.basis.elements[2][0];
|
||||
push_constant.cam_transform[0] = p_transform.basis.rows[0][0];
|
||||
push_constant.cam_transform[1] = p_transform.basis.rows[1][0];
|
||||
push_constant.cam_transform[2] = p_transform.basis.rows[2][0];
|
||||
push_constant.cam_transform[3] = 0;
|
||||
push_constant.cam_transform[4] = p_transform.basis.elements[0][1];
|
||||
push_constant.cam_transform[5] = p_transform.basis.elements[1][1];
|
||||
push_constant.cam_transform[6] = p_transform.basis.elements[2][1];
|
||||
push_constant.cam_transform[4] = p_transform.basis.rows[0][1];
|
||||
push_constant.cam_transform[5] = p_transform.basis.rows[1][1];
|
||||
push_constant.cam_transform[6] = p_transform.basis.rows[2][1];
|
||||
push_constant.cam_transform[7] = 0;
|
||||
push_constant.cam_transform[8] = p_transform.basis.elements[0][2];
|
||||
push_constant.cam_transform[9] = p_transform.basis.elements[1][2];
|
||||
push_constant.cam_transform[10] = p_transform.basis.elements[2][2];
|
||||
push_constant.cam_transform[8] = p_transform.basis.rows[0][2];
|
||||
push_constant.cam_transform[9] = p_transform.basis.rows[1][2];
|
||||
push_constant.cam_transform[10] = p_transform.basis.rows[2][2];
|
||||
push_constant.cam_transform[11] = 0;
|
||||
push_constant.cam_transform[12] = p_transform.origin.x;
|
||||
push_constant.cam_transform[13] = p_transform.origin.y;
|
||||
|
|
@ -3070,17 +3070,17 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra
|
|||
|
||||
Transform3D to_cell = storage->voxel_gi_get_to_cell_xform(gipi->probe) * gipi->transform.affine_inverse() * to_camera;
|
||||
|
||||
gipd.xform[0] = to_cell.basis.elements[0][0];
|
||||
gipd.xform[1] = to_cell.basis.elements[1][0];
|
||||
gipd.xform[2] = to_cell.basis.elements[2][0];
|
||||
gipd.xform[0] = to_cell.basis.rows[0][0];
|
||||
gipd.xform[1] = to_cell.basis.rows[1][0];
|
||||
gipd.xform[2] = to_cell.basis.rows[2][0];
|
||||
gipd.xform[3] = 0;
|
||||
gipd.xform[4] = to_cell.basis.elements[0][1];
|
||||
gipd.xform[5] = to_cell.basis.elements[1][1];
|
||||
gipd.xform[6] = to_cell.basis.elements[2][1];
|
||||
gipd.xform[4] = to_cell.basis.rows[0][1];
|
||||
gipd.xform[5] = to_cell.basis.rows[1][1];
|
||||
gipd.xform[6] = to_cell.basis.rows[2][1];
|
||||
gipd.xform[7] = 0;
|
||||
gipd.xform[8] = to_cell.basis.elements[0][2];
|
||||
gipd.xform[9] = to_cell.basis.elements[1][2];
|
||||
gipd.xform[10] = to_cell.basis.elements[2][2];
|
||||
gipd.xform[8] = to_cell.basis.rows[0][2];
|
||||
gipd.xform[9] = to_cell.basis.rows[1][2];
|
||||
gipd.xform[10] = to_cell.basis.rows[2][2];
|
||||
gipd.xform[11] = 0;
|
||||
gipd.xform[12] = to_cell.origin.x;
|
||||
gipd.xform[13] = to_cell.origin.y;
|
||||
|
|
|
|||
|
|
@ -252,17 +252,17 @@ RendererSceneSkyRD::SkyMaterialData::~SkyMaterialData() {
|
|||
// Render sky
|
||||
|
||||
static _FORCE_INLINE_ void store_transform_3x3(const Basis &p_basis, float *p_array) {
|
||||
p_array[0] = p_basis.elements[0][0];
|
||||
p_array[1] = p_basis.elements[1][0];
|
||||
p_array[2] = p_basis.elements[2][0];
|
||||
p_array[0] = p_basis.rows[0][0];
|
||||
p_array[1] = p_basis.rows[1][0];
|
||||
p_array[2] = p_basis.rows[2][0];
|
||||
p_array[3] = 0;
|
||||
p_array[4] = p_basis.elements[0][1];
|
||||
p_array[5] = p_basis.elements[1][1];
|
||||
p_array[6] = p_basis.elements[2][1];
|
||||
p_array[4] = p_basis.rows[0][1];
|
||||
p_array[5] = p_basis.rows[1][1];
|
||||
p_array[6] = p_basis.rows[2][1];
|
||||
p_array[7] = 0;
|
||||
p_array[8] = p_basis.elements[0][2];
|
||||
p_array[9] = p_basis.elements[1][2];
|
||||
p_array[10] = p_basis.elements[2][2];
|
||||
p_array[8] = p_basis.rows[0][2];
|
||||
p_array[9] = p_basis.rows[1][2];
|
||||
p_array[10] = p_basis.rows[2][2];
|
||||
p_array[11] = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,17 +45,17 @@
|
|||
class RendererStorageRD : public RendererStorage {
|
||||
public:
|
||||
static _FORCE_INLINE_ void store_transform(const Transform3D &p_mtx, float *p_array) {
|
||||
p_array[0] = p_mtx.basis.elements[0][0];
|
||||
p_array[1] = p_mtx.basis.elements[1][0];
|
||||
p_array[2] = p_mtx.basis.elements[2][0];
|
||||
p_array[0] = p_mtx.basis.rows[0][0];
|
||||
p_array[1] = p_mtx.basis.rows[1][0];
|
||||
p_array[2] = p_mtx.basis.rows[2][0];
|
||||
p_array[3] = 0;
|
||||
p_array[4] = p_mtx.basis.elements[0][1];
|
||||
p_array[5] = p_mtx.basis.elements[1][1];
|
||||
p_array[6] = p_mtx.basis.elements[2][1];
|
||||
p_array[4] = p_mtx.basis.rows[0][1];
|
||||
p_array[5] = p_mtx.basis.rows[1][1];
|
||||
p_array[6] = p_mtx.basis.rows[2][1];
|
||||
p_array[7] = 0;
|
||||
p_array[8] = p_mtx.basis.elements[0][2];
|
||||
p_array[9] = p_mtx.basis.elements[1][2];
|
||||
p_array[10] = p_mtx.basis.elements[2][2];
|
||||
p_array[8] = p_mtx.basis.rows[0][2];
|
||||
p_array[9] = p_mtx.basis.rows[1][2];
|
||||
p_array[10] = p_mtx.basis.rows[2][2];
|
||||
p_array[11] = 0;
|
||||
p_array[12] = p_mtx.origin.x;
|
||||
p_array[13] = p_mtx.origin.y;
|
||||
|
|
@ -64,47 +64,47 @@ public:
|
|||
}
|
||||
|
||||
static _FORCE_INLINE_ void store_basis_3x4(const Basis &p_mtx, float *p_array) {
|
||||
p_array[0] = p_mtx.elements[0][0];
|
||||
p_array[1] = p_mtx.elements[1][0];
|
||||
p_array[2] = p_mtx.elements[2][0];
|
||||
p_array[0] = p_mtx.rows[0][0];
|
||||
p_array[1] = p_mtx.rows[1][0];
|
||||
p_array[2] = p_mtx.rows[2][0];
|
||||
p_array[3] = 0;
|
||||
p_array[4] = p_mtx.elements[0][1];
|
||||
p_array[5] = p_mtx.elements[1][1];
|
||||
p_array[6] = p_mtx.elements[2][1];
|
||||
p_array[4] = p_mtx.rows[0][1];
|
||||
p_array[5] = p_mtx.rows[1][1];
|
||||
p_array[6] = p_mtx.rows[2][1];
|
||||
p_array[7] = 0;
|
||||
p_array[8] = p_mtx.elements[0][2];
|
||||
p_array[9] = p_mtx.elements[1][2];
|
||||
p_array[10] = p_mtx.elements[2][2];
|
||||
p_array[8] = p_mtx.rows[0][2];
|
||||
p_array[9] = p_mtx.rows[1][2];
|
||||
p_array[10] = p_mtx.rows[2][2];
|
||||
p_array[11] = 0;
|
||||
}
|
||||
|
||||
static _FORCE_INLINE_ void store_transform_3x3(const Basis &p_mtx, float *p_array) {
|
||||
p_array[0] = p_mtx.elements[0][0];
|
||||
p_array[1] = p_mtx.elements[1][0];
|
||||
p_array[2] = p_mtx.elements[2][0];
|
||||
p_array[0] = p_mtx.rows[0][0];
|
||||
p_array[1] = p_mtx.rows[1][0];
|
||||
p_array[2] = p_mtx.rows[2][0];
|
||||
p_array[3] = 0;
|
||||
p_array[4] = p_mtx.elements[0][1];
|
||||
p_array[5] = p_mtx.elements[1][1];
|
||||
p_array[6] = p_mtx.elements[2][1];
|
||||
p_array[4] = p_mtx.rows[0][1];
|
||||
p_array[5] = p_mtx.rows[1][1];
|
||||
p_array[6] = p_mtx.rows[2][1];
|
||||
p_array[7] = 0;
|
||||
p_array[8] = p_mtx.elements[0][2];
|
||||
p_array[9] = p_mtx.elements[1][2];
|
||||
p_array[10] = p_mtx.elements[2][2];
|
||||
p_array[8] = p_mtx.rows[0][2];
|
||||
p_array[9] = p_mtx.rows[1][2];
|
||||
p_array[10] = p_mtx.rows[2][2];
|
||||
p_array[11] = 0;
|
||||
}
|
||||
|
||||
static _FORCE_INLINE_ void store_transform_transposed_3x4(const Transform3D &p_mtx, float *p_array) {
|
||||
p_array[0] = p_mtx.basis.elements[0][0];
|
||||
p_array[1] = p_mtx.basis.elements[0][1];
|
||||
p_array[2] = p_mtx.basis.elements[0][2];
|
||||
p_array[0] = p_mtx.basis.rows[0][0];
|
||||
p_array[1] = p_mtx.basis.rows[0][1];
|
||||
p_array[2] = p_mtx.basis.rows[0][2];
|
||||
p_array[3] = p_mtx.origin.x;
|
||||
p_array[4] = p_mtx.basis.elements[1][0];
|
||||
p_array[5] = p_mtx.basis.elements[1][1];
|
||||
p_array[6] = p_mtx.basis.elements[1][2];
|
||||
p_array[4] = p_mtx.basis.rows[1][0];
|
||||
p_array[5] = p_mtx.basis.rows[1][1];
|
||||
p_array[6] = p_mtx.basis.rows[1][2];
|
||||
p_array[7] = p_mtx.origin.y;
|
||||
p_array[8] = p_mtx.basis.elements[2][0];
|
||||
p_array[9] = p_mtx.basis.elements[2][1];
|
||||
p_array[10] = p_mtx.basis.elements[2][2];
|
||||
p_array[8] = p_mtx.basis.rows[2][0];
|
||||
p_array[9] = p_mtx.basis.rows[2][1];
|
||||
p_array[10] = p_mtx.basis.rows[2][2];
|
||||
p_array[11] = p_mtx.origin.z;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -554,13 +554,13 @@ _FORCE_INLINE_ static void _fill_std140_variant_ubo_value(ShaderLanguage::DataTy
|
|||
Transform2D v = value;
|
||||
|
||||
//in std140 members of mat2 are treated as vec4s
|
||||
gui[0] = v.elements[0][0];
|
||||
gui[1] = v.elements[0][1];
|
||||
gui[0] = v.columns[0][0];
|
||||
gui[1] = v.columns[0][1];
|
||||
gui[2] = 0; // ignored
|
||||
gui[3] = 0; // ignored
|
||||
|
||||
gui[4] = v.elements[1][0];
|
||||
gui[5] = v.elements[1][1];
|
||||
gui[4] = v.columns[1][0];
|
||||
gui[5] = v.columns[1][1];
|
||||
gui[6] = 0; // ignored
|
||||
gui[7] = 0; // ignored
|
||||
}
|
||||
|
|
@ -604,19 +604,19 @@ _FORCE_INLINE_ static void _fill_std140_variant_ubo_value(ShaderLanguage::DataTy
|
|||
}
|
||||
} else {
|
||||
Basis v = value;
|
||||
gui[0] = v.elements[0][0];
|
||||
gui[1] = v.elements[1][0];
|
||||
gui[2] = v.elements[2][0];
|
||||
gui[0] = v.rows[0][0];
|
||||
gui[1] = v.rows[1][0];
|
||||
gui[2] = v.rows[2][0];
|
||||
gui[3] = 0; // ignored
|
||||
|
||||
gui[4] = v.elements[0][1];
|
||||
gui[5] = v.elements[1][1];
|
||||
gui[6] = v.elements[2][1];
|
||||
gui[4] = v.rows[0][1];
|
||||
gui[5] = v.rows[1][1];
|
||||
gui[6] = v.rows[2][1];
|
||||
gui[7] = 0; // ignored
|
||||
|
||||
gui[8] = v.elements[0][2];
|
||||
gui[9] = v.elements[1][2];
|
||||
gui[10] = v.elements[2][2];
|
||||
gui[8] = v.rows[0][2];
|
||||
gui[9] = v.rows[1][2];
|
||||
gui[10] = v.rows[2][2];
|
||||
gui[11] = 0; // ignored
|
||||
}
|
||||
} break;
|
||||
|
|
@ -672,19 +672,19 @@ _FORCE_INLINE_ static void _fill_std140_variant_ubo_value(ShaderLanguage::DataTy
|
|||
}
|
||||
} else {
|
||||
Transform3D v = value;
|
||||
gui[0] = v.basis.elements[0][0];
|
||||
gui[1] = v.basis.elements[1][0];
|
||||
gui[2] = v.basis.elements[2][0];
|
||||
gui[0] = v.basis.rows[0][0];
|
||||
gui[1] = v.basis.rows[1][0];
|
||||
gui[2] = v.basis.rows[2][0];
|
||||
gui[3] = 0;
|
||||
|
||||
gui[4] = v.basis.elements[0][1];
|
||||
gui[5] = v.basis.elements[1][1];
|
||||
gui[6] = v.basis.elements[2][1];
|
||||
gui[4] = v.basis.rows[0][1];
|
||||
gui[5] = v.basis.rows[1][1];
|
||||
gui[6] = v.basis.rows[2][1];
|
||||
gui[7] = 0;
|
||||
|
||||
gui[8] = v.basis.elements[0][2];
|
||||
gui[9] = v.basis.elements[1][2];
|
||||
gui[10] = v.basis.elements[2][2];
|
||||
gui[8] = v.basis.rows[0][2];
|
||||
gui[9] = v.basis.rows[1][2];
|
||||
gui[10] = v.basis.rows[2][2];
|
||||
gui[11] = 0;
|
||||
|
||||
gui[12] = v.origin.x;
|
||||
|
|
@ -1767,19 +1767,19 @@ void MaterialStorage::_global_variable_store_in_buffer(int32_t p_index, RS::Glob
|
|||
case RS::GLOBAL_VAR_TYPE_MAT3: {
|
||||
GlobalVariables::Value *bv = &global_variables.buffer_values[p_index];
|
||||
Basis v = p_value;
|
||||
bv[0].x = v.elements[0][0];
|
||||
bv[0].y = v.elements[1][0];
|
||||
bv[0].z = v.elements[2][0];
|
||||
bv[0].x = v.rows[0][0];
|
||||
bv[0].y = v.rows[1][0];
|
||||
bv[0].z = v.rows[2][0];
|
||||
bv[0].w = 0;
|
||||
|
||||
bv[1].x = v.elements[0][1];
|
||||
bv[1].y = v.elements[1][1];
|
||||
bv[1].z = v.elements[2][1];
|
||||
bv[1].x = v.rows[0][1];
|
||||
bv[1].y = v.rows[1][1];
|
||||
bv[1].z = v.rows[2][1];
|
||||
bv[1].w = 0;
|
||||
|
||||
bv[2].x = v.elements[0][2];
|
||||
bv[2].y = v.elements[1][2];
|
||||
bv[2].z = v.elements[2][2];
|
||||
bv[2].x = v.rows[0][2];
|
||||
bv[2].y = v.rows[1][2];
|
||||
bv[2].z = v.rows[2][2];
|
||||
bv[2].w = 0;
|
||||
|
||||
} break;
|
||||
|
|
@ -1815,18 +1815,18 @@ void MaterialStorage::_global_variable_store_in_buffer(int32_t p_index, RS::Glob
|
|||
case RS::GLOBAL_VAR_TYPE_TRANSFORM_2D: {
|
||||
GlobalVariables::Value *bv = &global_variables.buffer_values[p_index];
|
||||
Transform2D v = p_value;
|
||||
bv[0].x = v.elements[0][0];
|
||||
bv[0].y = v.elements[0][1];
|
||||
bv[0].x = v.columns[0][0];
|
||||
bv[0].y = v.columns[0][1];
|
||||
bv[0].z = 0;
|
||||
bv[0].w = 0;
|
||||
|
||||
bv[1].x = v.elements[1][0];
|
||||
bv[1].y = v.elements[1][1];
|
||||
bv[1].x = v.columns[1][0];
|
||||
bv[1].y = v.columns[1][1];
|
||||
bv[1].z = 0;
|
||||
bv[1].w = 0;
|
||||
|
||||
bv[2].x = v.elements[2][0];
|
||||
bv[2].y = v.elements[2][1];
|
||||
bv[2].x = v.columns[2][0];
|
||||
bv[2].y = v.columns[2][1];
|
||||
bv[2].z = 1;
|
||||
bv[2].w = 0;
|
||||
|
||||
|
|
@ -1834,19 +1834,19 @@ void MaterialStorage::_global_variable_store_in_buffer(int32_t p_index, RS::Glob
|
|||
case RS::GLOBAL_VAR_TYPE_TRANSFORM: {
|
||||
GlobalVariables::Value *bv = &global_variables.buffer_values[p_index];
|
||||
Transform3D v = p_value;
|
||||
bv[0].x = v.basis.elements[0][0];
|
||||
bv[0].y = v.basis.elements[1][0];
|
||||
bv[0].z = v.basis.elements[2][0];
|
||||
bv[0].x = v.basis.rows[0][0];
|
||||
bv[0].y = v.basis.rows[1][0];
|
||||
bv[0].z = v.basis.rows[2][0];
|
||||
bv[0].w = 0;
|
||||
|
||||
bv[1].x = v.basis.elements[0][1];
|
||||
bv[1].y = v.basis.elements[1][1];
|
||||
bv[1].z = v.basis.elements[2][1];
|
||||
bv[1].x = v.basis.rows[0][1];
|
||||
bv[1].y = v.basis.rows[1][1];
|
||||
bv[1].z = v.basis.rows[2][1];
|
||||
bv[1].w = 0;
|
||||
|
||||
bv[2].x = v.basis.elements[0][2];
|
||||
bv[2].y = v.basis.elements[1][2];
|
||||
bv[2].z = v.basis.elements[2][2];
|
||||
bv[2].x = v.basis.rows[0][2];
|
||||
bv[2].y = v.basis.rows[1][2];
|
||||
bv[2].z = v.basis.rows[2][2];
|
||||
bv[2].w = 0;
|
||||
|
||||
bv[3].x = v.origin.x;
|
||||
|
|
|
|||
|
|
@ -609,12 +609,12 @@ AABB MeshStorage::mesh_get_aabb(RID p_mesh, RID p_skeleton) {
|
|||
|
||||
Transform3D mtx;
|
||||
|
||||
mtx.basis.elements[0].x = dataptr[0];
|
||||
mtx.basis.elements[1].x = dataptr[1];
|
||||
mtx.basis.rows[0].x = dataptr[0];
|
||||
mtx.basis.rows[1].x = dataptr[1];
|
||||
mtx.origin.x = dataptr[3];
|
||||
|
||||
mtx.basis.elements[0].y = dataptr[4];
|
||||
mtx.basis.elements[1].y = dataptr[5];
|
||||
mtx.basis.rows[0].y = dataptr[4];
|
||||
mtx.basis.rows[1].y = dataptr[5];
|
||||
mtx.origin.y = dataptr[7];
|
||||
|
||||
AABB baabb = mtx.xform(skbones[j]);
|
||||
|
|
@ -636,17 +636,17 @@ AABB MeshStorage::mesh_get_aabb(RID p_mesh, RID p_skeleton) {
|
|||
|
||||
Transform3D mtx;
|
||||
|
||||
mtx.basis.elements[0][0] = dataptr[0];
|
||||
mtx.basis.elements[0][1] = dataptr[1];
|
||||
mtx.basis.elements[0][2] = dataptr[2];
|
||||
mtx.basis.rows[0][0] = dataptr[0];
|
||||
mtx.basis.rows[0][1] = dataptr[1];
|
||||
mtx.basis.rows[0][2] = dataptr[2];
|
||||
mtx.origin.x = dataptr[3];
|
||||
mtx.basis.elements[1][0] = dataptr[4];
|
||||
mtx.basis.elements[1][1] = dataptr[5];
|
||||
mtx.basis.elements[1][2] = dataptr[6];
|
||||
mtx.basis.rows[1][0] = dataptr[4];
|
||||
mtx.basis.rows[1][1] = dataptr[5];
|
||||
mtx.basis.rows[1][2] = dataptr[6];
|
||||
mtx.origin.y = dataptr[7];
|
||||
mtx.basis.elements[2][0] = dataptr[8];
|
||||
mtx.basis.elements[2][1] = dataptr[9];
|
||||
mtx.basis.elements[2][2] = dataptr[10];
|
||||
mtx.basis.rows[2][0] = dataptr[8];
|
||||
mtx.basis.rows[2][1] = dataptr[9];
|
||||
mtx.basis.rows[2][2] = dataptr[10];
|
||||
mtx.origin.z = dataptr[11];
|
||||
|
||||
AABB baabb = mtx.xform(skbones[j]);
|
||||
|
|
@ -1331,26 +1331,26 @@ void MeshStorage::_multimesh_re_create_aabb(MultiMesh *multimesh, const float *p
|
|||
Transform3D t;
|
||||
|
||||
if (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_3D) {
|
||||
t.basis.elements[0][0] = data[0];
|
||||
t.basis.elements[0][1] = data[1];
|
||||
t.basis.elements[0][2] = data[2];
|
||||
t.basis.rows[0][0] = data[0];
|
||||
t.basis.rows[0][1] = data[1];
|
||||
t.basis.rows[0][2] = data[2];
|
||||
t.origin.x = data[3];
|
||||
t.basis.elements[1][0] = data[4];
|
||||
t.basis.elements[1][1] = data[5];
|
||||
t.basis.elements[1][2] = data[6];
|
||||
t.basis.rows[1][0] = data[4];
|
||||
t.basis.rows[1][1] = data[5];
|
||||
t.basis.rows[1][2] = data[6];
|
||||
t.origin.y = data[7];
|
||||
t.basis.elements[2][0] = data[8];
|
||||
t.basis.elements[2][1] = data[9];
|
||||
t.basis.elements[2][2] = data[10];
|
||||
t.basis.rows[2][0] = data[8];
|
||||
t.basis.rows[2][1] = data[9];
|
||||
t.basis.rows[2][2] = data[10];
|
||||
t.origin.z = data[11];
|
||||
|
||||
} else {
|
||||
t.basis.elements[0].x = data[0];
|
||||
t.basis.elements[1].x = data[1];
|
||||
t.basis.rows[0].x = data[0];
|
||||
t.basis.rows[1].x = data[1];
|
||||
t.origin.x = data[3];
|
||||
|
||||
t.basis.elements[0].y = data[4];
|
||||
t.basis.elements[1].y = data[5];
|
||||
t.basis.rows[0].y = data[4];
|
||||
t.basis.rows[1].y = data[5];
|
||||
t.origin.y = data[7];
|
||||
}
|
||||
|
||||
|
|
@ -1377,17 +1377,17 @@ void MeshStorage::multimesh_instance_set_transform(RID p_multimesh, int p_index,
|
|||
|
||||
float *dataptr = w + p_index * multimesh->stride_cache;
|
||||
|
||||
dataptr[0] = p_transform.basis.elements[0][0];
|
||||
dataptr[1] = p_transform.basis.elements[0][1];
|
||||
dataptr[2] = p_transform.basis.elements[0][2];
|
||||
dataptr[0] = p_transform.basis.rows[0][0];
|
||||
dataptr[1] = p_transform.basis.rows[0][1];
|
||||
dataptr[2] = p_transform.basis.rows[0][2];
|
||||
dataptr[3] = p_transform.origin.x;
|
||||
dataptr[4] = p_transform.basis.elements[1][0];
|
||||
dataptr[5] = p_transform.basis.elements[1][1];
|
||||
dataptr[6] = p_transform.basis.elements[1][2];
|
||||
dataptr[4] = p_transform.basis.rows[1][0];
|
||||
dataptr[5] = p_transform.basis.rows[1][1];
|
||||
dataptr[6] = p_transform.basis.rows[1][2];
|
||||
dataptr[7] = p_transform.origin.y;
|
||||
dataptr[8] = p_transform.basis.elements[2][0];
|
||||
dataptr[9] = p_transform.basis.elements[2][1];
|
||||
dataptr[10] = p_transform.basis.elements[2][2];
|
||||
dataptr[8] = p_transform.basis.rows[2][0];
|
||||
dataptr[9] = p_transform.basis.rows[2][1];
|
||||
dataptr[10] = p_transform.basis.rows[2][2];
|
||||
dataptr[11] = p_transform.origin.z;
|
||||
}
|
||||
|
||||
|
|
@ -1407,14 +1407,14 @@ void MeshStorage::multimesh_instance_set_transform_2d(RID p_multimesh, int p_ind
|
|||
|
||||
float *dataptr = w + p_index * multimesh->stride_cache;
|
||||
|
||||
dataptr[0] = p_transform.elements[0][0];
|
||||
dataptr[1] = p_transform.elements[1][0];
|
||||
dataptr[0] = p_transform.columns[0][0];
|
||||
dataptr[1] = p_transform.columns[1][0];
|
||||
dataptr[2] = 0;
|
||||
dataptr[3] = p_transform.elements[2][0];
|
||||
dataptr[4] = p_transform.elements[0][1];
|
||||
dataptr[5] = p_transform.elements[1][1];
|
||||
dataptr[3] = p_transform.columns[2][0];
|
||||
dataptr[4] = p_transform.columns[0][1];
|
||||
dataptr[5] = p_transform.columns[1][1];
|
||||
dataptr[6] = 0;
|
||||
dataptr[7] = p_transform.elements[2][1];
|
||||
dataptr[7] = p_transform.columns[2][1];
|
||||
}
|
||||
|
||||
_multimesh_mark_dirty(multimesh, p_index, true);
|
||||
|
|
@ -1485,17 +1485,17 @@ Transform3D MeshStorage::multimesh_instance_get_transform(RID p_multimesh, int p
|
|||
|
||||
const float *dataptr = r + p_index * multimesh->stride_cache;
|
||||
|
||||
t.basis.elements[0][0] = dataptr[0];
|
||||
t.basis.elements[0][1] = dataptr[1];
|
||||
t.basis.elements[0][2] = dataptr[2];
|
||||
t.basis.rows[0][0] = dataptr[0];
|
||||
t.basis.rows[0][1] = dataptr[1];
|
||||
t.basis.rows[0][2] = dataptr[2];
|
||||
t.origin.x = dataptr[3];
|
||||
t.basis.elements[1][0] = dataptr[4];
|
||||
t.basis.elements[1][1] = dataptr[5];
|
||||
t.basis.elements[1][2] = dataptr[6];
|
||||
t.basis.rows[1][0] = dataptr[4];
|
||||
t.basis.rows[1][1] = dataptr[5];
|
||||
t.basis.rows[1][2] = dataptr[6];
|
||||
t.origin.y = dataptr[7];
|
||||
t.basis.elements[2][0] = dataptr[8];
|
||||
t.basis.elements[2][1] = dataptr[9];
|
||||
t.basis.elements[2][2] = dataptr[10];
|
||||
t.basis.rows[2][0] = dataptr[8];
|
||||
t.basis.rows[2][1] = dataptr[9];
|
||||
t.basis.rows[2][2] = dataptr[10];
|
||||
t.origin.z = dataptr[11];
|
||||
}
|
||||
|
||||
|
|
@ -1516,12 +1516,12 @@ Transform2D MeshStorage::multimesh_instance_get_transform_2d(RID p_multimesh, in
|
|||
|
||||
const float *dataptr = r + p_index * multimesh->stride_cache;
|
||||
|
||||
t.elements[0][0] = dataptr[0];
|
||||
t.elements[1][0] = dataptr[1];
|
||||
t.elements[2][0] = dataptr[3];
|
||||
t.elements[0][1] = dataptr[4];
|
||||
t.elements[1][1] = dataptr[5];
|
||||
t.elements[2][1] = dataptr[7];
|
||||
t.columns[0][0] = dataptr[0];
|
||||
t.columns[1][0] = dataptr[1];
|
||||
t.columns[2][0] = dataptr[3];
|
||||
t.columns[0][1] = dataptr[4];
|
||||
t.columns[1][1] = dataptr[5];
|
||||
t.columns[2][1] = dataptr[7];
|
||||
}
|
||||
|
||||
return t;
|
||||
|
|
@ -1800,17 +1800,17 @@ void MeshStorage::skeleton_bone_set_transform(RID p_skeleton, int p_bone, const
|
|||
|
||||
float *dataptr = skeleton->data.ptrw() + p_bone * 12;
|
||||
|
||||
dataptr[0] = p_transform.basis.elements[0][0];
|
||||
dataptr[1] = p_transform.basis.elements[0][1];
|
||||
dataptr[2] = p_transform.basis.elements[0][2];
|
||||
dataptr[0] = p_transform.basis.rows[0][0];
|
||||
dataptr[1] = p_transform.basis.rows[0][1];
|
||||
dataptr[2] = p_transform.basis.rows[0][2];
|
||||
dataptr[3] = p_transform.origin.x;
|
||||
dataptr[4] = p_transform.basis.elements[1][0];
|
||||
dataptr[5] = p_transform.basis.elements[1][1];
|
||||
dataptr[6] = p_transform.basis.elements[1][2];
|
||||
dataptr[4] = p_transform.basis.rows[1][0];
|
||||
dataptr[5] = p_transform.basis.rows[1][1];
|
||||
dataptr[6] = p_transform.basis.rows[1][2];
|
||||
dataptr[7] = p_transform.origin.y;
|
||||
dataptr[8] = p_transform.basis.elements[2][0];
|
||||
dataptr[9] = p_transform.basis.elements[2][1];
|
||||
dataptr[10] = p_transform.basis.elements[2][2];
|
||||
dataptr[8] = p_transform.basis.rows[2][0];
|
||||
dataptr[9] = p_transform.basis.rows[2][1];
|
||||
dataptr[10] = p_transform.basis.rows[2][2];
|
||||
dataptr[11] = p_transform.origin.z;
|
||||
|
||||
_skeleton_make_dirty(skeleton);
|
||||
|
|
@ -1827,17 +1827,17 @@ Transform3D MeshStorage::skeleton_bone_get_transform(RID p_skeleton, int p_bone)
|
|||
|
||||
Transform3D t;
|
||||
|
||||
t.basis.elements[0][0] = dataptr[0];
|
||||
t.basis.elements[0][1] = dataptr[1];
|
||||
t.basis.elements[0][2] = dataptr[2];
|
||||
t.basis.rows[0][0] = dataptr[0];
|
||||
t.basis.rows[0][1] = dataptr[1];
|
||||
t.basis.rows[0][2] = dataptr[2];
|
||||
t.origin.x = dataptr[3];
|
||||
t.basis.elements[1][0] = dataptr[4];
|
||||
t.basis.elements[1][1] = dataptr[5];
|
||||
t.basis.elements[1][2] = dataptr[6];
|
||||
t.basis.rows[1][0] = dataptr[4];
|
||||
t.basis.rows[1][1] = dataptr[5];
|
||||
t.basis.rows[1][2] = dataptr[6];
|
||||
t.origin.y = dataptr[7];
|
||||
t.basis.elements[2][0] = dataptr[8];
|
||||
t.basis.elements[2][1] = dataptr[9];
|
||||
t.basis.elements[2][2] = dataptr[10];
|
||||
t.basis.rows[2][0] = dataptr[8];
|
||||
t.basis.rows[2][1] = dataptr[9];
|
||||
t.basis.rows[2][2] = dataptr[10];
|
||||
t.origin.z = dataptr[11];
|
||||
|
||||
return t;
|
||||
|
|
@ -1852,14 +1852,14 @@ void MeshStorage::skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, con
|
|||
|
||||
float *dataptr = skeleton->data.ptrw() + p_bone * 8;
|
||||
|
||||
dataptr[0] = p_transform.elements[0][0];
|
||||
dataptr[1] = p_transform.elements[1][0];
|
||||
dataptr[0] = p_transform.columns[0][0];
|
||||
dataptr[1] = p_transform.columns[1][0];
|
||||
dataptr[2] = 0;
|
||||
dataptr[3] = p_transform.elements[2][0];
|
||||
dataptr[4] = p_transform.elements[0][1];
|
||||
dataptr[5] = p_transform.elements[1][1];
|
||||
dataptr[3] = p_transform.columns[2][0];
|
||||
dataptr[4] = p_transform.columns[0][1];
|
||||
dataptr[5] = p_transform.columns[1][1];
|
||||
dataptr[6] = 0;
|
||||
dataptr[7] = p_transform.elements[2][1];
|
||||
dataptr[7] = p_transform.columns[2][1];
|
||||
|
||||
_skeleton_make_dirty(skeleton);
|
||||
}
|
||||
|
|
@ -1874,12 +1874,12 @@ Transform2D MeshStorage::skeleton_bone_get_transform_2d(RID p_skeleton, int p_bo
|
|||
const float *dataptr = skeleton->data.ptr() + p_bone * 8;
|
||||
|
||||
Transform2D t;
|
||||
t.elements[0][0] = dataptr[0];
|
||||
t.elements[1][0] = dataptr[1];
|
||||
t.elements[2][0] = dataptr[3];
|
||||
t.elements[0][1] = dataptr[4];
|
||||
t.elements[1][1] = dataptr[5];
|
||||
t.elements[2][1] = dataptr[7];
|
||||
t.columns[0][0] = dataptr[0];
|
||||
t.columns[1][0] = dataptr[1];
|
||||
t.columns[2][0] = dataptr[3];
|
||||
t.columns[0][1] = dataptr[4];
|
||||
t.columns[1][1] = dataptr[5];
|
||||
t.columns[2][1] = dataptr[7];
|
||||
|
||||
return t;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -800,25 +800,25 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta
|
|||
Transform2D xform = p_particles->sdf_collision_transform; //will use dotproduct manually so invert beforehand
|
||||
Transform2D revert = xform.affine_inverse();
|
||||
frame_params.collider_count = 1;
|
||||
frame_params.colliders[0].transform[0] = xform.elements[0][0];
|
||||
frame_params.colliders[0].transform[1] = xform.elements[0][1];
|
||||
frame_params.colliders[0].transform[0] = xform.columns[0][0];
|
||||
frame_params.colliders[0].transform[1] = xform.columns[0][1];
|
||||
frame_params.colliders[0].transform[2] = 0;
|
||||
frame_params.colliders[0].transform[3] = xform.elements[2][0];
|
||||
frame_params.colliders[0].transform[3] = xform.columns[2][0];
|
||||
|
||||
frame_params.colliders[0].transform[4] = xform.elements[1][0];
|
||||
frame_params.colliders[0].transform[5] = xform.elements[1][1];
|
||||
frame_params.colliders[0].transform[4] = xform.columns[1][0];
|
||||
frame_params.colliders[0].transform[5] = xform.columns[1][1];
|
||||
frame_params.colliders[0].transform[6] = 0;
|
||||
frame_params.colliders[0].transform[7] = xform.elements[2][1];
|
||||
frame_params.colliders[0].transform[7] = xform.columns[2][1];
|
||||
|
||||
frame_params.colliders[0].transform[8] = revert.elements[0][0];
|
||||
frame_params.colliders[0].transform[9] = revert.elements[0][1];
|
||||
frame_params.colliders[0].transform[8] = revert.columns[0][0];
|
||||
frame_params.colliders[0].transform[9] = revert.columns[0][1];
|
||||
frame_params.colliders[0].transform[10] = 0;
|
||||
frame_params.colliders[0].transform[11] = revert.elements[2][0];
|
||||
frame_params.colliders[0].transform[11] = revert.columns[2][0];
|
||||
|
||||
frame_params.colliders[0].transform[12] = revert.elements[1][0];
|
||||
frame_params.colliders[0].transform[13] = revert.elements[1][1];
|
||||
frame_params.colliders[0].transform[12] = revert.columns[1][0];
|
||||
frame_params.colliders[0].transform[13] = revert.columns[1][1];
|
||||
frame_params.colliders[0].transform[14] = 0;
|
||||
frame_params.colliders[0].transform[15] = revert.elements[2][1];
|
||||
frame_params.colliders[0].transform[15] = revert.columns[2][1];
|
||||
|
||||
frame_params.colliders[0].extents[0] = p_particles->sdf_collision_to_screen.size.x;
|
||||
frame_params.colliders[0].extents[1] = p_particles->sdf_collision_to_screen.size.y;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue