### Godot version

4.1.1

### System information

Meta Quest 2 - GLES3

### Issue description

When writing VR applications on Godot 4 using gl_compatibility, skeleton-driven meshes like hands are often rendered corrupted, or sometimes update slowly.

### Steps to reproduce

The godot-xr-tools demo projects have these issues in the climbing/gliding and pointer-demo scenes if the project is switched to gl_compatibility mode and run on a mobile VR headset.

### Minimal reproduction project

The godot-xr-tools demo project has been the testing project for this issue.
glGenBuffers(1, &s->blend_shapes[i].vertex_buffer);
				glBindBuffer(GL_ARRAY_BUFFER, s->blend_shapes[i].vertex_buffer);
				GLES3::Utilities::get_singleton()->buffer_allocate_data(GL_ARRAY_BUFFER, s->blend_shapes[i].vertex_buffer, size, p_surface.blend_shape_data.ptr() + i * size, (s->format & RS::ARRAY_FLAG_USE_DYNAMIC_UPDATE) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW, "Mesh blend shape buffer");
				if ((p_surface.format & (1 << RS::ARRAY_VERTEX))) {
					glEnableVertexAttribArray(RS::ARRAY_VERTEX + 3);
					glVertexAttribPointer(RS::ARRAY_VERTEX + 3, vertex_size, GL_FLOAT, GL_FALSE, stride, CAST_INT_TO_UCHAR_PTR(0));
				}
				if ((p_surface.format & (1 << RS::ARRAY_NORMAL))) {
					glEnableVertexAttribArray(RS::ARRAY_NORMAL + 3);
					glVertexAttribPointer(RS::ARRAY_NORMAL + 3, 2, GL_UNSIGNED_SHORT, GL_TRUE, stride, CAST_INT_TO_UCHAR_PTR(normal_offset));
				}
				if ((p_surface.format & (1 << RS::ARRAY_TANGENT))) {
					glEnableVertexAttribArray(RS::ARRAY_TANGENT + 3);
					glVertexAttribPointer(RS::ARRAY_TANGENT + 3, 2, GL_UNSIGNED_SHORT, GL_TRUE, stride, CAST_INT_TO_UCHAR_PTR(tangent_offset));
				}
			}
			glBindVertexArray(0);
			glBindBuffer(GL_ARRAY_BUFFER, 0);
		}
		
		glGenVertexArrays(1, &s->skeleton_vertex_array);
		glBindVertexArray(s->skeleton_vertex_array);
		glBindBuffer(GL_ARRAY_BUFFER, s->vertex_buffer);
		if ((p_surface.format & (1 << RS::ARRAY_VERTEX))) {
			glEnableVertexAttribArray(RS::ARRAY_VERTEX);
			glVertexAttribPointer(RS::ARRAY_VERTEX, vertex_size, GL_FLOAT, GL_FALSE, stride, CAST_INT_TO_UCHAR_PTR(0));
		}
		if ((p_surface.format & (1 << RS::ARRAY_NORMAL))) {
			glEnableVertexAttribArray(RS::ARRAY_NORMAL);
			glVertexAttribPointer(RS::ARRAY_NORMAL, 2, GL_UNSIGNED_SHORT, GL_TRUE, stride, CAST_INT_TO_UCHAR_PTR(normal_offset));